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
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;
}
Job: Implementieren Sie eine Methode anzBits(n:GZ):GZ 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 diese Methode?
static void while1(){
int i=0;
while (i++<3)
System.out.println(i);
System.out.println ("nachher: " + i);
}
Welche Ausgabe erzeugt diese Methode?
static void while2(){
int i=0;
while (++i<3)
System.out.println(i);
System.out.println ("nachher: " + i);
}