Pascal/Turbo Pascal - CÓDIGO EN EXTENDED PASCAL

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

NOTA

Publicado por Mjuiz (9 intervenciones) el 17/01/2005 15:16:44
El código anterior lo modifiqué y no introduje todos los errores que tiene. El código a tener en cuenta es el siguiente:

NOTA: Los errores los da en las líneas 151, 158, 165, 174, 201, 206

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;
Seek(archivo, pos);
END;
pos := pos + 1;
END;

UNTIL broken or (pos = top);
IF (NOT broken)
THEN
BEGIN
Seek(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
Seek(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 respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar