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

[0] Índice de Mensajes

Ir a la versión completa