Java kalkulátor CASIO-kompatibilní 

Vždycky mě štvalo, když jsem seděl u počítače a potřeboval něco spočítat, že jsem si musel brát k ruce kalkulačku CASIO, protože program Kalkulačka, co je součástí Windows, resp. kcalc který je součástí KDE, je typickou ukázkou neergonomické aplikace. Pokud má počítač klávesnici se 104 tlačítky, je přinejmenším hloupé kalkulačku realizovat jako aplikaci se soft-buttony, do kterých se uživatel musí trefovat myší. Navíc každý trochu složitější výraz se díky absenci funkce závorek počítá poměrně obtížně a jedna paměťová buňka je mnohdy málo. Proto jsem kdysi dávno, na Vánoce 2004, jako semestrální úlohu z předmětu Algoritmizace, naprogramoval Kalkulátor v jazyku Java.

Je to kalkulátor bez grafického rozhraní, který však zvládne zpracovat libovolně složitý výraz s reálnými čísly (na komplexní aritmetiku jsem si netroufl :) ), přičemž v syntaxi odpovídá kalkulačkám CASIO. Navíc má k dispozici téměř neomezené množství paměťových míst, která mohou být libovolně pojmenována.

Princip výpočtu spočívá v ukládání jednotlivých operandů na zásobník, kde následné provádění operátorů vyjme ze zásobníku potřebný počet operandů, provede operaci a vrátí na zásobník výsledek. Nakonec v zásobníku zbude jediná hodnota, kterážto je výsledkem výpočtu. Při načtení operátoru se v závislosti na jeho prioritě buď vykoná okamžitě, nebo uloží na jiný zásobník - zásobník operátorů. Pokud je ve výrazu závorka, je vyhodnocovací algoritmus zavolán rekurzivně na obsah závorky :-)

Celý program jsem teď oprášil a přidal do něj logaritmy, na které jsem v původní verzi zapomněl. Bohužel musím konstatovat, že zdrojový kód je poměrně nelogicky rozčleněn do tříd, takže implementace nových funkcí obnášela editovat snad 4 třídy. Také jsem kdysi používal program JBuilder od firmy Borland, který jsem teď nehodlal instalovat. Místo toho jsem si vypůjčil skript build.sh z projektu ProjectX a použil jej ke kompilaci.

Takže nyní kalkulátor vydávám k dispozici, jednak jako zkompilovaný JAR-archiv (spustí se příkazem "java -jar Kalkulator.jar"), jednak jako zdrojový text přiměřeně pod licencí GPL (Program využívá funkci knihovny Sugar, která vznikla na Katedře počítačů FEL ČVUT pro podporu výuky X36ALG a ke které jsem nenašel ani licenční podmínky, ani zdrojové texty.) Pro jednoduché výpočty, kdy je zbytečné shánět Matlab či Maple, poslouží jistě lépe než zmiňované kalkulačky vestavěné v OS.
jsymb 

velice dekuje jsymb
Administrator (Oskar) 

Odkaz na zdrojový kód je v posledním odstavci článku. Zjednoduš si ho sám, aspoň pochopíš, jak vlastně program funguje. Předpokládám, že máš v plánu odevzdat to jako semestrálku z XD36ALG, tak je nanejvýš dobré tomu kódu aspoň rozumět.

BTW: Licence GPL ti zakazuje odstraňovat z díla informace o původním autorovi, takže bys tam měl nechat minimálně toto:
(c) 2004 Ondrej Caletka
Upraveno v 2007, vydano pod GNU GPL

Cajza 

Zdravim,
nebyl by jsi ochoten zredukovat tu kalkulacku jen na zakladni funkce.
+ - * / = CE C a poslat mi zrdojovy kod. Diky.
SiLK 

Musím tě pochválit, protože patříš mezi menšinu lidí, kteří když mají nějaký zajímavá problém, tak ho nehodí, za hlavu, ale vezmou to jako výzvu a vyřeší to po svém. Tímto způsobem se dá hodně naučit. Kdyby sis nechtěl nic programovat, potýkal jsem se s podobným problémem a nějčastěji používám bc -l nebo python. Zatím to zvládlo většinu operací , co jsem potřeboval, včetně hex a bin výpočtů.
jb 

Jéé, :-D přesně tohle jsem nedávno řešil. Ke své semestrálce z X36ALG jsem se nevrátil, ale vyzkoušel jsem snad všechny kalkulačky co jsem našel.

Pokud si stěžuješ na MS Calc, je dost dobrá MS Power Calculator, protože je to skoro kopie té tvé ;-)

V portage je dobrá pcalc, která nemá interaktivní režim, ale na výpočet 1+1 je ideální.

Komentáře

Pro tento záznam nejsou komentáře povoleny.