Skip to content

Instantly share code, notes, and snippets.

@dafr32
Created January 6, 2016 19:59
Show Gist options
  • Save dafr32/50fd3944ae37f4c6d0c4 to your computer and use it in GitHub Desktop.
Save dafr32/50fd3944ae37f4c6d0c4 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
/*
Odwrotna notacja polska ONP
Koncepcja:
1. Utworzenie struktury elementu listy
2. Utworzyć wskaźnik na pierwszy element listy
3. Utworzyc funkcję Push()
4. Utworzyc funkcję Pop()
5. Pobrać ciąg ONP z klawiatury
6. Obliczyć wartość działania
*/
//1. Utworzenie struktury elementu listy
struct T_element{
int liczba;
T_element *nastepny;
};
//2. Utworzyć wskaźnik na element
T_element *pierwszy = NULL;
//połóż na stos
void Pop(int parametr1)
{
T_element *tmp = new T_element; // utworzenie nowego dynamicznego wskaźnika
// na nieistniejącą zmienną
// 2. przypisać mu wartości parametru
tmp->liczba = parametr1;
// 3. Umieszczenie elementu na początku listy
tmp->nastepny = pierwszy;
pierwszy = tmp;
}
//zdejmij ze stosu
int Push()
{
T_element *tmp = pierwszy;
pierwszy = pierwszy->nastepny;
// jeśli poszukiwane imie jest w pierwszym elemencie
return tmp->liczba;
}
int main()
{
string dzialanie;
int kod;
cout <<"Podaj dzialanie:"; cin>>dzialanie;
for(int i=0;i<dzialanie.length();i++)
{
kod = dzialanie[i];
if (kod-48>=0 && kod-48<=9)
Pop(kod-48);
else
{
int p2=Push();
int p1=Push();
switch(kod)
{
case 42: // *
Pop(p1*p2);
break;
case 43: // +
Pop(p1+p2);
break;
case 45: // -
Pop(p1-p2);
break;
case 47: // /
Pop(p1/p2);
break;
}
//cout<<pierwszy->liczba<<endl;
}
}
cout << "wynik ="<<Push();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment