Міністерство освіти і науки, молоді та спорту України
Вінницький національний технічний університет
Інститут Інформаційних Технологій та Комп’ютерної Інженерії
Лабараторна робота № 8.
Тема: Розробка алгоритму і програми, для обчислення мінтермів для логічної функції заданої логічним виразом.
м.Вінниця 2012
Мета: Набути навичок для обчислення мінтермів для логічної функції заданої логічним виразом, та програмної реалізації досліджуваного алгоритму.
Хід роботи:
1.Вивчити теоретичний матеріал.
2.Розробити програму для обчислення мінтермів для логічної функції заданої логічним виразом.
3.Побудувати блок-схему.
4.Приклади тестування програми.
5.Висновок.
6.Лістинг програми.
3.Блок-схема
/
Рисунок 1.
/
Рисунок 2.
5. Висновок: набуто навичок обчислення мінтермів для логічної функції заданої логічним виразом. Програмно реалізовано даний алгоритм.
6. Лістинг програми (додаток).
uses crt;
type sim=array[1..6] of string;
const
permx:sim=('X1','X2','X3','X4','X5','X6');
permnx:sim=('nX1','nX2','nX3','nX4','nX5','nX6');
var i,n:integer; s:string; a: array[1..100] of string;
{повертає кількість непорожніх елементів масиву}
function kol(a:array[1..100] of string): integer;
var i,k:integer;
begin
k:=0;
for i:=1 to 100 do
begin
if length(a[i])>0 then k:=k+1;
end;
kol:=k;
end;
{витягує перше слово}
function token(s:string): string;
var
res: string;
begin
res:='';
if pos('+',s)>0 then
begin
repeat res:=res+copy(s,1,1); delete(s,1,1);
until pos('+',s)=1;
end
else
begin
repeat
res:=res+copy(s,1,1); delete(s,1,1);
until s='';
end;
token:=res;
end;
{видаляє перше слово і знак '+'}
function tokost(s:string): string;
begin
if pos('+',s)>0 then
begin
repeat delete(s,1,1);
until pos('+',s)=1;
delete(s,1,1);
end
else
begin
repeat delete(s,1,1);
until s='';
end;
tokost:=s;
end;
{процедура для перетворення аргументів}
procedure args(n:integer; s:string; permx:array[1..6] of string; permnx:array[1..6] of string; povx:array[1..100] of string);
var
p,k,j,i:integer;
x,nx:array[1..100] of string;
begin
for i:=1 to 100 do begin x[i]:=''; nx[i]:=''; end;
for j:=1 to n do
begin
for i:=1 to 100 do
begin
if length(povx[i])>0 then
begin
if pos(inttostr(j),povx[i])=0 then
begin
x[i]:=povx[i]+'*'+permx[j];
nx[i]:=povx[i]+'*'+permnx[j];
end;
if pos(inttostr(j),povx[i])>0 then
begin
x[i]:=povx[i];
end;
end;
end;
for k:=1 to 100 do
begin
if length(x[k])>0 then povx[k]:=x[k];
end;
for p:=1 to 100 do
begin
if length(nx[p])>0 then povx[kol(povx)+p]:=nx[p];
end;
end;
for i:=1 to 100 do
begin
if length(povx[i])>0 then write(povx[i],'+');
end;
end;
{основа програми}
BEGIN
writeln('Введіть кількість аргументів (від 2 до 6):');
readln(n);
writeln('Введіть функцію ДНФ від ',n,' аргументів:');
readln(s);
write('ДДНФ-',n,'=');
for i:=1 to 100 do
begin
a[i]:=token(s);
s:=tokost(s);
end;
args(n,s,permx,permnx,a);
END.