4 Kontrollfluss-Diagramme

Ähnliche Dokumente
5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

3.4 Struktur von Programmen

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München

2 Eine einfache Programmiersprache

5.3 Auswertung von Ausdrücken

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

1 Klassen und Objekte

Elementare Konzepte von

Beispiel Statische Typisierung. 5 Mehr Java. Primitive Datentypen Ganze Zahlen. 5.1 Basistypen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Java I Vorlesung Imperatives Programmieren

2 Programmieren in Java I noch ohne Nachbearbeitung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Java Referenzdatentypen genauer betrachtet

RO-Tutorien 3 / 6 / 12

Programmierpraktikum

ÜBUNGS-BLOCK 7 LÖSUNGEN

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Anregungen zu Übung 2

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

3.2 Datentypen und Methoden

Einstieg in die Informatik mit Java

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

12 Abstrakte Klassen, finale Klassen und Interfaces

Vorkurs Informatik WiSe 16/17

RO-Tutorien 15 und 16

Einführung in die Programmierung II. 5. Zeiger

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Vorkurs Informatik WiSe 17/18

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

Vorkurs Informatik WiSe 16/17

Programmieren 1 C Überblick

Grundlagen und Konzepte von C Datenstrukturen

Projekt 3 Variablen und Operatoren

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

Wenn... dann... if (condition) statement. if (kontostand < 0) System.out.println("Oops..."); false. condition. true. statement

Programmierung mit C Zeiger

Probeklausur Name: (c)

5.3 Auswertung von Ausdrücken

3 Syntax von Programmiersprachen

Bedingte Anweisungen

Programmieren I. Kapitel 5. Kontrollfluss

Einführung in die Programmierung mit VBA

Felder, Zeiger und Adreßrechnung

Elementare Datentypen in C++

Tag 4 Repetitorium Informatik (Java)

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

einseitige Selektion zweiseitige Selektion

Primitive Datentypen und Felder (Arrays)

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Herzlich willkommen!

Transkript:

4 Kontrollfluss-Diagramme In welcher Weise die Operationen eines Programms nacheinander ausgeführt werden, läßt sich anschaulich mithilfe von Kontrollfluss-Diagrammen darstellen. Ingredienzien: Start Stop Startkten Endkten 84

x = read(); write(y); x = x - y; Eingabe Ausgabe Zuweisung 85

x < y bedingte Verzweigung Kante Zusammenlauf 86

Beispiel: Start x = read(); y = read(); "! # $ &% $ write(x); x!= y x < y ' ( )* + Stop x=x y; y=y x; 87

Die Ausführung des Programms entspricht einem Pfad durch das Kontrollfluss-Diagramm vom Startkten zum Endkten. Die Deklarationen von Variablen muss man sich am Startkten vorstellen. Die auf dem Pfad liegenden Kten (außer dem Start- und Endkten) sind die dabei auszuführenden Operationen bzw. auszuwertenden Bedingungen. Um den Nachfolger an einem Verzweigungskten zu bestimmen, muss die Bedingung für die aktuellen Werte der Variablen ausgewertet werden. == operationelle Semantik 88

Start x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 89

Start x == 18, y == 24 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 90

Start x == 18, y == 24 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 91

Start x == 18, y == 24 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 92

Start x == 18, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 93

Start x == 18, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 94

Start x == 12, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 95

Start x == 12, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 96

Start x == 6, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 97

Start x == 6, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 98

Start x == 6, y == 6 x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 99

Start x = read(); y = read(); x!= y write(x); x < y Stop x=x y; y=y x; 100

Achtung: Zu jedem MiniJava-Programm lässt sich ein Kontrollfluss-Diagramm konstruieren :-) die umgekehrte Richtung gilt zwar ebenfalls, liegt aber nicht so auf der Hand. 101

Beispiel: Start Stop 102

5 Mehr Java Um komfortabel programmieren zu können, brauchen wir mehr Datenstrukturen; mehr Kontrollstrukturen :-) 103

5.1 Mehr Basistypen Außer, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im Rechner zu repräsentieren. Der Platz wird in Bit gemessen. (Wie viele Werte kann man mit n Bit darstellen?) 104

Es gibt vier Sorten ganzer Zahlen: Typ Platz kleinster Wert größter Wert ) % 8 128 127 16 32 768 32 767 32 2 147 483 648 2 147 483 647 64 9 223 372 036 854 775 808 9 223 372 036 854 775 807 Die Benutzung kleinerer Typen wie ) oder % spart Platz. Achtung: Java warnt nicht vor Überlauf/Unterlauf!! 105

