logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pascal - Kalkulator Logiczny na bramkach and, nand, nor, or, xor

arturek1208 25 Lis 2012 12:04 5166 10
REKLAMA
  • #1 11572011
    arturek1208
    Poziom 9  
    Posty: 38
    Witam serdecznie,
    potrzebuję zrobić program w pascalu, który będzie liczył wartości tylko zero-jedynkowe w dodatku LOGICZNIE.
    Wiem jak funkcjonują poszczególne bramki etc. Ale nie wiem jak zdefiniować by program np liczył and z dwóch liczb binarnych. Czyli po dodaniu dla przykładu 0001 and 0110 poda wynik. Na tej samej zasadzie nand, nor, or i xor.

    Rozumiem że najlepiej będzie jak program będzie pracował na dwóch tablicach, co mam zrobione razem z menu etc.
    Przykład wczytania dla ANDa w moim programie:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    I na tym stanąłem. Nie wiem co dalej.
    Czy ktoś mógłby pomóc może?

    Pozdrawiam:)
  • REKLAMA
  • #2 11572054
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    No więc, aby wyliczyć wynik bramki AND należy użyć polecenia and, aby obliczyć wynik OR należy użyć or. Aby wyliczyć XOR należy użyć... no zgadnij czego :) A teraz coś trudniejszego: NAND = not (tab1[i] or tab2[i]), a NOR = ... No to zadanie dla Ciebie :)

    Trzeba tylko zastrzec jedną rzecz - wszystkie podane operacje pracują równolegle na wszystkich bitach liczby (dla integer będzie to np 32-bity). Więc aby otrzymać wynik tylko dla ostatniego bitu trzeba ten bit wyciągnąć najlepiej mnożąc przez 00..001b (czyli w kodzie and 1).
  • REKLAMA
  • #3 11572110
    arturek1208
    Poziom 9  
    Posty: 38
    Dzięki za tak szybką odpowiedź!
    Czyli mam porównywać każdy element tablicy 1 do każdego elem. tablicy drugiej?
    Dwa, a co w przypadku, jeśli jedna liczba ma więcej znaków od drugiej?

    Proszę umieszczać kod w znacznikach syntax. Opcja Listing kodu.

    P.S. Shift szwankuje? Jest jeszcze drugi ;) w ostateczności Caps Lock. Zdanie rozpoczynamy z wielkiej litery. Błędy (ostatni raz) poprawiłem. [adamas_nt]
  • REKLAMA
  • #4 11573170
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    To zależy co chcesz osiągnąć. Założyłem, że jest to seria dwuwejściowych bramek. Wówczas porównujesz odpowiednie pary. Jeśli miałaby to być wielowejściowa bramka, to wystarczy jedna tablica, której elementy będziesz porównywał.

    Jeśli tablice są różnej długości - dla pierwszego przypadku myślę, że powinieneś nie dopuścić do takiego wprowadzenia danych.
  • #5 11577245
    arturek1208
    Poziom 9  
    Posty: 38
    Dzięki za pomoc, oraz za uwagę od Admina:)

    Wracając.
    Właśnie problem polega na tym że liczby mogą mieć różne długości (ich zakres to od 1 do 100) . W dodatku na konsultacjach dowiedziałem się że wynik obliczenia ma być zadeklarowany w tablicy nr 3! Wiem jak działają bramki, ale nie wiem jak to napisać. Możecie mnie jakoś jaśnie nakierować? Bo obawiam się że nie dam rady.

    Dwa- program powinien być uruchamiany z wiersza poleceń w sposób:
    program.exe 10101 and 1110
    Ale to sobie już chyba odpuszczę bo w życiu takiego czegoś jeszcze nie robiłem a czas z tym mam do soboty, no i też cały program mam napisany w sposób ciągły, z menu etc.
  • #6 11577335
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Ad 2. Po prostu w ParamStr(1) i ParamStr(2) masz ciągi tekstowe z tych parametrów. Wystarczy tylko przerobić poszczególne literki na cyfrę.

    Ad 1. Przykład dla obliczenia pierwszej wartości z parametrów (zakładam, że są) i zapisania wyniku do tablicy:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #7 11577817
    arturek1208
    Poziom 9  
    Posty: 38
    Czyli rozumiem że dwie tablice do wczytania nie są potrzebne?
    wczytać liczbe a i b jako normalny string, kolejno zrobić konwersję do integer'a, i ustawić for'a by wpisał wszystko do tablicy? Dobrze myślę?
    StrToInt? Nie działa;/
  • #8 11577932
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Tak, dobrze.

    A, jeśli to Pascal taki dla DOS to się faktycznie rozpędziłem z tym StrToInt. Ale w tym przypadku możesz użyć po prostu
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #9 11577991
    arturek1208
    Poziom 9  
    Posty: 38
    Mam tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    I kurcze nie umiem zakumać jak to rozciachać..
  • #11 11631388
    arturek1208
    Poziom 9  
    Posty: 38
    Dziękować! Dostałem 4 :)
    Sory za zwłokę ale miałem trochę urwanie głowy.

    Kolejne pytanie (bo chcę to programowanie opanować).
    Jak zrobić by program sprawdzał czy dany element tablicy jest pusty? jeśli tak to żeby była możliwość zapisania do niego, jeśli nie to przejdzie do kolejnego i sprawdzi czy wolny. Jeśli tak to zapisze do niego jeśli nie to poleci do kolejnego.. i tak w kółko :)

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w stworzeniu programu w Pascalu, który oblicza wartości logiczne dla bramek AND, NAND, NOR, OR i XOR na podstawie dwóch liczb binarnych. W dyskusji poruszono kwestie dotyczące wczytywania danych, konwersji z ciągów tekstowych na liczby oraz operacji na tablicach. Uczestnicy sugerują, aby program porównywał odpowiednie elementy tablic, a także zwracają uwagę na różnice w długości wprowadzanych liczb. Wskazówki dotyczące implementacji obejmują użycie funkcji do konwersji oraz operacji logicznych na bitach. Użytkownik uzyskuje pomoc w zakresie struktury programu oraz sposobu obsługi danych wejściowych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA