Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj dělám kalkulačku, ale nějak nevím jak do toho. Zadání se píše do řádku např.(4+5/3-9=).Příklad může být jakkoli dlouhý, dělení a násobení má přednost a mezery nehrajou roli tzn. když napíšu 4+1 5 ,tak se to bere jako 4+15. Pokud někdo poradí budu rád. Díky.
Offline
NetBeans je vývojové prostředí, chtělo by to napsat, jaký jazyk, i když je to taky trochu jedno. Pokud mezery nehrají roli, tak je na začátku všechny odstraň. Předpokládám, že tam můžou být závorky. Pak bych postupoval tak, že bych si našel nějakou vnitřní závorku, která už neobsahuje další závorky, tam bych našel operaci s nejvyšší prioritou a tu operaci provedl. Tedy například: (1+2*(3/(4+5/6)+7 * (8 - 9)). Našel bych jako první závorku (4+5/6) a provedl operaci 5/6, pak 5+0,83 atd. Asi bude vhodné převést textovou reprezentaci na nějakou stromovou reprezentaci, kde ve vnitřních uzlech budou operace a v listech konstanty. Něco jako tohle:
+ / \ 1 - / \ 2 3
pro výraz 1+(2-3).
Offline
↑ Shakill:
S čím si nevíš rady? Rozpoznat, jestli je to číslo nebo jiný znak? Podívej se třeba tady, v komentářích je hromada řešení (ale nekoukej na první příspěvek, ten je špatně).
Offline
↑ Shakill:
já toto dělal v osmičce nebo devíce v javě i se závorkama a mocninama... a doporučil bych ti nejprve si vše roydělit dle mezer
String [] vseKromMezer=vstup.split(" "); // toto snad fungovat bude // poté to složíš vstup=""; for(String s:vseKromMezer) vstup+=s;
máš vstup bez mezer
tak si to rozdělíš do polí dle známínek + a - (pokud tedy nemůžeš mít mocniny), ale nastává mírný problém se zápornými číslicemi, ale věřím
že si s tím už poradíš
String [] jenNasobeniADeleni=vstup.split("[+-]");
a teď víš že tam máš jen * nebo / a můžeš začít vyhodnocovat
cca tak že uděláš 1 operaci a cel0 to nahradíš výsledkem
např
1*2/3 vypočteš 1*2 a tento výraz nahradíš výsledkem (2) a máš pak 2/3 .... a takto pokračuješ až do zbláznění:)
dokonce to jde použít i na závorky:)... jen nevim ejslti ti to bude počítat správně i se zápornými čísly :)
Offline
↑ VojtechSejkora:
jo díky moc. Ještě jsem našel, že na tohle se používá shunting yard algoritmus a pak převést do postfixové notace.
Offline
↑ VojtechSejkora:
ještě mě napadá. Jak to bude když mezi znaménky bude dvojciferné číslo?
Offline
↑ Shakill:
tak tam budeš mít o číslo klasicky
máš vstup 5 * 69 + 3
ten program ti z toho udělá 5*69+3
pak to rozdělíš dle znamínek a dostaneš 5*69 a 3
pak to vynásobíš... a nahradíš ten výraz 5*69 za výsledek a k tomu přičteš 3
takto nějak jsem to programoval já...asi lze najít i lepší algoritmus
Offline