• Keine Ergebnisse gefunden

Brückenkurs Programmieren Tag 3: For-Schleifen und Funktionen Christopher Schölzel

N/A
N/A
Protected

Academic year: 2022

Aktie "Brückenkurs Programmieren Tag 3: For-Schleifen und Funktionen Christopher Schölzel"

Copied!
32
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Brückenkurs Programmieren

Tag 3: For-Schleifen und Funktionen

Christopher Schölzel

Technische Hochschule Mittelhessen

4. September 2019

(2)

Inhalt

Schleifen Einleitung For

Funktionen

Nachmittag: Iterative Refinement und Zufallszahlen

(3)

Inhalt

Schleifen Einleitung For

Funktionen

Nachmittag: Iterative Refinement und Zufallszahlen

(4)

Warum Schleifen?

Aufgabe

Gib alle Zahlen von 1 bis 100 auf der Konsole aus.

Bisher: Eine Programmzeile pro Rechenoperation.

System.out.println(1);

System.out.println(2); System.out.println(3); System.out.println(4); System.out.println(5); System.out.println(6); System.out.println(7); System.out.println(8); System.out.println(9); System.out.println(10); System.out.println(11); System.out.println(12); System.out.println(13); System.out.println(14); System.out.println(15); System.out.println(16); System.out.println(17); System.out.println(18); System.out.println(19); System.out.println(20); System.out.println(21); System.out.println(22); System.out.println(23); System.out.println(24); System.out.println(25); System.out.println(26); System.out.println(27); System.out.println(28); System.out.println(29); System.out.println(30); System.out.println(31); System.out.println(32); System.out.println(33);

System.out.println(34); System.out.println(35); System.out.println(36); System.out.println(37); System.out.println(38); System.out.println(39); System.out.println(40); System.out.println(41); System.out.println(42); System.out.println(43); System.out.println(44); System.out.println(45); System.out.println(46); System.out.println(47); System.out.println(48); System.out.println(49); System.out.println(50); System.out.println(51); System.out.println(52); System.out.println(53); System.out.println(54); System.out.println(55); System.out.println(56); System.out.println(57); System.out.println(58); System.out.println(59); System.out.println(60); System.out.println(61); System.out.println(62); System.out.println(63); System.out.println(64); System.out.println(65); System.out.println(66);

System.out.println(67); System.out.println(68); System.out.println(69); System.out.println(70); System.out.println(71); System.out.println(72); System.out.println(73); System.out.println(74); System.out.println(75); System.out.println(76); System.out.println(77); System.out.println(78); System.out.println(79); System.out.println(80); System.out.println(81); System.out.println(82); System.out.println(83); System.out.println(84); System.out.println(85); System.out.println(86); System.out.println(87); System.out.println(88); System.out.println(89); System.out.println(90); System.out.println(91); System.out.println(92); System.out.println(93); System.out.println(94); System.out.println(95); System.out.println(96); System.out.println(97); System.out.println(98); System.out.println(99);

System.out.println(100);

(5)

Warum Schleifen?

Aufgabe

Gib alle Zahlen von 1 bis 100 auf der Konsole aus.

Bisher: Eine Programmzeile pro Rechenoperation.

System.out.println(1);

System.out.println(2);

System.out.println(3);

System.out.println(4);

System.out.println(5);

System.out.println(6);

System.out.println(7);

System.out.println(8);

System.out.println(9);

System.out.println(10);

System.out.println(11);

System.out.println(12);

System.out.println(13);

System.out.println(14);

System.out.println(15);

System.out.println(16);

System.out.println(17);

System.out.println(18);

System.out.println(19);

System.out.println(20);

System.out.println(21);

System.out.println(22);

System.out.println(23);

System.out.println(24);

System.out.println(25);

System.out.println(26);

System.out.println(27);

System.out.println(28);

System.out.println(29);

System.out.println(30);

System.out.println(31);

System.out.println(32);

System.out.println(33);

System.out.println(34);

System.out.println(35);

System.out.println(36);

System.out.println(37);

System.out.println(38);

System.out.println(39);

System.out.println(40);

System.out.println(41);

System.out.println(42);

System.out.println(43);

System.out.println(44);

System.out.println(45);

System.out.println(46);

System.out.println(47);

System.out.println(48);

System.out.println(49);

System.out.println(50);

System.out.println(51);

System.out.println(52);

System.out.println(53);

System.out.println(54);

System.out.println(55);

System.out.println(56);

System.out.println(57);

System.out.println(58);

System.out.println(59);

System.out.println(60);

System.out.println(61);

System.out.println(62);

System.out.println(63);

System.out.println(64);

System.out.println(65);

System.out.println(66);

System.out.println(67);

System.out.println(68);

System.out.println(69);

System.out.println(70);

System.out.println(71);

System.out.println(72);

System.out.println(73);

System.out.println(74);

System.out.println(75);

System.out.println(76);

System.out.println(77);

System.out.println(78);

System.out.println(79);

System.out.println(80);

System.out.println(81);

System.out.println(82);

System.out.println(83);

System.out.println(84);

System.out.println(85);

System.out.println(86);

System.out.println(87);

System.out.println(88);

System.out.println(89);

System.out.println(90);

System.out.println(91);

System.out.println(92);

System.out.println(93);

System.out.println(94);

System.out.println(95);

System.out.println(96);

System.out.println(97);

System.out.println(98);

System.out.println(99);

System.out.println(100);

(6)

Warum Schleifen?

Aufgabe

Gib alle Zahlen von 1 bis 100 auf der Konsole aus.

Bisher: Eine Programmzeile pro Rechenoperation.

System.out.println(1);

System.out.println(2);

System.out.println(3);

System.out.println(4);

System.out.println(5);

System.out.println(6);

System.out.println(7);

System.out.println(8);

System.out.println(9);

System.out.println(10);

System.out.println(11);

System.out.println(12);

System.out.println(13);

System.out.println(14);

System.out.println(15);

System.out.println(16);

System.out.println(17);

System.out.println(18);

System.out.println(19);

System.out.println(20);

System.out.println(21);

System.out.println(22);

System.out.println(23);

System.out.println(24);

System.out.println(25);

System.out.println(26);

System.out.println(27);

System.out.println(28);

System.out.println(29);

System.out.println(30);

System.out.println(31);

System.out.println(32);

System.out.println(33);

System.out.println(34);

System.out.println(35);

System.out.println(36);

System.out.println(37);

System.out.println(38);

System.out.println(39);

System.out.println(40);

System.out.println(41);

System.out.println(42);

System.out.println(43);

System.out.println(44);

System.out.println(45);

System.out.println(46);

System.out.println(47);

System.out.println(48);

System.out.println(49);

System.out.println(50);

System.out.println(51);

System.out.println(52);

System.out.println(53);

System.out.println(54);

System.out.println(55);

System.out.println(56);

System.out.println(57);

System.out.println(58);

System.out.println(59);

System.out.println(60);

System.out.println(61);

System.out.println(62);

System.out.println(63);

System.out.println(64);

System.out.println(65);

System.out.println(66);

System.out.println(67);

System.out.println(68);

System.out.println(69);

System.out.println(70);

System.out.println(71);

System.out.println(72);

System.out.println(73);

System.out.println(74);

System.out.println(75);

System.out.println(76);

System.out.println(77);

System.out.println(78);

System.out.println(79);

System.out.println(80);

System.out.println(81);

System.out.println(82);

System.out.println(83);

System.out.println(84);

System.out.println(85);

System.out.println(86);

System.out.println(87);

System.out.println(88);

System.out.println(89);

System.out.println(90);

System.out.println(91);

System.out.println(92);

System.out.println(93);

System.out.println(94);

System.out.println(95);

System.out.println(96);

System.out.println(97);

System.out.println(98);

System.out.println(99);

System.out.println(100);

(7)

Bekannte Wiederholungsanzahl: While

while -Schleifen sind sehr flexibel. Man kann sie auch für eine feste Anzahl von Wiederholungen verwenden.

int i = 0; // Initialisierung while (i < 100) { // Fortsetzungsbedingung

i = i + 1; // Schrittanweisung System.out.println(i);

}

Problem:

I Um zu verstehen, wie oft die Schleife durchlaufen wird, muss man drei Zeilen überblicken.

I In großen while -Schleifen geht die Schrittanweisung unter.

⇒ Fehleranfällig

(8)

Bekannte Wiederholungsanzahl: While

while -Schleifen sind sehr flexibel. Man kann sie auch für eine feste Anzahl von Wiederholungen verwenden.

int i = 0; // Initialisierung while (i < 100) { // Fortsetzungsbedingung

i = i + 1; // Schrittanweisung System.out.println(i);

}

Problem:

I Um zu verstehen, wie oft die Schleife durchlaufen wird, muss man drei Zeilen überblicken.

I In großen while -Schleifen geht die Schrittanweisung unter.

⇒ Fehleranfällig

(9)

Bekannte Wiederholungsanzahl: For

Definition

Eine for -Schleife ist eine Schleife mit Zählvariable (oft i für Index).

Ihr Kopf enthält nicht nur die Bedingung, sondern auch die Initialisierung und die Schrittanweisung.

Syntax: for-Schleife

for (Initialisierung; Bedingung; Schrittanweisung) { Anweisungsblock

}

Beispiel: for-Schleife

for (int i = 0; i < 100; i = i + 1) { System.out.println(i);

}

(10)

Bekannte Wiederholungsanzahl: For

Definition

Eine for -Schleife ist eine Schleife mit Zählvariable (oft i für Index).

Ihr Kopf enthält nicht nur die Bedingung, sondern auch die Initialisierung und die Schrittanweisung.

Syntax: for-Schleife

for (Initialisierung; Bedingung; Schrittanweisung) { Anweisungsblock

}

Beispiel: for-Schleife

for (int i = 0; i < 100; i = i + 1) { System.out.println(i);

}

(11)

Bekannte Wiederholungsanzahl: For

Definition

Eine for -Schleife ist eine Schleife mit Zählvariable (oft i für Index).

Ihr Kopf enthält nicht nur die Bedingung, sondern auch die Initialisierung und die Schrittanweisung.

Syntax: for-Schleife

for (Initialisierung; Bedingung; Schrittanweisung) { Anweisungsblock

}

Beispiel: for-Schleife

for (int i = 0; i < 100; i = i + 1) { System.out.println(i);

}

(12)

Aufgabe: Statistik

Erzeuge eine zufällige Zahl mit Math.random() . Wiederhole das insgesamt 1000 mal und zähle, wie oft diese Zahl dabei größer als 0.3 ist.

Erinnerung: For-Syntax

for (Initialisierung; Bedingung; Schrittanweisung) { Anweisungsblock

}

Bonus:

I Erstelle ein Experiment für sechsseitige Würfel: Wie häufig wird die 6 gewürfelt?

I Wie ist das bei der Summe von zwei sechsseitigen Würfeln? Wie häufig

ist die 7, wie häufig die 12?

(13)

Aufgabe: Statistik

Erzeuge eine zufällige Zahl mit Math.random() . Wiederhole das insgesamt 1000 mal und zähle, wie oft diese Zahl dabei größer als 0.3 ist.

Erinnerung: For-Syntax

for (Initialisierung; Bedingung; Schrittanweisung) { Anweisungsblock

}

Bonus:

I Erstelle ein Experiment für sechsseitige Würfel: Wie häufig wird die 6 gewürfelt?

I Wie ist das bei der Summe von zwei sechsseitigen Würfeln? Wie häufig

ist die 7, wie häufig die 12?

(14)

For vs While

Beispiel: For

for(int i = 0;i < 100;i=i+1) { System.out.println(i);

}

Vergleich: While int i = 0;

while(i < 100) {

System.out.println(i);

i = i + 1;

}

Jede for -Schleife lässt sich auch als while -Schleife schreiben.

Vorteile von for :

I Schleifenkopf zeigt Anzahl der Durchläufe

I Endlosschleife sofort erkennbar

(15)

For vs While

Beispiel: For

for(int i = 0;i < 100;i=i+1) { System.out.println(i);

}

Vergleich: While int i = 0;

while(i < 100) {

System.out.println(i);

i = i + 1;

}

Jede for -Schleife lässt sich auch als while -Schleife schreiben.

Vorteile von for :

I Schleifenkopf zeigt Anzahl der Durchläufe

I Endlosschleife sofort erkennbar

(16)

Das Inkrement und die Faulheit

i = i + 1 ist für Informatiker viel zu viel Schreibarbeit!

Abkürzung für Zuweisungen

Der Ausdruck i += x ist eine Abkürzung für i = i + x . Solche Abkürzungen existieren auch für die anderen arithmetischen Operatoren

- , * , / und % .

Das reicht dem Informatiker aber immer noch nicht.

Inkrement und Dekrement

I Inkrement: i++ erhöht den Wert von i um 1.

I Dekrement: i-- verringert den Wert von i um 1.

(17)

Das Inkrement und die Faulheit

i = i + 1 ist für Informatiker viel zu viel Schreibarbeit!

Abkürzung für Zuweisungen

Der Ausdruck i += x ist eine Abkürzung für i = i + x . Solche Abkürzungen existieren auch für die anderen arithmetischen Operatoren

- , * , / und % .

Das reicht dem Informatiker aber immer noch nicht.

Inkrement und Dekrement

I Inkrement: i++ erhöht den Wert von i um 1.

I Dekrement: i-- verringert den Wert von i um 1.

(18)

Das Inkrement und die Faulheit

i = i + 1 ist für Informatiker viel zu viel Schreibarbeit!

Abkürzung für Zuweisungen

Der Ausdruck i += x ist eine Abkürzung für i = i + x . Solche Abkürzungen existieren auch für die anderen arithmetischen Operatoren

- , * , / und % .

Das reicht dem Informatiker aber immer noch nicht.

Inkrement und Dekrement

I Inkrement: i++ erhöht den Wert von i um 1.

I Dekrement: i-- verringert den Wert von i um 1.

(19)

Das Inkrement und die Faulheit

i = i + 1 ist für Informatiker viel zu viel Schreibarbeit!

Abkürzung für Zuweisungen

Der Ausdruck i += x ist eine Abkürzung für i = i + x . Solche Abkürzungen existieren auch für die anderen arithmetischen Operatoren

- , * , / und % .

Das reicht dem Informatiker aber immer noch nicht.

Inkrement und Dekrement

I Inkrement: i++ erhöht den Wert von i um 1.

I Dekrement: i-- verringert den Wert von i um 1.

(20)

Inhalt

Schleifen Einleitung For Funktionen

Nachmittag: Iterative Refinement und Zufallszahlen

(21)

Funktionen: Einleitung

Bei der Aufgabe zum Würfeln eines Pasches brauchten wir folgenden Code:

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

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

Probleme:

I Wir müssen zweimal das gleiche Schreiben. I Beim Kopieren könnten Fehler passieren.

I Wenn man auf 8-seitige Würfel wechseln möchte, muss man daran

denken, mehrere Codezeilen zu verändern.

(22)

Funktionen: Einleitung

Bei der Aufgabe zum Würfeln eines Pasches brauchten wir folgenden Code:

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

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

Probleme:

I Wir müssen zweimal das gleiche Schreiben.

I Beim Kopieren könnten Fehler passieren.

I Wenn man auf 8-seitige Würfel wechseln möchte, muss man daran

denken, mehrere Codezeilen zu verändern.

(23)

Funktionen: Definition

Definition

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 richtigen Rückgabewert bekommt.

Rückgabewert: Leckerer Kaffee

