:PI-BASIS: While-Schleife: Finde Anzahl Bits zur Kodierung von Zahl nEingabe 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 |
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 |
Quellcodewhile (n>1){
n = n / 2;
}
|
||||
![]() |
|||||
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!
![]() |
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!
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;