Es gibt vier Sorten ganzer Zahlen: Typ Platz kleinster Wert größter Wert ) % 8 128 127 16 32 768 32 767 32 2 147 483 648 2 147 483 647 64 9 223 372 036 854 775 808 9 223 372 036 854 775 807 Die Benutzung kleinerer Typen wie ) oder % spart Platz. Achtung: Java warnt nicht vor Überlauf/Unterlauf!! 106

Beispiel: &%%( )&% ' ( )* +... liefert $... :-( In realem Java kann man bei der Deklaration einer Variablen ihr direkt einen ersten Wert zuweisen (Initialisierung). Man kann sie sogar (statt am Anfang des Programms) erst an der Stelle deklarieren, an der man sie das erste Mal braucht! 107

Es gibt zwei Sorten von Gleitkomma-Zahlen: Typ Platz kleinster Wert größter Wert!& 32 ca. -3.4e+38 ca. 3.4e+38 7 signifikante Stellen 64 ca. -1.7e+308 ca. 1.7e+308 15 signifikante Stellen Überlauf/Unterlauf liefert die Werte $! (.! ( bzw. Für die Auswahl des geeigneten Typs sollte die gewünschte Genauigkeit des Ergebnisses berücksichtigt werden. Gleitkomma-Konstanten im Programm werden als aufgefasst :-) Zur Unterscheidung kann man an die Zahl! (oder ) bzw. (oder ) anhängen. 108

... weitere Basistypen: Typ Platz Werte " 1,! &% 16 alle Unicode-Zeichen Unicode ist ein Zeichensatz, der alle irgendwo auf der Welt gängigen Alphabete umfasst, also zum Beispiel: die Zeichen unserer Tastatur (inklusive Umlaute); die chinesischen Schriftzeichen; die ägyptischen Hieroglyphen... -Konstanten schreibt man mit Hochkommas:,,. 109

5.2 Mehr über Arithmetik $ Die Operatoren,,, und gibt es für jeden der aufgelisteten Zahltypen :-) Werden sie auf ein Paar von Argumenten verschiedenen Typs angewendet, wird automatisch vorher der speziellere in den allgemeineren umgewandelt (impliziter Type Cast)... 110

!& Gleitkomma-Zahlen % ganze Zahlen ) 111

Beispiel: % '% ' ( )* '%... liefert den -Wert... :-)!& '%! ' ( )* '%... liefert den!& -Wert... :-)... vorausgesetzt, ' ( )* kann Gleitkomma-Zahlen ausgeben :-) 112

Beispiel: % '% ' ( )* '%... liefert den -Wert... :-)!& '%! ' ( )* '%... liefert den!& -Wert... :-)... vorausgesetzt, ' ( )* kann Gleitkomma-Zahlen ausgeben :-) 113

Achtung: Das Ergebnis einer Operation auf!& von!& herausführen, d.h. ein kann aus dem Bereich liefern. Das Ergebnis einer Operation auf Basistypen für ganze Zahlen kann einen Wert aus einem größeren ganzzahligen Basistyp liefern (mindestens aber ). Wird das Ergebnis einer Variablen zugewiesen, sollte deren Typ dies zulassen :-) Mithilfe von expliziten Type Casts lässt sich das (evt. unter Verlust von Information) stets bewerkstelligen. 114

Beispiele: %!& + $ liefert! ( liefert 9223372036854775807 (d.h. den größten -Wert) liefert 2147483647 (d.h. den größten -Wert) liefert -1 liefert 1000000000 liefert 1 liefert -2 115

5.3 Strings Der Datentyp ' für Wörter ist kein Basistyp, sondern eine Klasse (dazu kommen wir später :-) Hier behandeln wir nur drei Eigenschaften: Werte vom Typ ' haben die Form Man kann Wörter in Variablen vom Typ ' abspeichern. Man kann Wörter mithilfe des Operators konkatenieren. 116

Beispiel: ' % ' % ' % ' % ' ( )* % % % %... schreibt auf die Ausgabe :-) 117

Beachte: Jeder Wert in Java hat eine Darstellung als '. Wird der Operator auf einen Wert vom Typ ' und einen anderen Wert x angewendet, wird x automatisch in seine ' -Darstellung konvertiert... ==... liefert einfache Methode, um!& auszugeben!!! oder Beispiel: $ ' ( )* && ( )$ +... schreibt :-) && ( )$ $ 118 auf die Ausgabe

5.4 Felder Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 119

Beispiel: Einlesen eines Felds &&% % # 120

type name deklariert eine Variable für ein Feld (array), dessen Elemente vom Typ type sind. Alternative Schreibweise: type name Das Kommando legt ein Feld einer gegebenen Größe an und liefert einen Verweis darauf zurück: a a 121

Der Wert einer Feld-Variable ist also ein Verweis. Variable : kopiert den Verweis der Variablen in die a a b 122

