Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

der Universität Oldenburg
Programmierung 1 - Repetitorium
Hochschule Fulda – FB ET Sommersemester 2010
Suche in Texten (Stringsuche )
Pascal-Datentypen Skalare Typen Zeiger- Typen Strukturierte Typen
8. Formale Sprachen und Grammatiken
10. Grundlagen imperativer Programmiersprachen
12. Iteration und Rekursion
Unter- und Oberklassen: Beispiel
der Universität Oldenburg
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
DVG Ablaufsteuerung
DVG Klassen und Objekte
Einführung in die Programmierung Anweisungen und Datentypen
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
Einführung in das Programmieren mit JavaScript Mag. Andreas Starzer weloveIT – EDV Dienstleistungen.
Informatik 1 Übung 2.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Basisinformationstechnologie HK-Medien
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmiersprache C 4
Wiederholte Programmausführung
Prozeduren und Funktionen
2.4 Rekursion Klassifikation und Beispiele
Prof. Dr.-Ing. Franz-Josef Behr
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
MODULA-2.
Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units.
Datentypen: integer, char, string, boolean
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Agenda für heute, 28. April, 2005 Strukturierte VariablenStrukturierte Variablen Arrays.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
PHP: Operatoren und Kontrollstrukturen
Variablen. var meineZahl:Number = 7; meineZahl 7 Name TypWert = Zuweisung von Variablen.
Kurzreferat über Funktionen und Prozeduren Von Alexander RothHomepage:
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Agenda für heute, 21. April, 2005 Interaktion mit Pascal-ProgrammenInteraktion mit Pascal-Programmen Dateneingabe Programmsteuerung Debugging Datentypen:
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
The Programming Language Pascal
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Prüfungsbesprechung Barbara Scheuner Vorlesung: Programmieren und Problemlösen Prof. Hans Hinterberger.
Extended Pascal Erweiterung von Pascal shadi Behzadipour shadi Shadi behzadipour.
Programmiersprache PASCAL
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Wiederholte Programmausführung
Datentypen: integer, char, string, boolean
Prüfungsbesprechung Barbara Scheuner
Datentypen: integer, char, string, boolean
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
The Programming Language Pascal
 Präsentation transkript:

Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition: 1. eine Konstante k vom Typ D ist ein Ausdruck vom Typ D 2. eine Variable v vom Typ D ist ist ein Ausdruck vom Typ D 3. sind t1, ..., tn Ausdrücke der Typen D1, ..., Dn und ist f:D1 x ... x Dn -> D eine Nicht-Infix-Operation, so ist f(t1,...,tn) ein Ausdruck vom Typ D 4. sind t1, t2 Ausdrücke der Typen D1, D2 und ist o:D1 x D2 -> D eine Infix-Operation, so ist (t1) o (t2) ein Ausdruck vom Typ D Wert eines Ausdrucks: 1. für eine Konstante k ist Wert(k) das durch k bezeichnete Element von D 2. für eine Variable v ist Wert(v) der in der Variablen gespeicherte Wert 3. Wert(f(t1,...,tn)) = f(Wert(t1), ..., Wert(tn)) 4. Wert((t1) o (t2)) = Wert(t1) o Wert(t2)

Klammerung Vollständige Klammerung oft unnötig durch Festlegung der Bindungsstärke 1. einstellige Operatoren wie not, sin, cos, ... 2. multiplikative Operatoren wie *, /, div, mod, ... 3. additive Operatoren wie +, -, or, ... 4. vergleichende Operatoren wie =, <>, <, ... stärker schwächer Bei Operatoren gleicher Bindungsstärke wird Linksklammerung angenommen x div y * y + x mod y steht für ((x div y) * y) + (x mod y) + * mod div x y y x y Auswertungsbaum

Typkonversion bei zweistelligen Operatoren Operanden in der Regel vom selben Typ Ausnahmen: • Aufzählungstypen (Typverträglichkeit reicht, später) • REAL-INTEGER-Verträglichkeit: überall, wo REAL erlaubt ist, ist auch INTEGER erlaubt Bei gemischten Argumenten (etwa für div, mult) wird Konversion durchgeführt, Ergebnis stets REAL Beispiel: 17.0 + 2 2*8.0 1.0 <> 1 Wert: 19.0 16.0 TRUE Bemerkung: in allen Teilausdrücken nur ausführbare Operationen verwenden! Der Ausdruck (A = 0) or (B/A > 0) kann zu Laufzeitfehler führen, falls A=0.

Pascal Anweisungen strukturierte einfache Anweisung Anweisung Verbund- With- Anweisung Zuweisung Prozedur- anweisung bedingte Anweisung wiederholdene Anweisung Goto- Anweisung While- Anweisung If- Anweisung Repeat- Anweisung Case- Anweisung For- Anweisung

