c# vrednost textbox-a

1

c# vrednost textbox-a

offline
  • Pridružio: 09 Feb 2015
  • Poruke: 79

Da li je moguce ako da kako , da izracunam izraz (npr. 15*8-9/3) koji je unet u textbox?
Tupim mozak vec neko vreme i ne pada mi nista na pamet..
Hvala Smile



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Naravno da je moguće. Morao bi samo da napraviš parser koji će od stringa da ti napravi expression tree koji ćeš zatim da izvršiš. Bez toga, tj. samo od sebe teško da će moći. Smile

Ako ti pak nije bitno kako to radi, već ti je bitno samo da radi, potraži neku 3rd party biblioteku, verujem da možeš lako da nađeš nešto što zadovoljava tvoje potrebe.



offline
  • Pridružio: 09 Feb 2015
  • Poruke: 79

Pa bilo bi dobro da ne koristim nikakad 3rd party
Mislio sam da splitujem taj string , ali bunim se kada imam slozeniji izraz..

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Pa nažalost, to i nije baš trivijalan problem. Nije ni neka nuklearna fizika, ali bi morao malo da se pomučiš, da uložiš malo više vremena. Dobra polazna tačka je da vidiš neka postojeća rešenja, pa da odatle ukradeš ideju. Cela poenta je da odradiš dekompoziciju problema na jednostavnije probleme, odnosno da osmisliš model kako bi to predstavio. Parsiranje bi trebalo da bude lakši deo rešenja celog problema. Smile

Elem, kada su u pitanju aritmetički izrazi, u OOP pristupu obično se polazi od apstrakcije u vidu klase Expression. Ta klasa bi trebalo recimo da ima apstraktnu metodu Calculate() koja bi trebalo da vrati broj. Onda odatle izvodiš ConstantExpression koji vraća konstantnu vrednost, ParameterExpression koji predstavlja parametre u izrazu (npr. x, y itd) i BinaryExpression koji je model za binarnu aritmetičku operaciju, te ima pokazivače na levi i desni operand koji su tipa Expression, kao i aritmetičku operaciju koju predstavlja (Add, Sub, Mul, Div). ParameterExpression za tvoj primer nije neophodan, i dovoljno je da implementiraš preostala dva, i sa tim već imaš sasvim solidan kalkulator.

Što se parsiranja tiče, ima dosta mogućih rešenja, ali je problem takav da obično splitovanje stringa teško da će da završi posao. Smile Ja bih recimo počeo od pisanja gramatike za model aritmetičkih izraza, pa bih iskoristio neki alat za generisanje parsera na osnovu te gramatike. To je zapravo pravi način kako bi trebalo rešavati ovaj problem. Ima jedan pomalo star, ali zanimljiv i jednostavan alat za to: https://www.codeproject.com/Articles/28294/a-Tiny-Parser-Generator-v1-2 Sintaksa gramatike je jednostavna (ako ti je taj domen makar malo poznat, ako nije - ima brdo literature i za to), i za ovo što tebi treba sasvim je dovoljan.

offline
  • Pridružio: 09 Feb 2015
  • Poruke: 79

Hvala , pokusacu sve sto mi padne na pamet pa cemo videti Very Happy

offline
  • Pridružio: 04 Jul 2011
  • Poruke: 5424

Kao što Vasa reče, to nije trivijalan problem.
Jedan od načina je i postfiksna, tj. obrnuta poljska notacija. Prođeš kroz izraz, prebaciš ga u postfiks formu, i posle je mnogo lakše.
https://sh.wikipedia.org/wiki/Obrnuta_poljska_notacija

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

E bravo, dobro se Ivanče setio. Tako možeš da pojednostaviš problem, jer se ne moraš baviti modelom izraza. Btw, imaš već podršku za model Expression-a u sklopu System.Linq.Expressions namespace-a. Treba samo da napraviš parser. Very Happy

offline
  • Pridružio: 09 Feb 2015
  • Poruke: 79

Uz pomoc dva indikatora , jedan za znak a drugi za broj uspeo sam da na neki nacin "resim" problem , napravio sam posebnu funkciju 3 parametara , 2 broja i jedan char
Medjutim ne funkcionise bas najbolje jer iz nekog razloga samo kada je operacija minus radi lepo tj. kada je opracija * / + , iz nekog razloga funkcija ne povlaci oba vec samo jedan broj
Kod je malo duzi ako zatreba postavicu

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napravio si kalkulator koji samo može da sabira? Very Happy I to je nešto! Sad ga debagiraj lepo i popravi da rade sve operacije. Smile

offline
  • Pridružio: 09 Feb 2015
  • Poruke: 79

Da oduzima* Very Happy
Medjutim ne moze npr. da se izracuna ovako 100*4+5*10, to bi ispalo onda 400+5*10 odnosno 405*10 sto nije dobro..

Ko je trenutno na forumu
 

Ukupno su 1090 korisnika na forumu :: 36 registrovanih, 5 sakrivenih i 1049 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., bokisha253, Boris90, BORUTUS, CikaKURE, darkangel, doktor1964, FileFinder, Georgius, ILGromovnik, jackreacher011011, Još malo pa deda, Kruger, ladro, Lošmi, Mi lao shu, milutin134, miodrag, Mixelotti, mocnijogurt, nebkv, Panter, Parker, Pikac-47, procesor, raptorsi, skvara, Srle993, taz1cl, tmanda323, Toper, Tvrtko I, vathra, Vlada1389, yrraf, zlaya011