Lernpfad:Das Dualsystem/4: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Markierung: Manuelle Zurücksetzung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 99: Zeile 99:


== Dualzahlen in Dezimalzahlen umrechnen ==
== Dualzahlen in Dezimalzahlen umrechnen ==
Das Umrechnen von Dualzahlen in Dezimalzahlen ist auf dem Papier leicht zu machen. Die Formel zur Umrechnung hast Du bereits kennengelernt:
<center><math>(1100111)_2 = 1\cdot 2^6 + 1\cdot 2^5 + 0\cdot 2^4 + 0\cdot 2^3 + 1\cdot 2^2 +
1\cdot 2^1 + 1\cdot 2^0 = (103)_{10}</math></center>
{{Aufgabe:Start}}
Rechne die Zahlen ins Dezimalsystem um:
# <math>(1101)_{2}</math>
# <math>(101101)_{2}</math>
# <math>(1000)_{2}</math>
{{Aufgabe:End}}
{{Lösung:Start}}
# <math>(1101)_{2} = (13)_{10}</math>
# <math>(101101)_{2} = (45)_{10}</math>
# <math>(1000)_{2} = (8)_{10}</math>
{{Lösung:End}}
Die Umsetzung in {{Scratch}} ist allerdings etwas schwieriger, da es keine Potenzieren-Operation gibt. Die Rechnung <math>2^n</math> lässt sich daher nicht so einfach lösen.
{{Aufgabe:Start}}
Entwickle ein {{Scratch}}-Programm, dass eine (positive ganze) Zahl <math>b</math> mit einem (positive ganzen) Exponenten <math>e</math> potenziert. Also die Aufgabe <math>b^e</math> löst.
Erstelle dafür in Deinem bestehenden Programm von oben eine weitere Figur, in der Du arbeitest.
{{Aufgabe:End}}
{{Tipp:Start}}
Mach Dir klar, wie eine Potenz durch Additionen berechnet werden kann.
Beachte auch den Sonderfall <math>e = 0</math>, denn dann ist das Ergebnis immer <math>1</math>!
Die Umsetzung in {{Scratch}} erfolgt mit einer Zählschleife.
{{Tipp:End}}
{{Lösung:Start}}
<scratchblocks>
Wenn diese Figur angeklickt wird :: events hat
frage [Gib eine Basis ein.] und warte
setze [b v] auf (Antwort)
frage [Gib einen Exponenten ein.] und warte
setze [e v] auf (Antwort)
setze [potenz v] auf (1)
wiederhole (e) mal
  setze [potenz v] auf ((potenz) * (b))
end
sage (potenz)
</scratchblocks>
{{Lösung:End}}
{{Aufgabe:Start}}
Entwickle ein {{Scratch}}-Programm zur Umrechnung einer Dualzahl in eine Dezimalzahl.
Nutze dazu Dein Potenzieren-Programm von oben.
Dieses Programm ist deutlich komplexer, als das zur Umrechnung einer Dezimalzahl mit dem Moduloverfahren. Scheue Dich also nicht, die Tipps anzusehen, falls Du nicht weiter kommst.
{{Aufgabe:End}}
{{Tipp:Start}}
Die eingegebene Dualzahl ist wieder keine Zahl, sondern ein Text mit einzelnen Zeichen, die entweder <code>0</code> oder <code>1</code> sind. Das Ziel ist es, die Dualzahl Zeichen für Zeichen ''von rechts nach links'' durchzugehen und bei einer <code>1</code> die entsprechende Potenz von 2 auf das Ergebnis zu addieren.
Dazu musst Du
* eine Zählvariable (z.B. <code>i</code>) erstellen, die auf 0 gesetzt wird,
* eine Schleife starten, die so oft durchläuft, wie die Binärzahl Zeichen hat (Länge der Binärzahl),
** auf das <code>i</code>-te Zeichen von rechts zugreifen (also das Zeichen an Stelle "Länge der Binärzahl minus <code>i</code>"),
** wenn das Zeichen eine <code>1</code> ist,
*** die Potenz <math>2^i</math> berechnen,
*** die Potenz auf das Ergebnis addieren.
** <code>i</code> um 1 erhöhen.
{{Tipp:End}}
{{Lösung:Start}}
<scratchblocks>
Wenn diese Figur angeklickt wird :: events hat
frage [Gib eine Binärzahl ein.] und warte
setze [binaer v] auf (Antwort)
setze [dezimal v] auf (1)
setze [i v] auf (0)
wiederhole (Länge von (binaer)) mal
  falls <(Zeichen ((Länge von (binaer)) - (i)) von (binaer)) = (1)> dann
    setze [potenz v] auf (1)
    wiederhole (i) mal
      setze [potenz v] auf ((potenz) * (2))
    end
    ändere [dezimal v] um (pow)
  end
  ändere [i v] um (1)
end
sage (dezimal)
</scratchblocks>
{{Lösung:End}}