View
229
Download
1
Category
Preview:
Citation preview
Seite 1
CS1005Objektorientierte Programmierung Bachelor of Science (Informatik)
Th Letschert
Einfache Programme:Programm-Argument,Bedingte Anweisungen, Switch, EnumBoolesche Werte und Ausdrücke
© Th Letschert
Seite 2
Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius
Th Letschert
package mypackage;/** * Temperaturumrechnung. * Umrechnung einer Temperaturangabe von Grad Fahrenheit in Grad Celsius. * Eingabe ueber das erste Kommandozeilenargument. * @author Folklore */public final class Temperatur {
private Temperatur() { }
/** * @param args : Temperaturangabe in Grad Fahrenheit */ public static void main(final String[] args) {
double f = 0.0; // Variable, enthaelt Grad in Fahrenheitdouble c = 0.0; // Variable, enthaelt Grad in Celsius//Grad in Fahrenheit von der Kommandozeile einlesen: f = Double.parseDouble(args[0]);//Grad in Celsius berechnen:c = ((f - 32) * 5) / 9;//Grad in F. und C. ausgeben:System.out.println(f + " Grad Fahrenheit ist "
+ c + " Grad Celsius "); }}
Seite 3
Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius
Übersetzen und Ausführen / Programmargument
Th Letschert
~> javac mypackage/Temperatur.java
~> java mypackage.Temperatur 100.0
100.0 Grad Fahrenheit ist 37.77777777777778 Grad Celsius
~>
Programm-Argument
public static void main(final String[] args) {double f = 0.0; // Variable, enthaelt Grad in Fahrenheitdouble c = 0.0; // Variable, enthaelt Grad in Celsius//Grad in Fahrenheit von der Kommandozeile einlesen: f = Double.parseDouble(args[0]);//Grad in Celsius berechnen:c = ((f - 32) * 5) / 9;//Grad in F. und C. ausgeben:System.out.println(f + " Grad Fahrenheit ist "
+ c + " Grad Celsius "); }
Seite 4
Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius
Übersetzen und Ausführen
Th Letschert
Run ~> Run Configurations ...
Programm-Argument
Seite 5
Beispiel: Umrechnen Grad Fahrenheit ~> Grad Celsius
Ausführen auf der Konsole
Als ausführbare Jar-Datei exportieren → temperatur.jar
➢ java cp temperatur.jar mypackage.Temperatur 100 oder➢ java jar temperatur.jar 100
Th Letschert
Seite 6
Programmiersprachen: Syntax und Semantik
SyntaxStruktur Gestalt eines Texts
Syntaxfehler: Fehlerhafter Text, wird vom Compiler abgewiesen
SemantikInhalt, Aussage eines Texts
(Semantischer) Fehler: Text formal korrekt, wird vom Compiler akzeptiert das Programm verhält sich nicht wie gewünscht.
Programmiersprache
Eine Programmiersprache ist festgelegt durch
Syntax : Welche Texte sind korrekte Programmtexte Penible Festlegung der erlaubten Zeichenfolgen, z.B. durch eine
Grammatik
Semantik: Was genau bedeuten die Programmtextez.B. durch Angabe der Aktionen einer realen oder gedachten
Maschine die die Anweisungen der Programme ausführt
Th Letschert
Seite 7
Programmiersprachen: Syntax und Semantik
Th Letschert
package mypackage;
public final class Addit { private Addit() { }
public static void main(final String[] args) {double a = 0.0;dooble b = 0.0;
a = Double.parseDobble(args[0]),b = Double.parseDouble(args(0));
System.out.printline("Die Summe von " + a + + "und " + b + "ist: " + a * b);
}}
Syntaktische und semantische Fehler ?
Seite 8
Programm und Algorithmus
AlgorithmusVerfahren zur Lösung eines Problems in Handlungsschritten
Beispiele: KochrezeptVerfahren zum schriftlichen MultiplizierenAktionsfolge um an eine Bahnfahrkarte zu kommen8Gebrauchsanleitung: Sammlung von Algorithmen....
Darstellung z.B. als (Programm-) Ablaufplan (Flussdiagramm)
Programm
Algorithmus dargestellt in einer Programmiersprache
Programmtext entspricht exakt der definierten Syntax
Definierte Aktionen folgen exakt der definierten Semantik
Th Letschert
Seite 9
Bedingte Anweisung
Syntaxif ( Bedingung ) Anweisung
if ( Bedingung ) Anweisung-1 else Anweisung-2
SemantikAbhängig von der Bedingung wird die Anweisung ausgeführt oder nicht.Abhängig von der Bedingung wird eine von zwei Anweisungen ausgeführt
Th Letschert
Beding-ung
Anweisung 1
Anweisung 2
T
F
Beding-ung
Anweis-ung
Darstellung als Flussdiagramm
Seite 10
Bedingte Anweisung : Beispiel
Th Letschert
package mypackage;
public final class Max {
private Max() { }
public static void main(final String[] args) {int a = Integer.parseInt(args[0]);int b = Integer.parseInt(args[1]);if (a > b) {
System.out.println("Die groessere Zahl ist " + a);} else {
System.out.println("Beide gleich oder " + b + " ist die groessere");
} }}
Die Formatierung ist prinzipiell frei: Den Compiler interessieren Layout-Fragen nicht. Aber:1. Die Text-Struktur soll immer die logische Struktur wiedergeben.2. Die Textstruktur soll immer gängigen Standards folgen.
Seite 11
Bedingte Anweisung : Beispiel
Th Letschert
Maximum von drei WertenAlgorithmus dargestellt als Flussdiagramm
a > b
max = a
max = b
T
F
max > c
max ausgeben
max = c
T
F
Ist dieser Algorithmus korrekt?Wie kann man das feststellen?
Seite 12
Bedingte Anweisung : Beispiel
Th Letschert
Maximum von drei WertenAlgorithmus dargestellt als FlussdiagrammTest mit repräsentativen Werten
a > b
max = a
max = b
T
F
max > c
max ausgeben
max = c
T
F
Repräsentative Testwerte, z.B.:1,1,1 alle gleich1,2,3 aufsteigend3,2,1 absteigend1,2,0 auf-, absteigend3,2,4 ab, aufsteigend...
Seite 13
Bedingte Anweisung : Beispiel
Th Letschert
Maximum von drei WertenAlgorithmus durch Zusicherungen verifizieren
a > b
max = a
max = b
T
F
c > max
max ausgeben
max = c
F
T
a > b & max = a
a ≤ b & max = ba > b & max = a || a ≤ b & max = b=> max ≥ a & max ≥ b & (max =a || max = b)
max ≥ a & max ≥ b & c > max& (max =a || max = b)=>c ≥ a & c ≥ b
max ≥ a & max ≥ b & c ≤ max& (max =a || max = b)
in max ist die Größere der beiden ersten Werte!
max ≥ a & max ≥ b & max ≥ c (max =a || max = b || max = c)
in max ist die Größere der drei Werte!
Seite 14
Bedingte Anweisung : Beispiel
Th Letschert
Maximum von drei Werten als Programm mit Zusicherungen
package mypackage;public final class Max { private Max() { } public static void main(final String[] args) {
int a = Integer.parseInt(args[0]);int b = Integer.parseInt(args[1]);int c = Integer.parseInt(args[2]);int max;
if (a > b) { max = a;assert a > b && max == a;
} else {max = b;assert a <= b && max == b;
}assert (max >= a && max >= b)
&& (max == a || max == b);if (c > max) {
max = c;}assert (max >= a && max >= b && max >= c) && (max == a || max == b || max == c);
}}
Auswertung von Zusicherungen aktivieren: java -ea ···in Eclipse über run ~> run Configurations ~> Arguments VM-Arguments: -ea
Programm-Idee: max enthält das Maximumum von zunehmend vielen Werten.
Seite 15
Switch-Anweisung
Th Letschert
Switch-AnweisungVerallgemeinerung der bedingten AnweisungBeispiel:
int z = ···
switch(z) {
case 0:
System.out.println("Das muss ich einen Mathe-Prof fragen");
break;
case 2: case 3: case 5: case 7:
System.out.println(z + " ist Primzahl");
break;
case 4: case 6: case 8: case 9: case 10:
System.out.println(z + " ist keine Primzahl");
break;
default:
System.out.println("Das muss ich noch mal nachdenken");
break;
}
switch ist nur auf „einfachen, diskreten“ Werten erlaubt:int, ··· und Enum-Typen
Seite 16
Enum und Switch
Th Letschert
Beispiel Definition Enum-Typ
package mypackage;import java.util.Scanner;
public final class SmallPrim { private SmallPrim() { }
private enum Tag { Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag };
public static void main(final String[] args) {Scanner scan = new Scanner(System.in);int z = scan.nextInt();Tag tag = null;switch(z) { ··· }if (tag != null) System.out.println(tag.name());
}}
Seite 17
Enum und Switch
Th Letschert
Beispiel:
Verwendung
Scanner scan = new Scanner(System.in);int z = scan.nextInt();Tag tag = null;switch(z) {case 1:
tag = Tag.Montag; break;case 2:
tag = Tag.Dienstag; break;case 3:
tag = Tag.Mittwoch; break;case 4:
tag = Tag.Mittwoch; break;case 5:
tag = Tag.Freitag; break;case 6:
tag = Tag.Samstag; break;case 7:
tag = Tag.Sonntag; break;default:
System.out.println("Fehlerhafte Eingabe!");break;}if (tag != null)
System.out.println(tag.name());
Seite 18
Boolesche Werte und Ausdrücke
Th Letschert
Boolescher Werte und AusdrückeBoolescher Wert: WahrheitswertBoolescher Ausdruck: Ausdruck der wahr oder falsch ist.
boolean w = true;
w = 4 > 5;
System.out.println(w);
w = (4 > 5) || (5 > 4);
if (w)
System.out.println(w);
else
System.out.println(!w);
! : Negation|| : Oder&& : Und
Ausgabe ?
Seite 19
Bedingte Ausdrücke
Th Letschert
Bedingter Ausdruck: Wertberechnung abhängig von einer Bedingung
Bedingte Anweisung (if): Bedingung steuert Ausführung von Anweisungen
Bedingter Ausdruck:Bedingung steuert Auswertung von Ausdrücken
int a = ···
int b = ···
int max = (a > b) ? a : b;
Wenn a>b giltdann ist der Wert asonst ist der Wert b
Seite 20
Bedingte Ausdrücke
Th Letschert
Bedingter Ausdruck:
Oft Kompaktere Darstellung eines Algorithmus als mit if
int a = ···int b = ···int c = ···System.out.println("Maximum:"
+ (a>b ? ( a>c ? a : c) : (b>c ? b : c) ) );
Einsatz des Bedingungsoperators nicht übertreiben: Keine zu komplexen Ausdrücke konstruieren.
Recommended