Wertzuweisung Bezeichner := Ausdruck muß als Variable deklariert sein Typ muß Variablen- typ entsprechen zu beachten: Wertzuweisung bewirkt Änderung des Zustands im Speicher Symbol “:=“ hat völlig andere Bedeutung als “=“ X := X + 1 bedeutet: nach Ausführung der Zuweisung ist Wert(X) = Wert (X) + 1, dabei ist Wert (X) der Wert von X vor Ausführung der Zuweisung X = X + 1 ist ein Ausdruck vom Typ BOOLEAN, der immer FALSE ist “:=“ wird gesprochen "ergibt sich aus" oder "wird zu" alt alt

Bedingte Anweisungen Anweisung IF Boolescher Ausdr. THEN ELSE Soll Folge von Anweisungen ausgeführt werden, so ist Verwendung einer Verbundanweisung (BEGIN ... END Klammerung) erforderlich Mehrdeutigkeiten: IF B1 THEN IF B2 THEN A1 ELSE A2 1) IF B1 THEN [ IF B2 THEN A1 ELSE A2 ] oder 2) IF B1 THEN [ IF B2 THEN A1 ] ELSE A2 ? B1 True True False B2 True False True 1 A1 A2 - 2 A1 - A2 Pascal folgt Lesart 1: ELSE ergänzt immer letztes unergänztes IF Lesart 2 besser: IF B1 THEN BEGIN IF B2 THEN A1 END ELSE A2

Case-Anweisung CASE Ausdruck OF Fall END ELSE Anweisung jeder Fall besteht aus Liste von Konstanten und Anweisung Semantik: CASE A OF k11, ..., k1j: S1; k21, ..., k2n: S2; ... km1, ..., kmi: Sm ELSE S END bedeutet dasselbe wie: IF A = k11 or ... or A = k1j THEN S1 ELSE IF A = k21 or ... or A = k2n THEN S2 ... ELSE IF A = km1 or ... or A = kmi THEN Sm ELSE S

Ein Programm mit Fallunterscheidungen PROGRAM Case1; VAR Monat, Jahr, Tage: Integer; Schalt: Boolean; BEGIN Read(Monat, Jahr); IF Jahr mod 4 = 0 THEN IF Jahr mod 100 = 0 THEN IF Jahr mod 400 = 0 THEN Schalt := True ELSE Schalt := False ELSE Schalt := True ELSE Schalt:= False; CASE Monat OF 4, 6, 9, 11: Tage := 30; 2: IF Schalt THEN Tage := 29 ELSE Tage := 28 ELSE Tage := 31 END; WriteLn( Monat, ' . ', Jahr, ' ------> ', Tage ) END.

Schleifen boolescher Ausdruck WHILE DO Anweisung WHILE B DO A bedeutet dasselbe wie: IF B THEN BEGIN A; WHILE B DO A END ; boolescher Ausdruck REPEAT Anweisung UNTIL REPEAT C UNTIL B entspricht: C; WHILE not B DO BEGIN C END

FOR-Schleife TO Bezeichner := FOR Ausdruck DOWNTO Ausdruck DO Anweisung Bezeichner ist deklarierte Variable, so daß succ und pred definiert sind Anzahl der Schleifendurchläufe zu Beginn festgelegt: für jeden Wert zwischen dem ersten und dem zweiten Ausdruck einmal TO, DOWNTO geben an, ob inkrementiert oder dekrementiert wird Auf Laufvariable in der Schleife nur lesend zugreifen! Keine Annahmen über den Wert der Laufvariable nach Beendigung der Schleife machen! Beispiel: FOR Zeichen := 'a' TO 'z' DO WriteLn(Zeichen, ' ', Ord(Zeichen))

Bemerkungen FOR-Schleifen terminieren, da die Anzahl der Schleifendurchläufe feststeht WHILE und REPEAT können nichtterminierende Programme produzieren Terminierung oft schwierig zu beweisen: Beispiel Syrakusfunktion: Es ist unbewiesen, ob diese Schleife für alle n verlassen wird Strategie für Terminierungsbeweise: finde positiven Ausdruck, der bei jedem Schleifendurchlauf kleiner, aber nie negativ wird: bei ggT etwa: Wert von x + y nach jedem Schleifendurchlauf kleiner, aber nie negativ WHILE n <> 1 DO IF odd(n) THEN n := 3*n+1 ELSE n := n div 2

11. Unterprogrammtechnik Unterprogramme sind in sich geschlossene Programmeinheiten, deren Ausführung durch ihren Namen veranlaßt wird Sie dienen insbesondere der Strukturierung größerer Programme 2 Arten: • Prozeduren: abstrahieren Anweisungsfolge zu neuer Anweisung • Funktionen: berechnen einen Wert eines bestimmten Typs Vorteile der Verwendung von Unterprogrammen: • größere Lesbarkeit und Überschaubarkeit von Programmen • geringerer Schreibaufwand bei wiederkehrenden Aktionsfolgen • geringere Fehleranfälligkeit • einfachere Änderungsmöglichkeit

