Funktionen zum Rechnen - ein Minirechner
und hier geht's dann zum etwas besseren kompletten Taschenrechner
Der Minirechner verwendet die Funktion
EVAL in einem Formular - ohne JAVA-Script zu verwenden. Die
Punkt-vor-Strich-Regel ist gültig, Klammern sind erlaubt. Funktionen wie
SQRT (Wurzel) funktionieren nicht!
Im folgenden Beispiel mit JAVA-Script ist eine Funktion
BERECHNEN definiert, die ihrerseits die eingebaute Funktion
EVAL verwendet.
Mit Hilfe des
MATH-Objekts von JAVA-Script berechnet das ff. Skript Wurzel und natürlichen Logarithmus:
Dezimal- und Dualzahlen
Die Zahldarstellung in unserem Dezimalsystem beruht auf Zehnerpotenzen:
243 = 2•
100 + 4•
10 + 3•
1
Analog dazu wird im Dualsystem mit Zweierpotenzen gerechnet:
243 (dezimal) = 1•
128 + 1•
64 + 1•
32 + 1•
16 + 0•
8 + 0•
4 + 1•
2 + 1•
1 = 11110011 (dual)
Im folgenden Formular stehen die Checkboxen für 2
7 bis 2
0 (von links beginnend), im Textbereich wird die Dezimalzahl ausgegeben.
Umrechnung für
n max = 255 dezimal
ist in beide Richtungen möglich: Klicke außerhalb des Formulars um Dezimalzahlen in Dualzahlen umzuwandenl!
Bemerkung:
Die Umrechnung funktioniert mit Internet Explorer 8 bei Zulassung von Script-Elementen, die auf den Rechner zugreifen. Sie funktioniert auch im HTML-Editor (ich verwende Phase 5), bei Firefox und Opera geht leider nichts!
Im Internet findet Ihr
hier ebenfalls eine Möglichkeit zur Umrechnung.
Erklärung
Erklärung der Funktionen zur Umwandlung von Dezimal- zu Dualzahlen und zur Umwandlung von Dual- zu Dezimalzahlen:
1. Anmerkung zur Verwandlung von Dezimal- zu Dualzahlen:
Dividiert man eine Dezimalzahl fortschreitend durch 2,
so ergibt der jeweilige Rest der Division die umgekehrte Dualzahl:
14 : 2 = 7 Rest 0
7 : 2 = 3 Rest 1
3 : 2 = 1 Rest 1
1 : 2 = 0 Rest 1
1110 2 = 14 10
2. Die Funktion in JAVAScript:
function dez_dua(form) { // dezimal zu dual
j = form.dezimal.value;
for (i=0; i<8; ++i)
{ja = eval("form.zwei_hoch_"+i)
if (j & 1)
ja.status=true;
else
ja.status=false;
j >>>= 1;
}//end for
}//end function
3. Die bitweisen Operatoren & und
>>>
Es gibt
bitweise Logikoperatoren und
bitweise Verschiebeoperatoren, beide liefern einen numerischen Wert zurück, ihre Operanden werden nicht als Zahlen, sondern als eine Folge von Nullen und Einsen interpretiert.
Das
& aus dem obigen Skript entspricht dem UND aus der Aussagenlogik, wenn man "wahr" als "1" und "falsch" als "0" ansieht.
Das
>>> wird "nullfüllende Rechtsverschiebung" genannt, es verschiebt die Binärziffern nach rechts und füllt von links mit Nullen auf. Eine fortschreitende Rechtsverschiebung des Operanden entspricht einer fortschreitenden Halbierung (vgl. obige Anmerkung zur Umwandlung von Dezimal- in Dualzahlen), wie die ff. Darstellung für die Zahl 14 zeigt:
j 0=14 |
1 | 1 |
1 | 0 |
1 |
1 |
1 |
1 |
1 |
j & 1 |
1 |
1 |
1 | 0 |
ja.status |
true |
true |
true |
false |
Verschiebung um eine Stelle nach rechts ergibt:
j 1=7 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
j & 1 |
0 |
1 |
1 |
1 |
ja.status |
false |
true |
true |
true |
. . . und so weiter.
Die Erklärung zur Funktion dez_dua
- j=form.dezimal.value: j wird (im Beispiel) auf 14 gesetzt
- for (i=0;i>8; ++i): die anschließende Zählschleife wird für i=0 bis i=7, also 8 mal durchlaufen
- ja=eval("form.zwei_hoch_"+i);: im ersten Schleifendurchgang wird für i=0 der Zustand der checkbox für 20 in eine Zahl verwandelt
- if (j&1) ja.status=true;else ja.status=false:es wird für i=0 der Zustand der checkbox für 20 auf false gesetzt (vgl. die erste Tabelle für j0=14)
- j >>> 1: die Zahl 14 wird nach rechts geschoben und somit zur Zahl 7
- Das Schleifenende ist erreicht. Im nächsten Durchgang wird dann die checkbox für 21 auf true gesetzt, da nun die Zahl 710 = 111 2 entstanden ist (vgl. die zweite Tabelle für j1 = 7) . . . usw.
7. Die bitweisen Operatoren | und
<<
Das | entspricht dem ODER aus der Aussagenlogik, die Linksverschiebung << entspricht einer Multiplikation mit 2, was man sich leicht über eine Tabelle klarmachen kann.
8. Die Funktion in JAVAScript
function dua_dez(form) { // dual zu dezimal
j=0;
for (i=7; i>=0; --i)
{ j <<= 1;
ja = eval("form.zwei_hoch_"+i);
if (ja.status)
j |= 1;
}//end for
form.dezimal.value=j;
}//end function
Die Erklärung zur Funktion dua_dez
- j=0: Rücksetzung von j auf 0
- for (i=7;i>=0; --i)
: die anschließende Zählschleife wird für i=7 bis i=0, also 8 mal durchlaufen
- j<<=1
: Linksverschiebung von j und Auffüllung von rechts mit Nullen: entspricht einer Multiplikation mit 2
- ja=eval("form.zwei_hoch_"+i); : die checkbox für 27 wird im ersten Schleifendurchgang in eine Zahl verwandelt)
- if (ja.status) j|=1: falls die checkbox für 27 (im ersten Schleifendurchgang) angeklickt wurde, wird j durch ODER mit 1 verglichen, was immer den Wahrheitswert "true" ergibt (vgl. Tabelle), d.h. j wird auf 1 gesetzt.
j=14 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
j | 1 |
1 |
1 |
1 |
1 |
- Der Schleifendurchgang beginnt wieder mit einer Linksverschiebung von j, d.h. der nächste Stellenwert wird überprüft.
- form.dezimal.value=j; : j wird nach Abarbeitung der Zählschleife als Wert ausgegeben.