He tenido suerte con el prueba-error y al final ha habido una combinacion que me ha funcionado
Ahora el problema ahora es decubrir porq asi funciona y de las otras maneras no??? xDDD
< - >
El programa entero mal, a ver si alguien ve loq he cambiado para que funcionara ^^
Código:
(* Nombre del creador: xXx *)
(* Título del programa: Comprobador de DNI *)
(* Fecha de creación: 18/V/06 *)
program gestor_censo;
const
tamstringA=8;
tamstringB=20;
archivo='censoBien.dat';
type
cadA=string[tamstringA];
cadB=string[tamstringB];
censo= record
dni: cadA;
nombreColegio: cadB;
mesa: char;
end;
punt= ^nodo;
nodo= record
inf: censo;
sig: punt;
end;
f= file of censo;
procedure primer_nodo (var l: punt; cen: censo);
var
temp: punt;
begin
new(temp);
temp^.inf:= cen;
temp^.sig:= nil;
l:= temp;
end;
function igual (uno: punt; c: censo):boolean;
var
ptr: punt;
bol: boolean;
begin
bol:= False;
ptr:= uno;
while (ptr<>nil) do
begin
if (c.dni = ptr^.inf.dni) then
bol:= True;
ptr:=ptr^.sig;
end;
igual:= bol;
end;
procedure busca_nodo (prim: punt; cen: censo; var a: punt; var pun: punt; var b: integer);
begin
a:=nil;
pun:=prim;
if (igual(pun, cen)= False) then
begin
while (pun<>nil) AND (cen.dni>pun^.inf.dni) do
begin
a:=pun;
pun:=pun^.sig;
end;
end
else
begin
b:= b+1;
end;
end;
procedure nuevo_nodo (var ini: punt; cens: censo; var sw: integer);
var
temp, ant, ex: punt;
begin
new(temp);
temp^.inf.dni:= cens.dni;
busca_nodo(ini, cens, ant, ex, sw);
if (ex=nil) then
begin
sw:= sw+1;
end
else
begin
if (ant=nil) then
begin
temp^.sig:=ini;
ini:=temp;
end
else
begin
temp^.sig:=ant^.sig;
ant^.sig:=temp;
end;
end;
end;
procedure comp_censo (var fi:f);
var
ptr: punt;
cen: censo;
boo: integer;
prim: boolean;
begin
reset(fi);
prim:= True;
while (not(eof(fi))) AND (boo <= 1) do
begin
read(fi, cen);
boo:= 1;
if (prim= True) then
begin
primer_nodo(ptr, cen);
prim:= False;
end
else
begin
nuevo_nodo(ptr, cen, boo);
end;
end;
if (boo>1) then
begin
writeln(boo);
writeln('El censo no es correcto, al menos existen dos personas almacenadas con el mismo DNI');
end
else
begin
writeln('El censo es correcto');
end;
end;
procedure menu;
var
ch:integer;
fich:f;
begin
assign(fich, archivo);
repeat
writeln;
writeln;
writeln('Bienvenido al menu. Escoge una opcion de entre las siguientes:');
writeln;
writeln('1.- Comprobar el censo.');
writeln('2.- Salir del programa.');
writeln;
repeat
write('Escriba su opcion: ');
readln(ch);
if (ch<>1) AND (ch<>2) then
writeln('Opcion incorrecta, escoja de nuevo.');
until (ch=1) OR (ch=2);
case ch of
1: comp_censo(fich);
2: writeln;
end;
until (ch=2);
end;
Begin
menu;
end.
Marcadores