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.
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.