prevod reťazca (2+2)*2 na matematickú funkciu C++

Programovacie jazyky, rady, poradňa...
jakub199
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 339
Registrovaný: 21 sep 2005, 17:36
Bydlisko: Severna stena K2 druhy by
Kontaktovať používateľa:

prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa jakub199 »

Zdravím priatelia

Problematika je taká že je daný reťazec (2+2)*2 a mam ho previesť na výsledok 8.

Nemáte nejaký nápad ako to riešiť pomocou kontajnerov v C++, alebo aký vhodný výraz na vyhľadanie pomoci u uja googla :-)

ďakujem
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa BX »

Čože?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa harrison314 »

Sice netusim co myslis kontainermy, ale mas niekolko moznosti a ich vyber zavisi od tvojich znalosti teoretickej informatiky :

1, rekurzivne vyhonotenie vyrazu: zahrna v sebe nakodenie jednoducheho poolovacieho lexikalneho nalizatora ( cca 20 roadkov kodu ) a zopar rekurzivnych funkcii ( pre kazdy operator jednu )

2, vies co je to BNF vies co su to regexpi => flex + bison , takato kalkulacka ma v tom asi 10 riadkov a najdes ju nakodnu aj na wikipedii ako ukazka k bisonu

3, namiesto infoxoveho zapisu pouzijes reverznu polsku notaciu a budes vyraz vyhdnocovat cez zasobnik ( 20 riakov cele riesenie )

4, na vyhonotenie pouzijes nieco existujuce odporucam libky k jazyku Lua, cez to kludne zvladnes vyhnocovat aj komplexne cisla a ine veci napriklad vektory a pretazenie operatorov, v teme Programatorsky kutik mam link na kalkulacku ktora toho zvlada tiez vela a vyuziva Luu

//autoeditácia príspevku (29 Apr 2012, 13:32)
Odporucam moznost 3, je najlahsia a asi aj najlahsie pochopitelna
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa Viper »

WTF???
Mám to pochopiť tak, že máš string napr.

Kód: Vybrať všetko

String a =" (2+2)*2"
a ty ten string chceš vypočítať príklad napr.

Kód: Vybrať všetko

a = (2+2)*2 
????

Ak nie netuším ako to myslíš
jakub199
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 339
Registrovaný: 21 sep 2005, 17:36
Bydlisko: Severna stena K2 druhy by
Kontaktovať používateľa:

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa jakub199 »

Spravne
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa BX »

Ak to má byť univerzálne a nemôžte si pomáhať nadstavbami (ktoré radil harrison), tak odporučím shunting yard algoritmus, alebo nejaký stromček.

// (Aha teraz všímam, že harrison radil dobre. Tak som to len potvrdil)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa harrison314 »

BX: shunting yard je asi najgenialnejsi algoritmus aky som kedy videl, ale neodporucal som ho, lebo sam o sebe nedokaze skontrolovat syntax
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa BX »

Akože nedokáže?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa harrison314 »

On to prevdie na reverznu polsku notaciu aj z chybami, uz si neviem spomenut co to bolo, ci zatvorky alebo ze si uviedol neplatne operatory napr dve pluska zasebou, ale tu cyba sa dala najst az pri vycislovani reveznej polskej notacie alebo vytvarni stromu.
Preto k nemu treba aj syntakticky anlizator, alebo iny validator.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa BX »

No pokiaľ by šlo len o jednoduché zátvorky, plus/mínus a krát, tak sa to dá postrážiť, keď tomu človek trochu pomôže. Nebude to už tak pekné, ale dá sa.
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: prevod reťazca (2+2)*2 na matematickú funkciu C++

Príspevok od používateľa johny3212 »

Poradim ti, ako to mam ja spravene, ale ta iba navediem, riesenie bude na tebe.
Musis pretazit operator rovnasa (=) pre string. Potom budes moct spravit toto.

Kód: Vybrať všetko

int a = 2;
int b = 2;
string vysledok = (a + b)*2;
Ja to mam takto aj pre double, float, atd. a je to super vec. Najdi si ako to pretazit, ak to nespravis, potom ti to pohladam :). Su to mozno 4 riadky.
Napísať odpoveď