====== Metszetképzés ======
Általános feladat: Rendelkezésünkre áll egy N és egy M elemű halmaz az A() és a B() vektorban ábrázolva. Készítsük el a két halmaz metszetét a C() vektorba!
Eljárás:
CN:=0
Ciklus I=1-től N-ig
J:=1
Ciklus amíg J<=M és A(I)<>B(J)
J:=J+1
Ciklus vége
Ha J<=M akkor CN:=CN+1
C(CN):=A(I)
Ciklus vége
Eljárás vége.
Pascal forráskód
program metszetkepzes;
const n = 10;
m = 12;
var a: array [1..n] of integer;
b: array [1..m] of integer;
c: array [1..n+m] of integer;
i, j, k: integer;
begin
randomize;
//tömbök elkészítése
for i:=1 to n do
begin
a[i]:=random(8);
write(a[i], ' ');
end;
writeln;
for j:=1 to m do
begin
b[j]:=random(8);
write(b[j], ' ');
end;
writeln;
//írjuk ki a c-be az a és b metszetét!(kozos elemeit)
k:=0;
for i:=1 to n do begin
j:=1;
while (j<=m) and (a[i]<>b[j]) do
j:=j+1;
if j<=m then begin
k:=k+1;
c[k]:=a[i];
end;
end;
writeln('az a es b metszete a c tombben: ');
for i:=1 to k do
write(c[i], ' ');
readln;
end.
[[https://ideone.com/Ri4TER | A forráskódjának futtatása online ]]
Metszetképzés egyedi elemekből.
program metszetkepzes_egyedielemek;
const n = 10;
m = 12;
var a: array [1..n] of integer;
b: array [1..m] of integer;
c: array [1..n+m] of integer;
i, j, k, l: integer;
begin
randomize;
//tömbök elkészítése
for i:=1 to n do
begin
a[i]:=random(8);
write(a[i], ' ');
end;
writeln;
for j:=1 to m do
begin
b[j]:=random(8);
write(b[j], ' ');
end;
writeln;
//írjuk ki a c-be az a és b metszetét!(kozos elemeit)
k:=0;
for i:=1 to n do begin
j:=1;
while (j<=m) and (a[i]<>b[j]) do
j:=j+1;
if j<=m then begin
l:=1;
while (l<=k) and (c[l]<>a[i]) do
l:=l+1;
if l>k then begin
k:=k+1;
c[k]:=a[i];
end;
end;
end;
writeln('az a es b metszete a c tombben: ');
for i:=1 to k do
write(c[i], ' ');
readln;
end.
[[https://ideone.com/sgR7yq | A forráskódjának futtatása online ]]
Órai gyakorlat
program metszetkepzes1;
const max_hossz=10; n=8; m=6;
type tomb = array [1..max_hossz] of integer;
var i,j, k, l : integer;
a,b,c: tomb;
procedure beolvas(var t : tomb; hossz: byte; nev: char );
var i: integer;
begin
writeln('Kerem a(z) "', nev, '" tomb elemeit: ');
for i:=1 to hossz do
begin
write(nev, '[',i,'] = '); readln(t[i]);
end;
end;
procedure kiir(t : tomb; hossz: byte);
var i: integer;
begin
for i:=1 to hossz do
write(t[i]:3);
writeln;
end;
begin //foprogram
beolvas(a, n, 'a');
beolvas(b, m, 'b');
kiir(a,n);
kiir(b,m);
k:=0;
for i:=1 to n do
begin
j:=1;
while (j<=m) and (a[i]<>b[j]) do
j := j + 1;
if j<=m then
begin
l:=1;
while (l<=k) and (c[l]<>a[i]) do
l := l + 1;
if l>k then
begin
k:=k+1;
c[k]:=a[i];
end;
end;
end;
kiir(c, k);
readln;
end.
program metszetkepzes2;
const maxhossz=10; n=8; m=6;
type tomb = array [1..maxhossz] of integer;
var i, k : integer;
a,b,c: tomb;
procedure beolvas(var t : tomb; hossz: byte; nev: char );
var i: integer;
begin
writeln('Kerem a(z) "', nev, '" tomb elemeit: ');
for i:=1 to hossz do
begin
write(nev, '[',i,'] = '); readln(t[i]);
end;
end;
procedure kiir(t : tomb; hossz: byte);
var i: integer;
begin
for i:=1 to hossz do
write(t[i]:3);
writeln;
end;
function talal(t: tomb; hossz:byte; elem:integer):boolean;
var i:integer;
begin
i:=1;
while (i<=hossz) and (t[i] <> elem) do
i:=i+1;
talal:=i<=hossz;
end;
begin //foprogram
beolvas(a, n, 'a');
beolvas(b, m, 'b');
kiir(a,n);
kiir(b,m);
k:=0;
for i:=1 to n do begin
if talal(b,m,a[i]) then begin
if not talal(c,k,a[i]) then begin
k:=k+1;
c[k]:=a[i];
end;
end;
end;
kiir(c, k);
readln;
end.
program metszetkepzes3;
const maxhossz=10; n=8; m=6;
type tomb = array [1..maxhossz] of integer;
procedure beolvas(var t : tomb; hossz: byte; nev: char );
var i: integer;
begin
writeln('Kerem a(z) "', nev, '" tomb elemeit: ');
for i:=1 to hossz do
begin
write(nev, '[',i,'] = '); readln(t[i]);
end;
end;
procedure kiir(t : tomb; hossz: byte; nev: char );
var i: integer;
begin
write(nev+': ');
for i:=1 to hossz do
write(t[i]:3);
writeln;
end;
function talal(t: tomb; hossz:byte; elem:integer):boolean;
var i:integer;
begin
i:=1;
while (i<=hossz) and (t[i] <> elem) do
i:=i+1;
talal:=i<=hossz;
end;
var i, k : integer;
a,b,c: tomb;
begin //foprogram
beolvas(a, n, 'a');
beolvas(b, m, 'b');
kiir(a,n,'a');
kiir(b,m,'b');
k:=0;
for i:=1 to n do
begin
if talal(b,m,a[i]) and not talal(c,k,a[i])then
begin
k:=k+1;
c[k]:=a[i];
end;
end;
kiir(c, k,'c');
readln;
end.