ahoj, může mi někdo poradit...mám udělat program, do kterýho se zadá řetězec znaků (např: 2+3*4-2+6....) a následně se spočtou. tušim jak by se to mělo dělat, ale nevim jak to sepsat.
Printable View
ahoj, může mi někdo poradit...mám udělat program, do kterýho se zadá řetězec znaků (např: 2+3*4-2+6....) a následně se spočtou. tušim jak by se to mělo dělat, ale nevim jak to sepsat.
pomocí shunting yard algoritmu to převedeš na RPN (postfix), který zpracovat je už jednoduché. Alternativou je odvodit si bezkontextovou gramatiku výrazů (což není jednoduchý, ale pro tohle se to určitě dá najít na googlu) a naimplementovat ji jako rekurzivní sestup. Podrobnější info viz wiki. A jo, není to nic jednoduchýho/rychlýho...
Vsechno zalezi od toho, jak dany retezec muze vypadat.
Obecne je to jednoducha uloha na prekladac.
Na tohle by mela stacit lexikalni a syntaticka analyza, abych vedel, co mi vubec muze prijit. Z toho se jiz da postavit strom a vyhodit vysledek.
Tady jsou i celkem pekne ukazky: http://cs.wikipedia.org/wiki/P%C5%99eklada%C4%8D http://cs.wikipedia.org/wiki/Bezkont...3%A1_gramatika
Pokud by gramatika byla dostatecne jednoducha, tak by to slo napsat i z hlavy. Vse tedy zalezi na dane gramatice.
EDIT: OK, moje reseni je obecne a o uroven niz, s tim Shunting-yard algorithm by to mela byt hracka. Keymaster K+
to je na mě poněku složité, v jave se nepohybuju dlouho. potřeboval bych poradit, něco s cyklava.atd. chtěl bych to udělat, tak že si zadanej výraz procházim cyklem a zjištůju o jaké operátory se jedná a u každého operátoru si vezmu předchozí a následující číslo u a poté vykonám danou operaci....
ať to uděláš jakkoliv, začni lexikální analýzou, tj. vyparsuj z toho stringu sérii tokenů (číslo, operátor), jinak se z toho pos****š. Ale ten shunting yard je nejjednodušší, věř mi...
Pokud jsi naprosto začátečník, tak jsi to buď dostal ve škole jako úkol, a seš v háji, protože ses měl líp učit, nebo to děláš jako soukromej projekt, takže máš možnost se na to buď vykašlat s tím že to zatím není nic pro tebe, nebo se do toho pustit a naučit se něco novýho ;)