# Kontrollstrukturen ## **Sequenz** Alle Statements in einem Quelltext werden der Reihe nach ausgeführt. **Statements** Durch `;` getrennter Quelltext ```java int x = 10; //1. Statement int x = 123 + x; //2. Statement ``` --- ## **Selektion** Es wird selektiert welche Statements ausgeführt werden. ### if ```java int i = 3; if(i > 5) { System.out.printf("i ist größer als 5"); } ``` ![bg right:30% 40%](https://git.henriburau.de/tutorien/programmieren-1/-/raw/master/img/if.svg) --- ### else ```java int i = 3; if(i > 5) { System.out.printf("i ist größer 5"); } else { System.out.printf("i ist kleiner oder gleich 5"); } ``` ![bg right:30% 80%](https://git.henriburau.de/tutorien/programmieren-1/-/raw/master/img/if-else.svg) --- ### else if ```java int i = 3; if(i > 5) { System.out.printf("i ist größer 5"); } else if(i == 5) { System.out.printf("i ist gleich 5"); } else { System.out.printf("i ist kleiner 5"); } ``` ![bg right:40% 80%](https://git.henriburau.de/tutorien/programmieren-1/-/raw/master/img/if-else-if.svg) --- ### switch ```java String wochentag = "Samstag"; switch(wochentag) { case "Montag": case "Dienstag": case "Mittwoch": case "Donnerstag": case "Freitag": System.out.printf("Es ist in der Woche"); break; case "Samstag": case "Sonntag": System.out.printf("Es ist Wochenende 🎉"); break; default: System.out.printf("Diesen Tag gibt es nicht"); break; } ``` --- ## **Iteration** Es können Statements wiederholt werden. Iterative Kontrollstrukturen werden Schleifen genannt. Schleifen können folgende Eigenschaften haben: * **Kopfgesteuert** Die Bedingung der Schleife wird im Kopf überprüft. * **Fußgesteuert** Die Bedingung der Schleife wird im Fuß überprüft. * **Abweisend** Die Schleife wird nicht durchlaufen. * **Positiv bedingt** Die Schleife wird durchgeführt solange die Bedingung wahr ist. * **Negativ bedingt** Die Schleife wird durchgeführt solange die Bedingung falsch ist. --- ### for * **Kopfgesteuert** * **Positiv bedingt** ```java for(int i = 0; i < 10; i++) { System.out.printf("%d%n", i); } // Oder in der kurzen Schreibweise: for(int i = 0; i < 10; i++) System.out.printf("%d%n", i); ``` ![bg right:30% 100%](https://git.henriburau.de/tutorien/programmieren-1/-/raw/master/img/for.svg) --- ### while * **Kopfgesteuert** * **Positiv bedingt** ```java int i = 0; while(i < 10) { System.out.printf("%d%n", i); i++; } ``` ![bg right:40% 100%](https://git.henriburau.de/tutorien/programmieren-1/-/raw/master/img/for.svg) --- ### do-while * **Fußgesteuert** * **Positiv bedingt** ```java int i = 0; do { System.out.printf("%d%n", i); i++; } while(i < 10) ``` ![bg right:30% 60%](https://git.henriburau.de/tutorien/programmieren-1/-/raw/master/img/do_while.svg) --- ## **Aufgaben** 1) Schreibe eine Methode `public static void divide(double quotient, double dividend)` welche das Ergebnis der Division auf die Konsole ausgibt. Achte darauf, dass nicht durch 0 geteilt wird und gebe eine Warnung über die Nulldivision auf der Konsole aus. 2) Schreibe eine Methode `public static void calculator(char operator, int number1, int number2)` welche das Ergebnis der Operation auf der Konsole ausgibt. Die durchgeführte Operation hängt von dem Wert der Variable `operator` ab. Bsp: `calculator('*', 3, 4)` schreibt auf die Konsole: `3 * 4 = 12` --- 3) Schreibe eine Methode `public static void gcd(int a, int b)` welche den größten gemeinsamen Teiler (engl. greatest common divisor oder gcd) von zwei Zahlen berechnet. Benutze dafür den Algorithmus von [Euklid](https://de.wikipedia.org/wiki/Euklidischer_Algorithmus#Iterative_Variante). 4) Schreibe eine Methode `public static void printAscii()` welche die Ascii-Werte der Zahlen von 0 bis 122 ausgibt.