program w C: Owrócona notacja polska

Ulala
Użytkownik
Użytkownik
Posty: 36
Rejestracja: 17 lis 2009, o 11:26
Płeć: Kobieta
Lokalizacja: Poznań
Podziękował: 1 raz

program w C: Owrócona notacja polska

Post autor: Ulala »

4. Napisz program wypisujacy tabele prawdy formuly rachunku zdan (zapisanej w RPN) z trzema zmien-
nymi: p, q, r; przykladowo, dla wejscia p q r ~| & Twój program powinien wypisywac na ekranie:

p q r wynik
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 1

Trzeba to zrobić za pomocą stosu. Operatory logiczne już mam zdefiniowane i ładnie działają tylko mam problem z tymi zdaniami p,q,r...
thralll
Użytkownik
Użytkownik
Posty: 224
Rejestracja: 29 maja 2008, o 23:13
Płeć: Mężczyzna
Lokalizacja: Łódź
Pomógł: 54 razy

program w C: Owrócona notacja polska

Post autor: thralll »

Odwrócona notacja polska jest prostsza niż normalny zapis znany ze szkoły.
Jeżeli napotkasz na liczbę to wrzucasz ja na stos jeżeli na znak to wykonujesz działanie na dwóch ostatnio otrzymanych liczbach.
Można trochę oszukać i zamiast wrzucać liczby na stos zrobić w ten sposób:
Wyczytywać po kolei znaki do trzech zmiennych dwóch liczbowych i jednej wyrażającej operator:
W notacji pierwszy znak jest liczbą więc od razu wpisujemy go pierwszej zmiennej liczbowej, dalej jeżeli trafimy na liczbę to wrzucamy ja do zmiennej liczbowej jeżeli na znak to zmienna wyrażająca operator.

I teraz najważniejsze jeżeli wyczytamy już do zmiennych dwie liczby i następny znak też jest liczbą to:
pierwszy zmienna przepisujemy do nowego ciągu zawierającego znak drugą przepisujemy do pierwszej a nowo napotkaną do drugiej.
Jeżeli wykonamy jakieś działanie to przepisujemy pozostałą część wyrażenia do nowego ciągu i zaczynamy od początku na nowym ciągu.

Domyślam się że to co napisałem nie jest bardzo łatwo zrozumiałe dlatego posłużę się przykładem:

c1: 2 3 4 5 6 + - * /
c2:
liczba1:
liczba2:
operator:

po kolej będziemy wyczytywać liczby w nawiasach podano wartości zmiennej w poprzednich przejściach pętli a _ miejsce do którego wyczytaliśmy zmienne

c1: 2 3 4 5 6 + _ - * /
c2: 2 3 4
liczba1: (2 3 4) 5
liczba2: (3 4 5) 6
operator:+

wynik działanie wrzucany jest na koniec c2 pozostała cześć c1 przepisywana do c2 dalej zmienne są zerowane i wykonywane c1=c2 c2='

c1: 2 3 4 11 - * /
c2:
liczba1:
liczba2:
operator:

teraz zaczynamy od nowa:

c1: 2 3 4 11 - * /
c2: 2 3
liczba1: (2 3) 4
liczba2: (3 4) 11
operator: -

c1: 2 3 -7 * /
c2: 2
liczba1: (2) 3
liczba2: (3) -7
operator: *

c1: 2 -21 /
c2:
liczba1: 2
liczba2: -21
operator: /

c1: -0,0952380952

mam nadzieję że jest to zrozumiałe, w razie problemów pytaj
pozdrawiam
thralll
ODPOWIEDZ