Ĺadny brzuch
Dane: liczba zespolona (rekord re, im :real; end)
Operacje:
a ) wkładanie na stos, zdejmowanie ze stosu.
b ) dodawanie, odejmowanie i mnożenie pary z wierzchołka stosu
W programie głównym wykonać ciąg operacji zgodnie z zasada odwrotnej notacji polskiej. Np. obliczanie wyrażenia c:=a+(b*c) to w odwrotnej notacji polskiej
c:=a b c * + , tj. wkładamy na stos a potem b potem c i zastępujemy parę z wierzchołka najpierw iloczynem, a potem sumą).
Proszę o wszelkie wskazówki, które pomogą rozwiązać mi to zadanie ;) Poniżej kod programu, który ma ułatwić stworzenie tego powyżej...
program Lista1; {$APPTYPE CONSOLE} {$O-,Q+,R+} uses SysUtils; type TDane = string[40]; //Element listy type PElListy = ^TElListy; TElListy=record Dane :TDane; Nast :PElListy; end; TLista = PElListy; procedure inicjuj(var Lista:TLista); begin Lista := nil; end; procedure dopisz(var Lista:TLista; const D :TDane); var w :PElListy; begin //zał. :nowy el. dokładam z przodu w := Lista; new(Lista); Lista^.Dane := D; Lista^.Nast := w; end; procedure usuń(var Lista:TLista); var w :PElListy; begin while Lista <> nil do begin w := Lista; Lista := w^.Nast; dispose(w); end; end; procedure wypiszWszystkie(Lista:TLista); var w :PElListy; begin w := Lista; while w <> nil do begin writeln(w^.Dane); w := w^.Nast; end; end; var Lista :TLista; begin inicjuj(Lista); dopisz(Lista,'Pierwszy wpis'); dopisz(Lista,'xxxxxxx'); dopisz(Lista,'1234456'); wypiszWszystkie(Lista); usuń(Lista); readln; end.
jaki masz problem? musisz napisac zdejmowanie ostatniego obiektu ze stosu. a samo wykonanie wyrazenia dziala tak, ze gdy natrafisz na liczbe, to dodajesz na stos, gdy natrafiasz na operacje, to zdejmujesz ostatni i przedostatni element ze stosu, i wykonujesz na nich dzialanie, i wynik dodajesz na stos. po wykonaniu calego wyrazenia na stosie powinien zostac jeden obiekt - wynik.