program Problema1;
type
TipoElemLista = integer;
TipoLista = ^TipoRecordLista;
TipoRecordLista = record
info : TipoElemLista;
next : TipoLista
end;
var
lis1, lis2, ris : TipoLista;
nomefile : string[12];
function EsisteInLista (lis: TipoLista; elem: TipoElemLista): boolean;
var
trovato : boolean;
begin
trovato := FALSE;
while (lis <> NIL) and (not trovato) do
if lis^.info = elem then
trovato := TRUE
else
lis := lis^.next;
EsisteInLista := trovato
end;
procedure LeggiLista (nomefile: string; var lis: TipoLista);
var
paux : TipoLista;
datafile : text;
begin
assign(datafile, nomefile);
reset(datafile);
new(lis);
paux := lis;
while not eof(datafile) do
begin
new(paux^.next);
paux := paux^.next;
read(datafile, paux^.info)
end;
paux^.next := NIL;
paux := lis;
lis := lis^.next;
dispose(paux);
close(datafile)
end;
procedure StampaLista (lis: TipoLista);
begin
while lis <> NIL do
begin
write(lis^.info:4);
lis := lis^.next
end;
writeln;
end;
procedure CancellaLista (var lis: TipoLista);
var
paux : TipoLista;
begin
while lis <> NIL do
begin
paux := lis;
lis := lis^.next;
dispose(paux)
end
end;
begin
writeln;
writeln('--- Inizio programma ---');
writeln;
writeln('Memora disponibile all''inizio del programma :', memavail);
writeln;
write('Nome primo file contenente una sequenza di interi? ');
readln(nomefile);
LeggiLista(nomefile, lis1);
writeln('Prima lista letta:');
StampaLista(lis1);
write('Nome secondo file contenente una sequenza di interi? ');
readln(nomefile);
LeggiLista(nomefile, lis2);
writeln('Seconda lista letta:');
StampaLista(lis2);
writeln;
writeln('CHIAMATA procedura Esercizio1');
Esercizio1(lis1, lis2, ris);
writeln('Lista con gli interi comuni ai due file');
StampaLista(ris);
CancellaLista(lis1);
CancellaLista(lis2);
CancellaLista(ris);
writeln;
writeln('Memora disponibile alla fine del programma :', memavail);
writeln;
writeln('--- Fine programma, premere return ---');
readln;
end.