Wyrażenie w ONP -Odwrotna Notacja Polska
Kod był wyświetlany 2442 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
Administrator WJL
PHP&SQL coded by NOVA-IT