Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

[Zadatak] Poljski kalkulator (obrnuta poljska notacija)

  • 3 odgovora
  • 5.943 pregleda

Najnovija ↓

[Zadatak] Poljski kalkulator (obrnuta poljska notacija) 19.12.2006. u 10:48 · pre 241 mesec #1
Kako da napisem poljski kalkulator pomocu jednog steka?
Ako niko ne zna kako dobro bi dosao i poljski kalkulator sa dva steka...

Ako neko ima gotov kod neka mi posalje na mail ili neka mi da lik gde mogu to da pogledam...

Hvala unapred!
Potpis
Svi hoce u raj, a niko nece da umre...
Re: [Zadatak] Poljski kalkulator (obrnuta poljska notacija) 19.12.2006. u 14:32 · pre 241 mesec
izmenjeno 1 put, poslednji put peromalosutra 19.12.2006. u 14:44
  1. peromalosutra19.12.2006. u 14:44zapis iz teksta poruke
#2
Koliko sam razumio hoces da napravis kalkulator izraza zapisanih u obrnutoj poljskoj notaciji.
Pa pseudo kod bi izgledao otprilike ovako:
Code:

stack s;
while (!kraj_izraza) {
   while(trenutni_karakter!=operand)
      s.push(trenutni_karakter);
   ucitaj operand;
   tmp=s.pop() operand s.pop();
   s.push(tmp);
}

Ovo pisem napamet pa mozda ima nekih gresaka. Sličan zadatak je bio i na BHIO takmičenju čini mi se. Proguglaj malo za "reversed polish notation", sigurno ces naci, a i ja cu ga bas uraditi da vidim kako to djeluje u praksi pa cu postovati kod ovdje.
Re: [Zadatak] Poljski kalkulator (obrnuta poljska notacija) 19.12.2006. u 15:04 · pre 241 mesec #3
Evo napisao sam program i radi na svim test primjerima koje sam mu zadao, iako ga nisam testirao na ni jednom ozbiljnijem izrazu...
Code:

/*
    obrnuta poljska notacija
*/

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <stack>
using namespace std;

int main(void) {
    stack <int> s;
    ifstream ulaz("ulaz.txt");
    char tmp[10];
    memset(tmp,'\0',10);
    while (ulaz>>tmp) {
        if (strlen(tmp)==1 && (tmp[0]=='+' || tmp[0]=='-' || tmp[0]=='*' || tmp[0]=='/')) {
           int rez=0,a,b;
            switch(tmp[0]) {
                case '+':
                    a=s.top();
                    s.pop();
                    rez=a+s.top();
                    s.pop();
                    break;
                case '-':
                    a=s.top();
                    s.pop();
                    rez=a-s.top();
                    s.pop();
                    break;
                case '*':
                    a=s.top();
                    s.pop();
                    rez=a*s.top();
                    s.pop();
                    break;
                case '/':
                    a=s.top();
                    s.pop();
                    rez=a/s.top();
                    s.pop();
                    break;
                    }
            s.push(rez);
            }
        else {
            int t=atoi(tmp);
            s.push(t);
            }
    }
    cout << "Rezultat je: " << s.top() << endl;
    ulaz.close();
    return 0;
}

Moze to vjerovatno i bolje, ali nemam bas mnogo vremena da sad sređujem kod. U svakom slučaju koristi se samo jedan stack (ni ne vidim zašto bi trebalo koristiti 2) a program radi samo sa integerima - ako ti treba nešto drugo neće ti biti problem da prepraviš.

ps: kod je u C++, zaboravio sam da je ovo C forum. Samo promjeni ulaz/uzlaz i još par sitnica ako ti baš treba C.
Re: [Zadatak] Poljski kalkulator (obrnuta poljska notacija) 08.01.2007. u 00:01 · pre 241 mesec #4
heh, problem i jeste u tome sto sam ja totalni pocetnik i pojma nemam koje su razlike izmedju c i c++! Mada, hvala u svakom slucaju puno si mi pomogao!!!

P.S.
Ako bas budes imao vremena napisi mi to i u cistom c-u! Hvala jos jednom!
Potpis
Svi hoce u raj, a niko nece da umre...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme