Informatik 9.Klasse SQL und Kapitel 3: Kontrollstrukturen: Unterschied zwischen den Seiten

Aus ComeniusWiki
(Unterschied zwischen Seiten)
Wechseln zu: Navigation, Suche
(Gemischte SQL-Abfragen)
 
(Syntax)
 
Zeile 1: Zeile 1:
== Übungen ==
+
[[Informatik_10._Klasse_13-14|Zur Startseite]] - [[Kapitel_1:_Vorbereitende_Aufgaben_und_Einstieg|Kapitel 1]] - [[Kapitel_2:_Variablen_und_Datentypen|Kapitel 2]]
  
=== Gemischte SQL-Abfragen ===
+
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
  
'''Schema:'''<br>
+
==Zweiseitige bedingte Anweisung==
<br>
+
===Bedingungen===
<code>BUNDESLAND [ <span style="text-decoration: underline;">Name</span> : VARCHAR(100) ; <span style="text-decoration: overline;">Landeshauptstadt</span> : INT ; Einwohner : INT ; Fläche : INT ; <span style="text-decoration: overline;">Ministerpräsident</span> : INT ; BIP: DECIMAL(10,2) ]<br>
+
Unter einer Bedingung versteht man einen beliebigen Ausdruck, dessen Auswertung einen Wahrheitswert (''true'' oder ''false'') liefert. Diese Ausdrücke können unterschiedliche Form annehmen:
LANDKREIS [ <span style="text-decoration: underline;">Name</span> : VARCHAR(100) ; Bevölkerungsdichte : INT ; <span style="text-decoration: overline;">Bundesland</span> : VARCHAR(100) ]<br>
+
* Am häufigsten handelt es sich um Vergleiche:
STADT [ <span style="text-decoration: underline;">ID</span> : INT ; Name : VARCHAR(100) ; Vorwahlen : VARCHAR(100) ; Webadresse : VARCHAR(100) ; Einwohner : INT ; <span style="text-decoration: overline;">Landkreis</span> : VARCHAR (100) ]<br>
+
{| class="wikitable" border="1"
POLITIKER [<span style="text-decoration: underline;">ID</span> : INT ; Name : VARCHAR(50) ; Vorname : VARCHAR(50) ; GebDat : DATE ] <br>
+
|-
BERATER [ <span style="text-decoration: underline;">ID</span> : INT ; Name : VARCHAR(50) ; Vorname : VARCHAR(50) ; Fachgebiet : VARCHAR(100) ] <br>
+
! Ausdruck
berät [ <span style="text-decoration: underline overline;">B_ID</span> : INT ; <span style="text-decoration: underline overline;">P_ID</span> : INT] <br>
+
! Bedeutung
</code>
+
|-
<br>
+
| (x == 0)
'''Vereinfachtes Klassendiagramm:'''<br>
+
| ''x ist gleich 0'' (Gleichheitsoperator)
[[Datei:Klassendiagramm Bund und Laender.png]]
+
|-
 +
| (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''
 +
|}
  
'''Formuliere für nachfolgende Aufgaben die zugehörige SQL-Abfrage!''' <br>
+
* Komplexere Bedingungen entstehen durch die Verknüpfung mehrerer Vergleiche mittels logischer Operatoren:
 +
{| class="wikitable" border="1"
 +
|-
 +
! Logischer Operator
 +
! Bedeutung
 +
! Beispiel
 +
|-
 +
| &&
 +
| logisches UND
 +
| (x>5) && (x<9)
 +
|-
 +
| &#124;&#124;
 +
| logisches ODER
 +
| (x<5) &#124;&#124; (x>9)
 +
|-
 +
| !
 +
| logisches NICHT
 +
| !(x==0)
 +
|}
  
<u>Aufgabe 1:</u><br>
+
* 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'':
Gib alle Informationen über Städte aus und sortiere sie absteigend nach der Anzahl ihrer Einwohner.
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT *
+
FROM STADT
+
ORDER BY Einwohner DESC
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 2:</u><br>
+
: ''boolean verheiratet = true;''
Gib den Namen und das Geburtsdatum des Politikers aus, der Ministerpräsident von Bayern ist.
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT P.Name, P.GebDat
+
FROM POLITIKER AS P, BUNDESLAND AS B
+
WHERE B.Name = "Bayern" AND
+
B.Ministerpräsident = P.ID
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 3:</u><br>
+
: ''if (verheiratet) {...};''
Gib den Namen der Städte und deren Vorwahlen aus, die im Bundesland Hessen liegen.
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT S.Name, S.Vorwahlen
+
FROM STADT AS S, LANDKREIS AS L
+
WHERE L.Bundesland = "Hessen" AND
+
S.Landkreis = L.Name
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 4:</u><br>
+
===Bedingungen bei KAROL und SCRATCH===
Die Augsburger Bürger möchten einen Brief an ihren Ministerpräsidenten schreiben. Gib den Vornamen und Namen ihres Ministerpräsidenten aus.
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT P.Vorname, P.Name
+
FROM STADT AS S, LANDKREIS AS L, BUNDESLAND AS B, POLITIKER AS P
+
WHERE S.Name = "Augsburg" AND
+
S.Landkreis = L.Name AND
+
L.Bundesland = B.Name AND
+
B.Ministerpräsident = P.ID
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 5:</u><br>
+
Diese Art der Kontrollstruktur ist uns bereits aus der 7.Klasse im Zusammenhang mit Robot Karol und Scratch bekannt.
Gib die Anzahl der Einwohner je Landkreis (Tipp: Tabelle STADT) aus.
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT Landkreis, SUM(Einwohner)
+
FROM STADT
+
GROUP BY Landkreis
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 6:</u><br>
+
[[Datei:3-1-karol-scratch.JPG]]
Wie viele Städte hat der Landkreis "Deggendorf"?
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT COUNT(ID)
+
FROM STADT
+
WHERE Landkreis = "Deggendorf"
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 7:</u><br>
+
===Syntax===
Wie viele Städte hat das Bundesland "Hessen"?
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT COUNT(S.ID)
+
FROM STADT AS S, LANDKREIS AS L
+
WHERE L.Bundesland = "Hessen" AND
+
S.Landkreis = L.Name
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 8:</u><br>
+
Die Syntax der zweiseitigen bedingten Anweisung sieht folgendermaßen aus:
Welche Ministerpräsidenten (Name) regieren ein Bundesland, das größer als  70 000[km<sup>2</sup>] ist?
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT P.Name
+
FROM POLITIKER AS P, BUNDESLAND AS B
+
WHERE B.Fläche > 70000 AND
+
P:ID = B.Ministerpräsident
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 9:</u><br>
+
<pre>
An welchem Wochentag wurde "Horst Seehofer" geboren?
+
if (Ausdruck) {Anweisung 1}
<popup name="Lösung">
+
else {Anweisung 2}
<syntaxhighlight lang="sql">
+
</pre>
SELECT DAYNAME(GebDat)
+
FROM POLITIKER
+
WHERE Name = "Seehofer" AND Vorname = "Horst"
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 10:</u><br>
+
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.
Gib eine Liste mit den Namen aller Ministerpräsidenten und deren Alter im Jahr 2015 aus!
+
<popup name="Lösung">
+
<syntaxhighlight lang="sql">
+
SELECT Name, 2015 - YEAR(GebDat)
+
FROM POLITIKER
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 11:</u><br>
+
'''Beispiel:'''
Welche Berater (Name, Vorname) beraten "Horst Seehofer" im Fachgebiet "Bildung"?
+
<pre>
<popup name="Lösung">
+
if(alter<18){System.out.println("Der Schüler ist minderjährig.");}
<syntaxhighlight lang="sql">
+
else {System.out.println("Der Schüler ist volljährig.");}
SELECT B.Name, B.Vorname
+
</pre>
FROM POLITIKER AS P, BERATER AS B, berät AS BT
+
WHERE P.Name = "Seehofer" AND P.Vorname = "Horst" AND
+
B.Fachgebiet = "Bildung" AND
+
P.ID = BT.P_ID AND
+
B.ID = BT.B_ID
+
</syntaxhighlight>
+
</popup>
+
  
<u>Aufgabe 12:</u><br>
+
<big>[[Exkurs: Mathematische Funktionen mit java.lang.Math]]</big>
Wie viele Berater stehen "Horst Seehofer" je Fachgebiet zur Verfügung?
+
 
<popup name="Lösung">
+
<big>[[Aufgaben 3.1.]]</big>
<syntaxhighlight lang="sql">
+
 
SELECT B.Fachgebiet, COUNT(B.ID)
+
==Einseitige bedingte Anweisung==
FROM POLITIKER AS P, BERATER AS B, berät AS BT
+
 
WHERE P.Name = "Seehofer" AND P.Vorname = "Horst" AND
+
Der ''else''-Zweig ist optional. Entfällt der ''else''-Zweig, so spricht man von einer ''einseitigen bedingten Anweisung''.
P.ID = BT.P_ID AND
+
 
B.ID = BT.B_ID
+
===Syntax===
GROUP BY B.Fachgebiet
+
 
</syntaxhighlight>
+
<pre>
</popup>
+
if(Ausdruck){Anweisung}
 +
</pre>
 +
 
 +
Ergibt die Auswertung des Ausdrucks ''false'', so wird automatisch mit dem Programm fortgefahren.
 +
 
 +
'''Beispiel:'''
 +
 
 +
<pre>
 +
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);
 +
}
 +
