Kod był wyświetlany 2611 razy.
/*
Name: Wyrazenie w ONP
Copyright: GPL GNU
Date: 04-11-10 15:08
Description:
Odwrotna notacja polska to postfiksowy sposob zapisu wyrazen (znak
wykonywanej operacji umieszczany jest za operandami). Program oblicza
wartosc podanego wyrazenia w ONP (mozliwe operacje: dodawanie, mnozenie,
odejmowanie, dzielenie).
*/
#include <stdio.h>
#include <stack.h>
void zdejmijArg(float *a,float *b,stack<float> *stos);
int main()
{
float a,b;
char wejscie[80]; // limit - 80 znakow
memset(wejscie,0,80);
stack<float> stos;
printf("\n\n\tPodaj wyrazenie w ONP do obliczenia: ");
fgets(wejscie,80,stdin);
for(int i=0;i<80;i++)
{
if(wejscie[i]>'0'&&wejscie[i]<'9') // jesli argument to liczba
{
stos.push(atoi(&wejscie[i])); // trafia na stos
while(wejscie[i+1]>'0'&&wejscie[i+1]<'9')
i++; // przesuniecie indeksu o ilosc znakow tej liczby
continue;
}
if(wejscie[i]=='+') // jesli argument to operator
{
zdejmijArg(&a,&b,&stos); // zdejmujemy dwa argumenty
stos.push(b+a); // i odkladamy wynik na stos
continue;
}
if(wejscie[i]=='-')
{
zdejmijArg(&a,&b,&stos);
stos.push(b-a);
continue;
}
if(wejscie[i]=='*')
{
zdejmijArg(&a,&b,&stos);
stos.push(b*a);
continue;
}
if(wejscie[i]=='/')
{
zdejmijArg(&a,&b,&stos);
stos.push(b/a);
}
}
a=stos.top();
printf("\n\n\tWynik to: %.3f",a);
getchar();
return 0;
}
void zdejmijArg(float *a,float *b,stack<float> *stos)
{
*a=stos->top();
stos->pop();
*b=stos->top();
stos->pop();
return;
}
Pobierz plik tekstowy