Cześć wszystkim! Napisałem program na ONP, jednak działa on tylko na cyfach 0-9, nie mam pojęcia jak się zabrać za to, aby działały wszystkie liczby naturalne oraz abym mógł oddzielać każdy znak i liczbę spacją, a program się nie wysypywał. Poniżej kod:
#include <iostream>
using namespace std;
struct element
{
int wartosc;
element *poprzedni;
};
element *dodaj (int liczba, element *wierzcholek)
{
element *wsk;
wsk = new element;
if (!wsk)
return 0;
wsk->wartosc=liczba;
wsk->poprzedni=wierzcholek;
return wsk;
}
element *usun (int *liczba, element *wierzcholek)
{
if (!wierzcholek)
return 0;
element *wsk;
*liczba=wierzcholek->wartosc;
wsk=wierzcholek->poprzedni;
delete wierzcholek;
return wsk;
}
void wypisz (element *wsk)
{
cout<<"aktualny stos: ";
while (wsk!=NULL)
{
cout<<wsk->wartosc<<"\t";
wsk=wsk->poprzedni;
}
cout<<endl;
}
main()
{
element *wierzcholek;
string s;
int x,y,k,w;
cout<<"Podaj wyrazenie ONP";
wierzcholek=NULL;
getline(cin,s);
int n=s.size();
wypisz(wierzcholek);
for (int i=0;i<n;i++)
{
if(isdigit(s[i]))
{
wierzcholek=dodaj(s[i]-48,wierzcholek);
wypisz(wierzcholek);
}
else
{
wierzcholek=usun(&k,wierzcholek);
x=k;
wierzcholek=usun(&k,wierzcholek);
y=k;
wypisz (wierzcholek);
switch (s[i])
{
case '+':w=y+x; break;
case '-':w=y-x; break;
case '*':w=y*x; break;
case '/':w=y/x; break;
}
wierzcholek=dodaj(w,wierzcholek);
wypisz(wierzcholek);
}
}
return 0;
}