</pre>
 +
 
 +
'''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===
 +
 
 +
<pre>
 +
if (Ausdruck 1){Anweisung 1}
 +
else if (Ausdruck 2){Anweisung 2}
 +
          .
 +
          .
 +
          .
 +
else if (Ausdruck n){Anweisung n}
 +
else {Anweisung_else}
 +
</pre>
 +
 
 +
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:'''
 +
 
 +
<pre>
 +
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 !!");}
 +
}
 +
</pre>
 +
 
 +
<big>[[Aufgaben 3.2.]]</big>
 +
 
 +
 
 +
Witzige Erklärung der if-else-Anweisung:
 +
 
 +
<div style="margin-left:100px; margin-top:30px; margin-bottom:30px">
 +
{{#ev:youtube|3u5gejaIVSI}}
 +
</div>
 +
 
 +
 
 +
<big style="color:green;">[[Lernzielkontrolle Info10 - 1]]</big>
 +
 
 +
==Die while-Schleife==
 +
 
 +
In einer '''''while'''''-Schleife kann eine Anweisung in Abhängigkeit von der Bewertung eines Ausdrucks wiederholt ausgeführt werden.
 +
 
 +
===Syntax===
 +
 
 +
<pre>
 +
while (Ausdruck) {Anweisung}
 +
</pre>
 +
 
 +
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:'''
 +
 
 +
<pre>
 +
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);
 +
}
 +
</pre>
 +
 
 +
[[Datei:While schleife 3.JPG|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.
 +
 
 +
 
 +
Erläuterung der while-Schleife:
 +
 
 +
<div style="margin-left:100px; margin-top:30px; margin-bottom:30px">
 +
{{#ev:youtube|vmX5oUHxF8Q}}
 +
</div>
 +
 
 +
<big>[[Aufgaben 3.3.]]</big>
 +
 
 +
==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===
 +
 
 +
<pre>
 +
for(Initialisierungsteil; Abbruchbedingung; Inkrementierungsteil) {Anweisung}
 +
</pre>
 +
 
 +
* 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:'''
 +
 
 +
<pre>
 +
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);
 +
}
 +
