Kalkulator

 Zad. Napisz program kalkulator będący kalkulatorem licz¡cym w
Odwrotnej Notacji Polskiej. Program powinien czytać dane ze standardowego
strumienia wejściowego. Jeżeli wprowadzona dana jest liczbą program
dopisuje ją na wierzchołku stosu. Jeżeli jest jednym z symboli działań arytmetycznych
(+,-,*,/) program odczytuje i usuwa z wierzchołka stosu dwie liczby,
które traktuje jak argumenty działania, oblicza wynik działania i umieszcza
na wierzchołku stosu. Po ka»dej operacji wypisuje na ekranie wartości elementu
z wierzchołka stosu. Skorzystaj z klasy stack.



#include <iostream>
#include <sstream>
#include <stack>
int main()
{
// Liczby zapamiętują na stosie.
stack< double > stos;
// W pętli odczytuje dane wprowadzone przez użytkownika: liczby i symbole
// operacji arytmetycznych.

while ( true )
{
// Wypisują wartości liczby ze szczytu stosu.
if ( !stos.empty() )
{
cout << "[" << stos.top() << "]" << endl;
}
// Odczytują dane.
string s;
cin >> s;
if ( s != "+" && s != "-" && s != "*" && s != "/" )
{
// Skoro nie jest to symbol operacji arytmetycznej to powinna być
// to liczba.
istringstream is( s );
double d;
if ( is >> d )
{
stos.push( d );
}
else
{
cout << "Błędne dane!" << endl;
}
continue;
}
// Dla ka»dej operacji potrzebuj¦ dwóch liczb na stosie.
if ( stos.size() < 2 )
{
cout << "Za mało danych na stosie!" << endl;
continue;
}
// Obliczam wynik działania i zapamiętuję na stosie.
if ( s == "+" )
{
double suma = stos.top();
stos.pop();
suma += stos.top();
stos.pop();
stos.push( suma );
}
else if ( s == "-" )
{
double roznica = stos.top();
stos.pop();
roznica -= stos.top();
stos.pop();
stos.push( roznica );
}
else if ( s == "*" )
{
double iloczyn = stos.top();
stos.pop();
iloczyn *= stos.top();
stos.pop();
stos.push( iloczyn );
}
else if ( s == "/" )
{
double iloraz = stos.top();
stos.pop();
iloraz = stos.top() / iloraz;
stos.pop();
stos.push( iloraz );
}
}
return 0;
}