Urgente problemas con listas
Publicado por Mar (2 intervenciones) el 02/12/2008 14:00:34
Tengo que realizar un programa que lea de un fichero txt donde tiene palabras y sus definiciones separadas por saltos de líneas. Las definiciones llevan siempre un número delante. Compila pero algo le pasa al cargar el fichero ¿alguien me puede ayudar? gracias
program Diccionario;
Uses Crt;
const
esc= #27;
Type
tipo_palabra = record
palabra : string;
definicion : text;
end ;
enlace = ^nodo;
nodo =record
datos :tipo_palabra;
sig : enlace;
end;
var L, p : enlace;
tecla: char;
ruta : string;
Procedure insertar_principio_lista ( var lista, q: enlace);
begin
q^.sig := lista;
lista := q
end;
procedure inserta_nodo ( var lista, q : enlace);
var actual, anterior : enlace;
encontrado : boolean;
begin
if (lista = nil) or (q^.datos.palabra < lista^.datos.palabra) then
insertar_principio_lista (lista, q)
else
begin
anterior := lista;
actual := lista^.sig;
encontrado := FALSE;
while (actual <> nil) and (not encontrado) do
begin
if q^.datos.palabra > actual^.datos.palabra then
begin
anterior := actual;
actual := actual^.sig
end
else encontrado := TRUE;
end;
q^.sig := actual;
anterior^.sig := q
end;
end;
procedure cargar_fichero ;
var
fichero, f2 : text;
linea : string;
Begin
ClrScr;
assign (fichero, ruta); {asigna el fichero que se quiere tratar a una ruta}
{$I-}
reset(fichero);
{$I+}
if ioResult=0 then
begin
While not eof(fichero) do
new (p);
Begin
readln(fichero, linea);
if ( ord ('a') <= ord (linea[1])) and ( ord(linea[1]) <= ord ('z') ) then {comprobamos caracter}
p^.datos.palabra:= linea
else writeln('palabra no valida'); exit;
assign(f2,'p^.datos.definicion');
rewrite(f2);
while linea <> '' do
begin
readln(fichero,linea);
writeln(f2,linea);
end;
close (f2);
inserta_nodo (L, p );
end;
close (fichero);
end;
end;
procedure consultar_palabra;
var pal,C : string;
f: text;
q: enlace;
Begin
ClrScr;
gotoxy(30,5); Write('Palabra: ');
read(pal);
q:=L;
while ( q <> nil) and ( q^.datos.palabra <> pal) do
q:= q^.sig;
if q = nil then writeln('palabra no pertenece al diccionario')
else
begin
assign(f, 'q^.datos.definicion');
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
readln(f,C);
while not eof(f) do
begin
writeln(C); readln(f,C)
end;
close (f)
end;
end;
end;
procedure lista_ordenada_palabras(q: enlace);
begin
ClrScr;
gotoxy(30,5); Write('Listado ordenado de palabras del Diccionario');
gotoxy(25,7); Write('Palabra: ');
while q <> nil do
begin
write(q^.datos.palabra);
q:= q^.sig
end;
end;
procedure listado_completo(q:enlace);
var f: text;
C : string;
begin
ClrScr;
gotoxy(30,5); Write('Listad completo de informacion del Diccionario');
q:= L;
while q <> nil do
begin
writeln(q^.datos.palabra);
assign(f, 'q^.datos.definicion');
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
readln(f,C);
while not eof(f) do
begin
writeln(C); readln(f,C)
end;
close (f)
end;
end;
end;
procedure visualizar_diccionario;
var opcion: char;
Begin
clrscr;
gotoxy(30,5); Write('Seleccione una opcion:');
gotoxy(30,7); Writeln( '1: lista de palabras.');
gotoxy(30,8); Writeln( '2: listado completo.');
opcion:= Readkey;
case opcion of
'1': lista_ordenada_palabras(L);
'2': listado_completo(L);
else
Writeln( 'seleccion no valida.');
end
end;
procedure inserta_palabra( var B : enlace);
var f: text;
linea, C: string;
q:enlace;
begin
clrscr;
gotoxy(30,5); Write('palabra:');
Read(C);
new(q); q^.datos.palabra:= C;
assign(f,'q^.datos.definicion');
rewrite(f);readln(linea);
While linea <> '' do
begin
writeln(f,linea);
readln(linea);
end;
close (f);
inserta_nodo (L, q);
end;
Begin {inicio programa principal}
clrScr;
textbackground(blue);
gotoxy(20,10);
Writeln('Introducir la ruta del fichero (Ejemplo c:clave.txt):');
gotoxy(25,12);Readln(ruta);
L:= nil;
cargar_fichero;
Repeat
ClrScr;
gotoxy(30,5); Write('DICCIONARIO');
gotoxy(35,8); Write('1. Visualizar diccionario');
gotoxy(35,9); Write('2. Consultar_palabra');
gotoxy(35,10); Write('3. A¤adir palabra al dicionario');
gotoxy(35,12); Write('4. Salir');
gotoxy(35,13); Write('Opci¢n []');
gotoxy(43,16);
tecla:=Readkey;
case tecla of
'1':visualizar_diccionario;
'2':consultar_palabra;
'3':inserta_palabra(L);
'4':Exit
else Write('seleccion no valida')
end;
until tecla='4';
clrScr
end.
program Diccionario;
Uses Crt;
const
esc= #27;
Type
tipo_palabra = record
palabra : string;
definicion : text;
end ;
enlace = ^nodo;
nodo =record
datos :tipo_palabra;
sig : enlace;
end;
var L, p : enlace;
tecla: char;
ruta : string;
Procedure insertar_principio_lista ( var lista, q: enlace);
begin
q^.sig := lista;
lista := q
end;
procedure inserta_nodo ( var lista, q : enlace);
var actual, anterior : enlace;
encontrado : boolean;
begin
if (lista = nil) or (q^.datos.palabra < lista^.datos.palabra) then
insertar_principio_lista (lista, q)
else
begin
anterior := lista;
actual := lista^.sig;
encontrado := FALSE;
while (actual <> nil) and (not encontrado) do
begin
if q^.datos.palabra > actual^.datos.palabra then
begin
anterior := actual;
actual := actual^.sig
end
else encontrado := TRUE;
end;
q^.sig := actual;
anterior^.sig := q
end;
end;
procedure cargar_fichero ;
var
fichero, f2 : text;
linea : string;
Begin
ClrScr;
assign (fichero, ruta); {asigna el fichero que se quiere tratar a una ruta}
{$I-}
reset(fichero);
{$I+}
if ioResult=0 then
begin
While not eof(fichero) do
new (p);
Begin
readln(fichero, linea);
if ( ord ('a') <= ord (linea[1])) and ( ord(linea[1]) <= ord ('z') ) then {comprobamos caracter}
p^.datos.palabra:= linea
else writeln('palabra no valida'); exit;
assign(f2,'p^.datos.definicion');
rewrite(f2);
while linea <> '' do
begin
readln(fichero,linea);
writeln(f2,linea);
end;
close (f2);
inserta_nodo (L, p );
end;
close (fichero);
end;
end;
procedure consultar_palabra;
var pal,C : string;
f: text;
q: enlace;
Begin
ClrScr;
gotoxy(30,5); Write('Palabra: ');
read(pal);
q:=L;
while ( q <> nil) and ( q^.datos.palabra <> pal) do
q:= q^.sig;
if q = nil then writeln('palabra no pertenece al diccionario')
else
begin
assign(f, 'q^.datos.definicion');
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
readln(f,C);
while not eof(f) do
begin
writeln(C); readln(f,C)
end;
close (f)
end;
end;
end;
procedure lista_ordenada_palabras(q: enlace);
begin
ClrScr;
gotoxy(30,5); Write('Listado ordenado de palabras del Diccionario');
gotoxy(25,7); Write('Palabra: ');
while q <> nil do
begin
write(q^.datos.palabra);
q:= q^.sig
end;
end;
procedure listado_completo(q:enlace);
var f: text;
C : string;
begin
ClrScr;
gotoxy(30,5); Write('Listad completo de informacion del Diccionario');
q:= L;
while q <> nil do
begin
writeln(q^.datos.palabra);
assign(f, 'q^.datos.definicion');
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
readln(f,C);
while not eof(f) do
begin
writeln(C); readln(f,C)
end;
close (f)
end;
end;
end;
procedure visualizar_diccionario;
var opcion: char;
Begin
clrscr;
gotoxy(30,5); Write('Seleccione una opcion:');
gotoxy(30,7); Writeln( '1: lista de palabras.');
gotoxy(30,8); Writeln( '2: listado completo.');
opcion:= Readkey;
case opcion of
'1': lista_ordenada_palabras(L);
'2': listado_completo(L);
else
Writeln( 'seleccion no valida.');
end
end;
procedure inserta_palabra( var B : enlace);
var f: text;
linea, C: string;
q:enlace;
begin
clrscr;
gotoxy(30,5); Write('palabra:');
Read(C);
new(q); q^.datos.palabra:= C;
assign(f,'q^.datos.definicion');
rewrite(f);readln(linea);
While linea <> '' do
begin
writeln(f,linea);
readln(linea);
end;
close (f);
inserta_nodo (L, q);
end;
Begin {inicio programa principal}
clrScr;
textbackground(blue);
gotoxy(20,10);
Writeln('Introducir la ruta del fichero (Ejemplo c:clave.txt):');
gotoxy(25,12);Readln(ruta);
L:= nil;
cargar_fichero;
Repeat
ClrScr;
gotoxy(30,5); Write('DICCIONARIO');
gotoxy(35,8); Write('1. Visualizar diccionario');
gotoxy(35,9); Write('2. Consultar_palabra');
gotoxy(35,10); Write('3. A¤adir palabra al dicionario');
gotoxy(35,12); Write('4. Salir');
gotoxy(35,13); Write('Opci¢n []');
gotoxy(43,16);
tecla:=Readkey;
case tecla of
'1':visualizar_diccionario;
'2':consultar_palabra;
'3':inserta_palabra(L);
'4':Exit
else Write('seleccion no valida')
end;
until tecla='4';
clrScr
end.
Valora esta pregunta


0