Układ kombinacyjny określony za pomocą przedstawionej tabeli stanów opisuje funkcja
| c | b | a | x |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
A. \( x = (\overline{c} \land b \land a) \lor (c \land \overline{b} \land a) \lor (c \land b \land \overline{a}) \)
B. \( x = (\overline{c} \land b \land a) \lor (\overline{c} \land \overline{b} \land a) \lor (c \land b \land \overline{a}) \)
C. \( x = (c \land \overline{b} \land \overline{a}) \lor (\overline{c} \land b \land \overline{a}) \lor (\overline{c} \land \overline{b} \land a) \)
D. \( x = (c \land \overline{b} \land \overline{a}) \lor (c \land \overline{b} \land a) \lor (c \land b \land \overline{a}) \)
Pytanie z egzaminu CKE, czerwiec 2017 (arkusz E.19-X-17.06).
Ta funkcja jest poprawnie zapisana jako suma iloczynów, czyli klasyczna postać kanoniczna funkcji logicznej. Z tabeli trzeba wybrać tylko te wiersze, w których wyjście x ma wartość 1. Widać, że dzieje się tak dla kombinacji cba = 011, 101 oraz 110. Dla 011 mamy c = 0, b = 1, a = 1, więc składnik to ¬c ∧ b ∧ a. Dla 101 otrzymujemy c ∧ ¬b ∧ a, a dla 110 mamy c ∧ b ∧ ¬a. Po połączeniu tych mintermów operacją OR dostajemy dokładnie: x = (¬c ∧ b ∧ a) ∨ (c ∧ ¬b ∧ a) ∨ (c ∧ b ∧ ¬a). Moim zdaniem to jeden z najpewniejszych sposobów analizy tabel prawdy, bo nie zgaduje się wzoru, tylko bierze się go wprost z tabeli. W praktyce, np. przy programowaniu PLC zgodnie z IEC 61131-3, taką funkcję można zbudować w języku LD jako trzy gałęzie równoległe, a w każdej gałęzi trzy styki szeregowe. Zmienna zanegowana odpowiadałaby stykowi normalnie zamkniętemu. To jest bardzo przydatne przy projektowaniu prostych blokad, warunków startu, sygnałów zezwolenia albo układów decyzyjnych w automatyce.
Przy analizie takiej tabeli najważniejsze jest, żeby nie patrzeć tylko na to, gdzie występują jedynki na wejściach, ale dokładnie sprawdzić cały wiersz: c, b, a oraz wynik x. Funkcja kombinacyjna nie ma pamięci, więc każdy stan wyjścia wynika tylko z aktualnej kombinacji wejść. Tutaj x przyjmuje wartość 1 wyłącznie dla kombinacji 011, 101 i 110. Jeżeli we wzorze pojawia się składnik c ∧ ¬b ∧ ¬a, to oznacza on stan 100, a w tabeli dla tego wiersza wyjście x = 0. Taki składnik nie może więc należeć do funkcji, bo wymusiłby jedynkę tam, gdzie układ powinien dawać zero. Podobnie problemem jest pominięcie składnika ¬c ∧ b ∧ a, bo odpowiada on kombinacji 011, dla której x rzeczywiście ma wartość 1. Częsty błąd polega też na pomyleniu kolejności zmiennych c, b, a z bardziej typowym zapisem a, b, c. Wtedy łatwo przepisać negacje przy złych literach i funkcja zaczyna opisywać zupełnie inny układ. Z mojego doświadczenia dobrze jest przy każdym iloczynie logicznym dopisać sobie obok kod binarny, np. ¬c ∧ b ∧ a to 011. W automatyce ma to duże znaczenie, bo źle przepisany warunek w programie PLC może np. załączyć siłownik albo napęd przy niewłaściwej kombinacji czujników. Dobra praktyka jest prosta: najpierw zaznaczyć wszystkie wiersze z x = 1, potem z każdego zrobić minterm, a dopiero na końcu ewentualnie upraszczać funkcję, jeśli jest taka potrzeba.