Forum » Programiranje » [C#]Računanje iz stringa?
[C#]Računanje iz stringa?
Reliant2 ::
Pozdravljeni!
Če imam string str = "-3*(2/(3+2))+3", kako bi lahko na kar se da enostaven način to izračunal?.. z vsemi matematičnimi pravili, kot so upoštevanje predznakov, oklepajev etc..
Najlepša hvala!
reliant
Če imam string str = "-3*(2/(3+2))+3", kako bi lahko na kar se da enostaven način to izračunal?.. z vsemi matematičnimi pravili, kot so upoštevanje predznakov, oklepajev etc..
Najlepša hvala!
reliant
jeti51 ::
Namig:Izraz pretvori v drevo, potem pa rekurzivno izračunaj vrednosti posameznih poddreves, dokler ne prideš do korena in ti na koncu ostane samo še rezultat, ki je ravno vrednost tvojega izraza.
Alpheus ::
v katerem jeziku pa? če se gre za php lahk hitro rešiš z eval() ukazom.
VI VERI VENIVERSUM VIVUS VICI.
Reliant2 ::
samo potem bi bilo recimo na tem primeru : -3*(2/(3+2))+3
|-3+| |2/| |3+2| |*3|
reimo da je to drevo..
potem izračunam
|-3+| |2/5| |*3|
|-3+| |2/5| |*3|
potem pa nastane problem prednosti pred množenjem in obratno
.. huh.. zdaj se pa že sam sebe mešam..
|-3+| |2/| |3+2| |*3|
reimo da je to drevo..
potem izračunam
|-3+| |2/5| |*3|
|-3+| |2/5| |*3|
potem pa nastane problem prednosti pred množenjem in obratno
.. huh.. zdaj se pa že sam sebe mešam..
jeti51 ::
Zakaj pa? Sestaviš ustrezno gramatiko, sintaksni analizator zanjo ti pa zgradi drevo izpeljav. Če je gramatika pravilno sestavljena, je tudi drevo potem pravilno.
matjazx ::
Ja če maš lahko izraz recimo v postfiksni obliki pol ni problem zračunat
pregleduješ izraz z leve proti desno in..
1 cifro daš na sklad
2 če ne določi za kater operator gre potegni dve stevili s sklada in na njih uporabiš dan operator, rezultat pa shraniš na sklad
3 prazen - maš rezultat
pregleduješ izraz z leve proti desno in..
1 cifro daš na sklad
2 če ne določi za kater operator gre potegni dve stevili s sklada in na njih uporabiš dan operator, rezultat pa shraniš na sklad
3 prazen - maš rezultat
jeti51 ::
No, kako boš pa izraz dal v postfiksno obliko?
Ko si enkrat že tako daleč, da je vse pripravljeno, da ga "samo še izpišeš v postfiksno obliko", ga lahko takrat namesto tega že kar direktno začneš računati. Namreč postfiksna oblika ni nič drugega, kot samo na en drug način zapisano drevo, ki predstavlja izraz.
Ko si enkrat že tako daleč, da je vse pripravljeno, da ga "samo še izpišeš v postfiksno obliko", ga lahko takrat namesto tega že kar direktno začneš računati. Namreč postfiksna oblika ni nič drugega, kot samo na en drug način zapisano drevo, ki predstavlja izraz.
Zgodovina sprememb…
- spremenil: jeti51 ()
Reliant2 ::
a ima kdo c#.net pa bi mi spisal en primer, lepo bi prosil.. ? Jaz se že več ur matram s tem..
jernejl ::
Reševanje takih izrazov je zelo preprosta zadeva
Pred kratkim sem v eni temi tukaj že pisal o tem in podal kratek primer, zato tega tu ne bi ponavljal.
(ideja pa je, da imaš dva sklada: na enega zlagaš operande, na drugega operatorje. Pri tem si moraš določiti prioritete posameznih operatorjev (npr. * ima višjo prioriteto kot +)).
Ker se to obravnava tudi na faksu pri študiju računalništva, je tukaj še en link do prosojnic (powerpoint) predavanj, kjer je opisana ideja in nekaj primerov:
prosojnice
Pred kratkim sem v eni temi tukaj že pisal o tem in podal kratek primer, zato tega tu ne bi ponavljal.
(ideja pa je, da imaš dva sklada: na enega zlagaš operande, na drugega operatorje. Pri tem si moraš določiti prioritete posameznih operatorjev (npr. * ima višjo prioriteto kot +)).
Ker se to obravnava tudi na faksu pri študiju računalništva, je tukaj še en link do prosojnic (powerpoint) predavanj, kjer je opisana ideja in nekaj primerov:
prosojnice
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Postfiksni izraz - računanjeOddelek: Šola | 1742 (1381) | lebdim |
» | [C]Baza z enačbamiOddelek: Programiranje | 1247 (875) | kuall |
» | Za programerske teoretikeOddelek: Programiranje | 8820 (5622) | Jerry000 |
» | Binary tree; kater zapis je pravilen?Oddelek: Programiranje | 1293 (1179) | |CyGNUS-x |
» | Podatkovne strukture kolokviji?Oddelek: Šola | 1845 (1699) | whatever |