Zadatak: Program za rješavanje izraza u postfix notaciji

Teme vezane za console/GUI programiranje u C/C++ jeziku
11 post(ov)a • Stranica: 1/2.1, 2

Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la Armin » 13 lip 2012, 23:55

Nedavno sam radio programčić u kome je trebalo unijeti N brojeva i N-1 znakova, te bi na osnovu toga program izvršio proračun.

Primjer:

2 3 5 + - će dati 2+3-5=0

Nakon nekog vremena muke shvatio sam da je najefikasniji način da se ovaj zadatak riješi rekurzivno. I program je 98% ispravno radio.

Kako biste vi riješili ovaj problem u što manje linija koda?
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la HepeK » 14 lip 2012, 16:34

Jel' prosljeđujes jedan po jedan broj i znak ili proslijedis niz ili string?
"Ko nema u glavi ima na internetu"
Što čujem - poštujem, dok ne vidim - ne vjerujem.

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la nemesis » 14 lip 2012, 18:10

daj nam source code svog zadatka

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la Armin » 16 lip 2012, 16:19

Source ćete dobit kasnije, dok nađem. :D

Pa, ti programu dajes niz brojeva, npr. 5 4 3 2 1, i prosljedjujes mu zajedno sa tim proizvoljne znakove kojih mora biti za jedan manje od broja brojeva, npr. - + - +, što program treba tretirati respektivno kao 5 - 4 + 3 - 2 + 1.

Tako da je najlogičnije da pustiš da program ovo tretira sve kao niz karaktera koji imaju razmak (" ") između njih. Mislim da sam dovoljno pomogao.
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la miki » 31 ožu 2013, 21:19

Pocetnik sam tako da ovaj program nije bas efikasan i sabijen :)
Posto neznam sta znaci rekuzivan uradio sam kako znam.
cpp code
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
char operacija;
int broj1,broj2;
w:printf("Unesite brojeve i operaciju \n");
scanf("%d %d %c",&broj1,&broj2,&operacija);
switch(operacija)
{
case '+' : printf("Zbir je : %d \n",broj1+broj2); break;
case '-' : printf("Razlika je : %d \n",broj1-broj2); break;
case '/' :
if(broj2 == 0) goto w;
{
printf("Kolicnik je : %d \n",broj1/broj2); break;
}
case '*' : printf("Proizvod je : %d \n",broj1*broj2); break;
default : printf("Nekorektan unos ! ");
}
system("PAUSE");
return EXIT_SUCCESS;
}
Izrada kompletnih C/C++ zadataka, javite se na krsticm1996@gmail.com

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la HepeK » 03 tra 2013, 21:40

Rekurzivan znaci samopozivajući.

Recimo ako funkcija poziva samu sebe - rekurzivna funkcija.
"Ko nema u glavi ima na internetu"
Što čujem - poštujem, dok ne vidim - ne vjerujem.

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la Armin » 04 tra 2013, 19:00

Šta ako bi htio uradit faktorijel nekog broja ? Morao bi napravit for petlju, koja bi mnozila sve brojeve od tog broja do 1, dekrementirajuci taj broj. To se jednostavnije može uradit rekurzivno, tj. napravis da funkcija poziva samu sebe, i postavis uslov zaustavljanja.

Kod: Označi sve

int rek(int a)
{
if(a>1) return a * rek(a-1);
else return 1;
}



Primjer pozivanja.

Kod: Označi sve
printf("%d", rek(5));
//Rezultat (ne pravi ispis, vec diskusija)
5 * rek(4) = 5 * 4 * rek(3) = 5 * 4 * 3 * rek(2) = 5 * 4 * 3 * 2 * rek(1) = 5 * 4  * 3 * 2 * 1 = 120
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la gagiD » 11 srp 2013, 14:30

Ja sam ovo uradio ovako:

cpp code
include<iostream>
using namespace std;
int main () {
int br_clanova , rezultat;
cout<<"Unesite broj clanova niza: "<<endl;
cin>>br_clanova;
int brojevi[br_clanova];
for ( int i = 0 ; i < br_clanova ; i++ ) {
cout<<"Unesite "<<i+1<<". clan niza"<<endl;
cin>>brojevi[i];
}
rezultat=brojevi[0];
for ( int i = 1 ; i < br_clanova ; i++ ) {
if ( i / 2 != 0 ) {
rezultat=rezultat + brojevi[i];
}
else {
rezultat=rezultat - brojevi[i];
}
}
cout<<"Rezultat je"<<rezultat<<endl;
return 0;
}



Pokusat cu i rekurzivno :D

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la maxwell » 11 srp 2013, 19:09

gagiD je napisao/la:Ja sam ovo uradio ovako:

cpp code
#include<iostream>
using namespace std;
int main () {
int br_clanova , rezultat;
cout<<"Unesite broj clanova niza: "<<endl;
cin>>br_clanova;
int brojevi[br_clanova];
for ( int i = 0 ; i < br_clanova ; i++ ) {
cout<<"Unesite "<<i+1<<". clan niza"<<endl;
cin>>brojevi[i];
}
rezultat=brojevi[0];
for ( int i = 1 ; i < br_clanova ; i++ ) {
if ( i / 2 != 0 ) {
rezultat=rezultat + brojevi[i];
}
else {
rezultat=rezultat - brojevi[i];
}
}
cout<<"Rezultat je"<<rezultat<<endl;
return 0;
}



Pokusat cu i rekurzivno :D


Ne mozes staticki niz definirati sa varijablom.

Re: Zadatak: Program za rješavanje izraza u postfix notaciji

PostPostao/la gagiD » 11 srp 2013, 21:36

maxwell je napisao/la:Ne mozes staticki niz definirati sa varijablom.


Nisam te bas najbolje razumio :/


11 post(ov)a • Stranica: 1/2.1, 2

Na mreži

Trenutno korisnika/ca: / i 1 gost.