i = 3 ; j = 3 ; k = 5
program COMUNE;
var
pr, sec: text;
COMM: boolean;
x: char;
function APPARTIENE (c: char): boolean;
var
APP: boolean;
x: char;
begin
reset(sec, 'SECONDO');
APP := FALSE;
while ((not EOF(sec)) and (not APP)) do
begin
read(sec, x);
if x = c then
APP := true;
end;
APPARTIENE := APP;
close(sec);
end;
begin
reset(pr, 'PRIMO');
COMM := FALSE;
while ((not EOF(pr)) and (not COMM)) do
begin
read(pr, x);
if APPARTIENE(x) then
COMM := true;
end;
close(pr);
write('I due file ');
if not COMM then
write('non ');
writeln('hanno elementi comuni');
end.
program ESAME;
type
{ gli elementi del tipo INSIEME rappresentano gli insiemi di numeri}
{ reali la cui cardinalita' e' al piu' 50 }
INSIEME = record
CARD: integer; {cardinalita' dell'insieme}
ELEMENTI: array[1..50] of real; {contiene gli elementi dell'insieme
nelle prime posizioni senza ripetizioni}
end;
var VUOTO, I1, I2, I3, I4, I5: INSIEME;
over: BOOLEAN;
{ la funzione APPARTIENE controlla se un elemento appartiene ad un insieme }
function APPARTIENE (x: real; s: INSIEME): BOOLEAN;
var
i: integer;
APP: BOOLEAN;
begin
APP := FALSE;
for i := 1 to s.CARD do
if x = s.ELEMENTI[i] then
APP := TRUE;
APPARTIENE := APP;
end;
{ la funzione CARDINALITA ritorna la cardinalita' di un insieme }
function CARDINALITA (s: INSIEME): integer;
begin
CARDINALITA := s.CARD;
end;
{ la procedura ADD ritorna l'insieme s a cui e' stato aggiunto l'elemento x }
{ con il parametro s2 }
{ il parametro oveflow ritorna se vi e' stato o no l'overflow }
procedure ADD (x: real; s: INSIEME; var s2: INSIEME; var overflow: BOOLEAN);
begin
s2 := s;
if APPARTIENE(x, s) then
overflow := FALSE
else if CARDINALITA(s) = 50 then
overflow := TRUE
else
begin
s2.CARD := s2.CARD + 1;
s2.ELEMENTI[s2.CARD] := x;
end;
end;
{ la procedura UNIONE ritorna l'unione di due insiemi s1 e s2 con il parametro s3 }
{ il parametro oveflow ritorna se vi e' stato o no l'overflow }
procedure UNIONE (s1, s2: INSIEME; var s3: INSIEME; var overflow: BOOLEAN);
var
i: integer;
begin
s3 := s1;
for i := 1 to CARDINALITA(s2) do
ADD(s2.ELEMENTI[i], s3, s3, overflow);
end;
begin
{ inizializzo VUOTO}
VUOTO.CARD := 0;
{ assegnare ad I1 l'insieme vuoto }
I1 := VUOTO;
{ assegnare ad I2 l'insieme 3.5, 7.0, 4.0 }
I2 := VUOTO;
ADD(3.5, I2, I2, over);
ADD(7.0, I2, I2, over);
ADD(4.0, I2, I2, over);
{ assegnare ad I3 l'insieme { 3.1, 7.0, 4.4, 8.8 }
I3 := VUOTO;
ADD(3.1, I3, I3, over);
ADD(7.0, I3, I3, over);
ADD(4.4, I3, I3, over);
ADD(8.8, I3, I3, over);
{ controllare se 3.0 appartiene ad I2 U I3 }
UNIONE(I2, I3, I4, over);
if APPARTIENE(3.0, I4) then
writeln('Appartiene')
else
writeln('Non appartiene');
{ stampare la cardinalita' di I3 U I2 U I1 }
UNIONE(I2, I1, I5, over);
UNIONE(I3, I5, I5, over);
writeln('Cardinalita = ', CARDINALITA(I5));
end.