Aritmetika JavaSripttel - illusztráció és interaktív próba lehetőség
A JavaScript program bemenő adatát és a számítás eredményét egy form objektum segítségével jelenítjük meg. Legyen ez a form a következő: <form name="calculat1">
Az egyenlőség jeltől balra beírható bármely aritmetikai kifejezés, <input type="text"
name="A" size="22">
Az egyenlőség jelre kattintva - <input
type="button" value=" = " onclick="compute(document.calculat1)"> - az A mezőbe írt kifejezést az általunk megírt compute() JavaScript függvény kiértékeli,
majd az eredményt az egyelőség jeltől jobbra eső text tipusú input mezőbe írja, <input type="text"
name="result"
size="16">. Az erre szolgáló utasítás: form.result.value
= eval(form.A.value).
A jobb oldali mezőbe az alábbi konstansok és függvények tesztszőleges kombinációja írható:
Konstansok: PI, LN10
Függvények: pow(x,y), sqrt(x), log(x), round(x), tan(x), sin(x), cos(x).
pow(x,y) megfelel az xy-nak.
A 10-es alapú logaritmus függvényt, lg(x), a következőképpen definiálhatjuk:
function lg(x)
{with (Math)
r = log(x)/LN10;
return r }
round(x): egy valós számot kerekít a legközelebbi egész számra, a szokásos kerekítéssel.
A számok exponenciális alakban is leírhatók (pl. 0.000011 = 1.1*10-5 helyett 1.1e-5 -t írhatunk). Az e előtti valós szám 1.0 és 9.9999 közé kell hogy essen, az e után írjuk a 10 hatványkitevőjét. Az 1.1e-5 = 1.1*10-5. Ez az írásmód nagyon nagy vagy nagyon kicsi abszolút értékű számok megadásakor előnyös, pl. gondoljunk az Avogadro számra.
A szögfüggvények független változóját radiánban kell megadni. 45° szinusza = sin(45/180*PI)
Először nézzünk egy egyszerűbb változatot, amelyben nincs lehetőség kerekítésre. A JavaScript 16 jegyre pontosan számol, de azon túl kisebb valós szám ábrázolási pontatlanságok előfordulhatnak. Pl. érdemes ellenőrizni a sin(PI) eredményét. A pontos eredmény nulla, de a pontatlansága miatt egyes esetekben 1.2246063538223773e-16 a válasz. Ez jó közelítéssel nulla, de az input mezőben csak a szám eleje látható, ami megtévesztő lehet.
Ezt a problémát egy kerekítésre szolgáló függvény és a hozzátartozó gomb bevezetésével lehet megoldani. További finomítás, hogy ha az input mező üres egy alert ablakban: hibaüzenetet kapunk.
Lássuk függvény magját JavaScript forrás nyelven, amely a C++ nyelv szintaxisát alkalmazza:
{with (Math) { if (form.A.value == "") alert("A bal oldali mezőt ki kell tölteni!"); else { ke = prompt("Hány tizedesre / decimal places", 4); form.result.value = round(eval(form.A.value)*pow(10,ke))/pow(10,ke); } |
with (Math): használjuk a
matematikai könyvtárat if: ha a zárójelbe írt feltétel teljesül, vagyis A üres, akkor kinyílik egy figyelmeztető - alert - ablak, benne a megadott szöveggel. Ellenkező esetben egy prompt ablak nyílik, és a megadott ke tizedesjegyekre kerekíti az eredményt, amit a result mezőben megjelenít |
Így egy komplett tudományos számológép áll rendelkezésünkre, amely a with(Math) következménye, ha ezt nem írjuk be, akkor csak a négy alapműveletet lehet elvégezni. A feladatot az eval(...) JavaScript függvény végzi el, úgy hogy kiértékeli az argumentumként megadott szöveget, megkeresi benne a számjegyeket, a műveleti jeleket, a függvényeket és a zárójeleket. Ezeket balról jobbra haladva a precedencia szabályt felhasználva feldolgozza (pl. 3 + 2*5 = 13, itt a szorzást végi el előbb, és csak utána az összeadást).
A html forrásnyelvet, amely működik, módosíthatod az alábbi ablakban: