• Keine Ergebnisse gefunden

Brückenkurs Programmieren Tag 2: Verzweigungen und While-Schleifen Christopher Schölzel

N/A
N/A
Protected

Academic year: 2022

Aktie "Brückenkurs Programmieren Tag 2: Verzweigungen und While-Schleifen Christopher Schölzel"

Copied!
33
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Brückenkurs Programmieren

Tag 2: Verzweigungen und While-Schleifen

Christopher Schölzel

Technische Hochschule Mittelhessen

3. September 2019

(2)

Inhalt

Verzweigungen If-Abfrage

Logische Ausdrücke Logische Operatoren

Schleifen: While While

Nachmittag: Java-API und Float-Besonderheiten

(3)

Inhalt

Verzweigungen If-Abfrage

Logische Ausdrücke Logische Operatoren

Schleifen: While While

Nachmittag: Java-API und Float-Besonderheiten

(4)

Verzweigungen

Immer nur das Gleiche tun ist langweilig.

I Bisher: Aneinanderreihung von einzelnen Befehlen

I Wie im Computerspiel: Unterschiedliche Pfade machen Code interessant

Idee

Wir bauen uns eine kleine „KI“, die für uns Ja-/Nein-Fragen nach dem Zufallsprinzip entscheidet.

(5)

Verzweigungen: If-Abfrage

Syntax

if (Bedingung) { Anweisungsblock1 } else {

Anweisungsblock2 }

Definition

Eine If-Abfrage entspricht einer Weiche.

I Bedingung ist wahr (true): Führe If-Teil(Block 1) aus.

(6)

Verzweigungen: Beispiele für If-Abfragen

Beispiel 1 if (x == 0) {

System.out.println("Du erzeugst ein schwarzes Loch!");

} else {

System.out.println("4 geteilt durch "+x+" ist "+(4/x));

}

Beispiel 2 if (x < 0) {

x = -x;

}//Else-Teil darf auch wegfallen

(7)

Aufgabe: Mini-KI

Erzeuge mit der Funktion Math.random() eine Pseudozufallszahl zwischen 0 und 1.

Gebe dann mit der Funktion System.out.println(String) die entsprechende Antwort auf der Konsole aus:

I falls die Zufallszahl größer als 0,5 ist: Ja, aber sicher!

I ansonsten: Nein, auf keinen Fall!

Erinnerung: If-Syntax if (Bedingung) {

Anweisungsblock1 } else {

Anweisungsblock2

(8)

Verzweigungen: Bedingungen / Logische Ausdrücke

Was kann man eigentlich alles als Bedingung in einem If verwenden?

Definition

Bedingungen sindlogische Ausdrücke, das heißt Ausdrücke, die einen Wahrheitswert ergeben (true oder false).

Beispiele: true 3 < 4

4 <= 4 1 == 1 2+1 != 4 true

Beispiele: false 3 > 4

5 <= 4 1 == 2 2+1 != 4-1 false

(9)

Verzweigungen: Logische Operatoren

Definition

Logische Operatoren errechnen einen Wahrheitswert aus anderen Werten (und bilden damit logische Ausdrücke).

== < <=

!= > >=

(10)

Verzweigungen: Verknüpfungen von logischen Operatoren

Logischer Ausdruck

Der Wert von x liegt zwischen 0 und 10.

(11)

Verzweigungen: Verknüpfungen von logischen Operatoren

Logischer Ausdruck

Der Wert von x ist größer als 0 und kleiner als 10.

(12)

Verzweigungen: Verknüpfungen von logischen Operatoren

Logischer Ausdruck

Der Wert von x ist größer als 0 und kleiner als 10.

Um kompliziertere Bedingungen auszudrücken gibt es auch Operatoren, die logische Ausdrückenegieren oder miteinanderverknüpfenkönnen:

(13)

Verzweigungen: Verknüpfungen von logischen Operatoren

Logischer Ausdruck

Der Wert von x ist größer als 0 und kleiner als 10. x > 0 && x < 10 Um kompliziertere Bedingungen auszudrücken gibt es auch Operatoren, die logische Ausdrückenegieren oder miteinanderverknüpfenkönnen:

a && b a und b

a || b a oder b

!a nicht a

(14)

Logikhilfe: Wahrheitstabellen

Die Funktionsweise der Verknüpfungsoperatoren lässt sich mit einer Wahrheitstabelleverdeutlichen, die das Resultat des Operators für alle möglichen Eingabewerte angibt.

A B A && B A || B false false false false

false true false true

true false false true

true true true true

(15)

Übung: Wahrheitstabelle

Aufgabe: Vervollständige die Wahrheitstabelle für den folgenden Ausdruck.

boolean target = (x > 0 && x < 10) || (x > 20 && x < 30);

x > 0 x < 10 x > 20 x < 30 target

false true false true

true true false true

true false false true

true false true true

true false true false

(16)

Übung: Mensaplan

Aufgabe: Setze die folgenden „Mensaregeln“ in Java-Code um.

1. Wenn es Kaiserschmarren gibt, nimm immer diesen.

2. Wenn es Fisch unter drei Euro gibt, nimm diesen.

3. Ansonsten nimm die vegetarische Option.

Wenn Regel 1 und 2 beide zutreffen, dann hat Regel 1 Vorrang.

Codevorgabe:

boolean kaiserschmarrenAvailable = false; // setze hier zum Testen boolean fishAvailable = true; // unterschiedliche

double price = 3.5; // Werte ein

// hier kommt dein Code

(17)

Inhalt

Verzweigungen If-Abfrage

Logische Ausdrücke Logische Operatoren

Schleifen: While While

Nachmittag: Java-API und Float-Besonderheiten

(18)

Warum unbegrenzte Schleifen?

Aufgabe

Erzeuge so lange zwei zufällige ganze Zahlen zwischen 1 und 6, bis beide gleich sind.

Zufallszahl zwischen 1 und 6: (int) (Math.random()*6+1) int a = (int) (Math.random()*6+1);

int b = (int) (Math.random()*6+1);

if (a == b) System.out.println("Pasch!"); else {

... // die gleichen Anweisungen wie oben }

Frage: Wie viele Zeilen müssen wir schreiben?

Antwort: Unendlichviele! Es könnte immer ein Würfelwurf mehr nötig sein.

(19)

Warum unbegrenzte Schleifen?

Aufgabe

Erzeuge so lange zwei zufällige ganze Zahlen zwischen 1 und 6, bis beide gleich sind.

Zufallszahl zwischen 1 und 6: (int) (Math.random()*6+1) int a = (int) (Math.random()*6+1);

int b = (int) (Math.random()*6+1);

if (a == b) System.out.println("Pasch!"); else {

... // die gleichen Anweisungen wie oben }

Frage: Wie viele Zeilen müssen wir schreiben?

Antwort: Unendlichviele! Es könnte immer ein Würfelwurf mehr nötig sein.

(20)

Warum unbegrenzte Schleifen?

Aufgabe

Erzeuge so lange zwei zufällige ganze Zahlen zwischen 1 und 6, bis beide gleich sind.

Zufallszahl zwischen 1 und 6: (int) (Math.random()*6+1)

int a = (int) (Math.random()*6+1); int b = (int) (Math.random()*6+1);

if (a == b) System.out.println("Pasch!"); else {

... // die gleichen Anweisungen wie oben }

Frage: Wie viele Zeilen müssen wir schreiben?

Antwort: Unendlichviele! Es könnte immer ein Würfelwurf mehr nötig sein.

(21)

Warum unbegrenzte Schleifen?

Aufgabe

Erzeuge so lange zwei zufällige ganze Zahlen zwischen 1 und 6, bis beide gleich sind.

Zufallszahl zwischen 1 und 6: (int) (Math.random()*6+1) int a = (int) (Math.random()*6+1);

int b = (int) (Math.random()*6+1);

if (a == b) System.out.println("Pasch!");

else {

... // die gleichen Anweisungen wie oben }

Frage: Wie viele Zeilen müssen wir schreiben?

Antwort: Unendlichviele! Es könnte immer ein Würfelwurf mehr nötig sein.

(22)

Warum unbegrenzte Schleifen?

Aufgabe

Erzeuge so lange zwei zufällige ganze Zahlen zwischen 1 und 6, bis beide gleich sind.

Zufallszahl zwischen 1 und 6: (int) (Math.random()*6+1) int a = (int) (Math.random()*6+1);

int b = (int) (Math.random()*6+1);

if (a == b) System.out.println("Pasch!");

else {

... // die gleichen Anweisungen wie oben }

Frage: Wie viele Zeilen müssen wir schreiben?

Antwort: Unendlichviele! Es könnte immer ein Würfelwurf mehr nötig sein.

(23)

Warum unbegrenzte Schleifen?

Aufgabe

Erzeuge so lange zwei zufällige ganze Zahlen zwischen 1 und 6, bis beide gleich sind.

Zufallszahl zwischen 1 und 6: (int) (Math.random()*6+1) int a = (int) (Math.random()*6+1);

int b = (int) (Math.random()*6+1);

if (a == b) System.out.println("Pasch!");

else {

... // die gleichen Anweisungen wie oben }

Frage: Wie viele Zeilen müssen wir schreiben?

(24)

Gründe für Schleifen

Zusammengefasst: Wir brauchen ein Sprachkonstrukt, das...

I eine unbekannteAnzahl von Wiederholungen ausführt.

I bis eineAbbruchbedingungerfüllt ist I z.B. Würfeln bis zum Pasch

(25)

Unbekannte Wiederholungsanzahl: While

Definition

Eine Schleife (engl.loop) erlaubt die wiederholte Ausführung eines Anweisungsblocks solange eine Fortsetzungsbedingung erfüllt ist.

Syntax

while (Bedingung) { Anweisungsblock }

Beispiel

String s = "";

while(s.length() < 10) { s = s + "#";

System.out.println(s);

}

(26)

Aufgabe: Logarithmus zu Fuß

Teile einen Integer x so lange durch zwei, bis Du bei null angekommen bist.

Tipps:

I Bedingung anders herum

formuliert: So lange x nicht null ist...

Erinnerung: While-Syntax while (Bedingung) {

Anweisungsblock }

Bonus:

I Gib den Wert bei jedem Schleifendurchlauf aus.

I Zähle, wie viele Schleifendurchläufe nötig sind und gib diese Zahl aus. I Multipliziere einen Double y so lange mit 1.02 bis er doppelt so

groß wie vorher ist.

(27)

Aufgabe: Logarithmus zu Fuß

Teile einen Integer x so lange durch zwei, bis Du bei null angekommen bist.

Tipps:

I Bedingung anders herum

formuliert: So lange x nicht null ist...

Erinnerung: While-Syntax while (Bedingung) {

Anweisungsblock }

Bonus:

I Gib den Wert bei jedem Schleifendurchlauf aus.

I Zähle, wie viele Schleifendurchläufe nötig sind und gib diese Zahl aus.

I Multipliziere einen Double y so lange mit 1.02 bis er doppelt so

(28)

While: Anschauliches Beispiel ;)

Beispiel aus dem (studentischen) Leben: Solange du dich noch nicht am Boden festhalten musst, trinke ein weiteres Bier.

Java

double promille = 0;

while (promille < 3) {

System.out.println("Unn zisch, unn klack, unn weg!");

promille = promille + 0.1;

}

(29)

While: Endlosschleife

Frage: Was passiert, wenn die Fortsetzungsbedingung immer erfüllt wird?

Java

double promille = 0;

while (promille < 3) {

System.out.println("Unn zisch, unn klack, unn weg!");

promille = promille - 0.1;

}

Antwort: Der Computer hört nie auf zu rechnen!

... und der Student oder die Studentin hört nie auf zu trinken.

(30)

While: Endlosschleife

Frage: Was passiert, wenn die Fortsetzungsbedingung immer erfüllt wird?

Java

double promille = 0;

while (promille < 3) {

System.out.println("Unn zisch, unn klack, unn weg!");

promille = promille - 0.1;

}

Antwort: Der Computer hört nie auf zu rechnen!

... und der Student oder die Studentin hört nie auf zu trinken.

(31)

Zusammenfassung

Variablen

double a = 3.5;

int b = 10;

boolean c = true;

String blabla = "Blabla";

Logische Operatoren

> >= == !=

&& || !

If-Abfrage

if (Bedingung) { Anweisungsblock1 } else {

Anweisungsblock2 }

Arithmetische Operatoren

+ - * / %

(32)

Inhalt

Verzweigungen If-Abfrage

Logische Ausdrücke Logische Operatoren

Schleifen: While While

Nachmittag: Java-API und Float-Besonderheiten

(33)

Mögliche Themen zur Besprechung am Nachmittag

API lesen

I Was ist eine API?

I Wo finde ich die Java-API?

I Welche Funktionen bieten die Klassen String, Integer, ... ? I Welche Funktionen bietet die Klasse Math?

I Wie liest man die API?

Float-Besonderheiten I ∞,−∞und NaN

I Warum sollte man Floats nicht mit == vergleichen?

I Warum gilt Float.NaN != FLoat.NaN?

Referenzen

ÄHNLICHE DOKUMENTE

www.informatikzentrale.de.. Syntax von

• Ist der Startpunkt des Programms mit true annotiert, dann erfüllt jede Programmausführung, die den Programmpunkt v erreicht, die Zusicherung an v :-).. • Zum Nachweis, dass

Nachmittag: Java-Objekte erstellen und verwenden.. über einen Index).. über einen Index).. über einen Index).. über einen Index).. über einen Index)... Arrays: Definition,

Der Callstack: Simulation Die folgenden Folien zeigen den Zustand des Stacks während der Ausführung des angegebenen Programms inklusive Rücksprungadressen und Ergebnisregister...

zwei Punkte erlauben Zahlbereiche anzugeben. – Bsp.: laptop €100..€200 ,

Durch das Definieren einer Funktion gibt man einer oft benötigten Teillösung einen Namen, damit man sie für verschiedene Eingabewerte (Argumente) anwenden kann und den

Fülle das restliche Array, indem du immer den Wert des vorherigen Elements mit 1.01 multiplizierst.. Erinnerung: Arraydefinition

Rekursive Funktionen bestehen immer aus den folgenden Bestandteilen: I mindestens ein Basisfall, in dem die Rekursion abbricht und das Ergebnis fest steht I mindestens ein