Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
Rozpoczynaj nowe tematy i odpowiedaj na inne
Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
Dodawaj wydarzenia do kalendarza społecznościowego
Stwórz swój własny profil i zdobywaj nowych znajomych
Witam, jako że w tym dziale ich nie widziałem (a raz było mi to potrzebne ) to postanowiłem wstawić.
Bramka logiczna jest to element (układ) cyfrowy realizujący jakąś prostą funkcję logiczną, której zarówno argumentami jak i wartością (wyjściem) jest jedna z dwóch wartości 0 lub 1.
Oczywiście 0 i 1 to logiczny fałsz i prawda, bowiem w bramkach logicznych operujemy tylko na zmiennych typu bool.
Jak też wiadomo, w zmiennych typu bool obowiązują prawa algebry Boole'a, ale nie teraz o tym .
Dalsze oznaczenie: A, B - sygnały na wejściu (czyli 0 lub 1) Y - sygnał na wyjściu
rodzaje bramek:
1. NOT (Negacja)
tu po prostu negujemy sygnał w sposób następujący:
new bool: Y new bool: A Y = !A
Tablica prawdy
A | Y
---|---
0 | 1
1 | 0
2. AND (iloczyn logiczny)
Y = A * B
przykład: i tu przykład z menu do przetestowania dla niedowiarków:
Spoiler
#include <amxmodx> new bool: A[33] new bool: B[33] new bool: Y[33] public plugin_init() { register_plugin("Bramki Logiczne", "1.0", "Gwozdziu") register_clcmd("say /bramki", "bramki_clcmd") } public bramki_clcmd(id) { Y[id] =A[id] * B[id]
new tytul[128] format(tytul, 127, "\wWyjscie Y wynosi:\r %d^n\wA:\r %d^n\wB:\r %d", Y[id], A[id], B[id]) new menu = menu_create(tytul, "menu_bramek_handle")
if(A[id] == false) menu_additem(menu, "Ustaw wejscie A na 1") else menu_additem(menu, "Ustaw wejscie A na 0") if(B[id] == false) menu_additem(menu, "Ustaw wejscie B na 1") else menu_additem(menu, "Ustaw wejscie B na 0") menu_display(id, menu) } public menu_bramek_handle(id, menu, item) { switch(item) { case 0:{ if(A[id] == false) A[id] = true else A[id] = false bramki_clcmd(id) } case 1:{ if(B[id] == false) B[id] = true else B[id] = false bramki_clcmd(id) } } }
Tablica prawdy:
A B | Y
------|--
0 0 | 0
1 0 | 0
0 1 | 0
1 1 | 1
3. NAND (negacja iloczynu)
Y = !(A *
przykład:
Spoiler
#include <amxmodx> new bool: A[33] new bool: B[33] new bool: Y[33] public plugin_init() { register_plugin("Bramki Logiczne", "1.0", "Gwozdziu") register_clcmd("say /bramki", "bramki_clcmd") } public bramki_clcmd(id) { Y[id] = !(A[id] * B[id])
new tytul[128] format(tytul, 127, "\wWyjscie Y wynosi:\r %d^n\wA:\r %d^n\wB:\r %d", Y[id], A[id], B[id]) new menu = menu_create(tytul, "menu_bramek_handle")
if(A[id] == false) menu_additem(menu, "Ustaw wejscie A na 1") else menu_additem(menu, "Ustaw wejscie A na 0") if(B[id] == false) menu_additem(menu, "Ustaw wejscie B na 1") else menu_additem(menu, "Ustaw wejscie B na 0") menu_display(id, menu) } public menu_bramek_handle(id, menu, item) { switch(item) { case 0:{ if(A[id] == false) A[id] = true else A[id] = false bramki_clcmd(id) } case 1:{ if(B[id] == false) B[id] = true else B[id] = false bramki_clcmd(id) } } }
Tablica prawdy
A B | Y
------|--
0 0 | 1
1 0 | 1
0 1 | 1
1 1 | 0
4. OR (suma logiczna)
Y = A + B
przykład:
Spoiler
#include <amxmodx> new bool: A[33] new bool: B[33] new bool: Y[33] public plugin_init() { register_plugin("Bramki Logiczne", "1.0", "Gwozdziu") register_clcmd("say /bramki", "bramki_clcmd") } public bramki_clcmd(id) { Y[id] = A[id] + B[id]
new tytul[128] format(tytul, 127, "\wWyjscie Y wynosi:\r %d^n\wA:\r %d^n\wB:\r %d", Y[id], A[id], B[id]) new menu = menu_create(tytul, "menu_bramek_handle")
if(A[id] == false) menu_additem(menu, "Ustaw wejscie A na 1") else menu_additem(menu, "Ustaw wejscie A na 0") if(B[id] == false) menu_additem(menu, "Ustaw wejscie B na 1") else menu_additem(menu, "Ustaw wejscie B na 0") menu_display(id, menu) } public menu_bramek_handle(id, menu, item) { switch(item) { case 0:{ if(A[id] == false) A[id] = true else A[id] = false bramki_clcmd(id) } case 1:{ if(B[id] == false) B[id] = true else B[id] = false bramki_clcmd(id) } } }
Tablica prawdy
A B | Y
------|--
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 1
5. NOR (negacja sumy)
Y = !(A +
przykład:
Spoiler
#include <amxmodx> new bool: A[33] new bool: B[33] new bool: Y[33] public plugin_init() { register_plugin("Bramki Logiczne", "1.0", "Gwozdziu") register_clcmd("say /bramki", "bramki_clcmd") } public bramki_clcmd(id) { Y[id] = !(A[id] + B[id])
new tytul[128] format(tytul, 127, "\wWyjscie Y wynosi:\r %d^n\wA:\r %d^n\wB:\r %d", Y[id], A[id], B[id]) new menu = menu_create(tytul, "menu_bramek_handle")
if(A[id] == false) menu_additem(menu, "Ustaw wejscie A na 1") else menu_additem(menu, "Ustaw wejscie A na 0") if(B[id] == false) menu_additem(menu, "Ustaw wejscie B na 1") else menu_additem(menu, "Ustaw wejscie B na 0") menu_display(id, menu) } public menu_bramek_handle(id, menu, item) { switch(item) { case 0:{ if(A[id] == false) A[id] = true else A[id] = false bramki_clcmd(id) } case 1:{ if(B[id] == false) B[id] = true else B[id] = false bramki_clcmd(id) } } }
Tablica prawdy
A B | Y
------|--
0 0 | 1
1 0 | 0
0 1 | 0
1 1 | 0
6. XOR (EX-OR)
Y = A * !B + !A * B
przykład:
Spoiler
#include <amxmodx> new bool: A[33] new bool: B[33] new bool: Y[33] public plugin_init() { register_plugin("Bramki Logiczne", "1.0", "Gwozdziu") register_clcmd("say /bramki", "bramki_clcmd") } public bramki_clcmd(id) { Y[id] = A[id] * !B[id] + !A[id] * B[id]
new tytul[128] format(tytul, 127, "\wWyjscie Y wynosi:\r %d^n\wA:\r %d^n\wB:\r %d", Y[id], A[id], B[id]) new menu = menu_create(tytul, "menu_bramek_handle")
if(A[id] == false) menu_additem(menu, "Ustaw wejscie A na 1") else menu_additem(menu, "Ustaw wejscie A na 0") if(B[id] == false) menu_additem(menu, "Ustaw wejscie B na 1") else menu_additem(menu, "Ustaw wejscie B na 0") menu_display(id, menu) } public menu_bramek_handle(id, menu, item) { switch(item) { case 0:{ if(A[id] == false) A[id] = true else A[id] = false bramki_clcmd(id) } case 1:{ if(B[id] == false) B[id] = true else B[id] = false bramki_clcmd(id) } } }
Tablica prawdy
A B | Y
------|--
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0
7. XNOR (EX-NOR)
Y = A * B + !A * B
Spoiler
#include <amxmodx> new bool: A[33] new bool: B[33] new bool: Y[33] public plugin_init() { register_plugin("Bramki Logiczne", "1.0", "Gwozdziu") register_clcmd("say /bramki", "bramki_clcmd") } public bramki_clcmd(id) { Y[id] = A[id] * B[id] + !A[id] * B
new tytul[128] format(tytul, 127, "\wWyjscie Y wynosi:\r %d^n\wA:\r %d^n\wB:\r %d", Y[id], A[id], B[id]) new menu = menu_create(tytul, "menu_bramek_handle")
if(A[id] == false) menu_additem(menu, "Ustaw wejscie A na 1") else menu_additem(menu, "Ustaw wejscie A na 0") if(B[id] == false) menu_additem(menu, "Ustaw wejscie B na 1") else menu_additem(menu, "Ustaw wejscie B na 0") menu_display(id, menu) } public menu_bramek_handle(id, menu, item) { switch(item) { case 0:{ if(A[id] == false) A[id] = true else A[id] = false bramki_clcmd(id) } case 1:{ if(B[id] == false) B[id] = true else B[id] = false bramki_clcmd(id) } } }
Masz kilka błędów: XNOR: napisałeś że to jest Y = A * B + !A * B a to jest Y = A * B + !A * !B lub Y = A * B + !(A + zalezy jak się zastosuje De Morgana + Niejestem pewien czy mozna tak to zrobić w pawn ale moge być w błędzie bo to mi się wydaje że * to w pawn powinno być && a + to || więc chyba tak powinno wyglądać Y = A && B || !A && !B
Użytkownik Cypis' edytował ten post 19.03.2012 22:53
Niejestem pewien czy mozna tak to zrobić w pawn ale moge być w błędzie bo to mi się wydaje że * to w pawn powinno być && a + to || więc chyba tak powinno wyglądać Y = A && B || !A && !B
sam nie jestem pewien ich użycia, lecz póki co z &&i || spotkałem się tylko w warunkach.
Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline
Napisano 19.03.2012 23:44
& i | to nie to samo co && i || dodatkowo != to jest zwykla negacja(NOR) dla rownosci dla mnie temat zbędny bo operacje bitowe kto powinien znac ten zna kto nie zna to ma od tego tutorial a bramki logiczne chyba sie tutaj nie odnajdą chyba ze chcesz zacząć serie tutoriali z elektroniki
0
Manual ponad wszystko, konsola ponad manual :&
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
Jeżeli temat zbędny to można wywalić, a ja potrzebowałem coś w stylu bramki XOR, wiem że warunkami można zrobić (tak mi się w bańce wydaje) ale za dużo bym miał do pisania