CÓDIGO EN EXTENDED PASCAL
Publicado por Mjuiz (9 intervenciones) el 17/01/2005 15:06:18
Hola. A ver s alguien me puede ayudar, es urgente: tengo que entregar el siguiente programa para el dia 25 y el problema que tengo es que cuando lo compilo con la directiva {$ EXTENDED-PASCAL} me da errores en las líneas:
151, 158, 165, 174 y 201
¿Cómo tengo que modificar el código para que se pueda compilar con esa directiva?
Gracias por adelantado. Me urge.
NOTA : He puesto entre llaves lo que me da fallo, para que sea más legible.
PROGRAM Frec_Palabras (input, output);
{$ EXTENDED-PASCAL}
TYPE
tPalabra = string(25);
tFichero = text;
tCasilla = RECORD
palabra : tPalabra;
veces : integer;
END;
tBDPalabras = file of tCasilla;
tOceansEleven = array[1..11] of tCasilla;
VAR
reg : tCasilla;
roto : boolean;
x, pos, top : integer;
f, f2b : bindable tFichero;
f2a : bindable tBDPalabras;
palabra : tPalabra;
eleven : tOceansEleven;
PROCEDURE Asignar (VAR t : tFichero; PROTECTED Nombre : string);
VAR
b : bindingtype;
BEGIN
unbind(t);
b := binding(t);
b.Name := Nombre;
bind(t, b);
b := binding(t);
END;
PROCEDURE AsignarBDP (VAR t : tBDPalabras; PROTECTED Nombre : string);
VAR
b : bindingtype;
BEGIN
unbind(t);
b := binding(t);
b.Name := Nombre;
bind(t, b);
b := binding(t);
END;
FUNCTION minus (VAR letra : char) : char;
VAR
ascii : integer;
BEGIN
ascii := ord(letra);
IF ((ascii >= 65) AND (ascii <= 90))
THEN
ascii := ascii + 32
ELSE
IF ascii = 241
THEN
ascii := ascii - 32;
minus := chr(ascii);
END;
FUNCTION separador (letra : char) : boolean;
BEGIN
separador := ord(letra) in [10,13,32,44,45,46,58,59];
END;
FUNCTION Leer_palabra_minus (VAR archivo : tFichero) : tPalabra;
VAR
palabra : tPalabra;
letra : char;
BEGIN
palabra := '';
letra := '.';
WHILE (separador(letra) and not EOF(archivo)) DO read(archivo, letra);
WHILE (NOT EOF(archivo) and not separador(letra)) DO
BEGIN
letra := minus(letra);
palabra := palabra + letra;
read(archivo, letra);
END;
Leer_palabra_minus := palabra;
END;
FUNCTION Almacenada (VAR palabra : tPalabra; VAR eleven : tOceansEleven) : boolean;
VAR
x : integer;
BEGIN
x := 1;
Almacenada := FALSE;
WHILE (x <= 11) DO
BEGIN
IF (eleven[x].palabra = palabra)
THEN
Almacenada := TRUE;
x := x +1;
END;
END;
PROCEDURE registrar (VAR eleven : tOceansEleven; palabra : tPalabra; veces : integer);
VAR
x : integer;
BEGIN
x := 11;
WHILE ((x >= 1) and ((veces > eleven[x].veces) or ((eleven[x].veces = veces) and (eleven[x].palabra > palabra)))) DO
BEGIN
IF (x < 11)
THEN
BEGIN
eleven[x+1].veces := eleven[x].veces;
eleven[x+1].palabra := eleven[x].palabra;
END;
eleven[x].veces := veces;
eleven[x].palabra := palabra;
x := x - 1;
END;
END;
PROCEDURE insertarEnBDP (VAR archivo : tBDPalabras; palabra : tPalabra);
VAR
casilla : tCasilla;
broken : boolean;
pos, top : integer;
BEGIN
{top := FileSize(archivo);}
pos := 0;
broken := FALSE;
IF (top <> 0)
THEN
REPEAT
BEGIN
{Seek(archivo, pos);}
Read(archivo, casilla);
IF (casilla.palabra = palabra)
THEN
BEGIN
broken := TRUE;
casilla.veces := casilla.veces + 1;
{Seekupdate(archivo, pos);}
END;
pos := pos + 1;
END;
UNTIL broken or (pos = top);
IF (NOT broken)
THEN
BEGIN
{Seekupdate(archivo, top);}
casilla.palabra := palabra;
casilla.veces := 1;
END;
Write(archivo, casilla);
END;
BEGIN
x := 1;
WHILE (x <= 11) DO
BEGIN
eleven[x].palabra := '';
eleven[x].veces := 0;
x := x + 1;
END;
Rewrite (f2a, 'C:\PRACTICA PROGRAMACION\f2a.txt');
Reset (f, 'C:\PRACTICA PROGRAMACION\Quijote.txt');
WHILE (NOT EOF(f)) DO
BEGIN
palabra := Leer_palabra_minus(f);
insertarEnBDP(f2a, palabra);
END;
{top := FileSize(f2a); }
pos := 0;
WHILE (pos <= top - 1) DO
BEGIN
Write(f2a, pos);
Read(f2a, reg);
registrar(eleven, reg.palabra, reg.veces);
pos := pos + 1;
END;
unbind(f2a);
Rewrite(f2b, 'C:\PRACTICA PROGRAMACION\f2a.txt');
Write(f2b, 'Martín, Juiz López: 44464102-L; infmjl00');
x := 1;
WHILE (x <= 11) DO
BEGIN
IF (eleven[x].palabra <> '')
THEN
BEGIN
WriteLn(f2b);
Write(f2b, eleven[x].palabra, ' ', eleven[x].veces:1);
x := x + 1;
END
ELSE x := 12;
END;
END.
151, 158, 165, 174 y 201
¿Cómo tengo que modificar el código para que se pueda compilar con esa directiva?
Gracias por adelantado. Me urge.
NOTA : He puesto entre llaves lo que me da fallo, para que sea más legible.
PROGRAM Frec_Palabras (input, output);
{$ EXTENDED-PASCAL}
TYPE
tPalabra = string(25);
tFichero = text;
tCasilla = RECORD
palabra : tPalabra;
veces : integer;
END;
tBDPalabras = file of tCasilla;
tOceansEleven = array[1..11] of tCasilla;
VAR
reg : tCasilla;
roto : boolean;
x, pos, top : integer;
f, f2b : bindable tFichero;
f2a : bindable tBDPalabras;
palabra : tPalabra;
eleven : tOceansEleven;
PROCEDURE Asignar (VAR t : tFichero; PROTECTED Nombre : string);
VAR
b : bindingtype;
BEGIN
unbind(t);
b := binding(t);
b.Name := Nombre;
bind(t, b);
b := binding(t);
END;
PROCEDURE AsignarBDP (VAR t : tBDPalabras; PROTECTED Nombre : string);
VAR
b : bindingtype;
BEGIN
unbind(t);
b := binding(t);
b.Name := Nombre;
bind(t, b);
b := binding(t);
END;
FUNCTION minus (VAR letra : char) : char;
VAR
ascii : integer;
BEGIN
ascii := ord(letra);
IF ((ascii >= 65) AND (ascii <= 90))
THEN
ascii := ascii + 32
ELSE
IF ascii = 241
THEN
ascii := ascii - 32;
minus := chr(ascii);
END;
FUNCTION separador (letra : char) : boolean;
BEGIN
separador := ord(letra) in [10,13,32,44,45,46,58,59];
END;
FUNCTION Leer_palabra_minus (VAR archivo : tFichero) : tPalabra;
VAR
palabra : tPalabra;
letra : char;
BEGIN
palabra := '';
letra := '.';
WHILE (separador(letra) and not EOF(archivo)) DO read(archivo, letra);
WHILE (NOT EOF(archivo) and not separador(letra)) DO
BEGIN
letra := minus(letra);
palabra := palabra + letra;
read(archivo, letra);
END;
Leer_palabra_minus := palabra;
END;
FUNCTION Almacenada (VAR palabra : tPalabra; VAR eleven : tOceansEleven) : boolean;
VAR
x : integer;
BEGIN
x := 1;
Almacenada := FALSE;
WHILE (x <= 11) DO
BEGIN
IF (eleven[x].palabra = palabra)
THEN
Almacenada := TRUE;
x := x +1;
END;
END;
PROCEDURE registrar (VAR eleven : tOceansEleven; palabra : tPalabra; veces : integer);
VAR
x : integer;
BEGIN
x := 11;
WHILE ((x >= 1) and ((veces > eleven[x].veces) or ((eleven[x].veces = veces) and (eleven[x].palabra > palabra)))) DO
BEGIN
IF (x < 11)
THEN
BEGIN
eleven[x+1].veces := eleven[x].veces;
eleven[x+1].palabra := eleven[x].palabra;
END;
eleven[x].veces := veces;
eleven[x].palabra := palabra;
x := x - 1;
END;
END;
PROCEDURE insertarEnBDP (VAR archivo : tBDPalabras; palabra : tPalabra);
VAR
casilla : tCasilla;
broken : boolean;
pos, top : integer;
BEGIN
{top := FileSize(archivo);}
pos := 0;
broken := FALSE;
IF (top <> 0)
THEN
REPEAT
BEGIN
{Seek(archivo, pos);}
Read(archivo, casilla);
IF (casilla.palabra = palabra)
THEN
BEGIN
broken := TRUE;
casilla.veces := casilla.veces + 1;
{Seekupdate(archivo, pos);}
END;
pos := pos + 1;
END;
UNTIL broken or (pos = top);
IF (NOT broken)
THEN
BEGIN
{Seekupdate(archivo, top);}
casilla.palabra := palabra;
casilla.veces := 1;
END;
Write(archivo, casilla);
END;
BEGIN
x := 1;
WHILE (x <= 11) DO
BEGIN
eleven[x].palabra := '';
eleven[x].veces := 0;
x := x + 1;
END;
Rewrite (f2a, 'C:\PRACTICA PROGRAMACION\f2a.txt');
Reset (f, 'C:\PRACTICA PROGRAMACION\Quijote.txt');
WHILE (NOT EOF(f)) DO
BEGIN
palabra := Leer_palabra_minus(f);
insertarEnBDP(f2a, palabra);
END;
{top := FileSize(f2a); }
pos := 0;
WHILE (pos <= top - 1) DO
BEGIN
Write(f2a, pos);
Read(f2a, reg);
registrar(eleven, reg.palabra, reg.veces);
pos := pos + 1;
END;
unbind(f2a);
Rewrite(f2b, 'C:\PRACTICA PROGRAMACION\f2a.txt');
Write(f2b, 'Martín, Juiz López: 44464102-L; infmjl00');
x := 1;
WHILE (x <= 11) DO
BEGIN
IF (eleven[x].palabra <> '')
THEN
BEGIN
WriteLn(f2b);
Write(f2b, eleven[x].palabra, ' ', eleven[x].veces:1);
x := x + 1;
END
ELSE x := 12;
END;
END.
Valora esta pregunta


0