Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Інститут комп’ютерних наук та інформаційних технологій
Кафедра ПЗ
З В І Т
Лабораторна робота № 4
З курсу «Дискретної математики»
Тема: «Відношення»
Мета роботи:
Навчитися складати відношення за допомогою функцій мови Pascal.
Завдання:
Ввести з клавіатури відношення на множині {1,2,3,4}.
Зберегти відношення за допомогою array. Визначити чи дане відношення є
рефлексивне
іррефлексивне
симетричне
антисиметричне
асиметричне
транзитивне
Текст програми
program vidnowennya;
uses crt;
const SIZE = 4;
var vidnow:array[1..SIZE,1..2]of integer;
mas,mas3,mas4,mas5,mas6:array[1..SIZE]of integer;
temp:array[1..SIZE]of integer;
max,min,n:integer;
i,j,num,g:integer;
reflex,irreflex,sumet,antusumet,asumet,tranzut,ekviv,chastk:boolean;
begin
clrscr;
for i:=1 to SIZE do temp[i]:=0;
reflex:=false;
irreflex:=true;
sumet:=false;
antusumet:=false;
asumet:=false;
tranzut:=false;
ekviv:=false;
chastk:=false;
writeln('Vveditj ',SIZE,' paru vidnowenj. Cusla <=4');
for i:=1 to SIZE do
begin
writeln('Vveitj ',i,'-tu pary elem');
for j:=1 to 2 do
begin
readln(num);
while num>4 do
begin
writeln('Vvedeno chuslo >4 vveditj inwe chuslo');
readln(num);
end;
temp[num]:=1;
vidnow[i,j]:=num;
end;
end;
max:=vidnow[1,1];
min:=vidnow[1,1];
for i:=1 to SIZE do
for j:=1 to 2 do
begin
if vidnow[i,j]>max then max:=vidnow[i,j];
if vidnow[i,j]<min then min:=vidnow[i,j];
end;
for i:=1 to 4 do mas[i]:=0;
{-----------------------------------------------------}
for i:=1 to SIZE do
if vidnow[i,1]=vidnow[i,2] then
begin
mas[vidnow[i,1]]:=1;
end;
for i:=1 to 4 do
if mas[i]=0 then
begin
if temp[i]=1 then break
else
begin
if i=4 then reflex:=true;
continue;
end;
end
else if i=4 then reflex:=true;
{-----------------------------------------------------}
for i:=1 to SIZE do
if vidnow[i,1]=vidnow[i,2] then
irreflex:=false;
{-----------------------------------------------------}
for i:=1 to SIZE do mas3[i]:=0;
for i:=1 to SIZE do mas4[i]:=0;
for i:=1 to SIZE do mas5[i]:=0;
for i:=1 to SIZE do
if vidnow[i,1]=vidnow[i,2] then
begin
mas3[i]:=1;
mas4[i]:=1;
end
else
begin
for j:=1 to SIZE do
if (vidnow[j,1]=vidnow[i,2])and(vidnow[j,2]=vidnow[i,1]) then
begin
antusumet:=false;
for g:=1 to SIZE do mas4[g]:=0;
mas3[i]:=1;
mas3[j]:=1;
end
else
begin
if j=SIZE then
begin
mas4[i]:=1;
mas5[i]:=1;
end;
end;
end;
for i:=1 to SIZE do
if mas3[i]=0 then break
else if i=SIZE then sumet:=true;
for i:=1 to SIZE do
if mas4[i]=0 then break
else if i=SIZE then antusumet:=true;
for i:=1 to SIZE do
if mas5[i]=0 then break
else if i=SIZE then asumet:=true;
{-----------------------------------------------------}
for i:=1 to SIZE do mas6[i]:=0;
n:=0;
for i:=1 to SIZE do
for j:=1 to SIZE do
if (vidnow[i,2]=vidnow[j,1]) then
begin
for g:=1 to SIZE do
if (vidnow[g,1]=vidnow[i,1])and(vidnow[g,2]=vidnow[j,2]) then
begin
mas6[i]:=1;
break;
end;
end
else
begin
n:=n+1;
if n = SIZE then mas6[i]:=1;
if j=4 then n:=0;
end;
for i:=1 to SIZE do
if mas6[i]=0 then break
else if i=SIZE then tranzut:=true;
{-----------------------------------------------------}
if reflex and sumet and tranzut then ekviv:=true;
if reflex and antusumet and tranzut then chastk:=true;
writeln;
if reflex then writeln('Vidnowennya refleksuvne');
if irreflex then writeln('Vidnowennya irrefleksuvne');
if sumet then writeln('Vidnowennya sumetruchne');
if antusumet then writeln('Vidnowennya antusumetruchne');
if asumet then writeln('Vidnowennya asumetruchne');
if tranzut then writeln('Vidnowennya tranzutuvne');
if ekviv then writeln('Vidnowennya ekvivalentnosti');
if chastk then writeln('Vidnowennya chastkovogo poryadky');
if (not reflex) and (not irreflex) and (not sumet) and (not antusumet)
and (not asumet) and (not tranzut) then
writeln('Vidnowennya ne nalezhutj do zhodnogo tupy!');
readln;
end.
Висновок:
На даній лабораторній роботі я навчився складати відношення в мові Pascal .