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

Poljski kalkulator

[es] :: C programiranje :: Poljski kalkulator

[ Pregleda: 1232 | Odgovora: 3 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Lekic
E moj prijatelju
SER BIH

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



Profil

icon Poljski kalkulator19.12.2006. u 09:48

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...
19.12.2006. u 09:48 

peromalosutra
Ivan Rajkovic
Banjaluka

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

Jabber: peromalosutra@elitesecurity.org
Sajt: computer-stuff.freehostia..


Profil

icon Re: Poljski kalkulator19.12.2006. u 13:32
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]
ivan@ivan-desktop:~$ ./encrypt.run
*** stack smashing detected ***: ./encrypt.run terminated
Aborted (core dumped)
19.12.2006. u 13:32 

peromalosutra
Ivan Rajkovic
Banjaluka

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

Jabber: peromalosutra@elitesecurity.org
Sajt: computer-stuff.freehostia..


Profil

icon Re: Poljski kalkulator19.12.2006. u 14:04
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.
ivan@ivan-desktop:~$ ./encrypt.run
*** stack smashing detected ***: ./encrypt.run terminated
Aborted (core dumped)
19.12.2006. u 14:04 

Lekic
E moj prijatelju
SER BIH

Član broj: 15506
Poruke: 140
80.93.248.*



Profil

icon Re: Poljski kalkulator07.01.2007. u 23:01
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...
07.01.2007. u 23:01 

[es] :: C programiranje :: Poljski kalkulator

[ Pregleda: 1232 | Odgovora: 3 ]

Postavi temu Odgovori

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