Imperative Programmierung

Werbung
Informatik I
Bachelor of Arts: Translation Studies for Information Technologies
Teil 1 : Grundlagen, Historie und imperative Programmierung
Stephan Mechler
1. Vorlesung
28.09.2017
Übersicht
Was ist Informatik?
▪
▪
Informatik
♦ Englisch: Computer Science, Wissenschaft vom
Computer
Was ist ein Computer?
♦ ...mehr: Ihre Ausarbeitung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme →
2
Rechnerarchitektur - I
Pascaline (1642 )
Soroban ~ 1600
MAC
IBM-Thinkpad
Resulta BS 7
Iphone / VR / KI
Supercomputer
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
3
Moorsches Gesetz
Berechnungen pro Sekunde und 1000 Dollar
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
4
Geschwindigkeiten
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
5
Rechnerarchitektur - I
Schema:
Prozessor
Speicher
Controller/Bus
Bus
Peripherie
VNA:
ALU + Steuereinheit
Speicherwerk
Eingabe-/Ausgabewerk
PC (schematisch):
RAM +Northbridge
FSB
CPU
Southbridge
PCI/PCIe
•Karten
•Steckplätze
•Interne Karten
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
6
Rechnerarchitektur - Mainboard
Mainboard (Stand 2011)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
7
Rechnerarchitektur - Layout
PC (Stand 2004 / 2010):
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Informatik → Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→
8
Elementare Begriffe - 1
Was ist der Unterschied
zwischen Daten und Information?
♦ Daten = physikalische Zustände + ihre Interpretation
♦ Information = Daten + ihre Bedeutung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen
9
Elementare Begriffe – 2
Beispiel:
0010
1001
Speicherzustand
Interpretation
2
9
Daten
Bedeutung
29 °C
Information
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was ist ein Computer? → Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen
10
Elementare Begriffe – 1
Informatik und
Elektronische Datenverarbeitung (EDV)
▪
▪
Informatik bezeichnet die Wissenschaft von der
systematischen Verarbeitung von Informationen,
insbesondere der automatischen Verarbeitung mit Hilfe
von Rechenanlagen.
Die Elektronische Datenverarbeitung ist der
Sammelbegriff für die Erfassung und Manipulation von
Daten durch Computer.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
11
Elementare Begriffe – 3
▪
▪
▪
Daten- (oder Informations-) Verarbeitung
♦ Verknüpfung und Transformation von Daten nach
bestimmten Vorschriften
♦ EVA-Prinzip: Eingabe-Verarbeitung-Ausgabe
♦ Diese Vorschriften nennt man Algorithmen
Informatik: (im engeren Sinne) Wissenschaft von der
elektronischen Datenverarbeitung (EDV), also mittels
Computer
Datenverarbeitung wird benutzt, um Probleme der realen
Welt zu lösen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
12
Teildisziplinen
Angewandte Informatik/Realisierung
Technische Informatik
Praktische Informatik
Theoretische Informatik
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
13
Theoretische Informatik
Theoretische Grundlagen der Informatik
♦
♦
♦
♦
♦
♦
♦
Theorie formaler Sprachen
Automatentheorie
Berechenbarkeits- und Komplexitätstheorie
Graphentheorie
Kryptologie
Logik (u. a. Aussagenlogik und Prädikatenlogik),
formaler Semantik
Grundlagen für den Bau von Compilern von Programmiersprachen und
die mathematische Formalisierung von Problemstellungen. Sie ist somit
das formale Rückrat der Informatik.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
14
Technische Informatik
Hardwareseitigen Grundlagen der Informatik
♦
Rechnerarchitektur
● Mikroprozessor
● Speicher
● Controller
● Peripherie
♦
Rechnerkommunikation
● Verteilten Systeme
● Grid-Computing
● Middleware
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
15
Praktische Informatik
▪
▪
Entwicklung von Softwarekomponenten
♦ Elemente von Computerprogrammen (Datentypen,
Datenstrukturen, Algorithmen)
♦ Softwaretechnologie (auch: SW-Engineering oder
Programmiertechnik)
♦ Programmierverfahren (funktional,
objektorientiert etc.)
Systemsoftware
♦ Betriebssysteme
♦ Software-Entwicklungsumgebungen (Compiler,
Debugger etc.)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
16
Angewandte Informatik
▪
▪
Allgemeine Anwendungen
♦ Datenbanksysteme
♦ Informationssysteme
♦ Künstliche Intelligenz
♦ Computergrafik
♦ Bildverarbeitung
♦ Multimediasysteme
♦ Simulation
Spezielle Anwendungsgebiete
♦ Wirtschaftsinformatik
♦ Medizinische Informatik
♦ Technische Informations- und Steuerungssysteme (z.B.
Robotik)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
17
Bereiche
▪
▪
▪
Grundlagen
(Formalwissenschaften: Mathematik, Natur-,
Wirtschafts- und Ingenieurwissenschaften aber
auch Linguistik oder Erkenntnistheorie)
Informationssysteme und ihre Entwicklung
Anwendung der Informatik
(Medizin, Telekommunikation, Biotechnologie,
Geschäfts- und Produktionsprozesse etc.)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Was Ist Information? → Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung
18
Betriebssysteme
▪
▪
Was ist ein Betriebssystem:
♦ Software, die den Betrieb des Computers
ermöglicht.
♦ Verwaltet Betriebsmittel wie Speicher, Einund Ausgabegeräte
♦ steuert und überwacht die Ausführung von
Programmen.
Englisch operating system (OS)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Felder der Informatik → Betriebssysteme→ Programmiersprachen → Java Einführung → Java Beispiel
19
Programmiersprachen
▪
▪
▪
Was ist ein Programmiersprache:
♦ formale Sprache zur Erstellung von
Verarbeitungsanweisungen
♦ Lesbar und verständlich für den Menschen
lesbare Beschreibung heißt Quelltext
Quelltext wird zur Abarbeitung in
Maschinensprache überführt
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Betriebssysteme→ Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE
20
AUSBLICK
▪
▪
Java „Crash-Kurs“
Elementare Begriffe der Programmierung
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
21
??? Fragen
Welche
Fragen
haben Sie?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
22
Zusammenhang der Programmiersprachen
1957
1960
1965
1970
Fortran I
Lisp
Cobol
Algol-W
Pascal
Algol 60
PL/I
Algol 68
C
Fortran IV
Basic
Simula 67
BCPL
1975
Fortran 77
Smalltalk 80
1980
Common Ada Modula-2
1985 Lisp
C++
ObjectPascal
CLOS
Ansi-C
Delphi
1990
Fortran 90
Oberon-2
Java
1995
Fortran 95
Ada 95
2000
Fortran 2003*
C# / .net
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
23
Was Ihnen keiner erzählt …
Java ist mit
132.186 km2 die
zweitgrößte
Insel Sumatras
Hauptstadt
Jakarta
100 Vulkane
Viele
Bodenschätze
… und
Kaffeanbau
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
24
Geschichtliches
▪
▪
▪
▪
▪
▪
▪
▪
▪
Java gibt es seit 1991 – ursprünglich: Oak
Sun Microsystems - J. Gosling
gedacht zur Steuerung von
Haushaltsgeräten und in der
Unterhaltungselektronik (Star Seven)
1994: Internet-Boom 1994 → Java,
HotJava
1995: Netscape-Navigator 2.0
JavaSoft, http://java.sun.com
1995: Java Version 1.0; 1996: Version 1.1
1998: Version 1.2, Java 2, SE – ME – EE
heute 1.4.x – Version 8.0 (Oracle)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Programmiersprachen → Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius
25
JETZT
Die erste Tasse
Java
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
26
Kommandozeile – 1
▪
▪
▪
▪
MS DOS-Eingabeaufforderung starten
Start – Alle Programme – Zubehör –Eingabeaufforderung
z:\
Unterverzeichnis anlegen
md javueb1
In das Unterverzeichnis wechseln
cd javueb1
Editor starten
notepad Hello.java
Neue Datei anlegen? – Ja
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
27
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
28
Kommandozeile – 2
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
29
Kommandozeile – 3
▪
▪
▪
▪
Datei speichern
(Prüfen Sie, ob Sie im Verzeichnis javueb1 speichern)
Datei umbenennen
(nur dann notwendig, wenn Sie den Editor ohne den Dateinamen als
Parameter aufgerufen hatten)
ren Hello.java.txt Hello.java
Compilieren
“c:\programme\java\jdk1.8.0_121\bin\javac“ Hello.java
(… bitte warten  …)
Ausführen
java -classpath “.“ Hello
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
30
Kommandozeile – 4
▪
▪
▪
Funktioniert nicht? → Editor, kontrollieren
Java unterscheidet Groß-/Kleinschreibung!
Probieren Sie: java heLLo
Ein paar typische Fehler werden in der Übung
noch ausführlich besprochen …
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
31
Kommandozeile – 5
Java Quellcode
Compiler
▪
▪
▪
Java Bytecode
▪
Virtuelle Maschine
Laden,
Verifizieren,
Interpretieren
Prozessor
Java-Programme liegen
in Form von so
genannten Klassen vor.
Ein Programm kann aus
mehreren Klassen
bestehen.
Eine Klasse wird als
Start-Programmteil
festgelegt.
(Kommt später)
Wir werden zunächst nur
mit Programmen
arbeiten, die aus einer
einzelnen Klasse
bestehen.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
32
Achtung!
Die erste Tasse Java
und
ganz viel Neues
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
33
Merke!
Eine Klasse = Eine Datei
Name Klasse = Name .java Datei
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
34
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
35
Nachbetrachtung!
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
public, class, static, void, String
= Schlüsselwörter
Schlüsselwörter = Feststehende Begriffe der Sprache
(feststehender Token / Lexik -> Grammatik)
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
36
Nachbetrachtung!
public class Hello {
class Hello {
class = Eine Klasse wird class „Name“
{ definiert.
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
37
Nachbetrachtung!
public class Hello {
public = Zugriffsattribut
Zugriffsattribute legen fest, ob und wie
andere Klassen auf die eigene Klasse
zugreifen können
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
38
Nachbetrachtung!
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
main = Wenn eine Application
gestartet wird, wird automatisch die
Methode main() aufgerufen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
39
Nachbetrachtung!
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
System.out.println:
System ermöglicht Zugriff auf StandardFunktionen des Computer-Systems
Objekt out verwaltet Standardausgabe
Daten, in “...“ zwischen () an println() übergeben
werden, werden auf den Monitor - ausgegeben.
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
40
Nachbetrachtung!
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
Verwaltung
Anweisungen = Eingabe/Verarbeitung/Ausgabe
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
41
Nachbetrachtung!
public class Hello {
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
}
{ } = Kapselung von
Anweisungs- und Definitionsblöcken
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
42
Nachbetrachtung!
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
;
Jede Anweisung wird mit ; abgeschlossen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
43
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Einführung → Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare
44
Eclipse – 1
▪
▪
▪
Eclipse starten
Start – Alle Programme – Eclipse 3.x – Eclipse
(… Bitte warten  bis zu 2 Minuten …)
Select a workspace – z:\inf1\workspace – Checkhaken bei Use
this as default – Ok
Startbildschirm: Der Pfeil rechts oben führt Sie zur Oberfläche. Falls
Sie irgendwann zum Startbildschirm zurückkehren wollen: Help –
Welcome
Anlegen eines neuen Java Projektes
♦ File – New – Project…
♦ New Project: Wizards – Java Project – Next
♦ Eingabe eines Projektnamens, dann Finish
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
45
Eclipse – 2
▪
▪
▪
Anlegen einer Java Klasse
♦ Rechte Maustaste auf dem Projekt, New – Class
♦ Im Name field einen gültigen Klassennamen
eingeben
♦ Checkhaken bei public static main (Strings[] args)
♦ Finish
In der Methode main folgendes eingeben:
System.out.println("Hallo Mannheim!");
Speichern mit STRG-S
Dabei wird automatisch compiliert!
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
46
Eclipse – 3
Für Ihre ersten Schritte werden Sie
ausschließlich zwischen diesen
beiden, automatisch generierten,
Klammern programmieren.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
47
Eclipse – 4
▪
▪
▪
▪
▪
Run – Run As – Java-Application
Im Fenster unten rechts in den Reiter Console
umschalten
Run in der Toolbuttonleiste zur wiederholten
Ausführung oder [STRG]-[F11]
Aufpassen bei Projektwechsel! Der Button in der
Toolbuttonleiste startet noch das "alte" Projekt.
Weiteres zum Umgang mit Eclipse folgt …
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
48
Eclipse – 5
Weitere Informationen unter:
▪
▪
▪
▪
Eclipse FAQ
http://wiki.eclipse.org/index.php/Eclipse_FAQs
Eclipse Dokumentation
http://www.eclipse.org/documentation/
Sehr guter Einführungsartikel in Eclipse, u.a. mit
weiterführenden Informationen zum Debugging etc.
http://www.cs.umbc.edu/courses/undergraduate/CMS
C341/Lectures/Eclipse/intro-to-eclipse.pdf (bis S.35)
B. Daum: Java-Entwicklung mit Eclipse 3; dpunkt;
ISBN 389864281X; 44,00 €
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
49
Eclipse
Eclipse = IDE
IDE = Integrierte Entwicklungsumgebung. Ein
Anwendungsprogramm zur Entwicklung von
Software. (engl. Integrated Development
Environment)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel → Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf
50
IDE
IDE
▪
▪
▪
▪
▪
Texteditor
Compiler bzw. Interpreter
Linker
Debugger
Quelltextformatierungsfunktion
Meist wird nur eine Programmiersprache unterstützt.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen
51
Vorteile von Eclipse
▪
▪
▪
▪
Vereinfachte Projektabwicklung
Fehler werden gleich angezeigt
Inkrementeller Compiler
Eingebauter Debugger
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen
52
Hilfe in Eclipse
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
53
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Eclipse → IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen
54
Das zweite Beispiel – 1
import java.io.*;
public class Celsius {
public static void main(String[ ] args) throws
IOException {
// Benötigte Variablen deklarieren
String eingabeZeile;
double c = 0.0;
double f ;
// möglich ist auch: double c=0.0, f;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
55
Das zweite Beispiel – 2
// Für die Eingabe von der Tastatur
BufferedReader eingabe = new BufferedReader(new
InputStreamReader(System.in));
// Berechnungsschleife
do {
// Anleitung ausgeben
System.out.println(
"Programm endet durch Eingabe von 0");
System.out.println("Eingabe der Celsius-Temperatur: ");
// Eingabe, Double-Wer einlesen
eingabeZeile = eingabe.readLine();
c = Double.parseDouble(eingabeZeile);
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
56
Das zweite Beispiel – 3
// Umrechnen in Fahrenheit
f = c * 9.0/5.0 + 32.0;
// Ausgabe des Ergebnis
System.out.println("... in Fahrenheit: " + f +
" Grad \n");
// Schleife durch Eingabe von 0 verlassen
} while ( c != 0 );
System.out.println("... und tschüss");
}
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
57
Wichtig!
Neues?
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
58
Schlüsselwort import
import java.io.*;
Mit import werden “Hilfsmittel” aus “Paketen” ins Programm
importiert.
java.io und java.util sind Paketnamen.
Das Sternchen "*" steht für alle “Hilfsmittel” in diesem Paket.
(mehr dazu in späteren Folien...)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
59
Schlüsselwort throws
public static void main(String[ ] args) throws IOException {
Kann eine methode einen bestimmten Fehler erzeugen muss dieser
mit dem Schlüsselwort throws gekennzeichnet werden
(mehr dazu in späteren Folien...)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
60
Schlüsselwort do
do {
...
} while ( c != 0 );
Eine Wiederholung: Schleife
“Mache solange Bedingung erfüllt“
(mehr dazu in späteren Folien...)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
61
Variablen & Datentypen
String eingabeZeile;
double c = 0.0;
String, double = Datentypen
eingabeZeile, c = Variablen
Man muss eine Variable definieren!
Mann definiert Sie in dem man ihren Datentyp (bzw. Wert) festlegt.
Der Datentyp gibt den “Wertebereich” vor.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
62
Variablen & Datentypen
Beispiel Wertebereichs
double:
64-bit Gleitpunktzahl Primitive
Wertebereich :
±1.79769313486231570 E+308 und ±4.94065645841246544 E-324
63 Bit
Bit 0
52 Bit
.........
Exponent (e)
Vorzeichen (v)
Mantisse (1+m)
(mehr dazu in späteren Folien...)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
63
Eingabe über Tastatur
// Für die Eingabe von der Tastatur
BufferedReader eingabe = new BufferedReader(new
InputStreamReader(System.in));
..
eingabeZeile = eingabe.readLine();
(mehr dazu in späteren Folien...)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
64
Eine Berechnung
// Umrechnen in Fahrenheit
f = c * 9.0/5.0 + 32.0;
Speichere in der Variable f das Ergebnis aus Inhalt der Variablen c
mal Neun geteilt durch Fünf plus Zweiunddreißig
(mehr dazu in späteren Folien...)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
IDE → Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau
65
Wichtig!
Kommentare
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
66
Kommentaren mit //
Kommentare mit // enden am Zeilenende
Beispiele
Kommentar
am Zeilenende
f = c * 9.0/5.0 + 32.0; // Umrechnen in Fahrenheit
// Ausgabe des Ergebnis
System.out.println("... in Fahrenheit: " + f + " Grad \n");
...
Kommentarzeile
Bei jeder Code-Änderung in
diesem Bereich müssen die
Kommentare ständig umformatiert
werden, um "schön" auszusehen
Negativ-Beispiele
f = 0;
max = 10;
mid = min + (max – min) / 2;
i = i + 1;
// Hier wird f auf 0 gesetzt
// Maximalwert festlegen
// Mitte berechnen
// die Variable i wird um 1 erhöht
Trivialkommentar: Das sieht man ohne Kommentar (später)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
67
Kommentaren mit /* */
Blockkommentare beginnen mit /* und enden mit */
Diese Kommentare können sich über mehrere Zeilen erstrecken
/* Beginn des Blocks
Beispiel
/**
* Hauptroutine zur Ausgabe von Hallo Mannheim
*
*/
public static void main(String[ ] args) {
System.out.println(“Hallo Mannheim!“);
}
*/ Ende des Blocks
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
68
Kommentare - Warum?
Kommentare dienen hauptsächlich der Dokumentation von
Programmen
damit sie auch Personen, die nicht an der
Programmierung beteiligt waren, verstehen können
und
damit derjenige, der sie programmiert hat, sie besser
nachvollziehen, erklären und bei Bedarf ändern kann,
wenn er sich einige Zeit nicht mit ihnen beschäftigt hat
60 – 70% aller Entwicklungsarbeiten sind Wartung und
Weiterentwicklung!
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
69
Das zweite Beispiel – 4
▪
▪
Download unter
http://services.informatik.hs-mannheim.de/~mechler/
Unter Eclipse ein Projekt anlegen, markieren und dann
♦ Importieren über File – Import …
FileSystem – Directory auswählen – auf der rechten
Seite vor Celsius Java einen Checkhaken setzten –
Import
(dabei muss vorher der entsprechende Projektname
im Package Explorer, linkes Fenster, markiert sein!)
♦ oder (Windows) Drag'n'Drop der .java Datei auf das
Projekt Icon in Eclipse
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
70
Weiteres Beispiel – 4
▪
▪
▪
Download unter
http://services.informatik.hs-mannheim.de/~mechler/
Summe.java
Neu hier:
StringTokenizer t = new StringTokenizer(eingabeZeile,"+");
Zerteilt einen Text am „+“
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
71
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Beispiel: Celsius → Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen
72
JETZT!
Programmentwurf
Programmentwurf
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
73
Können Sie das lesen?
Nach eienr Stidue der Cmabridge Uinverstiät, ist es
eagl in wlehcer Reiehnfogle die Bchustebaen in
Wöretrn vokrmomen. Es ist nur withcig, dsas der
ertse und lettze Bchusatbe an der ricthgien Stlele
snid. Der Rset knan total falcsh sein und man knan
es onhe Porbelme leesn. Das ist so, wiel das
mneschilche Geihrn nciht jeden Bchustbaen liset
sodnern das Wrot als gaznes.
Krsas oedr?
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
74
Programm
▪
▪
▪
Folge von Befehlen (Arbeitspeicher)
Selbstständiges Erfüllen von Aufgaben
Serielle Abarbeitung
Allgemein ein in einer Programmiersprache formulierte
Vorschrift mitsamt den zugehörigen Datenbereichen
Programm → konkret. Es ist im exakt definierten und
eindeutigen Formalismus einer Programmiersprache
verfasst, nimmt Bezug auf bestimmte Darstellungen der
verwendeten Daten und ist auf einer Rechenanlage
ausführbar
Häufig auch Teillösungen (Unterprogramme etc.) beiläufig
als Programm bezeichnet
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
75
Test!
▪
▪
▪▪
▪▪
Start des Programms
Speicher unter
Speichere
unterdem
dem
Variablennamen i den Wert 1
Wert
Gebe1 den Wert von i aus, bis
Ergebnis:
1
2
3
i einensolange
Gebe
Wert größer
den Wert
als 100
von i hat.
inne
aus,Prüfe
bis i einen
jedochWert
vorher,
größer
ob
i denals
Wert
10039
inne
erreicht,
hat.
Prüfe jedoch
speichere
dann
vorher,
den Wert
ob i 61
den Wert
unter
dem39
Variablennamen
erreicht,
i.
speichere
Erhöhe
ansonsten
dann deni Wert
immer um
61 unter dem
1.
Variablennamen
i.
Beende das Programm
...
Beende das Programm
100
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
38
39
61
62
...
76
Struktogramme – 1
▪
▪
▪
▪
1973 eingeführt von I. Nassi und B.
Shneiderman als Darstellungsmittel für
Algorithmen
11 Symbole + Erweiterungen
DIN 66261
B etragPruefen
Beispiel:
Eingabe a
Eingabe b
a>b?
ja
nein
Ausgabe a
Ausgabe b
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
77
Struktogramm – 2
▪
▪
▪
▪
grafische Darstellung in Form eines
geschlossenen Blocks
logische Unterstrukturen werden in Unterblöcke
unterteilt
verschiedene Symbole für verschiedene
Operationsarten
Betrachtung von oben nach unten (top-down)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
78
Struktogramm – 3
Prozess
▪▪
▪
Verarbeitung, Prozess
Rahmen
enthält die weiteren Operationen wie z.B.
♦ Zuweisungen
♦ Ein-/Ausgabebefehle
♦ Unterprogrammaufrufe etc.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
79
Struktogramm – 4
Anweisung
▪
weiteren Operationen wie z.B.
♦ Zuweisungen
♦ Ein-/Ausgabebefehle
♦ Unterprogrammaufrufe etc.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
80
Struktogramm – 5
Anweisung 1
Anweisung 2
Anweisung 3
▪
▪
Folge, Sequenz
Mehrere Arbeitsschritte werden durch Folge von
Strukturblöcken dargestellt
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
81
Struktogramm – 6
Bedingung
ja
nein
Strukturblock 1
Strukturblock 2
Alternative, Verzweigung
Stellen einer Bedingung
erfüllt → weiter bei Strukturblock 1
nicht erfüllt → weiter bei Strukturblock 2
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
82
Struktogramm – 7
Auswahl
1
Strukturblock 1
2
Strukturblock 2
sonst
Alternativblock
Fallauswahl, Mehrfachverzweigung
Treffen einer Auswahl (z.B. Wert einer Integervariable)
jeweils erfüllt → weiter bei jeweiligem Strukturblock
nicht erfüllt → weiter bei Alternativblock
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
83
Struktogramm – 8
Wiederholen, solange
Eingangsbedingung gilt
Strukturblock 1
Strukturblock 1
Wiederholen, solange
Bedingung gilt
Wiederholung, Schleife
Anweisungsblock im Strukturblock wird solange
wiederholt, solange die Bedingung erfüllt ist
Kopfgesteuerte, abweisende Schleife
Fußgesteuerte, annehmende Schleife
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
84
Struktogramm – 9
Unterprogrammaufruf
(oder ausgegliederter
Strukturblock)
Aufruf
Unterprogrammaufruf, Funktion, Prozedur
aber auch "wenn der Platz nicht reicht"
in dem Fall aber besonders kennzeichnen
Struktogramme passen auf DIN A4
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
85
Struktogramm – 10
Zielort
für Aussprung
Aussprung
Beendigung eines Programmteils
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
86
Struktogramm – Übung
Ziel:
Ausgabe der Zahlenreihe:
1
2
3
4
5
6
7
8
9
10
Variante I
Variante II
i=0
i=1
i = i +1
Ausgabe i
Ausgabe i
i = i +1
i < 10
STRUKT2
i < 11
i=1
Ausgabe i
i = i +1
Variante III
i=0
Ausgabe i
i < 10
i < 10
Variante IV
i=1
i < 11
i = i +1
Ausgabe i
Ausgabe i
i=i+1
.....viele Wege führen zum Ziel
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
87
StruktEd
Hus / StruktEd
Drag'n'Drop
Sehr gute OnlineHilfe
Ausdruck
oder:
[STRG] + G
Achtung! Drucker
muss installiert sein!
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
88
Info!
♦ Dafür sorgen, dass für die Übungen alles funktioniert
♦ Eclipse installieren; zuerst Java 8.0, dann Eclipse
♦ Rechtzeitig: Folien, Übung
♦ Literatur
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
89
??? Fragen
Welche
Welche
Entwurfsmethoden
Entwurfsmethoden
kennen
kennen Sie
Sie noch?
noch?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
90
Weitere Methoden – 1
▪
Programmablaufplan, PAP
♦ Flussdiagramm oder
♦ Ablaufdiagramm etc.
♦ DIN 66001
♦ durch Pfeile (Strukturlaufrichtung)
♦ verbundene Symbole
Start
Eingabe a
Eingabe b
Ja
a>b?
Ausgabe a
Nein
Ausgabe b
Ende
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
91
Weitere Methoden – 2
▪
Pseudocode
♦ Pascal-ähnliche Notation:
begin BetragPruefen
Eingabe(a);
Eingabe(b);
if a > b then
Ausgabe(a);
else
Ausgabe(b);
end if
end BetragPruefen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
92
Weitere Methoden – 3
▪
▪
▪
▪
UML Ist:
♦
♦
Objekt-orientierte (Design-)Methode
♦
Beschreibung sowohl von Software als auch von
Geschäftsprozessen.
Quasi-Standard bei der objektorientierten SoftwareEntwicklung.
UML Ziele:
♦
♦
♦
objektorientierte Modellierung von Systemen
Verknüpfung von Analyse und Entwurf
spezielle Anforderungen bei Entwicklung komplexer Systeme
Vielzahl graphischer Darstellungstechniken
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
93
Weitere Methoden – 4
▪
▪
OOD (Object Oriented Design, Vorgänger von UML)
Jackson- oder Warnier-Orr-Diagramm (8 Basisblöcke)
▪
Entscheidungstabellen
▪
Weitere Strukturdiagramme
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
94
Beispiel – 1
U m r e c h n u n g C e ls iu s F a h r e n h e
E in g a b e C e ls iu s
F a h r e n h e it = C e ls iu s * 9 /5 + 3 2
A u s g a b e F a h r e n h e it
s o la n g e C e ls iu s u n g le ic h 0
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
95
Beispiel – 2
Geldautomat
Beginn
solange Geldautomat bereit
Geldkarte einführen
Anzahl Fehlversuche lesen
Geldkarte lesbar &
Anzahl Fehlversuche < 3
ja
nein
PIN eingeben
PIN ok ?
ja
nein
Anzahl Fehlversuche
Anzahl Fehlversuche
auf 0 setzen
um 1 erhöhen
Geldkarte einziehen
Geldbetrag wählen
Geldkarte entnehmen
Geldkarte entnehmen
Geld entnehmen
Ende
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
96
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Kommentare → Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur
97
JETZT
Algorithmen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
98
Algorithmus
Begriff:
Ein Algorithmus ist ein Verfahren mit einer
♦ präzisen (d.h. in einer genau festgelegten
Sprache formulierten)
♦ endlichen Beschreibung unter Verwendung
♦ effektiver (d.h. tatsächlich ausführbarer)
♦ elementarer Verarbeitungsschritte
Zu jedem Zeitpunkt der Abarbeitung des
Algorithmus benötigt dieser nur endlich viele
Ressourcen
▪
▪
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
99
Historie
▪
▪
▪
Muhammad ibn Musa al-Chwarazmi (* ca. 783; † ca. 850)
Buch: Über das Rechnen mit indischen Ziffern (um 825)
Erster Computeralgorithmus
(1842 von Ada Lovelace,
Notizen zu Charles Babbages Analytical Engine)
Turingmaschinen und Algorithmusbegriff (Alan Turing 1936)
„Berechnungsvorschriften zur Lösung eines Problems heißen genau dann
Algorithmus, wenn eine zu dieser Berechnungsvorschrift äquivalente
Turingmaschine existiert, die für jede Eingabe, die eine Lösung besitzt, stoppt“
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
100
Kochbuch
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstantenp
101
Kochbuch
Wie koche ich mir (m)einen
Algorithmus?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
102
Entwurf
Der Entwurf von Algorithmen ist
ein kreativer Prozess, der nicht
automatisiert werden kann.
▪
▪
unabhängig Programmiersprachen
unabhängig von der Rechner-Hardware
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
103
Beispiel
Aufgabe: Summiere alle
Zahlen zwischen 1 und 100
Lösung:
1+2+3+4+...+99+100 = 5050
Lösung:
1+100 + 2+99 + 3+98 + .... + 50 + 51 = 50 * 101 = 5050
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
104
Algorithmus
definierte Handlungsvorschrift
zur Lösung eines Problems
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
105
Abgrenzung
Heuristik (griech.: Kunst des
Findens bzw. Erfindens).
Informatik: geschickte Lösung
mit wenig Aufwand
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
106
Korrektheit/ Terminierung
▪
▪
Ist das Problem lösbar?
Welche Schritte müssen ausgeführt werden, um
einen korrekten Algorithmus zu erhalten?
Korrekt heißt:
♦ Der Algorithmus erzeugt ein Resultat
(ist endlich).
♦ Das Resultat ist das gesuchte.
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
107
Weitere Forderungen
▪
▪
▪
▪
▪
▪
▪
Effizienz
Benutzerfreundlichkeit
Flexibilität
Robustheit/Stabilität
Lesbarkeit
Wiederverwendbarkeit
...
Diese Forderungen sind optional - aber wichtig !
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
108
Los geht's: Kochen
Zutaten
Kochwerkzeug
Grundrezepte
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
109
Vergleich: Kochen
Zutaten
Kochwerkzeug
Compiler
IDE
Debugger
Variablen
Konstanten
Felder
Schleifen
Bedingungen
Zuweisungen
Bibliotheken
Grundrezepte
Suchen
Sortieren
Rekursion
usw.
usw.
usw.
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
110
Resultate
Wie erreiche ich beim
Kochen ein (gutes)
Resultat:
▪
▪
▪
(Aus)probieren
Erfahrung
Rezept
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
111
Analogie
Algorithmus → Rezept
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
112
Nachgefragt?
Wie komme ich beim Kochen
zu einem Rezept?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
113
Nachgefragt?
Wie erhalte ich ein Rezept:
▪
▪
▪
▪
Kaufen (Kochbuch)
Ausprobieren
Erfahrung
Verfeinern
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
114
Beispiel
Rezept:
Spaghetti
▪
▪
▪
▪
▪
Koche Wasser
Gebe Salz und Öl zu
Gebe Spaghetti hinzu
Warte 10 min
Prüfe ob Spaghetti
weich, ansonsten warte
1 min
Algorithmus:
Summiere Zahlen bis 100
▪
▪
▪
▪
Setzte Summe auf 0 und
die Zahl i auf 1
Addiere die Zahl i auf die
Summe und erhöhe i um 1
Wiederhole obigen Schritt
100 mal
Gib das Ergebnis aus
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
115
bevor ich koche
▪
▪
Bevor ich koche:
♦ Was will ich kochen?
♦ Für wen?
♦ Wieviel?
♦ Was habe ich zur Verfügung?
♦ usw.
Algorithmus:
♦ Spezifikation der Problemstellung (Soll/Ist)
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
116
Beginnen!
▪
▪
Kochen:
♦ Mit dem Kochen Beginnen
Algorithmus:
♦ Auf der Basis der Erkenntnisse implementieren
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
117
Check!
▪
▪
Kochen:
♦ Resultat genießbar
♦ Resultat war das gewünschte?
♦ Kostengünstig gekocht, schnell?
● Falls nicht: Rezept überdenken
Algorithmus:
♦ Resultat erhalten (lösbar)
♦ Resultat entspricht Spezifikation
♦ Algorithmus effizient?
● Falls nicht: Algorithmus beschleunigen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
118
Spiegelei...
▪
▪
▪
Eier aufschlagen
In die Pfanne
warten
straightforward
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
119
Große Menüs
Gebeizter Lachs mit Kräutersahne
Blattsalat und Kartoffelpuffer
***
Knusprige Ente
mit Blaukraut und Reibeknödel
***
Lebkuchenmousse mit Mandarinensorbet
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
120
JETZT
Anweisungsfolgen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
121
Zerlegung: Menü
▪ Gebeizter Lachs mit Kräutersahne
♦
Lachs beizen
● Lachs ausnehmen, ... usw., usw.
♦
Kräutersahne herstellen
● Kräuter waschen, ... usw., usw.
▪ Blattsalat und Kartoffelpuffer
♦
Blattsalat herstellen
● Waschen, ... usw., usw.
♦
Kartoffelpuffer, ... usw., usw.
▪ Knusprige Ente
....
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
122
Dessert - Descartes
Maxime "Regeln zur Leitung des Geistes" (Descartes franz. Philosoph und
Mathematiker, 1628):
1. Übereilung und Vorurteil sind sorgfältig zu meiden.
2. Jede der zu untersuchenden Schwierigkeiten ist in soviele Teile zu zerlegen,
wie es möglich und zur besseren Lösbarkeit wünschenswert ist.
3. Mit den einfachsten und faßlichsten Objekten ist zu beginnen und von da aus
schrittweise zur Erkenntnis der kompliziertesten fortzuschreiten.
4. Hinreichend vollständige Aufzählungen und allgemeine Übersichten sind
anzufertigen, um sicher zu gehen, daß nichts ausgelassen wurde. Dies sind
allgemeine Regeln, die jedem Problemlöser kommen. Für den Fall daß das
zu entwerfende Verfahren einer Maschine zur Ausführung überantwortet
werden soll, nehmen sie eine spezielle Gestalt an .....
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
123
Von oben oder unten?
Variante I:
Ich plane das Menü,
dann kümmere ich mich um die Gänge
Dann die Speisen der Gänge
Dann die Zutaten
▪
▪
▪
▪
Variante II:
Ich schaue nach den Zutaten
Daraus kombiniere ich Speisen
Aus den Speisen Gänge
Aus den Gängen das Menü
▪
▪
▪
▪
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
124
Top-down, bottom-up?
Top-Down:
♦ Gefahr: Man bemerkt spät Probleme
Bottom-Up:
♦ Gefahr: Lösung passt nicht zum Problem
▪
In der Praxis werden die Methoden oft Kombiniert
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
125
bon appétit!
Beinahe hätten wir das Beste vergessen:
▪
▪
Gekochtes essen !
Algorithmus: anwenden
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
126
Vorgehensweise
▪
▪
▪
▪
▪
▪
Spezifikation der Problemstellung
Bestimmung der Definitionsbereiche
Suche nach / Vergleich mit bekannten Algorithmen, eventuell
Erweiterung oder Anpassung der bekannten Algorithmen
Anwendung von ad-hoc-Lösungsmethoden (mit anschließender
Korrektur)
Zerlegung des Problems in Teilprobleme ("divide and conquer"Vorgehensweise); auf jeder Zerlegungsebene Verwendung von
♦
♦
♦
Sequenz von Schritten
Fallunterscheidung (Alternativen)
Iteration von Schritten (Schleifen)
Wiederhole diese Vorgehensweise für jedes Teilproblem
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
127
Hinkucker...
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Programmentwurf → Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten
128
JETZT
Java
Java
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
129
Programmiersprachen
Programmiersprachen werden benötigt, um Algorithmen
für Computer verständlich zu formulieren
Wir unterscheiden Maschinensprache und Assembler von
höheren (oder problemorientierten) Programmiersprachen
Höhere Sprachen enthalten folgende Sprachkonstrukte
(Sprachelemente)
Vereinbarungen
Anweisungen
Ausdrücke
Diese Konstrukte existieren in fast allen Sprachen, jedoch
in unterschiedlicher Ausprägung
Es gibt einige weitere Hilfskonstrukte
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
130
Vereinbarungen
Vereinbarungen dienen dazu, Namen für
Bestandteile von Programmen (z.B. Typen,
Variablen, Methoden) einzuführen
Unterschieden werden Definitionen und
Deklarationen
Bestimmte Vereinbarungen sind in Java bereits
vordefiniert; sie werden durch ein Schlüsselwort
bezeichnet
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
131
Reservierte Schlüsselwörter
abstract
case
const
else
for
implements
interface
operator
public
strictfp
throw
void
boolean
cast
continue
extends
future
import
long
outer
rest
super
throws
volatile
break
catch
default
final
generic
instanceof
native
package
return
switch
transient
while
byte
char
do
finally
goto
int
new
private
short
synchronize
try
byvalue
class
double
float
if
inner
null
protected
static
this
var
Obwohl die mit blau gekennzeichneten Wörter zurzeit nicht von Java benutzt werden,
können doch keine Variablen dieses Namens definiert werden.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
132
Ausdrücke
Alle Ausdrücke haben einen bestimmten Typ,
man sagt auch sie sind von einem bestimmten
Typ
In Ausdrücken werden Werte oder
(geschachtelte) Ausdrücke durch Operatoren zu
(größeren) Ausdrücken zusammengesetzt
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
133
Anweisungen
Anweisungen definieren den Programmablauf, sie
enthalten Ausdrücke
Zu den Anweisungen gehören je nach
Programmiersprache
Zuweisungen
Anweisungsfolgen
Leere Anweisungen
Prozedur-, Funktions-, Methoden-Aufrufe
Bedingungen
Schleifen
etc.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
134
Weitere Begriffe (Lexikalische Analyse)
Token
♦ zusammenhängendes Wort über einem Alphabet,
getrennt vom nächsten Token durch Whitespaces
♦ Alphabet: z.B. Buchstaben, aber auch: Zahlen
♦ Whitespaces: Leerzeichen, Zeilenumbruch, aber
auch: Klammern, Komma, Semikolon
Literal
♦ konkrete Angabe eines Zahl-, Zeichen- oder
Zeichenkettenwertes im Quellcode
♦ Wertkonstante
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
135
Sprachbeschreibung von Java
http://docs.oracle.com/javase/specs/
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
136
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Algorithmen→ Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen
137
JETZT!
Elementare
Elementare
Datentypen,
Datentypen,
Operationen
Operationen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
138
Wie geht's weiter?
Vordefinierte Datentypen
Boolean
Ganzzahlige Datentypen
Operationen auf ganzzahligen Datentypen
Reelle Zahlen
Operationen auf reellen Zahlen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
139
Vordefinierte Datentypen
Java definiert bereits eine Reihe von einfachen oder
Elementar-Datentypen
Sie werden Primitive Types (im Sinne von "nicht weiter
reduzierbar") genannt
PrimitiveType:
NumericType
boolean
NumericType:
IntegralType
FloatingPointType
IntegralType: one of
byte short int long char
FloatingPointType: one of
float double
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
140
Der Datentyp boolean – 1
„Almost all true is entirely a lie“ - a Yiddish folk-saying
Der Datentyp boolean umfasst die beiden Werte true und false
Folgende Operationen sind auf diese Werte anwendbar:
==, !=, ^, !, &, &&, |, ||,
ihr Ergebniswert berechnet sich nach den folgenden Regeln
Wird == auf zwei Boole'sche Operanden angewendet, ist das
Ergebnis genau dann true, wenn beide Operanden true sind oder
beide Operanden false sind; sonst ist das Ergebnis false
==
false
true
false
true
false
true
false
true
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
141
Der Datentyp boolean – 2
Wird != auf zwei Boole'sche Operanden angewendet, ist
das Ergebnis genau dann true, wenn einer der Operanden
true und der andere false ist; sonst ist das Ergebnis false
Der Operator ^ liefert das gleiche Ergebnis wie !=, wenn er
auf Boole'sche Operanden angewendet wird
Wird der einstellige Operator ! auf einen Boole'schen
Operanden angewendet, ist das Ergebnis gleich dem
negierten Operanden, d.h. aus true wird false und aus
false wird true
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
142
Der Datentyp boolean – 3
Wird & auf zwei Boole'sche Operanden angewendet, ist
das Ergebnis genau dann true, wenn beide Operanden
true sind; sonst ist das Ergebnis false
Es werden auf jeden Fall beide Operanden ausgewertet
Der Operator && liefert das gleiche Ergebnis wie &, wenn
er auf Boole'sche Operanden angewendet wird, aber:
Der rechte Operand wird nur ausgewertet, wenn der linke
Operand zu true ausgewertet wurde ("unnötige Arbeit"
wird vermieden)
Man spricht von verkürzter Auswertung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
143
Der Datentyp boolean – 4
Wird | auf zwei Boole'sche Operanden angewendet, ist
das Ergebnis genau dann true, wenn mindestens einer der
Operanden true ist; sonst ist das Ergebnis false
Es werden auf jeden Fall beide Operanden ausgewertet
Der Operator || liefert das gleiche Ergebnis wie |, wenn er
auf Boole'sche Operanden angewendet wird, aber:
Der rechte Operand wird nur ausgewertet, wenn der linke
Operand zu false ausgewertet wurde ("unnötige Arbeit"
wird vermieden)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
144
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
145
Ganzzahlige Datentypen – 1
Folgende ganzzahlige Datentypen sind in Java
vordefiniert:
byte, short, int, long, char
Sie werden in Java als Integral Type bezeichnet;
sonst spricht man auch von Integer- oder Ordinal-Werten
Ihre Wertebereiche sind auf allen Prozessoren und
Betriebssystemen identisch definiert (das ist nur durch die
Virtuelle Maschine möglich!)
Das gleiche gilt für das Rechnen mit diesen Datentypen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
146
Ganzzahlige Datentypen – 2
byte:
von -128 bis 127
Das entspricht von –27 bis 27–1
Das entspricht den Werten Byte.MIN_VALUE bis Byte.MAX_VALUE
short:
von –32.768 bis 32.767
Das entspricht von –215 bis 215 –1
Das entspricht den Werten Short.MIN_VALUE bis Short.MAX_VALUE
int:
von –2.147.483.648 bis 2.147.483.647
Das entspricht von –231 bis 231 –1
Das entspricht den Werten Integer.MIN_VALUE bis Integer.MAX_VALUE
long:
von –9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807,
also von ca. -9*1018 bis 9*1018
Das entspricht von –263 bis 263 –1
Das entspricht den Werten Long.MIN_VALUE bis Long.MAX_VALUE
Die angegebenen Grenzen sind im jeweiligen Wertebereich enthalten
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
147
Notation von Ganzzahl-Literalen
Ganze Zahlen im Programm werden (sofern nicht anders
gekennzeichnet) intern immer als Wert vom Typ int dargestellt
Das gilt auch, wenn ihr Wert in einen byte- oder short-Typ passen
würde (Näheres dazu später)
Ganze Zahlen, die intern als long dargestellt werden sollen, werden
durch ein nachfolgendes "L" oder "l" (kleines "L") gekennzeichnet
(Achtung: kein Leerzeichen erlaubt!)
Beispiele
12L
123456789L
234l
Achtung: das "l" wird gerne mit "1" oder mit "|"
verwechselt,
→ "L" ist zu bevorzugen
Ganze Zahlen, die außerhalb der int-Grenzen liegen, müssen mit "L"
gekennzeichnet werden
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
148
Operationen auf ganzzahligen Typen – 1
Einstellige Operatoren:
- negiert die angegebene Zahl
+ (hat keinen Effekt)
Arithmetische Operatoren
+ Addition
- Subtraktion
* Multiplikation
/ Division: schneidet bei ganzen Zahlen ab, d.h. rundet nicht
% Rest einer Ganzzahl-Division
Addition und Multiplikation von ganzen Zahlen gleichen Typs in JavaProgrammen sind assoziativ (wenn keine Seiteneffekte bei der
Berechnung auftreten) und kommutativ
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
149
Operationen auf ganzzahligen Typen – 2
Im Fall von ungleichen Typen der beteiligten Operanden
– Zunächst wird die Zahl des kleineren Typs in die äquivalente Zahl des
größeren Typs konvertiert
– Dann erst wird gerechnet
– Das Ergebnis ist eine Zahl des größeren Typs
Im Fall, dass das Ergebnis einer Operation nicht in die Zahl des größeren
Typs passt
– Die Operation wird durchgeführt
– Die oberen (höchstwertigen) Bits des Ergebnisses werden abgeschnitten
– Nur diejenige Anzahl von Bits, die entsprechend des Ausdruckstyps
dargestellt werden können, wird als Ergebnis geliefert
→ Achtung:
Ein eventueller Integer-Überlauf muss vom Programmierer vermieden
werden (die Sprache/die VM sorgen nicht dafür)
Verlorengehen kann sonst ein Teil des Ergebniswertes und/oder sein
Vorzeichen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
150
Operationen auf ganzzahligen Typen – 3
Beispiele für die ganzzahlige Division
11 / 4
=?
2
11 / -4
→
=?
-2
-11 / 4
→
=?
→
-11 / -4 = ?
-2
→
2
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
151
Operationen auf ganzzahligen Typen – 4
Die Wirkung von % ist festgelegt durch die Gleichung
a % b = a – (a / b) * b
Wichtig: Übung
Beispiele für die Rest-Berechnung bei einer ganzzahligen Division
11 % 4 = ?
→ 11 – (11 / 4) * 4 = 11 – 8 = 3
11 % -4 = ?
→ 11 – (11 / -4) * (-4) = 11 – 8 = 3
-11 % 4 = ?
→ -11 – (-11 / 4) * 4 = -11 – (-8) = -3
-11 % -4 = ?
→ -11 – (-11 / -4) * (-4) = -11 – (-8) = -3
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
152
Operationen auf ganzzahligen Typen – 5
Java implementiert den ANSI/IEEE 754 - Standard
Eine Division (mit / oder %) durch 0 führt zu einer ArithmeticException
(entspricht in etwa einem Laufzeitfehler – kann abgefangen werden)
Tritt beim Programmlauf eine ArithmeticException auf, so wird das
angezeigt und das Programm bricht ab
Beispiel:
Division durch Null
java.lang.ArithmeticException: / by zero
at uebung03.GanzeZahlen.main(GanzeZahlen.java:28)
Exception in thread "main"
Dateiname
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Zeilennummer
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
153
Operationen auf ganzzahligen Typen – 6
Vergleichsoperatoren, oder relationale Operatoren
==
Test auf Gleichheit
!=
Test auf Ungleichheit
<
Test auf Kleiner-Als
>
Test auf Größer-Als
<=
Test auf Kleiner-oder-Gleich
>=
Test auf Größer-oder-Gleich
Relationale Operatoren liefern ein Ergebnis vom
Typ boolean, also true oder false
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
154
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
155
Reelle Zahlen – 1
Java unterscheidet zwei Arten reeller Zahlen, die sich durch ihre
Genauigkeit und ihren Wertebereich unterscheiden
float
Neben der 0.0 sind positive Zahlen im Bereich von 1.40239846
*10-45 bis 3.40282347*10+38 darstellbar, negative entsprechend
Das entspricht einer 32-Bit-Zahldarstellung
Das entspricht den Werten Float.MIN_VALUE bis
Float.MAX_VALUE
double
Neben der 0.0 sind positive Zahlen im Bereich von
4.94065645841246544*10-324 bis 1.79769313486231570*10+308
darstellbar, negative entsprechend
Das entspricht einer 64-Bit-Zahldarstellung
Das entspricht den Werten Double.MIN_VALUE bis
Double.MAX_VALUE
Auch für reelle Zahlen implementiert Java den ANSI/IEEE 754 Standard
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
156
Variablen & Datentypen
float:
31 Bit
32-bit Gleitpunktzahl
23 Bit
Bit 0
.........
Exponent (e)
Vorzeichen (v)
double:
63 Bit
Mantisse (1+m)
64-bit Gleitpunktzahl
52 Bit
Bit 0
.........
Exponent (e)
Vorzeichen (v)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Mantisse (1+m)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
157
Variablen & Datentypen
Rechenbeispiel (double) -0,75
nach IEEE 754: (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
- 0.75dec = - 3 / 4dec = - 3 / 2 2dec = 11bin / 2 2dec = -11bin * 2-2dec
| 1. Umformen sodass eine Binärzahl verbleibt
= - 0.11bin
= - 0.11bin * 2 0 =
-1.1 bin * 2 -1
| 2. Auf Formel unformen und diese benutzen
= (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
| 3. Einsetzten
= (- 1)1 * (1+ .1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 bin) * 2(-1+1023)
= 1 0111 1111 110 1000 0000 0000 0000 0000 . . . 0000 0000 0000 0000
v
e
1+m
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
158
Variablen & Datentypen
Rechenregeln
nach IEEE 754: (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
x = (- 1)v * (1+ Mantisse)* 2(Exponent + Bias)
Vorzeichen
v:
Exponent
e:
Mantisse
m:
0=positiv, 1=negativ
e = └log2 (x)┘
( └ ┘ = aufrunden )
m = (x/2e – 1) * 253 ( e = exponent )
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
159
Reelle Zahlen – 2
(Fast) Jede Programmiersprache (und jeder Computer-Prozessor)
beschränkt den Wertebereich und die Genauigkeit der Darstellung von
reellen Zahlen (willkürlich)
Der Grund dafür ist, dass man sich auf einen "beliebigen", aber festen
Speicherbedarf für die Darstellung reeller Zahlen festlegen muss
In Java werden zwei verschiedene Zahlentypen angeboten, um den
unterschiedlichen Genauigkeitsbedarf widerzuspiegeln
Bemerkungen
Im Unterschied zu vielen anderen Hochsprachen legt Java den
Wertebereich und die Genauigkeit eindeutig fest, unabhängig
davon, auf welcher Hardware ein Java-Programm läuft
Das ist zum Beispiel in C/C++ nicht der Fall!
In Common Lisp sind beliebig genaue Zahlendarstellungen
möglich, indem rationale Zahlen als Bruch gespeichert werden
können
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
160
Notation reeller Zahlen
Reelle Zahlen im Programm werden (sofern nicht anders
gekennzeichnet) intern immer als Wert vom Typ double
dargestellt
Das gilt auch, wenn ihr Wert in einen float-Typ passen
würde
Reelle Zahlen, die intern als float dargestellt werden
sollen, werden durch ein nachfolgendes "F" oder "f"
gekennzeichnet
(Achtung: kein Leerzeichen erlaubt!)
Zur Unterscheidung können reelle Zahlen, die intern als
double dargestellt werden sollen, durch ein nachfolgendes
"D" oder "d" gekennzeichnet werden (das ist aber unnötig;
Achtung: kein Leerzeichen erlaubt!)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
161
Die Syntax reeller Zahlen in Java
FloatingPointLiteral:
Digits . Digitsopt ExponentPartopt FloatTypeSuffixopt
. Digits ExponentPartopt FloatTypeSuffixopt
Digits ExponentPart FloatTypeSuffixopt
Digits ExponentPartopt FloatTypeSuffix
ExponentPart:
ExponentIndicator SignedInteger
ExponentIndicator: one of
eE
SignedInteger:
Signopt Digits
Sign: one of
+FloatTypeSuffix: one of
fFdD
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
162
Abgekürzte Syntax-Regeln
Reelle Zahlen (im Unterschied zu ganzen Zahlen) ...
enthalten entweder einen Punkt (Dezimalkomma)
oder sie besitzen einen Exponenten
oder sie sind als float oder double gekennzeichnet
oder sie enthalten eine Kombination daraus.
FloatingPointLiteral =
Digit+ "." Digit* [ "e" | "E" [ "+" | "-" ] Digit+ ] [ "f" | "F" | "d" | "D" ]
| "." Digit+
[ "e" | "E" [ "+" | "-" ] Digit+ ] [ "f" | "F" | "d" | "D" ]
| Digit+
| Digit+
( "e" | "E" [ "+" | "-" ] Digit+ ) [ "f" | "F" | "d" | "D" ]
[ "e" | "E" [ "+" | "-" ] Digit+ ] ( "f" | "F" | "d" | "D" ).
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
163
Operationen auf reellen Zahlen – 1
Einstellige Operatoren:
- negiert die angegebene Zahl
+ (hat keinen Effekt)
Arithmetische Operatoren
+ Addition
- Subtraktion
* Multiplikation
/ Division
Achtung:
Addition und Multiplikation von reellen Zahlen in JavaProgrammen sind nicht assoziativ
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
164
Vorsicht FALLE
public class Calc1 {
public static void main(String[] args) {
double a,b;
a = 5e-15;
b = 1.0;
System.out.println("Ergebnis 1: " + (a + a + b));
System.out.println("Ergebnis 2: " + (a + b + a));
}
}
Ergebnis 1: 1.00000000000001
Ergebnis 2: 1.0000000000000102
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
165
Operationen auf reellen Zahlen – 2
Im Fall von ungleichen Typen der beteiligten Operanden
• Zunächst wird die Zahl des kleineren Typs in die
äquivalente Zahl des größeren Typs konvertiert; das
Ergebnis ist eine Zahl dieses Typs
Ganze Zahlen werden in den nächstliegenden reellen Wert
konvertiert
• Dann wird exakt (!) gerechnet
• Ist die Größenordnung des Ergebnisses darstellbar, wird
der exakte Werte hin zur nächsten darstellbaren Zahl des
größeren Typs gerundet
• Sonst ist ein Überlauf erfolgt, dann ist der Ergebniswert
laut ANSI/IEEE 754 als positiv oder negativ unendlich
definiert!
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
166
Operationen auf reellen Zahlen – 3
Darstellung von positiv bzw. negativ Unendlich
Eine positiv unendliche float-Zahl wird durch
Float.POSITIVE_INFINITY dargestellt
Eine negativ unendliche float-Zahl wird durch
Float.NEGATIVE_INFINITY dargestellt
Eine positiv unendliche double-Zahl wird durch
Double.POSITIVE_INFINITY dargestellt
Eine negativ unendliche double-Zahl wird durch
Double.NEGATIVE_INFINITY dargestellt
Mit den Unendlich-Werten kann weitergerechnet werden,
sie können untereinander und mit anderen Zahlen
verglichen werden etc.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
167
Operationen auf reellen Zahlen – 4
Es gibt eine weitere Rechnung, die zu einer besonderen Situation
führt:
Die durch 0, z.B.
10f / 0f
Ergebnistyp: float
(+infinity)
5d / 0d
Ergebnistyp: double (+infinity)
-5f / 0f
Ergebnistyp: float
(-infinity)
-10d / 0d
Ergebnistyp: double (-infinity)
In diesem Fall ist der Ergebniswert laut ANSI/IEEE 754 als
positiv unendlich bzw. negativ undendlich
→ Es tritt kein Rechenfehler auf!
→ Bei Operationen auf reellen Zahlen tritt keine Exception auf
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
168
Operationen auf reellen Zahlen – 4
Es gibt eine weitere Rechnung, die zu einer besonderen Situation
führt:
Die Division von 0 durch 0, z.B.
0f / 0f
Ergebnistyp: float
0d / 0d
Ergebnistyp: double
In diesem Fall ist der Ergebniswert laut ANSI/IEEE 754 als
Not-a-Number ("keine Zahl") definiert
→ Es tritt kein Rechenfehler auf!
Java repräsentiert den Wert Not-a-Number als
Float.NaN bzw.
Double.NaN
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
169
Operationen auf reellen Zahlen – 5
Der Wert „NaN“ ist eine Zahl, aber ungleich
zu allen anderen Zahlen und
zu sich selbst.
Es existieren Testmethoden
Float.isNaN( <Ausdruck> ) und
Double.isNaN( <Ausdruck> )
Beispiele:
Float.isNaN( 0.0f / 0.0f )
// ⇒ true
0.0f / 0.0f == 0.0f / 0.0f
// ⇒ false
Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY
// ⇒ NaN
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
170
Operationen auf reellen Zahlen – 6
Rechenregeln für Ausdrücke, bei denen mindestens ein
Operand Unendlich oder NaN ist:
Alle Vergleiche mit ==, <, <=, >, >=, in denen mindestens
einer der Operanden NaN ist, liefern false als Ergebnis
Vergleiche mit != in denen mindestens einer der
Operanden NaN ist, liefern true als Ergebnis
Multiplikation
Wenn einer der Operanden NaN ist, ist das Ergebnis
NaN
Multiplikation eines Unendlich-Wertes mit einem
endlichen Wert ergibt einen Unendlich-Wert mit dem
entsprechenden Vorzeichen
Multiplikation eines Unendlich-Wertes mit 0 ergibt NaN
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
171
Operationen auf reellen Zahlen – 7
Rechenregeln für Ausdrücke, bei denen mindestens ein Operand Unendlich
oder NaN ist:
Division
Wenn einer der Operanden NaN ist, ist das Ergebnis NaN
Division eines Unendlich-Wertes durch einen anderen Unendlich-Wert
ergibt NaN
Division eines Unendlich-Wertes durch einen endlichen Wert ergibt einen
Unendlich-Wert mit dem entsprechenden Vorzeichen
Division eines endlichen Wertes durch einen Unendlich-Wert ergibt 0
Division von 0 durch 0 ergibt NaN
Division eines endlichen Wertes durch 0 ergibt einen Unendlich-Wert mit
dem entsprechenden Vorzeichen
Divisions-Rest
Wenn einer der Operanden NaN ist, ist das Ergebnis NaN
Wenn der Dividend ein Unendlich-Wert ist oder der Divisor ist 0 (oder
beides), dann ist das Ergebnis NaN
Wenn der Dividend endlich ist und der Divisor ist ein Unendlich-Wert, ist
das Ergebnis gleich dem Dividend
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
172
Operationen auf reellen Zahlen – 8
Rechenregeln für Ausdrücke, bei denen mindestens ein
Operand Unendlich oder NaN ist:
Addition und Subtraktion
Wenn einer der Operanden NaN ist, ist das Ergebnis
NaN
Die Summe zweier Unendlich-Werte mit ungleichem
Vorzeichen ergibt NaN
Die Summe zweier Unendlich-Werte mit gleichem
Vorzeichen ergibt den Unendlich-Wert mit diesem
Vorzeichen
Die Summe eines Unendlich-Wertes und eines
endlichen Wertes ergibt den Unendlich-Wert
Die Subtraktion entspricht einer Addition, bei der das
Vorzeichen des zweiten Operanden invertiert wird
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
173
??? Fragen
Haben Sie
Fragen?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Java Sprachaufbau → Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if
174
JETZT!
Struktur von
Java Programmen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
175
Struktur
▪
▪
▪
Programmkopf
♦ Import von Bibliotheken
♦ Name (Identifikation)
Datenbeschreibungen
♦ Konstantenfestlegung
♦ Variablen-Deklaration
♦ Variablen-Initialisierung
Funktionsbeschreibungen
♦ Definition von Teilfunktionen
♦ Berechnungen
♦ Ablaufsteuerung
♦ Ein- / Ausgabe
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
176
Beispiel – 1
import java.io.*;
import java.util.*;
Programmkopf
public class Celsius {
public static void main(String[] args) throws IOException {
// Benötigte Variablen deklarieren
String eingabeZeile;
double epsilon = 0.005;
double c = 0.0, f;
// Für die Eingabe von der Tastatur
BufferedReader eingabe =
Variablenbeschreibung new BufferedReader(new InputStreamReader(System.in));
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
177
Beispiel – 2
// Eingabe, Double-Wert einlesen
eingabeZeile = eingabe.readLine();
StringTokenizer tokens = new
StringTokenizer(eingabeZeile);
c = Double.parseDouble(tokens.nextToken());
// Umrechnen in Fahrenheit
f = c * 9.0/5.0 + 32.0;
// Ausgabe des Ergebnis
System.out.println("... in Fahrenheit: " + f +
" Grad \n");
Funktionsbeschreibung
}
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
178
JETZT!
Variablen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
179
Variablen-Vereinbarungen
Eine Variablen-Deklaration vereinbart einen Namen für
einen Speicherbereich an einer bisher freien Adresse im
Arbeitsspeicher
Variablen werden bei ihrer Deklaration mit einem Typ
versehen;
dieser wird auch statischer (oder Compilezeit-) Typ
genannt
Dieser Typ definiert
welche Werte die entsprechende Variable annehmen
kann,
welche Operationen auf dieser Variablen erlaubt sind
und
die Größe des zu reservierenden Speicherbereichs
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
180
Syntaxregeln Variablen-Vereinbarungen
Typen kennen wir bereits: boolean, byte, ...
FieldDeclaration:
FieldModifiers opt Type VariableDeclarators ;
VariableDeclarators:
VariableDeclarator
VariableDeclarators , VariableDeclarator
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
VariableDeclaratorId:
Identifier
VariableDeclaratorId [ ]
VariableInitializer:
Die ignorieren wir vorerst
Expression
ArrayInitializer
FieldModifiers:
FieldModifier
FieldModifiers FieldModifier
FieldModifier: one of
public protected private static final transient volatile
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
181
Beispiele für Variablen-Vereinbarungen
boolean a, b, c;
int i, j, k;
float f;
double d1, d2;
String name, vorname;
byte b;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Das ist ein Namenskonflikt:
Namen müssen
in ihrem Namensraum
immer eindeutig sein
Wir werden später sehen,
wie Namensräume
angelegt werden
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
182
Der Ort von Variablen-Vereinbarungen
Eclipse generiert den folgenden Code-Rahmen:
class HelloWorld {
public static void main(String[] args) {
Variablen
werden an
dieser Stelle
vereinbart
...
}
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
183
Namen für Variablen
Namen in Java beginnen mit einem Buchstaben (keinem
Sonderzeichen, keiner Ziffer) gefolgt von null oder mehreren
Buchstaben oder Ziffern
Die Buchstaben dürfen, da Java Unicode verwendet, aus einem
beliebigen Bereich im Zeichensatz stammen, zum Beispiel sind auch
deutsche Sonderzeichen erlaubt. (!)
Aus "historischen Gründen" dürfen Java-Namen auch mit einem
Unterstrich "_" und mit einem Dollar-Zeichen "$" beginnen
Beides sollte aber in neu geschriebenen Programmen vermieden
werden!
In Java können Namen Ziffern beinhalten:
Soll eine Zahl unmittelbar auf einen Namen folgen, dann muss sie
durch mindestens ein "neutrales" Zeichen davon getrennt sein
Namen können keine Leerzeichen und kein Zeilenende beinhalten
Die gleichen Regeln gelten auch für alle anderen Namen in Java,
zum Beispiel für Klassennamen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
184
Variablen in Ausdrücken – 1
Variablen eines bestimmten Type können in Ausdrücken überall dort
verwendet werden, wo auch Werte dieses Type verwendet werden
können
Voraussetzung:
Die Variable besitzt einen Wert
Speicher
An der Stelle 1
steht ja bereits
ein Wert (23)
Ein bestimmtes
Bit-Muster ist
immer vorhanden
1: 23
2: …
3: …
4: 32
5: …
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Problem:
Der Speicherinhalt ist
ungewiss
Damit ist undefiniert,
welchen Wert die neue
Variable hat
Damit ist undefiniert,
welchen Wert ein
Ausdruck annimmt, in
dem die Variable
verwendet wird
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
185
Variablen in Ausdrücken – 2
Damit immer definiert ist, welchen Wert eine Variable (in
einem Ausdruck) hat, wenn sie verwendet wird, muss jede
Variable mit einem (definierten) Wert belegt werden, bevor
sie verwendet werden darf
Eine Variable kann auf zwei Arten mit einem Wert belegt
werden:
durch eine Initialisierung oder
durch eine Wertzuweisung
Der Java-Compiler überprüft, dass Variablen auf
(zumindest) eine dieser Arten einen Wert bekommen
haben, bevor dieser Wert verwendet wird
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
186
Initialwerte für Variablen
Wert-Zuweisung bei der Initialisierung
Die Syntaxregel
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
erlaubt es, jeder Variablen einzeln bei ihrer Deklaration einen
Initialwert zu geben
Der Initialwert muss zuweisungskompatibel sein
Der Compiler überprüft das
Beispiele:
boolean a = true, b = false, c;
int i, j = 0, k = 1;
float f = 3.0f;
double d1 = 5, d2 = 7.0;
String name = "Schmidt", vorname = "Hans";
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
187
Zuweisung an Variablen – 1
Die Wert-Zuweisung als Anweisung (englisch: Statement)
wird durch folgende Syntaxregeln beschrieben:
AssignmentExpression:
ConditionalExpression Das fassen wir als
einfachen Ausdruck auf
Assignment
Assignment:
LeftHandSide AssignmentOperator
AssignmentExpression
LeftHandSide:
ExpressionName
Die ignorieren wir vorerst
FieldAccess
ArrayAccess
AssignmentOperator: one of
= *= /= %= += -= <<= >>= >>>= &= ^= |=
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
188
Zuweisung an Variablen – 2
Der Ergebniswert des Ausdrucks, der einer
Variablen zugewiesen werden soll, muss
zuweisungskompatibel sein
Der Compiler überprüft das
Die Wert-Zuweisung in Java ist keine Anweisung
im üblichen Sinne, sondern ein Ausdruck:
AssignmentExpression
Das Ergebnis des Zuweisungs-Ausdrucks ist der
zugewiesene Wert
→ Mehrfach-Zuweisungen sind erlaubt und üblich
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
189
Beispiele für Zuweisungen
Beispiele für Wertzuweisungen an Variablen
Gegeben seien die folgenden Vereinbarungen:
boolean a = true, b = false, c;
int i, j = 0, k = 1;
float f = 3.0f;
double d1 = 5, d2 = 7.0;
String name = "Schmidt", vorname = "Hans";
Die folgenden Zuweisungen sind gültig:
a = false;
c = a == b;
i = j + k;
d1 = f = Math.abs( f );
name = name + ", " + vorname;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
190
JETZT!
Konstanten
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
191
Konstanten vs. Variablen
Der Wert von Variablen kann jederzeit während
des Programmablaufs durch eine Zuweisung
geändert werden
Das ist für einige Größen nicht sinnvoll
pi, die Kreiskonstante
e, die Eulersche Zahl
usw.
Solche Werte können als konstant vereinbart
werden
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
192
Konstanten-Vereinbarung
Konstanten werden ähnlich vereinbart wie
Variablen, aber
sie müssen auf Programm (also Klassen-)
Ebene vereinbart werden,
sie werden durch die FieldModifier final und
static gekennzeichnet und
sie müssen bei der Deklaration mit einem
Initialwert versehen werden
Konstanten eines bestimmten Typs können wie
Werte dieses Typs verwendet werden
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
193
Ort der Konstanten-Vereinbarung
Eclipse generiert den folgenden Code-Rahmen:
class HelloWorld {
Konstanten
werden an
dieser Stelle
vereinbart
public static void main(String[] args) {
...
}
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
194
Beispiel
class HelloWorld {
Generierter Code
static final double PI = 3.141592653589793;
static final boolean WAHR = true;
KonstantenVereinbarungen
public static void main(String[] args) {
boolean a = WAHR, b = false, c;
int i, j = 0, k = 1;
float f = 3.0f;
double d1 = 5, d2 = 7.0;
String name = "Schmidt", vorname = "Hans";
VariablenVereinbarungen,
teils mit
Initialisierung
a = false;
c = a == b;
i = j + k;
d1 = f = Math.abs( f );
d2 = d1 * PI;
name = name + ", " + vorname;
Anweisungen
}
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
195
JETZT!
Zuweisungen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
196
Zuweisungsoperator
Zuweisungen schreiben sich
<variable> = <wert>
Ergebnis dieses Ausdrucks (!) ist wiederum der Wert:
Es ist möglich
<variable3> = <variable2> = <variable1> = <wert>
zu schreiben.
Der Ergebniswert von diesen Ausdrücken kann ignoriert
werden, d.h. er muss nicht verwendet werden.
Passiert „oft“ in Anweisungsfolgen.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
197
Zuweisung elementarer Werte
a:
?
b:
?
c:
?
a:
5
b:
5
c:
5
b = 4;
a:
5
c = 3;
b:
4
c:
3
int
a, b, c;
a = b = c = 5;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
198
Vertauschen zweier Elemente
Wir wollen den Wert von a (2) und von b(3) vertauschen.
int
a = 2, b = 3;
a=b
a:
2
b:
3
a:
3
b:
3
Klappt nicht der Wert von 2 ist weg.
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
199
Vertauschen zweier Elemente
2. Versuch:
a:
2
b:
3
t:
?
t=a;
a:
2
Wert von a sichern (in t)!
b:
3
t:
2
a=b;
a:
3
a überschreiben (mit b)!
b:
3
t:
2
b=t;
a:
3
b zurücksichern (aus t)!
b:
2
t:
2
int
int
1
2
3
a = 2, b = 3;
t;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
200
Merke!
Achtung:
Der Zuweisungsoperator in Java schreibt sich
Der Test auf Gleichheit in Java schreibt sich
→ Diese beiden werden leicht verwechselt!
=
==
Der Compiler kann nicht immer Hilfestellung leisten, Beispiel:
Aus
a = b == c;
wird versehentlich leicht
a = b = c;
Im Falle der Deklarationen
boolean a; int b, c;
meldet der Compiler einen Typfehler bei der Zuweisung an a
Im Falle der Deklarationen
boolean a, b, c;
kann der Compiler das Versehen nicht feststellen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
201
Zuweisungskompatibilität
Wir wissen bereits, dass die Typen von Operanden bei der
Verwendung in Ausdrücken zuerst einander angeglichen
werden, bevor eine Operation durchgeführt wird
Beispiel:
3.0f + 4
→ 3.0f + 4.0f
→ 7.0f
Das passiert auch beim Zuweisungsoperator
Beispiel:
double d;
d = 3.0f + 4;
→ d = 3.0f + 4.0f;
→ d = 7.0f;
→ d = 7.0d;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
202
Typ-Konvertierung – 1
Werte elementarer Typen können explizit umgewandelt
werden
Sogenannte Type Casts können jeden elementaren Typ in
jeden anderen elementaren Typ (außer boolean)
umwandeln
Schreibweise:
(<Zieltyp>) <Wert>
Beispiele:
byte b;
short sh = 18;
int i;
long l;
b = (byte) 32;
i = (int) 3.14;
l = (long) sh;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
203
Typ-Konvertierung – 2
Ist der Zieltyp „größer“ als der Typ des Wertes, dann ist
der Cast unnötig, Java macht den Cast implizit:
byte → short → int → long → float → double
char → int
Ist der Zieltyp „kleiner“ als der Typ des Wertes dann ist der
Cast explizit notwendig, sonst meldet der Compiler einen
Typfehler
Die Konvertierungsregeln folgen auf den nächsten Folien
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
204
Typ-Konvertierung – 3
double → float:
Es wird bei Bedarf so gerundet, dass eine möglichst
geringe Differenz bleibt
double → long
double → int
double → short
double → byte
float → long
float → int
float → short
float → byte
Nachkommastellen werden abgeschnitten
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
205
Typ-Konvertierung – 4
long → int
long → short
long → byte
int → short
int → byte
short → byte:
Überzählige Bitstellen werden abgeschnitten, dabei
können Vorzeichenfehler auftreten!
Beispiel:
(byte)256
⇒
0
(byte)120
⇒
120
(byte)128
⇒
-128
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
206
Typ-Konvertierung – 5
Kein Cast ist nötig für folgende Konvertierungen:
byte → short
byte → int
byte → long
short → int
short → long
int → long
char → short
char → int
char → long
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
207
Abkürzende Schreibweisen – 1
Für häufig gebrauchte Operationen gibt es abkürzende
Schreibweisen bei der Zuweisung
Beispiel
a = a + 1;
kann geschrieben werden als
a += 1;
Das erlaubt die (bereits bekannte) Syntaxregel
AssignmentOperator: one of
= *= /= %= += -= <<= >>= >>>= &= ^= |=
Diese Operatoren sind noch nicht bekannt
Der Wert einer solchen verkürzten Zuweisung entspricht
dem Wert des ursprünglichen Ausdrucks
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
208
Abkürzende Schreibweisen – 2
Für häufig gebrauchte Operationen gibt es weitere abkürzende
Schreibweisen bei der Zuweisung
Beispiel
a = a + 1; oder auch a += 1;
kann noch kürzer geschrieben werden als
a++;
oder
++a;
Entsprechend gibt es auch den "--"-Operator
Diese Operatoren werden Inkrement und Dekrement genannt
Da man sie vor und nach der Variablen schreiben kann, spricht man
von Präfix- bzw. Postfix-Inkrement- und Dekrement-Operatoren
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
209
Abkürzende Schreibweisen – 3
Der Unterschied zwischen den Präfix- und den Postfix-Operatoren liegt
im Zeitpunkt der Auswertung
Tritt ein Präfix-Operator in einem umgebenden Ausdruck auf, so wird
das Inkrement/Dekrement ausgeführt, bevor mit dem neuen Wert der
Variablen weitergerechnet wird
Tritt ein Postfix-Operator in einem umgebenden Ausdruck auf, so wird
mit dem alten Wert der Variablen weitergerechnet, bevor das
Inkrement/Dekrement ausgeführt wird
Beispiel
int a, b = 1;
a = b++;
→ b == 2, a == 1
a = ++b;
→ b == 3, a == 3
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
210
Abkürzende Schreibweisen – 4
Ähnlich wie die Operator-Vorrangregelung ohne
Klammerung kann die häufige Verwendung von
Präfix-/Postfix-Inkrement und –Dekrement zu
Verständnisschwierigkeiten beim Lesen von
Programmen führen
→ Vorsichtig einsetzen!
Die beiden Varianten werden hauptsächlich bei
der Indizierung von Arrays (Feldern) benutzt (s.
später); wir werden dann in Beispielen darauf
zurückkommen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
211
Abkürzende Schreibweisen – 5
Die folgende Syntaxregel beschreibt Zuweisungen
(Assignment) sowie die vorgestellten abkürzenden
Schreibweisen:
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
...
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
212
Allgemeines zu Namenskonventionen
Für Programme in der Sprache Java werden genaue Konventionen für
die Wahl von Namen angegeben
Diese Konventionen werden zum Beispiel in den umfangreichen
Bibliotheken, die zu einer Java-Implementierung gehören,
angewendet und haben diverse Vorteile gezeigt
Sie sollten befolgt werden, sofern irgend möglich (sinnvolle
Ausnahmen bestätigen die Regel)!
Wichtig ist vor allen Dingen, Konventionen konsistent zu befolgen,
z.B. nur englische oder nur deutsche Namen zu benutzen
Sie sind auch für die Übungen zur Vorlesung Inf als Vorgabe zu
betrachten
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
213
Namenskonventionen: Konstanten
Namen für Konstanten sollten als Folge aus einem oder mehreren Worten
gewählt werden, alle in Großbuchstaben geschrieben und die einzelnen Worte
durch Unterstriche getrennt
Namen für Konstanten sollten beschreibend sein und nicht unnötig abgekürzt
werden
Beispiele:
MIN_VALUE
MAX_VALUE
PI
Gruppen von Konstanten, die zusammengehörige Werte kennzeichnen,
sollten mit einer gemeinsamen Buchstabenfolge, z.B. einem Akronym,
beginnen
Beispiele
M_START,
M_STOP
für Start bzw. Stopp einer Maschine
WC_BLUE,
WC_RED,
WC_GREEN
für verschiedene Farben eines Fensterrahmens
(WindowColor)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
214
Namenskonventionen Variablen – 1
Variablennamen sollten mit einem Kleinbuchstaben
beginnen, nachfolgende Wörter sollten dann jeweils mit
einem Großbuchstaben beginnen (nicht etwa durch einen
Unterstrich abgesetzt sein)
Lokale Variablennamen sollten kurz, aber sinnvoll gewählt
werden, z.B. als Folge von Kleinbuchstaben, die keine
Worte sind
Beispiele
Akronyme, z.B. "cp" für eine Variable des Typs
ColoredPoint
Abkürzungen, z.B. "buf" für eine Puffer-Variable
Kurzworte, die in ähnlicher Weise immer wieder
verwendet werden, z.B. "in" und "out" für Ein- und
Ausgabedateien
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
215
Namenskonventionen Variablen – 2
Namen, die nur aus einem Buchstaben ("a", "b",
"c") bestehen sollten vermieden werden, wie auch
durchnummerierte Namen ("i1", "i2", "i3")
Ausnahmen von dieser Regel: temporäre und
Schleifenvariablen – typische Beispiele:
"c" für einen char-Wert
"d" für einen double-Wert
"f" für einen float-Wert
"i", "j", "k" für int-Werte
"s" für einen String
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
216
Eindeutigkeit von Namen
Innerhalb eines Namensraumes müssen Namen immer eindeutig sein
Bis jetzt gilt:
Es dürfen keine zwei gleichnamigen Variablen deklariert werden
Es dürfen keine zwei gleichnamigen Konstanten deklariert werden
Hat eine Variable den gleichen Namen wie eine Konstante, dann
überdeckt die Variable die Konstante; die Konstante ist dann nicht
länger sichtbar (also auch nicht zugreifbar)
Es gibt an dieser Stelle keinen Namenskonflikt, weil die Variable in
einem anderen Namensraum deklariert wird als die Konstante
Der Namensraum für die Konstante ist das gesamte Programm
(also die Klasse), derjenige für die Variable ist die Methode "main"
Die Methode ist in das Programm eingeschachtelt, daher
überdeckt die Variable im lokalen Namensraum die Konstante im
umgebenden, globalen Namensraum
Der Compiler überprüft, ob Namenskonflikte vorliegen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
217
Beispiel
Programm (Klasse)
final static int k = 2;
main (Methode)
int k = 15;
"main" ist in das Programm
eingeschachtelt, daher überdeckt die
Variable im lokalen Namensraum die
Konstante im globalen Namensraum
x = .... + k + ....;
Der Namensraum für
die Variable k ist die
Methode "main"
Der Namensraum für die
Konstante k ist das gesamte
Programm (also die Klasse)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Namensräume
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
218
??? Fragen
Welche Fragen
gibt es?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen – Bedingungen: if → Schleifen
219
JETZT
if - Anweisung
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
220
Bedingungen in Algorithmen
Anweisung
Bedingung
erfüllt
Anweisung
Bedingung
nicht erfüllt
Bedingung
erfüllt
Bedingung
nicht erfüllt
Alternative
Anweisung 1
Anweisung
Anweisung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Alternative
Anweisung 2
Anweisung
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
221
Syntaxregeln für Bedingungen in Java
Statement:
IfThenStatement
IfThenElseStatement
...
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
Der Ausdruck (Expression) muss vom Typ Boolean sein,
sonst lehnt der Compiler die Übersetzung des Programms
ab
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
222
3 Formen für Bedingungen in Java – 1
<Anweisung>
Anweisung
Bedingung
erfüllt
Bedingung
nicht erfüllt
if ( <Bedingung> )
<Optionale Anweisung>
<Anweisung>
Optionale
Anweisung
Anweisung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
223
3 Formen für Bedingungen in Java – 2
<Anweisung>
Anweisung
Bedingung
erfüllt
Bedingung
nicht erfüllt
Alternative
Anweisung 1
if ( <Bedingung> )
<Alternative Anweisung 1>
else
<Alternative Anweisung 2>
<Anweisung>
Alternative
Anweisung 2
Anweisung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
224
3 Formen für Bedingungen in Java – 3
<Anweisung>
if ( <Bedingung 1> )
<Alternative Anweisung 1>
Anweisung
Bedingung1
erfüllt
Alternative
Anweisung 1
Bedingung1
nicht erfüllt
Bedingung2
erfüllt
Bedingung2
nicht erfüllt
else if ( <Bedingung 2> )
<Alternative Anweisung 2>
...
Alternative
Anweisung 2
...
else if ( <Bedingung n> )
<Alternative Anweisung n>
else
<Default-Anweisung>
<Anweisung>
Anweisung
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
225
Beispiele
float f = ...;
boolean b = ...;
if ( f > 12 )
f = Math.sqrt( f );
if ( b )
System.out.println( f );
else
b = Math.sqrt( f ) > 12;
if ( b )
System.out.println( "f = " + f );
else if ( f == 7 )
System.out.println( "Reiner Zufall!" );
else
f = 7;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
226
Problem: „Dangling Else“ – 1
Beispiel für mögliche Interpretationen: siehe Formatierung
if ( <Bedingung1> )
if ( <Bedingung2> )
<Anweisung1>
else
<Anweisung2>
if ( <Bedingung1> )
if ( <Bedingung2> )
<Anweisung1>
else
<Anweisung2>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
227
Problem: „Dangling Else“ – 2
wert1 = 5;
wert2 = 5;
ergebnis = 10;
if ( wert1 > 10 )
if ( wert2 > 10 )
ergebnis = 100;
else
ergebnis = 1000;
wert1 = 5;
wert2 = 5;
ergebnis = 10;
if ( wert1 > 10 )
if ( wert2 > 10 )
ergebnis = 100;
else
ergebnis = 1000;
→ ergebnis == 10
→ ergebnis == 1000
Das ist die Java-Interpretation:
ein „else“ gehört zum letzten freien „if“
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
228
Konventionen zur Notation – 1
Prinzipiell werden „einfache“ Anweisungen (Zuweisungen,
Aufrufe von Operationen, leere Anweisungen) nach
Möglichkeit einzeln in einer Zeile notiert
Die optionalen oder alternativen Anweisungen im Rumpf
von Bedingungen werden 2 Zeichen (oder 1 Tabulator)
eingerückt
Ziel dieser Konventionen
Man soll auf den ersten Blick erkennen, dass es sich um
eine Bedingung handelt und wie weit sich die optionalen
oder die alternativen Anweisungen erstrecken
Diese Regel gilt auch für andere Programmstrukuren
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
229
Konventionen Allgmein
Eine oder mehrere bedingte Anweisung(en) werden eingerückt
die nachfolgende (nicht zur Bedingung gehörende) Anweisung oder
das else, sofern vorhanden, steht wieder auf Höhe des if
Gibt eine oder mehrere Anweisungen im else Teil, so werden diese
eingerückt
Es werden IMMER geschweifte Klammern um die bedingten
Anweisungen gemacht! (Auch wenn es andere Möglichkeiten gibt)
Beispiele:
if ( <Bedingung> ) {
Einrücken
<Anweisung>
}
<Anweisung>
if ( <Bedingung> ) {
<Anweisung>
Einrücken
...
<Anweisung>
} else {
<Anweisung>
Einrücken
}
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
korrekte
Formatierung
Ist
übungsrelevant!
230
So funktioniert es auch ...
Folgt nach einem if eine einzelne Anweisung (d.h. keine
Anweisungsfolge), so
steht das if mit seiner Bedingung alleine in einer Zeile,
die Anweisung wird eingerückt und
die nachfolgende Anweisung oder das else, sofern vorhanden,
steht wieder auf Höhe des if
Beispiele:
if ( <Bedingung> )
<Anweisung>
<Anweisung>
if ( <Bedingung> )
<Anweisung>
else
...
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
… aber
wir
verwenden
immer
} Klammern
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
231
So funktioniert es auch ...
Folgt nach einem if eine Anweisungsfolge, so
steht das if mit seiner Bedingung und der öffenden
Klammer alleine in einer Zeile,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer und das else, sofern
vorhanden, stehen wieder auf Höhe des if
Beispiele:
if ( <Bedingung> ) {
if ( <Bedingung> ) {
<Anweisung>
<Anweisung>
...
...
… aber
<Anweisung>
wir
<Anweisung>
verwenden
} else
}
immer
...
<Anweisung>
} Klammern
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
232
So funktioniert es auch ...
Folgt nach einem else eine einzelne Anweisung, so
stehen die schließende Klammer, sofern vorhanden, und
das else alleine in einer Zeile,
die Anweisung wird eingerückt und
die nachfolgende Anweisung steht wieder auf Höhe des
if
Beispiele:
if ( <Bedingung> )
<Anweisung>
else
<Anweisung>
<Anweisung>
if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else
<Anweisung>
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
… aber
wir
verwenden
immer
} Klammern
233
So funktioniert es auch ...
Folgt nach einem else eine Anweisungsfolge, so
stehen die schließende Klammer, sofern vorhanden, und das
else mit der öffnenden Klammer alleine in einer Zeile,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht alleine wieder auf Höhe des if
Beispiele:
if ( <Bedingung> )
<Anweisung>
else {
<Anweisung>
}
<Anweisung>
… aber
wir
verwenden
immer
} Klammern
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else {
<Anweisung>
}
<Anweisung>
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
234
So funktioniert es auch ...
Folgen nach einem else weitere (eingeschachtelte) if-Anweisungen, so
werden diese nicht weitere 2 Zeichen eingerückt, sondern
das else steht zusammen mit dem nachfolgenden if und seiner
Bedingung in einer Zeile und
die anderen Konventionen werden entsprechend angewendet, als
ob die (eingeschachtelten) if-Anweisungen auf Höhe des ersten if
stehen würden
Beispiele:
if ( <Bedingung> )
<Anweisung>
else if ( <Bedingung> )
<Anweisung>
<Anweisung>
if ( <Bedingung> )
<Anweisung>
else if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else if ( <Bedingung> )
<Anweisung>
...
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
if ( <Bedingung> )
<Anweisung>
else if ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
} else if ( <Bedingung> )
<Anweisung>
else if ( ...
...
else
...
<Anweisung>
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
235
Merke!
▪
▪
Ziel:
Man soll auf den ersten Blick erkennen, dass es
sich um eine Bedingung handelt und wie weit sich
die optionalen oder die (verschiedenen)
alternativen Anweisungen erstrecken
Wir verwenden immer Klammern damit wir Fehler
vermeinden
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
236
JETZT
Anweisungsfolgen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
237
Anweisungsfolgen in Java
Eine Anweisungsfolge fasst eine Reihe von
Anweisungen zu einer neuen "Super-Anweisung"
zusammen
Eine Anweisungsfolge darf überall verwendet
werden, wo eine "einfache", einzelne Anweisung
verwendet werden darf
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
238
Syntaxregeln für Anweisungsfolgen – 1
Anweisungsfolgen in Java werden in geschweifte Klammern
eingefasst:
Statement:
IfThenStatement
IfThenElseStatement
Block
...
Block:
{ BlockStatements opt }
BlockStatements:
BlockStatement
BlockStatements BlockStatement
BlockStatement:
Statement
LocalVariableDeclarationStatement
...
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
239
Syntaxregeln für Anweisungsfolgen – 2
Anweisungsfolgen in Java dürfen lokale Variablen
enthalten:
BlockStatement:
Statement
LocalVariableDeclarationStatement
...
LocalVariableDeclarationStatement:
Abschließen durch ein
LocalVariableDeclaration ;
Semikolon ist Pflicht!
LocalVariableDeclaration:
finalopt Type VariableDeclarators
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
240
Beispiel für Anweisungsfolgen
Formal:
{ <Deklaration>
...
<Deklaration>
<Anweisung>
...
<Anweisung>
}
Konkret:
boolean b;
{ int i;
i = 3;
b = i > 10;
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
241
Leere Anweisungen in Java
In Java gibt es leere Anweisungen, die durch ein Semikolon
abgeschlossen werden müssen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
...
EmptyStatement:
;
Abschließen durch ein
Semikolon ist Pflicht!
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
242
Vorsicht FALLE!
Hier steht ein EmptyStatement!
if ( a <10 ) ;
Die nächste Zeile wird IMMER ausgeführt!
System.out.println(a);
if ( b > 10 );
{ System.out.println(i); }
if (a < 10) ;
System.out.println(a);
else if
System.out.println(0);
Hier steht ein EmptyStatement!
Die nächste Zeile EINMAL ausgeführt
Hier steht ein EmptyStatement!
Dies ist in Verbindung mit else if
ein Compilerfehler, da das
else if nicht auf das if bezieht!
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
243
Ausdrücke, wo Anweisungen stehen
In Java dürfen manche Ausdrücke als Anweisungen verwendet werden
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
...
ExpressionStatement:
Abschließen durch ein
StatementExpression ;
Semikolon ist Pflicht!
StatementExpression:
Assignment
PreIncrementExpression
Zuweisungsausdrücke
PreDecrementExpression
kennen wir schon
PostIncrementExpression
PostDecrementExpression
...
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
244
Zusammenfassung:
Semikolon nach Anweisungen
In Java werden folgende "Anweisungen" durch ein
Semikolon abgeschlossen:
Zuweisungen und ihre verkürzenden
Schreibweisen (ExpressionStatement)
Leere Anweisungen (EmptyStatement)
Variablen-Deklarationen
(LocalVariableDeclarationStatements)
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
245
Wiederholung: Beispiel
wert1 = 5;
wert2 = 5;
ergebnis = 10;
if ( wert1 > 10 )
if ( wert2 > 10 )
ergebnis = 100;
else
ergebnis = 1000;
Ausdruck → durch ";" abgeschlossen
Ausdruck → durch ";" abgeschlossen
Ausdruck → durch ";" abgeschlossen
if-Anweisung ...
if-else-Anweisung ...
Ausdruck → durch ";" abgeschlossen
... und ihr Rumpf
... und ihr Rumpf
Ausdruck → durch ";" abgeschlossen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
246
??? Fragen
Welche Fragen
gibt es?
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
247
Abkürzende Schreibweisen
int i = 4, j = 5, k;
Statt:
if (i > j) {
k=7;
} else {
k=2;
}
kann (kürzer) formuliert werden:
k = (i > j) ? 7 : 2 ;
Formal:
Variable = (BooleanExpression) ? Then-Value : Else-Value ;
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
248
??? Fragen
Welche Fragen
gibt es?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
249
JETZT!
Schleifen
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
250
Akzeptierende Schleifen – 1
Anweisung 1
Anweisung 2
Bedingung
erfüllt
Bedingung
nicht erfüllt
Anweisung 3
Ablauf:
1. Der Schleifenrumpf (Anweisung 2) wird
ausgeführt
2. Die Bedingung wird ausgewertet
– Ist die Bedingung erfüllt, dann wird das
Programm mit Anweisung 2 fortgesetzt;
der Schleifenrumpf wird erneut
durchlaufen
– Ist die Bedingung nicht erfüllt, dann wird
das Programm mit Anweisung 3 fortgesetzt
Es handelt sich um eine akzeptierende
Schleife:
Unabhängig von der Bedingung wird der
Schleifenrumpf mindestens ein Mal
durchlaufen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
251
Akzeptierende Schleifen – 2
Anweisung 1
Anweisung 2
Bedingung
erfüllt
Bedingung
nicht erfüllt
Es sind drei Fälle möglich
Bereits die erste Auswertung des Ausdrucks
liefert false
Die wiederholte Auswertung des Ausdrucks
liefert eine endliche Folge von
true, true, ..., true, false
von Ergebnissen
Die wiederholte Auswertung des Ausdrucks
ergibt immer den Wert true
Im 3. Fall spricht man von einer
Endlosschleife, das ist erlaubt, aber
semantisch selten sinnvoll
Anweisung 3
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
252
Syntaxregeln für akzeptierende Schleifen
Akzeptierende Schleifen sind Anweisungen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
DoStatement
...
DoStatement:
do Statement while ( Expression ) ;
Der Ausdruck (Expression) muss vom Typ Boolean sein, sonst lehnt
der Compiler die Übersetzung des Programms ab
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
253
Beispiel – 1
i = 1;
do
i=1
i++;
while ( i < 10 );
System.out.println( i );
i++
i < 10
i >= 10
System.out.println( i )
Ausgabe:
10
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
254
Beispiel – 2
i=1
i++
System.out.println( i )
i < 10
i = 1;
do {
i++;
System.out.println( i );
} while ( i < 10 );
System.out.println( "Ende" );
Ausgabe:
i >= 10
System.out.println("Ende")
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
2
3
4
...
10
Ende
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
255
Beispiel – 3
int i, summe;
summe = 0;
i = 0;
do {
summe += i;
i++;
} while ( i < 100 );
System.out.println( summe );
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
256
Abweisende Schleifen – 1
Anweisung 1
Bedingung
nicht erfüllt
Anweisung 2
Bedingung
erfüllt
Anweisung 3
Ablauf:
• Die Bedingung wird ausgewertet
– Ist die Bedingung erfüllt, dann wird der
Schleifenrumpf (Anweisung 2)
durchlaufen
Das Programm wird mit Schritt 1
fortgesetzt
– Ist die Bedingung nicht erfüllt, dann wird
der Schleifenrumpf übersprungen
Es handelt sich um eine abweisende
Schleife:
Ist die Bedingung gleich zu Beginn nicht
erfüllt, wird der Schleifenrumpf
nicht ein einziges Mal durchlaufen
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
257
Abweisende Schleifen – 2
Anweisung 1
Bedingung
nicht erfüllt
Anweisung 2
Bedingung
erfüllt
Anweisung 3
Es sind drei Fälle möglich
Bereits die erste Auswertung des
Ausdrucks liefert false
Die wiederholte Auswertung des
Ausdrucks liefert eine endliche Folge
von
true, true, ..., true, false
von Ergebnissen
Die wiederholte Auswertung des
Ausdrucks ergibt immer den Wert
true
Im 3. Fall spricht man von einer
Endlosschleife, das ist erlaubt, aber
semantisch selten sinnvoll
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
258
Syntaxregeln für abweisende Schleifen
Auch Abweisende Schleifen sind Anweisungen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
DoStatement
WhileStatement
...
WhileStatement:
while ( Expression ) Statement
Der Ausdruck (Expression) muss vom Typ Boolean sein, sonst lehnt
der Compiler die Übersetzung des Programms ab
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
259
Beispiel für eine abweisende Schleife – 1
i = 1;
while ( i < 10 )
i=1
i++;
i >= 10
System.out.println( i );
i < 10
i++
Ausgabe:
System.out.println( i )
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
10
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
260
Beispiel für eine abweisende Schleife – 2
Die Anweisungsfolge
ist eine Anweisung
i = 1;
{
while ( i < 10 )
i=1
i++;
System.out.println( i );
i >= 10
i < 10
)
i++;
System.out.println( i
}
System.out.println( “Ende“ );
System.out.println("Ende")
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Ausgabe:
2
3
4
...
10
Ende
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
261
Beispiel für eine abweisende Schleife – 3
int i, summe;
summe = 0;
i = 0;
while ( i < 100 ) {
summe += i;
i++;
}
System.out.println( summe );
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
262
Überführung von Schleifen:
akzeptierende in abweisende – 1
Anweisung1
Anweisung1
Bedingung
erfüllt
Bedingung
nicht erfüllt
Bedingung
nicht erfüllt
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Bedingung
erfüllt
Anweisung1
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
263
Überführung von Schleifen:
akzeptierende in abweisende – 2
do
<Anweisung>
while ( <Bedingung> );
<Anweisung>
while ( <Bedingung> )
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
264
Überführung von Schleifen:
abweisende in akzeptierende – 1
Bedingung
erfüllt
Bedingung
nicht erfüllt
Bedingung
nicht erfüllt
Bedingung
erfüllt
Anweisung
Bedingung
erfüllt
Anweisung
Bedingung
nicht erfüllt
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
265
Überführung von Schleifen:
abweisende in akzeptierende – 2
while ( <Bedingung> )
<Anweisung>
if ( <Bedingung> )
do
<Anweisung>
while ( <Bedingung> );
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
266
Konventionen zur Notation
Der Rumpf von (akzeptierenden und abweisenden) Schleifen wird 2
Zeichen (oder 1 Tabulator) eingerückt
Die Anweisung(an) wird/werden eingerückt und
die erste (nicht wiederholte) Anweisung nach der Schleife steht wieder
auf Höhe des while
Die Anweisung(en) stehen IMMER in geschweiften Klammern
Beispiele:
<Anweisung>
while ( <Bedingung> ) {
Einrücken
<Anweisung>
}
<Anweisung>
<Anweisung>
do {
<Anweisung>
Einrücken
.....
<Anweisung>
} while ( <Bedingung> )
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
267
So funktioniert es auch ...
Der Rumpf von (akzeptierenden und abweisenden) Schleifen wird 2
Zeichen (oder 1 Tabulator) eingerückt
Besteht der Rumpf einer while-Schleife aus einer einzelnen
Anweisung (d.h. nicht aus einer Anweisungsfolge), so
steht das while mit der Bedingung in einer Zeile,
die Anweisung wird eingerückt und
die erste Anweisung nach der Schleife steht wieder auf Höhe des
while
Beispiel:
<Anweisung>
while ( <Bedingung> )
<Anweisung>
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
… aber
wir
verwenden
immer
} Klammern
268
So funktioniert es auch ...
Besteht der Rumpf einer while-Schleife aus einer
Anweisungsfolge, so
wird die öffnende Klammer nach der while-Bedingung
in der gleichen Zeile notiert,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht alleine in einer Zeile
wieder auf Höhe des while
Beispiel:
<Anweisung>
while ( <Bedingung> ) {
<Anweisung>
...
<Anweisung>
}
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
… aber
wir
verwenden
immer
} Klammern
269
So funktioniert es auch ...
Besteht der Rumpf einer do-Schleife aus einer einzelnen
Anweisung (d.h. nicht aus einer Anweisungsfolge), so
steht das do alleine in einer Zeile,
die Anweisung wird eingerückt und
das while steht mit seiner Bedingung in einer Zeile
wieder auf Höhe des do
Beispiel:
<Anweisung>
do
<Anweisung>
while ( <Bedingung> );
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
… aber
wir
verwenden
immer
} Klammern
270
Konventionen zur Notation
Ziel dieser Konventionen:
Man soll auf einen Blick erkennen, um
welche Schleife es sich handelt und was
zum Schleifenrumpf gehört
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
271
??? Fragen
Welche Fragen
gibt es?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
272
Schleifen in Algorithmen
Neben abweisenden und akzeptierenden Schleifen gibt es in Java
auch Zählschleifen
Zählschleifen besitzen eine Schleifenvariable
Diese kann in der Schleife selbst eingeführt werden
Sie wird in der Schleife initialisiert
Sie wird in der Schleife regelmäßig erhöht oder erniedrigt
Der Abbruch der Schleife wird über den Wert der
Schleifenvariablen gesteuert
Bemerkung
Es ist durchaus möglich, Zählschleifen (fast vollkommen) anders zu
verwenden (ein Beispiel wird noch gezeigt)
Das ist aber ein sehr schlechter Programmierstil!
Stattdessen sollten dann besser while- oder do-Schleifen verwendet
werden
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
273
Syntaxregeln für Zählschleifen – 1
Zählschleifen sind Anweisungen
Statement:
IfThenStatement
IfThenElseStatement
Block
EmptyStatement
ExpressionStatement
WhileStatement
DoStatement
ForStatement
...
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
274
Syntaxregeln für Zählschleifen – 2
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForInit:
StatementExpressionList
LocalVariableDeclaration
StatementExpressionList:
StatementExpression
StatementExpressionList , StatementExpression
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
...
ForUpdate:
StatementExpressionList
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
275
Beispiel für eine for-Schleife – 1
ForInit: StatementExpression (Zuweisung)
Expression:
• Muss vom Typ Boolean sein
• Wenn sie nicht erfüllt ist, wird die Schleife
beendet
ForUpdate: StatementExpression (Zuweisung)
for ( i = 1; i <= 10; i++ )
System.out.println( i );
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
276
Beispiel für eine for-Schleife – 2
for ( i = 1; i <= 10; i++ )
i=1
System.out.println( i );
i > 10
i <= 10
System.out.println( i )
i++
Äquivalente while-Schleife
i = 1;
while ( i <= 10 ) {
System.out.println( i );
i++;
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
277
Beispiel für eine for-Schleife – 3
2 Variablen, Initialisierungen möglich, aber nur ein Typ erlaubt
for ( int i=10, j=0; i >= 0; i--, j++ ) {
Beide Variablen können
modifiziert werden
System.out.println( „Schleifenvariable: “ + i );
System.out.println( „Anzahl der Durchläufe: “ + j );
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
278
Konventionen zur Notation – 1
Der Rumpf von Zähl-Schleifen wird 2 Zeichen (oder 1 Tabulator)
eingerückt
steht das for mit der Schleifenkontrolle in einer Zeile,
Die wiederholte(n) Anweisung(en) ist/sind eingerückt und
stehen IMMER in geschweiften Klammern
die erste (nicht wiederholte) Anweisung nach der Schleife steht wieder
auf Höhe des for
Beispiel:
<Anweisung>
for ( <Initialisierung>; <Bedingung>; <Update> ) {
<Anweisung>
}
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
279
So funktioniert es auch ...
Besteht der Rumpf einer for-Schleife aus einer Anweisungsfolge, so
wird die öffnende Klammer nach der for-Schleifenkontrolle in der
gleichen Zeile notiert,
der Inhalt der Anweisungsfolge wird eingerückt und
die schließende Klammer steht alleine in einer Zeile wieder auf
Höhe des for
Beispiel:
<Anweisung>
for ( <Initialisierung>; <Bedingung>; <Update> )
<Anweisung>
...
<Anweisung>
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
… aber
wir
verwenden
immer
} Klammern
280
Beispiele für Fehler in for-Schleifen
{
int i;
Doppelte Deklaration der Variablen i
...
for ( int i=10; i >= 0; i-- )
...
}
for ( int i=10; i >= 0; i-- ) {
...
}
System.out.println( i ); Variable i ist hier nicht bekannt
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
281
Beispiele „entfremdete“ for-Schleifen – 1
Folgende Schleifen sind (gültige) Endlos-Schleifen
for ( ; true; )
System.out.println( "forever" );
for ( ; ; )
System.out.println( "forever" );
Steht Programmtext nach einer dieser beiden Schleifen
noch mindestens eine Anweisung, so meldet der Compiler
einen Fehler, weil dieser Programmteil nie erreicht werden
kann
In beiden Fällen wäre eine while-Schleife adäquat
while ( true )
System.out.println( "forever" );
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
282
Beispiele „entfremdete“ for-Schleifen – 2
Folgende Schleife wird „künstlich“ beendet
boolean stopIt;
for ( int i=1; i <= 100; i++ ) {
...
stopIt = ...;
if ( stopIt )
i = 101;
...
}
Auf den ersten Blick übersieht man leicht, dass die Schleife eventuell
weniger als 100 Durchläufe hat
Auch in diesem Fall wäre eine while-Schleife adäquat
int i = 1;
while ( (i <= 100) & !stopIt ) {
...
stopIt = ...;
...
i++;
}
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
283
Konventionen zur Notation – 1
Der Rumpf von Zähl-Schleifen wird 2 Zeichen (oder 1 Tabulator)
eingerückt
Besteht der Rumpf einer for-Schleife aus einer einzelnen Anweisung
(d.h. nicht aus einer Anweisungsfolge), so
steht das for mit der Schleifenkontrolle in einer Zeile,
die Anweisung wird eingerückt und
die erste Anweisung nach der Schleife steht wieder auf Höhe
des for
Beispiel:
<Anweisung>
for ( <Initialisierung>; <Bedingung>; <Update> ) {
<Anweisung>
}
<Anweisung>
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
284
Struktogrammsymbol
▪
▪
▪
▪
Es gibt kein eigenes Symbol für Zählschleifen
Es handelt sich bei Zählschleifen ja um abweisende
Schleifen
Als Bedingung wird die komplette Schleifensteuerung
eingetragen
Im Strukturblock findet man dann die Anweisungen im
Rumpf der for-Schleife (ohne update)
for ( int k=0; k<10; k++ )
Strukturblock
INF1 – TSIT , Imperative Programmierung - Teil I ( V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
285
??? Fragen
Welche Fragen
gibt es?
INF1 – TSIT , Imperative Programmierung - Teil I (V5 – 26.10.17)
Datentypen→ Java Struktur → Variablen und Konstanten → Zuweisungen → Bedingungen: if → Schleifen
286
Herunterladen