Die Elemente eines Felds sind von 0 an durchnumeriert. Die Anzahl der Elemente des Felds name ist name Auf das i-te Element des Felds name greift man mittels name zu. Bei jedem Zugriff wird überprüft, ob der Index erlaubt ist, d.h. im Intervall {0,..., name -1} liegt. Liegt der Index außerhalb des Intervalls, wird die &! ) % + ausgelöst ( Exceptions).. 123

Mehrdimensionale Felder Java unterstützt direkt nur ein-dimensionale Felder. Ein zwei-dimensionales Feld ist ein Feld von Feldern... a a 124

5.5 Mehr Kontrollstrukturen Typische Form der Iteration über Felder: Initialisierung des Laufindex; -Schleife mit Eintrittsbedingung für den Rumpf; Modifizierung des Laufindex am Ende des Rumpfs. 125

Beispiel (Forts.): Bestimmung des Minimums &% ( &% # "! # &% &% "! ' ( )*&% 126

Mithilfe des -Statements: &%! # "! # &% &% ' ( )*&% 127

Allgemein:! init; cond; modify stmt... entspricht: init cond stmt modify... wobei äquivalent ist zu :-) 128

Warnung: Die Zuweisung +$ ist in Wahrheit ein Ausdruck. Der Wert ist der Wert der rechten Seite. Die Modifizierung der Variable erfolgt als Seiteneffekt. Der Semikolon hinter einem Ausdruck wirft nur den Wert weg... :-) ==... fatal für Fehler in Bedingungen... "! &% "! ' ( )* % %( " 129

Die Operatoranwendungen und inkrementieren beide den Wert der Variablen. tut das, bevor der Wert des Ausdrucks ermittelt wird (Pre-Increment). tut das, nachdem der Wert ermittelt wurde (Post-Increment). entspricht: entspricht: 130

Oft möchte man Teilprobleme separat lösen; und dann die Lösung mehrfach verwenden; == Funktionen, Prozeduren Beispiel: Einlesen eines Felds 131

& %( & &% & ) ) &&%! # % 132

Die erste Zeile ist der Header der Funktion. & sagt, wo die Funktion verwendet werden darf ( kommt später :-) %( wird. kommt ebenfalls später :-) gibt den Typ des Rückgabe-Werts an. ist der Name, mit dem die Funktion aufgerufen Dann folgt (in runden Klammern und komma-separiert) die Liste der formalen Parameter, hier:. Der Rumpf der Funktion steht in geschwungenen Klammern. expr beendet die Ausführung der Funktion und liefert den Wert von expr zurück. 133

Die Variablen, die innerhalb eines Blocks angelegt werden, d.h. innerhalb von und, sind nur innerhalb dieses Blocks sichtbar, d.h. benutzbar (lokale Variablen). Der Rumpf einer Funktion ist ein Block. Die formalen Parameter können auch als lokale Variablen aufgefasst werden. Bei dem Aufruf den Wert. erhält der formale Parameter 134

Weiteres Beispiel: Bestimmung des Minimums & %( ) &%! # "! # &% &% &% 135

... daraus basteln wir das Java-Programm + : & %% + ) % + & %( & %( ) % & %( " ' '% &% ) ' ( )*&%!! %% + 136

Manche Funktionen, deren Ergebnistyp " keine Werte zurück im Beispiel: Funktionen heißen Prozeduren. ' ( )* ist, geben gar. Diese und Das Hauptprogramm hat immer als Parameter ein Feld '% von ' -Elementen. In diesem Argument-Feld werden dem Programm Kommandozeilen-Argumente verfügbar gemacht. & %% )&%( ) % + & %( " ' '% ' ( )* '% % '! %% )&%( 137

Dann liefert der Aufruf: )&%(... die Ausgabe: Hello World! 138

Um die Arbeitsweise von Funktionen zu veranschaulichen, erweitern/modifizieren wir die Kontrollfluss-Diagramme: f(x,y) x = f(7,z); return 42; Startkten der Funktion f Funktionsaufruf Endkten Für jede Funktion wird ein eigenes Teildiagramm erstellt. Ein Aufrufkten repäsentiert eine Teilberechnung der aufgerufenen Funktion. 139

Teildiagramm für die Funktion : min(a) result = a[0]; i = 1; i<a.length return result; a[i]<result result = a[i]; i = i+1; 140

Insgesamt erhalten wir: min(a) readarray(n,s) main(args) write("..."); n = read(); return result; return a; a = readarray(n,"..."); result = min(a); write(...); return; 141

main(args) min(a) readarray(n,s) Aufruf write("..."); n = read(); return result; return a; Rückkehr a = readarray(n,"..."); result = min(a); write(...); return; 142

main(args) min(a) readarray(n,s) Aufruf write("..."); n = read(); a = readarray(n,"..."); result = min(a); return result; return a; Rückkehr write(...); return; 143