Parameter/Argumente: Wasser, Pads Anweisungen (von außen unsichtbar):

Wasser kochen;

Padinhalt aufbrühen;

(24)

Funktionen: Syntax

Syntax

Rückgabetyp name (Parameter1, Parameter2, ...) { Anweisungsblock

return Rückgabewert;

}

Beispiel

int rollDice(int sides) {

int result = (int) (Math.random()*sides+1);

return result;

}

(25)

Funktionen: Aufruf

Syntax

name(Argument1, Argument2, ...);

Beispiel rollDice(6);

Begriffsunterscheidung:

I Parameter: Variable für einen Eingabewert einer Funktion

I Argument: konkreter Wert, den diese Variable beim Funktionsaufruf

annimmt

(26)

Funktionen: Aufruf

Syntax

name(Argument1, Argument2, ...);

Beispiel rollDice(6);

Begriffsunterscheidung:

I Parameter: Variable für einen Eingabewert einer Funktion

I Argument: konkreter Wert, den diese Variable beim Funktionsaufruf

annimmt

(27)

Aufgabe: Anhaltewegsfunktion

Schreibe eine Funktion stoppingDistance(double) , die die Formel für den Anhalteweg berechnet.

Anhalteweg = Tachowert · 3

10 + Tachowert 2 100

Erinnerung: Funktionsdefinition Rückgabetyp name (p1, p2, ...) {

Anweisungsblock return Rückgabewert;

}

Erinnerung: Funktionsaufruf name(a1, a2, ...);

Bonus: Erstelle auch Funktionen für die anderen Rechnungen von Tag 1.

(28)

Aufgabe: Anhaltewegsfunktion

Schreibe eine Funktion stoppingDistance(double) , die die Formel für den Anhalteweg berechnet.

Anhalteweg = Tachowert · 3

10 + Tachowert 2 100

Erinnerung: Funktionsdefinition Rückgabetyp name (p1, p2, ...) {

Anweisungsblock return Rückgabewert;

}

Erinnerung: Funktionsaufruf name(a1, a2, ...);

Bonus: Erstelle auch Funktionen für die anderen Rechnungen von Tag 1.

(29)

Funktionen ohne Rückgabewert

Manche Funktionen errechnen keinen Rückgabewert, sondern erzeugen nur Nebeneffekte.

Für solche Funktionen gibt es den Rückabetyp void . Beispiel: Variable mit Namen ausgeben

void printIntVar(String name, int value) { System.out.println(name+" = "+value);

} printIntVar("a",10);

(30)

Zusammenfassung

Beispiel: for-Schleife

for (int i=0;i<100;i++) { System.out.println(i);

}

Beispiel: Funktion

int rollDice(int sides) { double r = Math.random();

int ir = (int) (r*sides);

return ir+1;

}

Beispiel: While-Schleife String s = "";

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

System.out.println(s);

}

Beispiel: Funktionsaufruf

rollDice(6);

(31)

Inhalt

Schleifen Einleitung For Funktionen

Nachmittag: Iterative Refinement und Zufallszahlen

(32)

Mögliche Themen zur Besprechung am Nachmittag

Iterative refinement

I Funktionen als Platzhalter in komplexen Programmen

I Top-Down vs Bottom-Up - wie komme ich an meine erste Zeile Code zu einem Problem?

I Was versteht man unter literate programming?

Zufallszahlen

I Erzeugt Math.random() echten Zufall?

I Mein eigener (dummer) Zufallszahlengenerator.

I Ereignisse mit beliebiger Wahrscheinlichkeit.

Referenzen

ÄHNLICHE DOKUMENTE

Bunte Fenster und die Maus sind Hilfsmittel, aber es geht auch

Es könnte immer ein Würfelwurf mehr nötig sein.... // die gleichen Anweisungen wie

I double bmi(double, double) sieht nach Rechnung aus I erzeugt aber auch Ausgabe. ⇒ Ausgabe lieber in eigener Funktion

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 ,

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