Poslao: 26 Maj 2019 21:05
|
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
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 26 Maj 2019 22:17
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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.
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.
|
|
|
|
Poslao: 27 Maj 2019 20:37
|
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..
|
|
|
|
Poslao: 27 Maj 2019 22:11
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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.
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. 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.
|
|
|
|
Poslao: 29 Maj 2019 14:22
|
offline
- Pridružio: 09 Feb 2015
- Poruke: 79
|
Hvala , pokusacu sve sto mi padne na pamet pa cemo videti
|
|
|
|
|
Poslao: 29 Maj 2019 17:34
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- 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.
|
|
|
|
Poslao: 30 Maj 2019 19:07
|
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
|
|
|
|
|
Poslao: 02 Jun 2019 00:42
|
offline
- Pridružio: 09 Feb 2015
- Poruke: 79
|
Da oduzima*
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..
|
|
|
|