Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe
Einführung in die
Programmierung mit Java
4. Vorlesung WS 2001/2002
Übersicht
• Besprechung der Übungsaufgaben
• Besondere Zuweisungsbefehle
– Prä-/Post-Inkrement bzw. Dekrement
• Kontrollstrukturen
– Fallunterscheidungen
– break-Anweisung
• Programmentwicklung für einfache Probleme
– Entwicklungs- und Programmierrichtlinien
– Namenskonventionen
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
2
1. Übungsaufgabe vom 7. 11.
Erzeugen Sie ein Array mit 1000 zufälligen doubleWerten und geben Sie das Minimum, das Maximum
sowie den Durchschnitt aller Werte aus.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
3
Lösung zu Aufgabe 1)
Teil 1/3
public class Statistik extends java.lang.Object {
public static void main (String args[]) {
// Variablendeklaration
double min, max, summe, mittelwert;
int i;
// Erzeugen eines Arrays mit 1000 Double-Werten
// und füllen des Arrays mit Zufallszahlen
double[] werte = new double[1000];
for (i=0; i<werte.length; i=i+1)
werte[i]=Math.random();
... Fortsetzung auf der nächsten Seite
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
4
Lösung zu Aufgabe 1)
Teil 2/3
// Bestimmung des Minimums, des Maximums,
// der Summe und des Mittelwertes
min = werte[0];
// min, max und summe werden
max = werte[0];
// mit dem ersten Wert des
summe = werte[0];
// Arrays initialisiert.
for (i=1; i<werte.length; i=i+1) { // Schleife beginnt
summe = summe+werte[i];
// mit 2. Element
if (werte[i]<min)
min=werte[i];
else if (werte[i]>max)
max=werte[i];
}
mittelwert = summe / werte.length;
... Fortsetzung auf der nächsten Seite
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
5
Lösung zu Aufgabe 1)
Teil 3/3
// Ausgabe des Ergebnisses
System.out.print("Minimum: ");
System.out.print(min);
System.out.print("
Maximum: ");
System.out.print(max);
System.out.print("
Mittelwert: ");
System.out.println(mittelwert);
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
6
2. Übungsaufgabe vom 7. 11.
Drehen Sie die Reihenfolge der Elemente eines Arrays
mit Integerzahlen um und geben Sie das Ergebnis aus.
Beispiel:
gegeben: {4,12,67,90,-10,39,0,1}
Ausgabe: {1,0,39,-10,90,67,12,4}
a) unter Verwendung eines zweiten Arrays (Zielarray)
b) innerhalb des selben Arrays
Lösung:
a) trivial
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
7
Lösung zu Aufgabe 2) a)
public class Array1 extends Object {
public static void main (String args[]) {
int i;
int[] anfangsarray = {4,12,67,90,-10,39,0,1};
int[] zielarray = new int[anfangsarray.length];
for (i=0; i<anfangsarray.length; i=i+1)
zielarray [anfangsarray.length-1-i]=anfangsarray [i];
// Ausgabe des Zielarrays
for (i=0; i<anfangsarray.length; i=i+1) {
System.out.print(zielarray[i]);
System.out.print(" ");
}
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
8
2. Übungsaufgabe vom 7. 11.
Drehen Sie die Reihenfolge der Elemente eines Arrays
mit Integerzahlen um und geben Sie das Ergebnis aus.
Beispiel:
gegeben: {4,12,67,90,-10,39,0,1}
Ausgabe: {1,0,39,-10,90,67,12,4}
a) unter Verwendung eines zweiten Arrays (Zielarray)
b) innerhalb des selben Arrays
Lösung:
a) trivial
b) 1. Tauschen der Werte mittels Hilfsvariable
2. Vorsicht Falle: Schleife darf nur bis Arraygröße / 2 laufen,
sonst wird der Array-Inhalt zweimal umgedreht!!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
9
Lösung zu Aufgabe 2) b)
public class Array2 extends Object {
public static void main (String args[]) {
int i, tausch;
// tausch ist Hilfsvariable
int[] array = {4,12,67,90,-10,39,0,1};
for (i=0; i < array.length/2; i=i+1) {
tausch=array[i];
// "Dreieckstausch"
array[i]=array[array.length-1-i];
array[array.length-1-i]=tausch;
}
// Ausgabe des Arrays
for (i=0; i<array.length; i=i+1) {
System.out.print(array[i]);
System.out.print(" ");
}
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
10
Kontrollstrukturen: switch-Anweisung
• dient zur Realisierung von Fallunterscheidungen
• Syntax:
switch (Ausdruck ) {
case Wert1 : Anweisung1; // 1. Fall Ausdruck=Wert1
case Wert2 : Anweisung2; // 2. Fall Ausdruck=Wert2
...
default: Ansonsten-Anweisung; // ansonsten
}
• es werden alle Anweisungen ab der ersten erfüllten caseBedingung ausgeführt (inkl. der Ansonsten-Anweisung )
• Ausdruck muss vom Typ byte, short, int oder char sein
• Werti muss eine Konstante vom gleichen Typ wie Ausdruck sein
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
11
Beispiel 1 zur switch-Anweisung
Programm:
Ausgabe:
class Switch1 {
public static void main (String args[]) {
int i;
for (i=0; i < 10; i=i+1)
switch(i) {
case 1: System.out.println("eins");
case 2: System.out.println("zwei");
case 5: System.out.println("fünf");
default: System.out.println(i);
}
}
}
0
eins
zwei
fünf
1
zwei
fünf
2
3
4
fünf
5
6
7
8
9
Problem: fehlerhafte Ausgabe, da jeweils nach der ersten
passenden case-Bedingung alle anderen Anweisungen
ohne weitere Überprüfung ausgeführt werden!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
12
Die break-Anweisung (1)
• dient zum Abbruch von switch-Fallunterscheidungen
• Syntax:
switch ( Ausdruck ) {
case Wert1 : { Anweisung1; break; }
case Wert2 : { Anweisung2; break; }
...
default: Ansonsten-Anweisung;
}
• Der Programmablauf wird bei Ausführung eines breakBefehls hinter der switch-Anweisung fortgesetzt!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
13
Beispiel 2 zur switch-Anweisung
Programm:
Ausgabe:
class Switch2 {
public static void main (String args[]) {
int i;
for (i=0; i < 10; i=i+1)
switch(i) {
case 1: {System.out.println("eins"); break;}
case 2: {System.out.println("zwei"); break;}
case 5: {System.out.println("fünf"); break;}
default: System.out.println(i);
}
}
}
0
eins
zwei
3
4
fünf
6
7
8
9
Die Ausgabe ist nun korrekt, da die switch-Anweisung jeweils nach der
Ausführung der passenden case-Bedingung mittels break verlassen wird.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
14
Die break-Anweisung (2)
• kann auch zum Abbruch von Schleifen (for, while, dowhile) eingesetzt werden
Beispiel while-Schleife:
while ( boolean-Ausdruck1 ) {
...
if ( boolean-Ausdruck2 ) break; // Abbruch
...
}
• Der Programmablauf wird hinter der
Schleifenanweisung fortgesetzt
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
15
Entwicklung einfacher Programme
2. Programmentwurf
1. Problemanalyse
Software-Entwicklung
für einfache Probleme
4. Testen
3. Implementierung
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
16
Software-Entwicklung: Problemanalyse
Was sind die
Eingangsdaten?
Was soll
ausgegeben
werden?
Ein- und Ausgabe
Wie werden aus
den Eingabedaten
die Ausgabedaten
hergeleitet?
Zerlegung in
Teilprobleme
Problemanalyse
Formalisierung
Randbedingungen
Komplexität
Software-Entwicklung
für einfache Probleme
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
17
Software-Entwicklung: Programmentwurf
Zerlegung in
Einzelschritte
Notation
in Pseudo-Code
als Ablaufdiagramm
direkt in der
Zielprogrammiersprache
Datenstrukturen
Programmentwurf
Algorithmen
Auswahl
geeigneter
Software-Entwicklung
für einfache Probleme
Roter Faden
=
Hauptprogramm
für viele Teilprobleme
gibt es bereits fertige
Alg. + DS
(siehe Vorlesung
Diskrete Mathe)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
18
Software-Entwicklung: Implementierung
Software-Entwicklung
für einfache Probleme
Realisierung
in einer konkreten
Programmiersprache
Auswahl geeigneter
Datentypen
Implementierung
Berücksichtigung
vorhandener
Funktionsbibliotheken
Schrittweise Umsetzung
des Pseudo-Codes
in der Ziel-Programmiersprache
Dokumentation des
Quelltextes nicht vergessen!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
19
Software-Entwicklung: Testen
Software-Entwicklung
für einfache Probleme
Korrektheit
Terminierung
Sicherung der
Programmeigenschaften
Falsche
Ergebnisse
Absturz (z.B.
Durch Fehleingaben)
typische Fehler
Testen
Endlossschleifen
Testszenarien
definieren
Programm mit repräsentativen
Eingabedaten starten und
Ergebnisse überprüfen
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
20
Zerlegung in
Einzelschritte
in Pseudo-Code
Was sind die
Eingangsdaten?
Was soll
ausgegeben
werden?
Zerlegung in Teilprobleme
Formalisierung
Notation
als Ablaufdiagramm
direkt in der
Zielprogrammiersprache
Ein- und Ausgabe
Datenstrukturen
 Programmentwurf
Wie werden aus
den Eingabedaten
die Ausgabedaten
hergeleitet?
 Problemanalyse
Auswahl geeigneter
Algorithmen
für viele Teilprobleme
gibt es bereits
fertige Alg.+DS
(siehe Vorlesung
Diskrete Mathe)
Roter Faden
=
Hauptprogramm
Randbedingungen
Komplexität
Software-Entwicklung
für einfache Probleme
Korrektheit
Terminierung
falsche
Ergebnisse
Absturz
(z.B. durch
Fehleingaben)
Endlossschleifen
Sicherung der
Programmeigenschaften
typische Fehler
 Testen
Testszenarien
definieren
Programm mit
repräsentativen
Eingabedaten
starten und
Ergebnisse überprüfen
 Implementierung
Realisierung
in einer konkreten
Programmiersprache
Auswahl geeigneter
Datentypen
Berücksichtigung
vorhandener
Funktionsbibliotheken
Schrittweise Umsetzung
des Pseudo-Codes
in der Ziel-Programmiersprache
erst ab hier
erfolgt die
Eingabe am
Rechner
Dokumentation des
Quelltextes nicht vergessen
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
21
Übung im GIS-Labor
• Schreiben Sie ein Programm, das die Summe der
Zahlen von 1 bis n (n nist ein n
ganzzahliger
Wert)
( n  1)
i
berechnet.

2
i 1
• Hacker-Lösung:
Schleife von 1 bis n und Aufsummieren der Zahlen
• Einfache und elegantere Lösung:
n
Formalisierung:
Wert   i
i 1
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
22
Übungsaufgabe
Schreiben Sie ein Programm, das den Wert einer
ganzzahligen Variablen w (0 bis 999) so als Text ausgibt,
wie er ausgesprochen wird.
Beispiele:
w = 285
Ausgabe: "zweihundertfünfundachtzig"
w = 513
Ausgabe: "fünfhundertdreizehn"
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
23
Herunterladen