Programmiervorkurs WS 2010/11 Ablaufsteuerung

Werbung
Programmiervorkurs SS 2013
Schleifen
Termin 3
Teile des Programms mehrfach ausführen
• Ein Befehl soll mehrfach ausgeführt werden, z.B.:
public class MyCounter {
public static void main(String[] args) {
System.out.println(1);
}
}
Teile des Programms mehrfach ausführen
• Ein Befehl soll mehrfach ausgeführt werden, z.B.:
public class MyCounter {
public static void main(String[] args) {
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);
}
Copy & Paste ist eine schlechte
}
Idee!
(Code wird lang und unübersichtlich.)
Teile des Programms mehrfach ausführen
• while-Schleife
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
// solange i < 10 ...
System.out.println(i); //
gib i aus
i++;
//
und erhoehe i um 1
}
}
}
Teile des Programms mehrfach ausführen
• while-Schleife
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
// solange i < 10 ...
System.out.println(i); //
gib i aus
i++;
//
und erhoehe i um 1
}
}
}
Abbruch wenn false
Teile des Programms mehrfach ausführen
• while-Schleife
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
// solange i < 10 ...
System.out.println(i); //
gib i aus
i++;
//
und erhoehe i um 1
}
}
}
geschweifte Klammern
begrenzen die Schleife
Teile des Programms mehrfach ausführen
• while-Schleife
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
// solange i < 10 ...
System.out.println(i); //
gib i aus
}
}
}
Teile des Programms mehrfach ausführen
• while-Schleife
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
// solange i < 10 ...
System.out.println(i); //
gib i aus
}
}
}
Achtung vor Endlosschleife!
Bist Du sicher, dass der Ausdruck in () irgendwann false wird?
Teile des Programms mehrfach ausführen
• for-Schleife
(ermöglicht kompaktere Notation)
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
}
}
// solange i < 10 ...
//
gib i aus
//
und erhoehe i um 1
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
}
}
// solange i < 10 ...
//
gib i aus
//
und erhoehe i um 1
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
}
// solange i < 10
// gib i aus
// und erhoehe i um 1
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
} Initialisierung
Ausdruck
Update
// solange i < 10
// gib i aus
// und erhoehe i um 1
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
} Initialisierung
Ausdruck
(wird vor dem ersten
Schleifendurchlauf ausgeführt)
Update
// solange i < 10
// gib i aus
// und erhoehe i um 1
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
// solange i < 10
// gib i aus
// und erhoehe i um 1
}
}
} Initialisierung
Ausdruck
Update
(wird vor jedem
Schleifendurchlauf ausgewertet)
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
// solange i < 10
// gib i aus
// und erhoehe i um 1
}
}
} Initialisierung
Ausdruck
Update
(wird nach jedem
Schleifendurchlauf ausgeführt)
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
}
Nur eine Anweisung in Schleifenblock?
→ Klammern können entfallen.
(auch bei while-Schleife)
// solange i < 10
// gib i aus
// und erhoehe i um 1
Teile des Programms mehrfach ausführen
• for-Schleife
public class MyCounter {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) System.out.println(i);
}
}
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
n! = 1 · 2 · ... · n
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
public class Fakultaet {
public static void main(String[] args) {
//Berechne die Fakultaet f von n:
int n = 5;
int f = 1;
for (int i = 1; i <= n; i++) {
f *= i;
}
System.out.println(
"Die Fakultaet von " + n + " ist " + f);
}
}
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
public class Fakultaet {
public static void main(String[] args) {
//Berechne die Fakultaet f von n:
int n = 5;
int f = 1;
for (int i = 1; i <= n; i++) {
f *= i;
System.out.println(i + " " + f); //Test
}
System.out.println(
"Die Fakultaet von " + n + " ist " + f);
}
}
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
public class Fakultaet {
Ausgabe:
public static void main(String[] args) { 1 1
//Berechne die Fakultaet f von n:
2 2
int n = 5;
3 6
int f = 1;
4 24
for (int i = 1; i <= n; i++) {
5 120
f *= i;
System.out.println(i + " " + f); //Test
}
System.out.println(
"Die Fakultaet von " + n + " ist " + f);
}
}
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
import java.util.Scanner;
public class Fakultaet {
public static void main(String[] args) {
//Eingabe einer Zahl n:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//Berechne die Fakultaet f von n:
int f = 1;
for (int i = 1; i <= n; i++) f *= i;
System.out.println(
"Die Fakultaet von " + n + " ist " + f);
}
}
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
import java.util.Scanner;
public class Fakultaet {
public static void main(String[] args) {
//Eingabe einer Zahl n:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//Berechne die Fakultaet f von n:
int f = 1;
for (int i = 1; i <= n; i++) f *= i;
System.out.println(
"Die Fakultaet von " + n + " ist " + f);
}
}
Teile des Programms mehrfach ausführen
• Beispiel: Berechnung der Fakultät einer Zahl n
import java.util.Scanner;
public class Fakultaet {
public static void main(String[] args) {
//Eingabe einer Zahl n:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//Berechne die Fakultaet f von n:
long f = 1; //die Fakultaet waechst schnell!
for (int i = 1; i <= n; i++) f *= i;
System.out.println(
"Die Fakultaet von " + n + " ist " + f);
}
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
3
4
5
6
7
8
9
10
2
4
6
8
10
12
14
16
18
20
3
6
9
12
15
18
21
24
27
30
4
8
12
16
20
24
28
32
36
40
5
10
15
20
25
30
35
40
45
50
6
12
18
24
30
36
42
48
54
60
7
14
21
28
35
42
49
56
63
70
8
16
24
32
40
48
56
64
72
80
9
18
27
36
45
54
63
72
81
90
10
20
30
40
50
60
70
80
90
100
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
3
4
5
6
7
8
9
10
2
4
6
8
10
12
14
16
18
20
3
6
9
12
15
18
21
24
27
30
4
8
12
16
20
24
28
32
36
40
7·8=?
5
10
15
20
25
30
35
40
45
50
6
12
18
24
30
36
42
48
54
60
7
14
21
28
35
42
49
56
63
70
8
16
24
32
40
48
56
64
72
80
9
18
27
36
45
54
63
72
81
90
10
20
30
40
50
60
70
80
90
100
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
3
4
5
6
7
8
9
10
2
4
6
8
10
12
14
16
18
20
3
6
9
12
15
18
21
24
27
30
4
8
12
16
20
24
28
32
36
40
7 · 8 = 56
5
10
15
20
25
30
35
40
45
50
6
12
18
24
30
36
42
48
54
60
7
14
21
28
35
42
49
56
63
70
8
16
24
32
40
48
56
64
72
80
9
18
27
36
45
54
63
72
81
90
10
20
30
40
50
60
70
80
90
100
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
public class Einmaleins {
public static void main(String[] args) {
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
}
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
public class Einmaleins {
public static void main(String[] args) {
//Aeussere Schleife: Iteriere ueber Zeilen
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
}
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
public class Einmaleins {
public static void main(String[] args) {
for (int zeile = 1; zeile <= 10; zeile++) {
//Innere Schleife: Iteriere ueber Spalten
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
}
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
public class Einmaleins {
public static void main(String[] args) {
//Aeussere Schleife: Iteriere ueber Zeilen
for (int zeile = 1; zeile <= 10; zeile++) {
//Innere Schleife: Iteriere ueber Spalten
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t"); //Tabulator
}
System.out.print("\n"); //Zeilenumbruch
}
}
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
3
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
3
4
5
6
7
8
9
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
3
4
5
6
7
8
9
10
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
2
3
4
5
6
7
8
9
10
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Teile des Programms mehrfach ausführen
• Mehrfachschleifen: Das kleine Einmaleins
Gesucht ist ein Programm, das folgende Tabelle ausgibt:
1
2
2
4
3
4
5
6
7
8
9
10
for (int zeile = 1; zeile <= 10; zeile++) {
for (int spalte = 1; spalte <= 10; spalte++) {
int produkt = zeile * spalte;
System.out.print(produkt + "\t");
}
System.out.print("\n");
}
Aufgabe
• Erstellt ein Programm, das die Kreiszahl π nach
der Reihenentwicklung von Leibniz berechnet:
π
1 1 1 1 1
= − + − + −
4 1 3 5 7 9
• Erstellt ein Programm, das die Kreiszahl π
durch das zufällige Streuen von Punkten in ein
Quadrat ermittelt.
Verwendet als Zufallsgenerator die Methode
Math.random().
Aufgabe
• Erstellt ein Programm, das (mit Hilfe von
for-Schleifen) symmetrische Tannenbäume
(variabler Höhe) generiert. Der Stamm hat immer
eine Höhe von zwei Zeilen und die Krone mindestens drei.
*
***
*****
*
*
Höhe 3
*
***
*****
*******
*********
*
*
Höhe 5
Aufgabe
• Ändert Euer Programm so, dass es auch Wälder
mit konstanter Baumhöhe generieren kann.
*
***
*****
*
*
*
*
*
*
***
***
***
***
*****
*****
*****
*****
*
*
*
*
*
*
*
*
Wald mit Bäumen der Höhe 3.
Herunterladen