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
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
END
END;
pido los datos y les voy añadiendo a la lista.
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;
END
END;
1º PROBLEMA: inserta uno y al insertar el segundo se queda colgao.--> ahora para que me lo copie al fichero hago lo siguiente:
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;
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;
END
END;
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