Skocz do zawartości

tomekpilat

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O tomekpilat

  • Ranga
    2/10
  1. @Zealota Nie ma znaczenia wtedy i tylko wtedy, gdy "operator" (w matematyce nazywa się to działanie algebriczne, a słowo operator ma kompletnie inne znaczenie) posiada właściwość łączności. Dlatego mnożenie czy dodawanie możemy wykonywać w dowolnej kolejności. Tak samo w algebrze Boole'a iloczyn (AND) lub suma (OR) też może być wykonywana w dowolnej kolejności. Jednak NAND i NOR już nie posiada tej właściwości. Spróbuj z 1 NAND 1 NAND 0, najpierw od lewej, czyli (1 NAND 1) NAND 0, a później od prawej, czyli 1 NAND (1 NAND 0) i zobacz jakie otrzymasz wyniki. Tak samo spróbuj z "1 NOR 0 NOR 0". Możesz też zmontować odpowiednie układy. Tak jak wspomniał @ethanak operator potęgowania też jest "pułapką". Zwracanie uwagi na kolejność może pomóc w uniknięciu szukania, czemu nasz układ lub kod nie działa tak jak chcemy (np. załeżenie od lewej do prawej zawodzi, gdy spróbujemy potęgować w np. Pythonie, gdzie to działanie jest od "prawej do lewej"). Tak samo A*B nie zawsze się równa B*A. Kto zgadnie kiedy? @Treker Wyrażenie "a NAND b NAND c" to takie metametyczne "zachowanie niezdefiniowane" znane np. programistom C i C++ (legendarne i = i++ + ++i;), więc możliwe, że w ramach pewnej optymalizacji ustalili, że algorytm bierze "od prawej do lewej" i użytkownik będzie wpisywał jednoznacznie sformułowane działania (lub w podstawówkach za granicą mówią, że dodajemy od prawej do lewej). PS.: Pytanie o to co zrobić z takim "1 NAND 1 NAND 0" jest całkiem dobre do zadania na rozmowie o pracę kandydatowi na stanowisko programisty.
  2. @Elvis Proponuję jednak wyjście z matematyką ponad poziom podstawówki, szczególnie w kwestii rachunku zdań.
  3. @Treker Często w szkołach spotyka się stwierdzenie, że działania należy wykonywać od lewej do prawej, jednak nie ma to poparcia w matematyce wyższej. Obowiązuje zasada, że nawiasy można opuszczać tylko jeśli ich usunięcie nie spowoduje braku jednoznaczności zapisu (nawet spotkałem się ze stwierdzeniem, że reguła od lewej do prawej to źle zrozumiana zasada opuszczania nawiasów). Dlatego w literaturze matematycznej używa się kreski poziomej jako operacji dzielenia lub ukośnik zawsze otacza się nawiasami, aby nikt się nie zastanawiał, czy a/bc to (a/b)c lub jednak a/(bc) (lub jak podaje angielska wiki ustala się to w tekście). Rozważając jeden operator, tak jak w tym przypadku, możemy opuścić nawiasy, nie tracąc przy okazji jednoznaczności zapisu, tylko jeśli jest on łaczny. Działania mnożenia, dodawania, sumy lub iloczynu logicznego możemy zatem zapisać jako a*b*c, a + b + c, a OR b OR c i a AND b AND c, ponieważ sa one łączne i opuszczenie nawiasów nie zmieni ich znaczenia. Jednak działanie NAND (oraz NOR) nie spełnia już warunków łączności, ponieważ istnieją a,b,c takie, że (a NAND b) NAND c ≠ a NAND (b NAND c) i z punktu widzenia matematyki jest tu pewien "syntax error" po opuszczeniu nawiasów. Moim zdaniem warto dodać nawiasy, aby usunąć niejednoznaczność. Można też wspomnieć, że w przypadku NAND i NOR nawiasy jednak mają znaczenie.
  4. Wydaje mi się, że w równaniu drugim jest błąd. Upraszczając je, poprzez obliczenie, że (1 NOR 0) = NOT (1 OR 0) = NOT 1 = 0 dostajemy 1 NAND 1 NAND 0, które w zależności od kolejności wykonania działań NAND daje sprzeczne wyniki, ponieważ zanegowany iloczyn (lub dysjunkcja ) nie posiada właściwości łączności, tzn. a NAND (b NAND c) ≠ (a NAND b) NAND c (źródło 1 lub źródło 2 na stronie 3). Widać to na wspomnianym przykładzie: 1 NAND (1 NAND 0) = 1 NAND 1 = 0 (1 NAND 1) NAND 0 = 0 NAND 0 = 1 Zatem wyniki są sprzeczne i rozwiązania nie ma (lub jest w stanie nieustalonym, dopóki ktos nie spróbuje tego rozwiązać ).
  5. Moim zdaniem użycie funkcji atoi(const char * str) w instrukcji switch jest błędne. Problem pojawia się, gdy oprócz cyfr wysyłamy coś innego, np. literkę "b", wtedy nie może zostać poprawnie wykonana konwersja z łańcucha znaków na typ int. Można to znaleźć w opisie funkcji: Wtedy przechodzimy błędnie do kodu odpowiadającemu za odebranie 0. Tutaj wystarczy po prostu, zamiast konwertować cyfrę na liczbę coś takiego, użyć wartości bezpośrednio. switch(byte_received) { case '0': ... case '1': ... default: ... }
  6. Dzięki. Poszukam w swoim takiej możliwości. Kupiłem tani model przystawki oscyloskopowej na USB (Hantek 6022BE) do celów edukacyjnych i nie ogarnąłem jeszcze wszystkich możliwości.
  7. Cześć, W jaki sposób odcięliście 5V podczas pomiarów napięcia wyjściowego przetwornicy impulsowej oscyloskopem? Do drugiego kanału zostało podpięte napięcie referencyjne 5V oraz użyta funkcja obliczania różnicy na obu kanałach?
  8. Tak, wszystkie ćwiczenia z tej lekcji udało mi się wykonać.
  9. Chyba zepsułem jeden z tranzystorów BS170. Mam nadzieję, że nie będą potrzebne obydwa w dalszej części kursu. Zepsuty tranzystor przepuszcza prąd ze spadkiem napięcia ok. 3V bez przyłożonego napięcia do bazy. Co ciekawe miernik wskazuje, że niepodłączony nigdzie tranzystor ma napięcie między drenem a źródłem ponad 20mV. Oczywiście pokazuje też zwarcie. Nie pokazuje zwarcia między bramką i źródłem, ani bramką i drenem. Dodatkowo po zwarciu drenu i bramki tranzystor się zatyka.
×
×
  • Utwórz nowe...