• Domingo 22 de Diciembre de 2024, 23:03

Autor Tema:  Listas Circulares  (Leído 2430 veces)

pegui23

  • Nuevo Miembro
  • *
  • Mensajes: 1
  • Nacionalidad: es
    • Ver Perfil
Listas Circulares
« en: Martes 23 de Diciembre de 2008, 11:40 »
0
Código: Text
  1. FUNCTION PosInserC (Ordena:tInfo; L:tLista):tLista;
  2. VAR
  3.    T:tLista;
  4. BEGIN
  5.      T:= L;
  6.      IF NOT (ListaCVacia(L)) THEN
  7.         BEGIN
  8.              WHILE (Ordena.DirIP >= L^.Info.DirIP) AND (L^.Sig <> T) DO
  9.                    BEGIN
  10.                         T:= L;
  11.                         L:= L^.Sig;
  12.                    END;
  13.              IF (Ordena.DirIP >= L^.info.DirIP) THEN
  14.                 T:=L;
  15.         END;
  16.      PosInserC:= T;
  17. END;
  18.  
  19.  

hago un insertar ordenado de los ordenadores en mi lista xq deben estar ordenados por su IP
Código: Text
  1. PROCEDURE InserOrdenC (Ordena:tInfo; VAR L:tLista);
  2. VAR
  3.    A,N:tLista;
  4. BEGIN
  5.      N:= CrearC(Ordena);
  6.      IF ListaCVacia(L) THEN {Inserta si esta la lista vacia}
  7.         L:= N
  8.      ELSE
  9.        BEGIN
  10.          A:= PosInserC(Ordena,L);
  11.          IF NOT (ExisteOrdenador(L,Ordena.DirIP)) THEN
  12.               IF (A = L) THEN {inserta ultimo}
  13.                  BEGIN
  14.                       N^.Sig:= L;
  15.                       L:= N;
  16.                  END
  17.               ELSE
  18.                   BEGIN
  19.                        N^.Sig:= A^.Sig;
  20.                        A^.Sig:= N;
  21.                   END
  22.        END
  23. END;
  24.  
  25.  

pido los datos y les voy añadiendo a la lista.
Código: Text
  1. PROCEDURE AnadirOrd(Ordenador:tInfo; VAR Lista:tLista);
  2. VAR
  3.    SistOp:Char;
  4.    IP:Integer;
  5.    Busc:tLista;
  6.    Duplicado:Boolean;
  7. BEGIN
  8.      WriteLn('Introduzca los datos del nuevo equipo: ');
  9.      WriteLn('Nombre Simbolico: ');
  10.      ReadLn(Ordenador.NombreSimb);
  11.      WriteLn('Nombre Propietario: ');
  12.      ReadLn(Ordenador.NombreProp);
  13.      WriteLn('Direccion IP: ');
  14.      ReadLn(Ordenador.DirIP);
  15.      Duplicado:=ExisteOrdenador(Lista,Ordenador.DirIP);
  16.      IF (Duplicado) THEN
  17.       BEGIN
  18.          WriteLn('La Direccion IP ya existe');
  19.          ReadLn;
  20.       END
  21.      ELSE
  22.         BEGIN
  23.           InserOrdenC (Ordenador,Lista);
  24.           WriteLn('Ordenador insertado');
  25.           ReadLn;
  26.         END
  27. END;
  28.  
  29.  

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
  1. PROCEDURE AlmacenarDatos (Info:tInfo;Lista:tLista;VAR F:Text);
  2. VAR
  3.     AuxL:tLista;
  4. BEGIN
  5.       IF ListaCVacia(Lista) THEN
  6.     WriteLn('la lista esta vacia')
  7.       ELSE BEGIN
  8.          AuxL:=Lista^.Sig;
  9.          WHILE (Lista<>AuxL) DO
  10.           BEGIN
  11.               Write(F,Lista^.Info.NombreSimb,'#');
  12.               WriteLn(F,Lista^.Info.DirIP,'#');
  13.               WriteLn('El fichero ha sido escrito con los datos de la lista');
  14.               ReadLn;
  15.           END;
  16.           AuxL:=AuxL^.Sig;
  17.       END;
  18. END;
  19.  
  20.  

Código: Text
  1. PROCEDURE EscribirF (VAR F:Text;Lista:tLista);
  2. VAR
  3.      Info:tInfo;
  4. BEGIN
  5.      Assign(F,'Config.txt');
  6.      {$I-}
  7.      Rewrite(F);
  8.      {$I+}
  9.      IF (IORESULT <> 0) THEN
  10.         BEGIN
  11.              Writeln('Se ha producido un fallo en la apertura del fichero');
  12.              Readln;
  13.         END
  14.      ELSE
  15.          AlmacenarDatos(Info,Lista,F);
  16.      {$I-}
  17.      Close(F);
  18.      {$I+}
  19.      IF (IORESULT <> 0) THEN
  20.         BEGIN
  21.              Writeln('Se ha producido un error en el cierre del fichero');
  22.              Readln;
  23.         END
  24. END;
  25.  
  26.  
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
« última modificación: Martes 23 de Diciembre de 2008, 11:51 por pegui23 »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Listas Circulares
« Respuesta #1 en: Martes 23 de Diciembre de 2008, 11:46 »
0
Por favor, edita el código, utiliza las etiquetas de código e indentalo para que sea más legible.

Salud.

eternity

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: Listas Circulares
« Respuesta #2 en: Martes 23 de Diciembre de 2008, 18:01 »
0
estaria bueno conocer en detalle la estrucutra tLista

un abrazo!