2023-11-26 16:41:25 +01:00
|
|
|
<!doctype html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8" http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
<title>CALC</title>
|
|
|
|
<style>
|
|
|
|
tr, td { border-collapse: collapse; }
|
|
|
|
table { width:100%; border-collapse: collapse; text-align: center; }
|
|
|
|
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
|
|
|
textarea.emscripten { font-family: monospace; font-size: 16px; width: 100%; overflow-x: scroll; white-space: pre; background: black; color: rgb(0,255,0);}
|
|
|
|
.frame1 { width: 96%; margin: 0; padding: 10px; background-color: #FFFFC0; border: 10px solid #F0C0F0; }
|
|
|
|
.canvas { width: 100%; height: 65vh; background-color: black; }
|
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<script type="module" src="index.js"></script>
|
|
|
|
<div class="frame1"><canvas id="canvas" class="canvas"></canvas></div>
|
|
|
|
<div class="frame1"><input id="buttonTest" type="button" value="Submit"></div>
|
|
|
|
<div class="frame1">
|
|
|
|
<table><tr>
|
|
|
|
<td width="40%"><textarea class="emscripten" id="input" rows="10" spellcheck="false"></textarea></td>
|
|
|
|
<td><textarea readonly class="emscripten" id="stdout" rows="10" spellcheck="false"></textarea></td>
|
|
|
|
</tr></table>
|
|
|
|
</div>
|
|
|
|
<div class="frame1">
|
|
|
|
<h2>Kalkulátor s grafickým výstupem.</h2>
|
|
|
|
<p>Když jsem přepisoval z nudy syntax highlighter pro C++ z pythonu do C++, zjistil jsem, že regulární výrazy
|
|
|
|
jsou kupodivu v tom pythonu efektivnější. V tomto ohledu je STL knihovna asi dost naprd. Ale vzpomněl jsem si
|
|
|
|
na prastarý pár flex a bison, který umí nejen regulární výrazy, ale jde s tím parsovat dost jednoduše gramatika.
|
|
|
|
Mělo by to jít i v C++, ale příklady na webu byly dost zamotané a bylo nutné použít STL, kterou jsem pro tento
|
|
|
|
účel neměl k dispozici. Vyřešilo se to jednoduše - vygenerovaný C-čkový kód se přeloží jako C++, přičemž je
|
|
|
|
nutné povypínat něktetré warningy.
|
|
|
|
</p>
|
|
|
|
<p>Je to tedy jednoduchý kalkulátor, jde napsat výraz s normální notací (+-*/^), obsahující čísla (i desetinná),
|
|
|
|
který to normálně vyhodnotí. Postupně přibyly proměnné (jen písmenkové řetězce), které mohou mít i rozsah ve
|
2023-11-27 15:19:22 +01:00
|
|
|
kterém se pak výraz zobrazí jako funkce. Syntaxe je <br>
|
|
|
|
proměnná = dolní_mez , horní_mez , počet_bodů<br>
|
|
|
|
a použije se pro vodorovnou osu, poslední řádek je pak výraz, jehož hodnota je na svislé ose. Ostatní "proměnné"
|
|
|
|
jsou pak fakticky jen pojmenované konstanty. Zobrazovaných funkcí (výrazů) může být víc, první určí limity
|
|
|
|
zobrazení na ose "y". Komentáře jsou ve složených závorkách. Vložené matematické funkce
|
2023-11-26 16:41:25 +01:00
|
|
|
jsou sin(), cos(), exp(), log() (přirozené).<b>Na konci výrazu musí být ENTER.</b>
|
|
|
|
</p>
|
|
|
|
<p>Jsou v tom chyby, celé je to vlasně hloupost, celé by to šlo napsat v javascriptu mnohem jednodušeji,
|
2023-11-27 15:19:22 +01:00
|
|
|
ale v podstatě to funguje a jde si podle toho udělat představu, jak daná funkce vypadá. Odkaz na zdrojáky v licenci
|
|
|
|
MIT <a href="https://code.nolog.cz/Kizarm/Calculator" target="_blank">přikládám</a>. Pro kompilaci je použit jen
|
|
|
|
clang a jím kompilovaná C-čková knihovna <a href="https://sourceware.org/newlib/" target="_blank">newlib</a>.
|
2023-11-26 16:41:25 +01:00
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>
|