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!

Minirechner: Geben Sie einen Term ein (4 Grundrechenarten, Klammern, Dezimalpunkt):






Im folgenden Beispiel mit JAVA-Script ist eine Funktion BERECHNEN definiert, die ihrerseits die eingebaute Funktion EVAL verwendet.

hoch 2




Mit Hilfe des MATH-Objekts von JAVA-Script berechnet das ff. Skript Wurzel und natürlichen Logarithmus:
Wurzel aus
ln von




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 27 bis 20 (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!

Zweierpotenzen
27 26 25 24 23 22 21 20
Zehnerpotenzen:


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 11 10
1 1 1 1 1
j & 1 1 1 10
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

  1. j=form.dezimal.value: j wird (im Beispiel) auf 14 gesetzt
  2. for (i=0;i>8; ++i): die anschließende Zählschleife wird für i=0 bis i=7, also 8 mal durchlaufen
  3. 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
  4. 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)
  5. j >>> 1: die Zahl 14 wird nach rechts geschoben und somit zur Zahl 7
  6. 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

  1. j=0: Rücksetzung von j auf 0
  2. for (i=7;i>=0; --i) : die anschließende Zählschleife wird für i=7 bis i=0, also 8 mal durchlaufen
  3. j<<=1 : Linksverschiebung von j und Auffüllung von rechts mit Nullen: entspricht einer Multiplikation mit 2
  4. ja=eval("form.zwei_hoch_"+i); : die checkbox für 27 wird im ersten Schleifendurchgang in eine Zahl verwandelt)
  5. 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


  6. Der Schleifendurchgang beginnt wieder mit einer Linksverschiebung von j, d.h. der nächste Stellenwert wird überprüft.
  7. form.dezimal.value=j; : j wird nach Abarbeitung der Zählschleife als Wert ausgegeben.






© 2010 Asti PoVRay-Site Mathematische Streiflichter