Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Інститут комп’ютерних наук та інформаційних технологій
Кафедра ПЗ
ЗВІТ
Лабораторна робота № 4
з курсу «Дискретна математика»
Тема: "Відношення ”
Виконав: ст. гр. ПІ
Львів-2007
Завдання:
Завдання.
Ввести з клавіатури відношення на множині {1,2,3,4}.
Зберегти відношення за допомогою array. Визначити чи дане відношення є
рефлексивне
іррефлексивне
симетричне
антисиметричне
асиметричне
6. транзитивне
Відлагодити, скомпілювати і зберегти програму.
Оформити звіт про роботу.
Текст програми
program vidnoshennya;
uses crt;
const N = 4;
var vidnosh: array[1..N,1..2]of integer;
mas,mas3,mas4,mas5,mas6:array[1..4]of integer;
max:integer;
i,j,num,g:integer;
reflex,irreflex,symetr,antysymetr,asymetr,tranzut,ekviv,chastk:boolean;
begin
clrscr;
reflex:=false;
irreflex:=true;
symetr:=false;
antysymetr:=false;
asymetr:=false;
tranzut:=false;
ekviv:=false;
chastk:=false;
writeln('‚Введіть ',N,' пари відношень (числа менші 4)');
for i:=1 to N do
begin
writeln('Введіть ',i,'пару елементів');
for j:=1 to 2 do
begin
readln(num);
while num>4 do
begin
writeln('Введено число більше 4, введіть інше число');
readln(num);
end;
vidnosh[i,j]:=num;
end;
end;
max:=0;
for i:=1 to N do
for j:=1 to 2 do if vidnosh[i,j]>max then max:=vidnosh[i,j];
for i:=1 to 4 do mas[i]:=0;
for i:=1 to N do
if vidnosh[i,1]=vidnosh[i,2] then
begin
mas[vidnosh[i,1]]:=1;
end;
for i:=1 to 4 do
if mas[i]=0 then
begin
if i-1=max then
begin
reflex:=true;
break;
end
else break;
end
else if i=4 then reflex:=true;
for i:=1 to N do
if vidnosh[i,1]=vidnosh[i,2] then
irreflex:=false;
for i:=1 to N do mas3[i]:=0;
for i:=1 to N do mas4[i]:=0;
for i:=1 to N do mas5[i]:=0;
for i:=1 to N do
if vidnosh[i,1]=vidnosh[i,2] then
begin
mas3[i]:=1;
mas4[i]:=1;
end
else
begin
for j:=i to N do
if (vidnosh[j,1]=vidnosh[i,2])and(vidnosh[j,2]=vidnosh[i,1]) then
begin
antysymetr:=false;
for g:=1 to N do mas4[g]:=0;
mas3[i]:=1;
mas3[j]:=1;
end
else
begin
if j=N then
begin
mas4[i]:=1;
mas5[i]:=1;
end;
end;
end;
for i:=1 to N do
if mas3[i]=0 then break
else if i=N then symetr:=true;
for i:=1 to N do
if mas4[i]=0 then break
else if i=N then antysymetr:=true;
for i:=1 to N do
if mas5[i]=0 then break
else if i=N then asymetr:=true;
for i:=1 to N do mas6[i]:=0;
for i:=1 to N do
for j:=1 to N do
if vidnosh[i,2]=vidnosh[j,1] then
begin
for g:=1 to N do
if vidnosh[g,1]=vidnosh[j,2] then
begin
mas6[i]:=1;
end
else mas6[i]:=0;
end
else mas6[i]:=1;
for i:=1 to N do
if mas6[i]=0 then break
else if i=N then tranzut:=true;
if reflex and symetr and tranzut then ekviv:=true;
if reflex and antysymetr and tranzut then chastk:=true;
writeln;
if reflex then writeln('Відношення рефлексивне');
if irreflex then writeln('Відношення іррефлексивне ');
if symetr then writeln('Відношення симетричне');
if antysymetr then writeln('Відношення антисиметричне ');
if asymetr then writeln('Відношення асиметричне ');
if tranzut then writeln('Відношення транзитивне');
if ekviv then writeln('Відношення еквівалентності');
if chastk then writeln('Відношення часткового порядку');
if (not reflex) and (not irreflex) and (not symetr) and (not antysymetr)
and (not asymetr) and (not tranzut) then
writeln('Відношення не належить до жодного типу');
readln;
end.
Висновок:
На цій роботі я перевірив свої знання по темі відношення та навчився записувати відношення в на мові Turbo Pascal.