Kapitel 3: Kontrollstrukturen: Unterschied zwischen den Versionen

Aus ComeniusWiki
Wechseln zu: Navigation, Suche
(Syntax)
(Syntax)
Zeile 233: Zeile 233:
  
 
<big style="color:green;">[[Lernzielkontrolle Info10 - 2]]</big>
 
<big style="color:green;">[[Lernzielkontrolle Info10 - 2]]</big>
 +
 +
 +
 +
http://youtu.be/TfLTccwwUkY
  
 
==Äquivalenz von for- und while-Schleife==
 
==Äquivalenz von for- und while-Schleife==

Version vom 7. Dezember 2014, 17:47 Uhr

Zur Startseite - Kapitel 1 - Kapitel 2

Kontrollstrukturen sind Anweisungen, die festlegen, in welcher Reihenfolge was vom Computer getan werden soll. Eine Kontrollstruktur ist entweder eine Verzweigung oder eine Schleife. Meist wird ihre Ausführung über logische Ausdrücke beeinflusst. Kontrollstrukturen können über spezielle Diagramme (Programmablaufplan oder Struktogramm) visualisiert werden

Inhaltsverzeichnis

Zweiseitige bedingte Anweisung

Bedingungen

Unter einer Bedingung versteht man einen beliebigen Ausdruck, dessen Auswertung einen Wahrheitswert (true oder false) liefert. Diese Ausdrücke können unterschiedliche Form annehmen:

  • Am häufigsten handelt es sich um Vergleiche:
Ausdruck Bedeutung
(x == 0) x ist gleich 0 (Gleichheitsoperator)
(x != 0) x ist ungleich 0 (Ungleichheitsoperator)
(x > 0), (x < 0) x größer 0, x kleiner 0
(x >= 0), (x <= 0) x größer oder gleich 0, x kleiner oder gleich 0
  • Komplexere Bedingungen entstehen durch die Verknüpfung mehrerer Vergleiche mittels logischer Operatoren:
Logischer Operator Bedeutung Beispiel
&& logisches UND (x>5) && (x<9)
|| logisches ODER (x<5) || (x>9)
 ! logisches NICHT  !(x==0)
  • Man kann auch eine einfache Variable vom Typ boolean als Bedingung verwenden, denn sie hat selbst schon einen Wahrheitswert und ist deshalb true oder false:
boolean verheiratet = true;
if (verheiratet) {...};

Bedingungen bei KAROL und SCRATCH

Diese Art der Kontrollstruktur ist uns bereits aus der 7.Klasse im Zusammenhang mit Robot Karol und Scratch bekannt.

3-1-karol-scratch.JPG

Syntax

Die Syntax der zweiseitigen bedingten Anweisung sieht folgendermaßen aus:

if (Ausdruck) {Anweisung 1}
else {Anweisung 2}

Der Ausdruck in Klammern wird ausgewertet. Trifft die Bedingung zu (hat also der Ausdruck den Wert true), so wird Anweisung 1 ausgeführt. Trifft die Bedingung nicht zu (hat also der Ausdruck den Wert false), so wird Anweisung 2 ausgeführt. Statt einer einzelnen Anweisung kann natürlich auch ein Block von Anweisungen ausgeführt werden.

Beispiel:

if(alter<18){System.out.println("Der Schüler ist minderjährig.");}
else {System.out.println("Der Schüler ist volljährig.");}

Exkurs: Mathematische Funktionen mit java.lang.Math

Aufgaben 3.1.

Einseitige bedingte Anweisung

Der else-Zweig ist optional. Entfällt der else-Zweig, so spricht man von einer einseitigen bedingten Anweisung.

Syntax

if(Ausdruck){Anweisung}

Ergibt die Auswertung des Ausdrucks false, so wird automatisch mit dem Programm fortgefahren.

Beispiel:

public void dividieren(){
   Scanner ein=new Scanner(System.in);
   System.out.print("x= ");
   int x=ein.nextInt();
   System.out.print("y= ");
   int y=ein.nextInt();

   if(y==0){System.out.println("Division durch 0 nicht definiert!"); dividieren();};

   double z=(double)x/(double)y;
   System.out.println(z);
}

Erläuterung: Die if-Anweisung fängt den Ausnahmefall der Division durch 0 ab und ruft die Methode dividieren() erneut auf, d.h. es erscheint wieder die Eingabeaufforderung.

Mehrfache Alternative - else-if

Die else-if-Anweisung ermöglicht eine Mehrfachauswahl; d.h. eine Auswahl unter verschiedenen Alternativen.

Syntax

if (Ausdruck 1){Anweisung 1}
else if (Ausdruck 2){Anweisung 2}
          .
          .
          .
else if (Ausdruck n){Anweisung n}
else {Anweisung_else}

In der angegebenen Reihenfolge wird ein Ausdruck nach dem anderen abgearbeitet. Bei der ersten Bedingung, die true ist, wird die zugehörige Anweisung bzw. der zugehörige Anweisungsblock ausgeführt und die Mehrfachauswahl abgebrochen. Der letzte else-Zweig ist optional. Hier können alle anderen Fälle behandelt werden, die nicht explizit aufgeführt wurden. Ist dies nicht notwendig, so kann der else-Zweig entfallen.


