Programación General > Pascal
Listas Circulares
(1/1)
pegui23:
--- Código: Text ---FUNCTION PosInserC (Ordena:tInfo; L:tLista):tLista;VAR T:tLista;BEGIN T:= L; IF NOT (ListaCVacia(L)) THEN BEGIN WHILE (Ordena.DirIP >= L^.Info.DirIP) AND (L^.Sig <> T) DO BEGIN T:= L; L:= L^.Sig; END; IF (Ordena.DirIP >= L^.info.DirIP) THEN T:=L; END; PosInserC:= T;END;
hago un insertar ordenado de los ordenadores en mi lista xq deben estar ordenados por su IP
--- Código: Text ---PROCEDURE InserOrdenC (Ordena:tInfo; VAR L:tLista);VAR A,N:tLista;BEGIN N:= CrearC(Ordena); IF ListaCVacia(L) THEN {Inserta si esta la lista vacia} L:= N ELSE BEGIN A:= PosInserC(Ordena,L); IF NOT (ExisteOrdenador(L,Ordena.DirIP)) THEN IF (A = L) THEN {inserta ultimo} BEGIN N^.Sig:= L; L:= N; END ELSE BEGIN N^.Sig:= A^.Sig; A^.Sig:= N; END ENDEND;
pido los datos y les voy añadiendo a la lista.
--- Código: Text ---PROCEDURE AnadirOrd(Ordenador:tInfo; VAR Lista:tLista);VAR SistOp:Char; IP:Integer; Busc:tLista; Duplicado:Boolean;BEGIN WriteLn('Introduzca los datos del nuevo equipo: '); WriteLn('Nombre Simbolico: '); ReadLn(Ordenador.NombreSimb); WriteLn('Nombre Propietario: '); ReadLn(Ordenador.NombreProp); WriteLn('Direccion IP: '); ReadLn(Ordenador.DirIP); Duplicado:=ExisteOrdenador(Lista,Ordenador.DirIP); IF (Duplicado) THEN BEGIN WriteLn('La Direccion IP ya existe'); ReadLn; END ELSE BEGIN InserOrdenC (Ordenador,Lista); WriteLn('Ordenador insertado'); ReadLn; ENDEND;
1º PROBLEMA: inserta uno y al insertar el segundo se queda colgao.
--> ahora para que me lo copie al fichero hago lo siguiente:
--- Código: Text ---PROCEDURE AlmacenarDatos (Info:tInfo;Lista:tLista;VAR F:Text);VAR AuxL:tLista;BEGIN IF ListaCVacia(Lista) THEN WriteLn('la lista esta vacia') ELSE BEGIN AuxL:=Lista^.Sig; WHILE (Lista<>AuxL) DO BEGIN Write(F,Lista^.Info.NombreSimb,'#'); WriteLn(F,Lista^.Info.DirIP,'#'); WriteLn('El fichero ha sido escrito con los datos de la lista'); ReadLn; END; AuxL:=AuxL^.Sig; END;END;
--- Código: Text ---PROCEDURE EscribirF (VAR F:Text;Lista:tLista);VAR Info:tInfo;BEGIN Assign(F,'Config.txt'); {$I-} Rewrite(F); {$I+} IF (IORESULT <> 0) THEN BEGIN Writeln('Se ha producido un fallo en la apertura del fichero'); Readln; END ELSE AlmacenarDatos(Info,Lista,F); {$I-} Close(F); {$I+} IF (IORESULT <> 0) THEN BEGIN Writeln('Se ha producido un error en el cierre del fichero'); Readln; ENDEND; 2º PROBLEMA: no me escribe nada en el fichero.
Alguien me podria hechar una mano???con listas simples se las condiciones de parada y eso pero con esta al ser circular, llega al final cuando aux señala a L pero no me sale.
GRACIAS
m0skit0:
Por favor, edita el código, utiliza las etiquetas de código e indentalo para que sea más legible.
Salud.
eternity:
estaria bueno conocer en detalle la estrucutra tLista
un abrazo!
Navegación
Ir a la versión completa