MezData-Logo

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

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!

Lösung anzeigen..

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);
}