Beispiel:

public void kommentarGeben(){
Scanner ein=new Scanner(System.in);
System.out.print("Punkte= ");
int punkte=ein.nextInt();

if(punkte>100){System.out.println("Spitzenleistung");}
else if (punkte >80){System.out.println("Eine sehr gute Leistung");}
else if (punkte >60){System.out.println("Eine gute Leistung");}
else if (punkte >40){System.out.println("Eine noch passable Leistung");}
else {System.out.println("Du solltest noch etwas üben !!");}
}

Aufgaben 3.2.

Lernzielkontrolle Info10 - 1

Die while-Schleife

In einer while-Schleife kann eine Anweisung in Abhängigkeit von der Bewertung eines Ausdrucks wiederholt ausgeführt werden.

Syntax

while (Ausdruck) {Anweisung}

Der Ausdruck wird berechnet und die Anweisung dann und nur dann ausgeführt, wenn der Ausdruck true ist. Danach wird die Berechnung des Ausdrucks und die eventuelle Ausführung der Anweisung wiederholt. Um keine Endlosschleife zu erzeugen, muss daher ein Teil des Bewertungsausdrucks im Schleifenrumpf, d.h. in der Anweisung, manipuliert werden.

Beispiel:

public void zahlenBisHundertAddieren(){
int i=1;
int sum=0;
while(i<=100){sum=sum+i; i++;};
System.out.println("Die Summe der Zahlen 1 bis 100 ist "+sum);
}

while-Schleife

Erläuterungen:

  • Die Variable i fungiert als Zählvariable. Sie wird mit dem Wert 1 initialisiert und bei jedem Durchlauf durch die Schleife um 1 erhöht. Der Ausdruck i++ ist dabei die Kurzform für i=i+1, d.h. der Variable i wird jeweils der aktuelle Wert von i plus 1 zugewiesen. Entsprechend kann man noch andere Inkrementierungen bilden: i+=2 steht z.B. für i=i+2, i-=3 steht für i=i-3.
  • Die Variable sum dient als Hilfsvariable um die jeweilige Zwischensumme zu speichern. Bei jedem Durchlauf wird sum um den Wert von i erhöht und zum Schluss als Ergebniswert ausgegeben.
  • Bei jedem Durchlauf wird der Ausdruck i<=100 ausgewertet und die Berechnung wird solange wiederholt, solange die Auswertung true ergibt.


Aufgaben 3.3.

Die for-Schleife

Die for-Schleife, oder auch Zählschleife, wird meist verwendet, wenn die Anzahl der Schleifendurchläufe im Vornhinein feststeht, wobei man eine sogenannte Laufvariable verwendet, um die Anzahl der Schleifendurchläufe zu zählen.

Syntax

for(Initialisierungsteil; Abbruchbedingung; Inkrementierungsteil) {Anweisung}
  • Im Initialisierungsteil, der vor Betreten der Schleife ausgeführt wird, bekommt die Laufvariable ihren Wert.
  • Die Abbruchbedingung wir jedesmal vor Betreten der Schleife geprüft.
  • Der Inkrementierungsteil wird am Ende des Schleifendurchlaufs ausgeführt und erhöht oder verringert den Wert der Laufvariable.


Beispiel:

public void zahlenBisHundertAddieren2(){
int sum=0;
for(int i=1;i<=100;i++){sum=sum+i;};
System.out.println("Die Summe der Zahlen 1 bis 100 ist "+sum);
}

Erläuterungen:

  • Im Initialisierungsteil wird die Laufvariable i auf den Anfangswert 1 gesetzt. Dabei ist zu beachten, dass der Datentyp int wie bei jeder Deklaration einer Variable angegeben werden muss.
  • Die Abbruchbedingung lautet i<=100.
  • Im Inkrementierungsteil wir die Laufvariable jeweils um 1 erhöht (i++).
  • Nach Verlassen der Schleife wird der aktuelle Wert von sum auf der Konsole ausgegeben.


for-Schleifen können übrigens auch verschachtelt werden. Von KAROL kennen wir folgendes kleines Programm:

wiederhole 4 mal
    wiederhole 5 mal
      hinlegen
      schritt
   *wiederhole
   linksdrehen
*wiederhole

Dabei wird zuerst die Folge hinlegen schritt fünf mal wiederholt bevor sich KAROL nach links dreht. Diese Sequenz wird insgesamt vier mal wiederholt. Auf diese Weise können wir den Rand einer Welt der Größe 6x6 mit Ziegeln belegen.
Diese Verschachtelung von Schleifen ist in JAVA genauso möglich.


Aufgaben 3.4.

Lernzielkontrolle Info10 - 2


http://youtu.be/TfLTccwwUkY

Äquivalenz von for- und while-Schleife

Eine for-Schleife kann jederzeit in eine while-Schleife überführt werden. Dazu wird die Zählvariable außerhalb der while-Schleife initialisiert und am Ende des Anweisungsblocks aktualisiert. Die Abbruchbedingung steht wie üblich in der Klammer nach dem Schlüsselwort while.

Beispiel:

for(int i=1;i<=10;i++){Sequenz} 

kann übersetzt werden in:

int i=1;
while(i<=10){Sequenz;i++}


Aufgaben 3.5.