MezData-Logo Creative Commons License 279 Lösungen Button :PI-BASIS: While-Schleife: Finde Anzahl Bits zur Kodierung von Zahl n

Problem:

Eingabe ist eine natürliche-Zahl n (0,1,2,..) , Ausgabe soll die Anzahl der Bits sein, die zur Kodierung als Dualzahl benötigt werden.

Eingabe n 0 1 2 3 4 5 6 7 8 ... 15 16
Dualzahl 0 1 10 11 100 101 110 111 1000   1111 1 0000
Ausgabe Bits 1 1 2 2 3 3 3 3 4 4 4 5

Analyse (thx Sandra)

Für 0 und 1 braucht man ein Bit, bei jeder Verdopplung der Zahl ein Weiteres. Also teilt man die Zahl n durch 2 solange das Ergebnis > 1 ist
und zählt mit wie oft man das kann.

Wir brauchen ein Konstrukt, das es uns erlaubt, n durch 2 zu teilen solange die Bedingung n > 1 erfüllt ist.

Struktogramm

Quellcode

while (n>1){
  n = n / 2;
}

Lösung:

int n,bits;
Eingabe n;
bits = 1; // mindestens ein Bit
while (n > 1){ // solange n noch > 1
  bits++; // man braucht ein weiteres Bit
  n = n/2; // halbieren von n pro Bit
}
Ausgabe bits;

Job: Implementieren und testen Sie die Lösung,
mit welchen Eingaben sollte die Korrektheit ermittelt werden, stimmt das Ergebnis für die Eingabe 0?
Erstellen Sie ein Struktogramm!

Allgemeine While-Schleife

while (Bedingung)
  Verarbeitung

Aufgabe: Versuchen Sie die statt der While-Schleife eine For-Schleife zu verwenden (mit Struktogramm)!

Zusatz-Aufgabe: Für negative Zahlen kann das Programm keine sinnvolle Lösung finden, erweitern Sie das Programm für negative Zahlen!

While Spezial

Welche Ausgabe erzeugt dieses Programm?

i=0;
while (i++<3)
  Ausgabe i;
Ausgabe "nachher: " + i;

Welche Ausgabe erzeugt dieses Programm?

i=0;
while (++i<3)
  Ausgabe i;
Ausgabe "nachher: " + i;