Lokale und globale Variable Unterprogramme können selbst Unterprogrammdeklarationen enthalten HP UP1 UP2 UP3 UP11 UP12 UP21 UP31 UP32 UP311 Schachtelungsbaum Sichtbarkeitsregel: Für ein Unterprogramm UP gelten alle Deklarationen aus allen Programmen (einschließlich UP und HP) auf dem Weg zu UP im Schachtelungsbaum Deklarationen in UP heißen lokal, solche in übergeordneten Programmen global für UP Bei Bezeichnungskollisionen gilt Deklaration des nächsten Unterprogramms

Prozeduren Der Aufruf einer Prozedur in einem Programm ist eine Anweisung Die in der Prozedur deklarierte Folge von Anweisungen wird abgearbeitet, anschließend wird ins aufrufende Programm zurückgesprungen Haupt programm Unter- programm UP1 BEGIN • END; • UP1;

Gültigkeitsbereich und Lebensdauer Gültigkeitsbereich eines Bezeichners: der statische Teil des Programms, in dem dieser Bezeichner in exakt gleicher Bedeutung verwendet werden darf. Lebensdauer: bezeichnet die dynamische Existenz eines Objekts während des Programmablaufs. Der Gültigkeitsbereich bezieht sich auf den Bezeichner (durch Übersetzer kontrolliert), die Lebensdauer auf den zur Laufzeit belegten Speicherplatz. Durch Ausführung eines Unterprogramms P entsteht eine Inkarnation. Zur Inkarnation gehören dynamisch (bis Ende der Ausführung von P): • ein Ausführungspunkt (Zeiger auf gerade auszuführenden Befehl) • Speicherplätze für alle Bezeichner von Variablen und Wertparameter • Bezüge auf die konkreten Referenzparameter. Nur in der jüngsten Inkarnation wandert der Ausführungspunkt weiter. Die Lebensdauer einer Variablen ist identisch mit der Existenz der zugehörigen Prozedur-Inkarnation. Zu Beginn der Lebensdauer ist der Wert einer Variablen undefiniert.

Prozedurparameter formale Parameter: in der Deklaration eines Unterprogramms verwendet (Platzhalter für Werte) aktuelle Parameter: beim Prozeduraufruf verwendete Argumente Typen: • Eingabeparameter: Übermittlung von Werten an die Prozedur, call by value • Ausgabeparameter: Übermittlung von Resultaten an aufrufendes Programm, call by reference • Ein/Ausgabeparameter: Mischform, call by reference formale Par. aktuelle Par. Referenz- parameter Kennzeichnung durch VAR Variable entspre- chenden Typs Werte- parameter Ausdrücke entspre- chenden Typs ohne VAR

Beispiel Deklaration in aufrufendem Programm: VAR A, B, C, D: REAL; PROCEDURE Beispiel (V, W: REAL; VAR X: REAL); BEGIN ... END; Deklaration in aufrufendem Programm: VAR A, B, C, D: REAL; korrekte Aufrufe: Beispiel(A, D, B); Beispiel(A-1, A - 2*B, D); inkorrekt: Beispiel(A, B, 1.0) Angabe des Typs formaler Parameter erforderlich, nur Typnamen, nicht Typdeklarationen erlaubt PROCEDURE xyz(A: 1..Maxint) verboten, da Typdefinition vorkommt korrekt: TYPE Pos = 1..Maxint; ... PROCEDURE xyz(A: Pos)

Methoden der Parameterübergabe a) Call by value - Werte der aktuellen Parameter bei Unterprogrammaufruf an formale Parameter gebunden - formale Parameter lokal im aufgerufenen Programm - keine Information geht an das aufrufende Programm zurück b) Call by reference - Unterprogramm erhält bei Aufruf Zeiger auf Adresse des aktuellen Parameters - Alle Operationen werden im Speicherbereich des aufrufenden Programms ausgeführt - Veränderungen bleiben nach Beendigung des Unterprogramms sichtbar

c) Call by value-result - Werte der aktuellen Parameter werden an formale Parameter gebunden - Berechnung verwendet formale Parameter lokal - Nach Prozedurende werden Werte der lokalen Parameter an aktuelle Parameter gebunden procedure p (x,y: integer); begin x := x + 1; y := y + 1; end a := 1; p (a,a); Call by reference: a = 3 Call by value-result: a = 2 (falls x  y, abhängig von der Reihenfolge des Rückkopierens)

d) Call by name - Bei Unterprogrammaufruf werden formale Parameter durch aktuelle Parameter textuell ersetzt - Bindung des formalen Parameters an Speicherplatz wird jeweils neu ermittelt - Zuweisungen an einen formalen Parameter können verschiedene Speicherplätze betreffen Beispiel: procedure swap(a, b: integer) var temp: integer; begin temp := a; a := b; b := temp; end. für a, b sei call by name vereinbart.

Aufruf: Swap (i, a[i]) bewirkt Ausführung von temp := i; i := a[i]; a[i] := temp; Seien vor dem Aufruf i = 3 und a[3] = 4, nach dem Aufruf gilt: i = 4 und a[4] =3 (a[3] bleibt unverändert) Bei call by refence dagegen passiert das Erwartete (i=4 und a[3] = 3).