Ayuda con diccionario
Publicado por Juan (83 intervenciones) el 08/10/2007 06:18:49
Que tal Diego, como andas, espero que bien. Mira, se me dió por hacer un diccionario con un registro compuesto por a) Palabra b)Definición. La cosa es que lo compile todo bien, pero al momento de ingresar la opción de lo que quiero hacer( agregar palabra, modificar definición, buscar definición o salir), me aparece runtime error. Te agradecería mucho si me podes decir cual es el problema, un saludo y gracias de nuevo. Aca te dejo el código:
Program Diccionario;
Type
Str=String;
RegPalabra=Record
Palabra,definicion:str;
end;
ArchPalabra=file of RegPalabra;
Function BusBin(var Arch:ArchPalabra;Palabra:str):longint;
var pos:longint;
RPalabra:RegPalabra;
Pri,ult,med:word;
Begin
Pri:=0;
Ult:=filesize(Arch)-1;
Pos:=-1;
while ((pri<=ult) and (pos=-1)) do
med:=(pri+ult) div 2;
seek(arch,med);
read(arch,RPalabra);
if Palabra=RPalabra.Palabra then
pos:=med
else
begin
if palabra<Rpalabra.Palabra then
ult:=med-1
else
pri:=med+1
end
end;
Procedure Abrir(var Arch:ArchPalabra);
Begin
Assign(Arch,'Diccionario.dat');
{$i-}
reset(Arch);
{$i-}
If ioresult<>0 then
rewrite(Arch)
else
reset(Arch)
end;
Procedure Agregar_Definicion(var Arch:ArchPalabra);
var RPalabra:RegPalabra;
palabra:str;
Begin
writeln('Introduzca la palabra que desea agregar: ');
readln(upcase(palabra));
if (BusBin(Arch,palabra)<>-1) then
writeln('La palabra ya se encuentra agregada en el diccionario.')
else
begin
seek(Arch,FileSize(Arch));
writeln('Introduzca la definici¢n de dicha palabra: ');
readln(upcase(RPalabra.Definicion));
write(arch,RPalabra)
end
end;
Procedure Modificar_Definicion(var Arch:ArchPalabra);
var RPalabra:RegPalabra;
pos:longint;
Begin
reset(Arch);
writeln('Introduzca la palabra que quiere modificar');
readln(upcase(RPalabra.Palabra));
pos:=BusBin(Arch,Rpalabra.Palabra);
if (pos<>-1) then
begin
seek(Arch,pos);
writeln('Introduzca la nueva definici¢n para esa palabra');
readln(Rpalabra.definicion);
write(Arch,Rpalabra)
end
else
writeln('Error: La palabra que intenta modificar no existe en el diccionario')
end;
Procedure Buscar_Definicion(var Arch:ArchPalabra);
var RPalabra:RegPalabra;
Palabra:str;
pos:longint;
Begin
writeln('Introduzca la palabra que desea buscar');
readln(Palabra);
pos:=BusBin(Arch,Palabra);
seek(Arch,pos);
read(Arch,RPalabra);
writeln('Palabra: ',RPalabra.Palabra);
writeln('Definici¢n: ',RPalabra.Definicion)
end;
Procedure Inicio(var Arch:ArchPalabra);
var opcion:byte;
Begin
writeln('Diccionario de la Real academia espa¤ola');
repeat
writeln('Indique con el n£mero correspondiente que tipo de operaci¢n desea realizar');
writeln('1-Agregar palabra');
writeln('2-Modificar la definici¢n de una palabra existente');
writeln('3-Buscar definici¢n');
writeln('4-Salir');
readln(opcion);
case opcion of
1:Agregar_definicion(Arch);
2:Modificar_definicion(Arch);
3:Buscar_definicion(Arch)
end
until opcion=4;
end;
var
Arch:ArchPalabra;
Begin
Inicio(Arch)
end.
Program Diccionario;
Type
Str=String;
RegPalabra=Record
Palabra,definicion:str;
end;
ArchPalabra=file of RegPalabra;
Function BusBin(var Arch:ArchPalabra;Palabra:str):longint;
var pos:longint;
RPalabra:RegPalabra;
Pri,ult,med:word;
Begin
Pri:=0;
Ult:=filesize(Arch)-1;
Pos:=-1;
while ((pri<=ult) and (pos=-1)) do
med:=(pri+ult) div 2;
seek(arch,med);
read(arch,RPalabra);
if Palabra=RPalabra.Palabra then
pos:=med
else
begin
if palabra<Rpalabra.Palabra then
ult:=med-1
else
pri:=med+1
end
end;
Procedure Abrir(var Arch:ArchPalabra);
Begin
Assign(Arch,'Diccionario.dat');
{$i-}
reset(Arch);
{$i-}
If ioresult<>0 then
rewrite(Arch)
else
reset(Arch)
end;
Procedure Agregar_Definicion(var Arch:ArchPalabra);
var RPalabra:RegPalabra;
palabra:str;
Begin
writeln('Introduzca la palabra que desea agregar: ');
readln(upcase(palabra));
if (BusBin(Arch,palabra)<>-1) then
writeln('La palabra ya se encuentra agregada en el diccionario.')
else
begin
seek(Arch,FileSize(Arch));
writeln('Introduzca la definici¢n de dicha palabra: ');
readln(upcase(RPalabra.Definicion));
write(arch,RPalabra)
end
end;
Procedure Modificar_Definicion(var Arch:ArchPalabra);
var RPalabra:RegPalabra;
pos:longint;
Begin
reset(Arch);
writeln('Introduzca la palabra que quiere modificar');
readln(upcase(RPalabra.Palabra));
pos:=BusBin(Arch,Rpalabra.Palabra);
if (pos<>-1) then
begin
seek(Arch,pos);
writeln('Introduzca la nueva definici¢n para esa palabra');
readln(Rpalabra.definicion);
write(Arch,Rpalabra)
end
else
writeln('Error: La palabra que intenta modificar no existe en el diccionario')
end;
Procedure Buscar_Definicion(var Arch:ArchPalabra);
var RPalabra:RegPalabra;
Palabra:str;
pos:longint;
Begin
writeln('Introduzca la palabra que desea buscar');
readln(Palabra);
pos:=BusBin(Arch,Palabra);
seek(Arch,pos);
read(Arch,RPalabra);
writeln('Palabra: ',RPalabra.Palabra);
writeln('Definici¢n: ',RPalabra.Definicion)
end;
Procedure Inicio(var Arch:ArchPalabra);
var opcion:byte;
Begin
writeln('Diccionario de la Real academia espa¤ola');
repeat
writeln('Indique con el n£mero correspondiente que tipo de operaci¢n desea realizar');
writeln('1-Agregar palabra');
writeln('2-Modificar la definici¢n de una palabra existente');
writeln('3-Buscar definici¢n');
writeln('4-Salir');
readln(opcion);
case opcion of
1:Agregar_definicion(Arch);
2:Modificar_definicion(Arch);
3:Buscar_definicion(Arch)
end
until opcion=4;
end;
var
Arch:ArchPalabra;
Begin
Inicio(Arch)
end.
Valora esta pregunta


0