Differences
This shows you the differences between two versions of the page.
| informatyka:podstawy-dzialania-komputera:algebra_boola [2026/05/19 11:17] – created kawcix | informatyka:podstawy-dzialania-komputera:algebra_boola [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 1 Wstęp Algebra Boole' | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | |||
| + | Zaczniemy z jedną najbardziej podstawową rzeczą w informatyce. | ||
| + | Na pewno słyszałeś/ | ||
| + | To prawda, można powiedzieć że jedynka oznacza prąd, a zero jego brak. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Możemy powiedzieć, | ||
| + | Co możemy zrobić, mając tylko jedynki i zera? | ||
| + | Możemy np wykonać operację AND. (zwraca prawdę, tylko jeżeli dwie wartości to prawda) Jest to iloczyn czyli mnożenie. | ||
| + | |||
| + | ===== Operacja AND ===== | ||
| + | |||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | jak widać, AND zwróci prawdę, tylko kiedy dwie wartości są prawdą. | ||
| + | (0*0 = 0, 1*0 = 0 , 0*1 = 0 ,1*1 = 1) | ||
| + | Ta tabelka to tablica prawdy. A i B reprezentują zera i jedynki. | ||
| + | W tabelkach prawdy mamy wszystkie możliwości. | ||
| + | |||
| + | <button collapse=" | ||
| + | |||
| + | < | ||
| + | <code cpp > | ||
| + | #include < | ||
| + | |||
| + | using namespace std; | ||
| + | |||
| + | string login, haslo; | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | cout << "Podaj login: "; | ||
| + | cin >> login; | ||
| + | cout << "Podaj haslo: "; | ||
| + | cin >> haslo; | ||
| + | |||
| + | if ((login==" | ||
| + | { | ||
| + | cout<<" | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | cout<<" | ||
| + | } | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Operacja OR ===== | ||
| + | |||
| + | |||
| + | Kolejną bardzo popularną operacją jest OR ( lub ) zwraca prawdę, gdy przynajmniej jeden z dwóch argumentów to prawda. Jest to suma (0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 1). | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <button collapse=" | ||
| + | |||
| + | < | ||
| + | <code python > | ||
| + | # Sprawdzamy, czy podana liczba jest mniejsza od 5 lub większa od 10 | ||
| + | liczba = 3 | ||
| + | if liczba < 5 or liczba > 10: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Operacja NOT ===== | ||
| + | |||
| + | |||
| + | Operacja NOT czyli negacja po prostu odwraca wartość na przeciwną. Jest to działanie jednoargumentowe z angielskiego unary operation. Czyli przyjmuje tylko jeden argument. Jedynka staje się zerem, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Przykład połączenia różnych operacji ===== | ||
| + | |||
| + | |||
| + | Zacznijmy łączyć te operację. Przykład: | ||
| + | |||
| + | NOT(0 OR (1 AND 1)) | ||
| + | |||
| + | Czy potrafisz powiedzieć jaka będzie wartość tego wyrażenia ? | ||
| + | |||
| + | Mamy tutaj nawiasy, tak jak w matematyce. Pokazują one nam " | ||
| + | |||
| + | Okej. z naszej tabeli wiemy że 1 AND 1 zwróci nam 1 czyli zostaje nam | ||
| + | |||
| + | NOT(0 OR 1) | ||
| + | |||
| + | 0 OR 1 zwraca nam 1 czyli zostaje | ||
| + | |||
| + | NOT(1) - NOT(1) zwraca nam 0 . | ||
| + | |||
| + | a więc wartość wyrażenia NOT(0 OR (1 AND 1)) to 0 | ||
| + | |||
| + | ===== Pewne prawa algebry boola ===== | ||
| + | Wszystkie prawa pojawią się razem z wytłumaczeniem na innej stronie. Tutaj tylko taki wstęp. | ||
| + | |||
| + | |||
| + | W algebrze boola mamy pewne prawa,np **prawo przemienności** | ||
| + | |||
| + | (x AND Y) to to samo co (Y AND X) logiczne prawda ? Oba te wyrażenia zwrócą nam to samo. | ||
| + | |||
| + | np (1 AND 0) = 0 (0 AND 1) = 0 - to to samo | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | (X OR Y ) to to samo co (Y OR X) | ||
| + | np (1 OR 0) = 1 (0 OR 1) = 1 | ||
| + | |||
| + | |||
| + | ---- | ||
| + | **Prawo łączności** | ||
| + | |||
| + | |||
| + | |||
| + | (<color # | ||
| + | |||
| + | tak dla ujenoznacznienia, | ||
| + | |||
| + | w powyższym przykładzie zakładam że <color # | ||
| + | |||
| + | (<color # | ||
| + | |||
| + | (1 AND 0) = **0** | ||
| + | |||
| + | Wyszło nam 0, teraz z prawa łączności zamieniam " | ||
| + | |||
| + | ( (<color # | ||
| + | |||
| + | (0 AND 1) = 0 - wyszło to samo co wcześniej, czyli prawo łączności nie kłamie | ||
| + | |||
| + | Kolejne prawo łączności, | ||
| + | |||
| + | (X OR ( Y OR Z ) ) to to samo co ( (X OR Y ) OR Z ) | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | W innych źródłach, | ||
| + | |||
| + | (AB)C = A(BC) | ||
| + | |||
| + | ( (X AND Y) AND Z ) to to samo co (x AND (Y AND Z)) | ||
| + | |||
| + | Poprostu operacja AND to mnożenie więc można to zapisać jako mnożenie( w matematyce gdy między literami nie ma znaku, jest między nimi mnożenie) | ||
| + | |||
| + | To jakimi literkami sobie zdefiniujemy nasze zera i jedynki nie ma znaczenia oczywiście | ||
| + | |||
| + | W operacji OR mamy sumę więc | ||
| + | zamiast pisać X OR Y możemy zapisać X + Y ... | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | **prawo rozdzielności** | ||
| + | |||
| + | Abyś się przyzwyczaił podam tutaj dwie formy zapisu... | ||
| + | |||
| + | 1 prawo rozdzielnosci | ||
| + | |||
| + | ( X and ( Y OR Z ) ) = (X AND Y) OR (X AND Z) | ||
| + | |||
| + | ( A ( B + C) = AB + AC | ||
| + | |||
| + | 2 prawo rozdzielnosci | ||
| + | |||
| + | (X OR ( y AND z) ) = (x OR y) AND (X OR Z) | ||
| + | |||
| + | A + (BC) = (A + B) (A + C) | ||
| + | |||
| + | |||
| + | |||
| + | ---- | ||
| + | **prawa De Morgana** | ||
| + | |||
| + | - opisują wpływ negacji na pewne operacje | ||
| + | |||
| + | NOT(X AND Y) = NOT(x) OR NOT(Y) | ||
| + | |||
| + | NOT(X OR Y) = NOT(X) AND NOT(Y) | ||
| + | |||
| + | |||
| + | ===== Przykład zastosowania praw ===== | ||
| + | |||
| + | Możemy je wykorzystać do zmienienia formy wyrażenia, uproszczenia jej. | ||
| + | |||
| + | przykład | ||
| + | |||
| + | NOT( NOT( X ) AND NOT ( X OR Y ) ) | ||
| + | |||
| + | możemy użyć prawa De morgana aby zamienić NOT(X OR Y ) na NOT(X) AND NOT(Y) więc: | ||
| + | |||
| + | NOT< | ||
| + | |||
| + | następnie możemy użyć prawa łączności mamy więc: | ||
| + | |||
| + | NOT <color # | ||
| + | |||
| + | Następnie, nie zapisaliśmy tego " | ||
| + | |||
| + | NOT(NOT(X) AND NOT(Y)) | ||
| + | |||
| + | Znowu możemy użyć prawa De morgana | ||
| + | |||
| + | NOT( NOT( X ) ) OR NOT(NOT(Y)) | ||
| + | |||
| + | Nie zapisaliśmy tego " | ||
| + | |||
| + | X OR Y | ||
| + | |||
| + | Ten przykład miał pokazać, że możemy różnie manipulować wyrażeniami algebry boole' | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Teoria - nie potrzebujemy operacji OR aby stworzyć wszystkie możliwe wyrażenia ===== | ||
| + | |||
| + | bardziej ciekawostka. | ||
| + | |||
| + | Każda funkcja boola może być stworzona tylko za pomocą AND i NOT | ||
| + | |||
| + | przypomina nam się prawo de morgana | ||
| + | |||
| + | (X OR Y) = NOT(NOT(X) AND NOT(Y)) | ||
| + | |||
| + | wyrażenie OR może być zaprezentowane przez operacje | ||
| + | |||
| + | Czy możemy " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Oto NAND, czyli negacja AND | ||
| + | |||
| + | Dzięki samemu NAND, jesteśmy w stanie skonstruować wszystkie funkcję boola... jak ? | ||
| + | |||
| + | |||
| + | (X NAND Y) = NOT ( X AND Y ) | ||
| + | |||
| + | wiemy że nand to negacja AND | ||
| + | |||
| + | |||
| + | Skoro dzięki, AND i NOT możemy zbudować każde wyrażenie boola, | ||
| + | musimy wymyśleć jak zrobić NOT używając samego NAND | ||
| + | |||
| + | NOT (X) = (X NAND X) | ||
| + | |||
| + | prostę ? możesz spojrzeć na tablicę prawdy dla NAND i udowodnić sobie, że tak jest. | ||
| + | |||
| + | A jak z nand zrobić AND ? | ||
| + | |||
| + | (x AND y) = NOT(X NAND Y) | ||
| + | |||
| + | Skoro wiemy jak zrobić not z nand wychodzi nam: | ||
| + | |||
| + | (x and y) = (x nand x)(x NAND Y) | ||
| + | |||
| + | Jeśli chcielibyśmy zbudować komputer tylko z funkcji nand. Jest to możliwe... | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||