Programmieren_1/kontrollstrukturen.md

173 lines
3.9 KiB
Markdown

<!--
title: Kontrollstrukturen
description: Folien für Kontrollstrukturen in Programmieren 1
url: https://git.henriburau.de/tutorien/programmieren-1
header: Programmieren 1 **Tutorium**
footer: Henri Burau und Eva Meinen
-->
# 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.