Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Poljski kalkulator (obrnuta poljska notacija)

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Poljski kalkulator (obrnuta poljska notacija)

[ Pregleda: 4603 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Lekic
E moj prijatelju
SER BIH

Član broj: 15506
Poruke: 142
*.raf.edu.yu.



Profil

icon [Zadatak] Poljski kalkulator (obrnuta poljska notacija)19.12.2006. u 09:48 - pre 210 meseci
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!
Svi hoce u raj, a niko nece da umre...
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
*.teol.net.



+148 Profil

icon Re: [Zadatak] Poljski kalkulator (obrnuta poljska notacija)19.12.2006. u 13:32 - pre 210 meseci
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.

[Ovu poruku je menjao peromalosutra dana 19.12.2006. u 14:44 GMT+1]

 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
*.teol.net.



+148 Profil

icon Re: [Zadatak] Poljski kalkulator (obrnuta poljska notacija)19.12.2006. u 14:04 - pre 210 meseci
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.

 
Odgovor na temu

Lekic
E moj prijatelju
SER BIH

Član broj: 15506
Poruke: 142
80.93.248.*



Profil

icon Re: [Zadatak] Poljski kalkulator (obrnuta poljska notacija)07.01.2007. u 23:01 - pre 209 meseci
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!
Svi hoce u raj, a niko nece da umre...
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Poljski kalkulator (obrnuta poljska notacija)

[ Pregleda: 4603 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.