Ayuda programa!
Publicado por Jaf (1 intervención) el 19/10/2007 04:34:43
Alguien me puede decir que es lo que estoy haciedno mal, realmente no se que es, un saludo, me tira runtime error. El programa es agregar una definicion al diccionario, modificarla, o buscarla, les agradecería si me ayudan con esto.
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