Matematické Fórum

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

#1 17. 12. 2010 15:47

Shakill
Příspěvky: 48
Reputace:   
 

Kalkulačka - NetBeans

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

 

#2 17. 12. 2010 16:50

Lukee
Administrátor
Místo: Opava
Příspěvky: 1853
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Kalkulačka - NetBeans

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:

Code:

        +
      /   \
     1     -
          / \
         2   3

pro výraz 1+(2-3).


2+2=4

Offline

 

#3 17. 12. 2010 16:57

Shakill
Příspěvky: 48
Reputace:   
 

Re: Kalkulačka - NetBeans

↑ Lukee:
Je to v jazyce Java. A je to bez závorek. Jen střídavě operand,operator,...

Offline

 

#4 17. 12. 2010 16:59

Shakill
Příspěvky: 48
Reputace:   
 

Re: Kalkulačka - NetBeans

[re]p153246|Lukee[bylo mi řečeno, že to musím brát jako řetězec a vždy zkoumat jestli ten prvek je číslo nebo znak. A s tím si nevím rady.:(

Offline

 

#5 17. 12. 2010 17:27

Lukee
Administrátor
Místo: Opava
Příspěvky: 1853
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Kalkulačka - NetBeans

↑ 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ě).


2+2=4

Offline

 

#6 18. 12. 2010 18:33

VojtechSejkora
Příspěvky: 176
Reputace:   
 

Re: Kalkulačka - NetBeans

↑ 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

Code:

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íš

Code:

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

 

#7 20. 12. 2010 08:41

Shakill
Příspěvky: 48
Reputace:   
 

Re: Kalkulačka - NetBeans

↑ 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

 

#8 20. 12. 2010 08:50

Shakill
Příspěvky: 48
Reputace:   
 

Re: Kalkulačka - NetBeans

↑ VojtechSejkora:
ještě mě napadá. Jak to bude když mezi znaménky bude dvojciferné číslo?

Offline

 

#9 26. 01. 2011 08:19

VojtechSejkora
Příspěvky: 176
Reputace:   
 

Re: Kalkulačka - NetBeans

↑ 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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson