Výpočet funkcie logických obvodov pomocou karnafovej mapy

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategórie: KMP (Programy mladých programátorů)

Autor: Ján Benkovič
web: www.tbteacher.host.sk

Program: Karnaf.pas
Soubor exe: Karnaf.exe

Výpočet funkcie logických obvodov pomocou karnafovej mapy.
{ KARNAF.PAS                             Copyright (c) Jan Benkovic }
{ Vypocet funkcie logickych obvodov pomocou karnafovej mapy.        }
{                                                                   }
{ Datum:18.10.2001                             http://www.trsek.com }
 
uses crt;
var
 karnafova_mapa : array[1..2,1..2] of byte;
 cislo : byte;
 jednotka:byte;
 x,y : byte;
 
begin
 clrscr;
 jednotka:=0;
 Writeln('Zadavaj cisla do mapy');
 for x := 1 to 2 do
  for y := 1 to 2 do
   begin
    repeat
     Write('X : ',x,' Y : ',y,' : ');
     Readln(cislo);
    until (cislo=1) or (cislo=0);
    if cislo=1 then inc(jednotka);
    karnafova_mapa[x,y]:=cislo;
   end;
 Writeln('Dakujem, pokracujte lubovolnou klavesou.');
 readkey;
 Writeln;
 Writeln;
 Writeln;
 Writeln('Karnafova mapa :');
 Writeln;
 Writeln;
 Writeln('                A    ');
 Writeln('    ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄż');
 Writeln('    ł       ł       ł');
 Writeln('    ł   ',karnafova_mapa[1,2],'   ł   ',karnafova_mapa[2,2],'   ł');
 Writeln('    ł       ł       ł');
 Writeln('    ĂÄÄÄÄÄÄÄĹÄÄÄÄÄÄÄ´');
 Writeln('    ł       ł       ł');
 Writeln('  B ł   ',karnafova_mapa[1,1],'   ł   ',karnafova_mapa[2,1],'   ł');
 Writeln('    ł       ł       ł');
 Writeln('    ŔÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄŮ');
 Writeln;
 if jednotka=0 then Writeln('Vysledna funkcia je : 0');
 if jednotka=1 then
  begin
   if karnafova_mapa[1,1]=1 then Writeln('Vysledna funkcia je : An*B');
   if karnafova_mapa[1,2]=1 then Writeln('Vysledna funkcia je : An*Bn');
   if karnafova_mapa[2,2]=1 then Writeln('Vysledna funkcia je : A*Bn');
   if karnafova_mapa[2,1]=1 then Writeln('Vysledna funkcia je : A*B');
  end;
 if jednotka=2 then
  begin
   if (karnafova_mapa[1,1]=1)and(karnafova_mapa[2,1]=1) then Writeln('Vysledna funkcia je : B');
   if (karnafova_mapa[1,2]=1)and(karnafova_mapa[2,2]=1) then Writeln('Vysledna funkcia je : Bn');
   if (karnafova_mapa[2,2]=1)and(karnafova_mapa[2,1]=1) then Writeln('Vysledna funkcia je : A');
   if (karnafova_mapa[1,2]=1)and(karnafova_mapa[1,1]=1) then Writeln('Vysledna funkcia je : An');
   if (karnafova_mapa[1,2]=1)and(karnafova_mapa[2,1]=1) then Writeln('Vysledna funkcia je : An*Bn + A*B');
   if (karnafova_mapa[2,2]=1)and(karnafova_mapa[1,1]=1) then Writeln('Vysledna funkcia je : A*Bn + An*B');
  end;
 if jednotka=3 then
  begin
   if (karnafova_mapa[1,2]=1)and(karnafova_mapa[1,1]=1)and(karnafova_mapa[2,1]=1) then Writeln('Vysledna funkcia je : An+B');
   if (karnafova_mapa[1,2]=1)and(karnafova_mapa[2,2]=1)and(karnafova_mapa[2,1]=1) then Writeln('Vysledna funkcia je : A+Bn');
   if (karnafova_mapa[2,2]=1)and(karnafova_mapa[2,1]=1)and(karnafova_mapa[1,1]=1) then Writeln('Vysledna funkcia je : A+B');
   if (karnafova_mapa[1,1]=1)and(karnafova_mapa[1,2]=1)and(karnafova_mapa[2,2]=1) then Writeln('Vysledna funkcia je : An+Bn');
  end;
 if jednotka=4 then Writeln('Vysledna funkcia je : 1');
 readkey;
end.