- •Постановка задачи
- •Краткие теоретические сведения
- •Алгоритм (входные данные, выходные данные)
- •Анализ результатов
- •Приложение (листинг программы)
- •1. Постановка задачи
- •2. Краткие теоретические сведения
- •1. Постановка задачи
- •2. Краткие теоретические сведения
- •1. Постановка задачи
- •2. Краткие теоретические сведения
Алгоритм (входные данные, выходные данные)
С клавиатуры вводятся значения функции.
Если значение всех уравнений равно нулю, то результат «1».
Проверяем все возможные варианты склеек.
Если я чейка 1,2,3,4 равны единице, то в результат записываем not(x1), при этом увеличиваем a[9].
Если ячейки 5,6,7,8 равны единице, то в результат идет x1, при этом увеличиваем a[10].
Если ячейки 1,2,5,6 равны единице, то в результат записываем not(x2), увеличиваем a[11].
Если ячейки 2,3,6,7 равны единице, то результат x3, увеличиваем a[12].
Если ячейки номер 3,4,7,8 равны единице, в результат x2, увеличиваем a[13].
Если ячейки 4,8,1,5 равны единице, в результат запишется not(x3), увеличиваем a[14].
Если ячейки 1,5 равны единице, а числа a[11] и a[14] равны нулю, то в ответ идет not(x3)not(x2).
Если ячейки 2,6 равны единице, а числа a[11], a[12] равны нулю, в ответ запишем x3not(x2).
Если ячейки 3,7 равны единице, а числа a[12], a[14] равны нулю, то запишем x2x3.
Если ячейки 4,8 равны единице, а числа a[13], a[14] равны нулю, то в ответ запишем not(x3)x2.
Если ячейки 1,4 равны единице, а числа a[9], a[14] равны нулю, то в результат запишем not(x1)not(x3).
И т.д.
Анализ результатов
Результаты получились верные. Правильность результатов проверена другими методами.
Вывод
Метод Карно является самым простым и понятным. Решение этим методом занимает меньше времени по сравнению с остальными методами. Программа использует алгоритм карт Карно для минимизации функции.
Приложение (листинг программы)
uses crt;
var a : array[1..256] of integer;
i,c: integer;
procedure vvv;
begin
if c=1 then
write(' v ');
if c=0 then
inc(c);
end;
procedure obr(var c1,c2,c3,c4,ci:integer; t:string);
begin
if (c1=1) and (c2=1) and (c3=1) and (c4=1) then
begin
vvv;
write(t);
inc(ci);
end;
end;
procedure obr1(var c1,c2,c3,c4,ci:integer; t:string);
begin
if (c1=1) and (c2=1) and (c3=1) and (c4=1) then
begin
write(t);
inc(ci);
inc(c);
end;
end;
procedure obr2(var c1,c2,c3,c4:integer; t:string);
begin
if (c1=1) and (c2=1) and (c3=0) and (c4=0) then
begin
vvv;
write(t);
end;
end;
begin
clrscr;
writeln('Metod kart Karno:');
writeln;
for i:=1 to 8 do
begin
writeln('Vvedite rezultat funkcii ', i,':');
readln(a[i]);
end;
c:=a[3]; a[3]:=a[4]; a[4]:=c;
c:=a[8]; a[8]:=a[7]; a[7]:=c;
c:=0;
writeln;
write('f(x1,x2,x3)=');
if (a[1]=1) and (a[2]=1) and (a[3]=1) and (a[4]=1) and (a[5]=1) and
(a[6]=1) and (a[7]=1) and (a[8]=1) then
begin
writeln('1');
exit;
end;
obr1(a[1],a[2],a[3],a[4],a[9],'not(x1)');
obr1(a[5],a[6],a[7],a[8],a[10],'x1');
obr(a[1], a[2], a[5], a[6], a[11], 'not(x2)');
obr(a[2], a[3], a[6], a[7], a[12], 'x3');
obr(a[3], a[4], a[7], a[8], a[13], 'x2');
obr(a[4], a[8], a[1], a[5], a[14], 'not(x3)');
obr2(a[1],a[5],a[11],a[14], 'not(x3)not(x2)');
obr2(a[2],a[6],a[11],a[12], 'x3not(x2)');
obr2(a[3],a[7],a[12],a[13], 'x3x2');
obr2(a[4],a[8],a[13],a[14], 'not(x3)x2');
obr2(a[1],a[4],a[9],a[14], 'not(x1)not(x3)');
obr2(a[5],a[8],a[10],a[14], 'x1not(x3)');
obr2(a[1],a[2],a[9],a[11], 'not(x1)not(x2)');
obr2(a[2],a[3],a[9],a[12], 'not(x1)x3');
obr2(a[3],a[4],a[9],a[13], 'not(x1)x2');
obr2(a[5],a[6],a[10],a[11], 'x1not(x2)');
obr2(a[6],a[7],a[10],a[12], 'x1x3');
obr2(a[7],a[8],a[10],a[13], 'x1x2');
readkey;
end.
Метод Квайна