</pre>
 +
 
 +
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:
 +
<pre>
 +
wiederhole 4 mal
 +
    wiederhole 5 mal
 +
      hinlegen
 +
      schritt
 +
  *wiederhole
 +
  linksdrehen
 +
*wiederhole
 +
</pre>
 +
 
 +
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.<br/>
 +
Diese Verschachtelung von Schleifen ist in JAVA genauso möglich.
 +
 
 +
 
 +
Erläuterung der for-Schleife:
 +
 
 +
<div style="margin-left:100px; margin-top:30px; margin-bottom:30px">
 +
{{#ev:youtube|6PhFeienl00}}
 +
</div>
 +
 
 +
 
 +
<big>[[Aufgaben 3.4.]]</big>
 +
 
 +
<big style="color:green;">[[Lernzielkontrolle Info10 - 2]]</big>
 +
 
 +
 
 +
 
 +
Kurzes Video, das auch noch eine zusätzliche Schleife (''do-while-Schleife'') erklärt und drei kleine Übungsaufgaben enthält.
 +
<div style="margin-left:100px; margin-top:30px; margin-bottom:30px">
 +
{{#ev:youtube|TfLTccwwUkY}}
 +
</div>
 +
 
 +
==Ä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:
 +
<pre>
 +
for(int i=1;i<=10;i++){Sequenz}
 +
 
 +
kann übersetzt werden in:
 +
 
 +
int i=1;
 +
while(i<=10){Sequenz;i++}
 +
</pre>
 +
 
 +
 
 +
<big>[[Aufgaben 3.5.]]</big>

Aktuelle Version vom 7. Dezember 2014, 19:21 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.


Witzige Erklärung der if-else-Anweisung:


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.


Erläuterung der while-Schleife:

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.


Erläuterung der for-Schleife:


Aufgaben 3.4.

Lernzielkontrolle Info10 - 2


Kurzes Video, das auch noch eine zusätzliche Schleife (do-while-Schleife) erklärt und drei kleine Übungsaufgaben enthält.

Ä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.