Programmierung 1 - Repetitorium

Slides:



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

3. Operatoren und Ausdrücke
Vorlesung Compilertechnik Sommersemester 2008
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Zusammenfassung der Vorwoche
Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:
10. Grundlagen imperativer Programmiersprachen
Finale Semantik und beobachtbares Verhalten
Kapitel 4 Datenstrukturen
der Universität Oldenburg
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
FH-Hof Einbindung von JavaScript Anweisungen
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
Prinzipien des Algorithmenentwurfs Backtracking Prof. Dr. Th. Ottmann
Union-Find-Strukturen
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
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
Datentyp  Zusammenfassung von Mengen von "Werten" mit auf
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Ein Vortrag von Stefan Winter & Marc Ruppert
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
DVG Klassen und Objekte
Einführung in die Programmierung Anweisungen und Datentypen
Visualisierung funktionaler Programme
Grundkonzepte Java - Klassendefinition
Prof. Dr. Max Mühlhäuser Dr. Guido Rößling
Informatik 1 Übung 2.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Programmierung 1. Einführung Seite 1
Primär(x)f(x)a[x]new typeof sizeof checked unchecked Unär+-~!++x--x x++ x-- (T)x Multip./Divis.*/% Addition/Subtr.+- shift > kleiner/größer = is gleich/ungleich==!=
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Algorithmen und Datenstrukturen Übungsmodul 8
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Datentypen: integer, char, string, boolean
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
PHP: Operatoren und Kontrollstrukturen
Programmieren in C Grundlagen C 2
7. Formale Sprachen und Grammatiken
Tupelkalkül: Notation (1)
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
 Sortigkeit oder Arität
Variablen und Datentypen
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
 Präsentation transkript:

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage: http://info1.marcwagner.info

Montag, den 07.04.03 Kapitel 1 Grundlagen

1.1 Programme Es folgen einige grundlegende Begriffe zum Verständnis von Programmen : Wert = Objekte, mit denen gerechnet werden kann (Zahlen) Ausdrücke = Beschreibung von Werten (47+3) Konstante (4,7,3) Operatoren (,+) Bezeichner = Name für programmiersprachliche Objekte Deklarationen = Bindung von Bezeichner an Objekte (val x = 47+3) Schlüsselwort (val) Programm = Folge von Deklarationen Typen von Werten (int) Negative Zahlen (~7)

1.2 Interpreter Ein Interpreter ist ein Software-Werkzeug, mit dem die Programme einer Programmiersprache schrittweise ausgeführt werden können. Als Interpreter für Standard ML wurde in der Vorlesung „Programmierung 1“ der Moscow ML Interpreter gewählt. Weitere Informationen zu Standard ML : http://www.dina.dk/~sestoft/mosmllib

1.3 Vergleiche und Konditionale Vergleichsoperatoren < <= = <> Ergebnistyp von Vergleichen ist bool. Boolesche Werte sind true und false. Allgemeine Form eines Konditionals (Wenn-dann-sonst-Entscheidung) : if e1 then e2 else e3 e1 Bedingung vom Typ bool e2 Konsequenz e3 Alternative e2 und e3 müssen typgleich sein

1.4 Prozeduren Prozedurdeklaration fun quadrat (x:int) = xx besteht aus Schlüsselwort fun Bezeichner quadrat, an den die Prozedur gebunden wird Argumentmuster (x:int) mit Argumentvariablen und deren Typ Schlüsselwort = Ausdruck xx beschreibt das Ergebnis der Prozedur und wird als Rumpf der Prozedur bezeichnet. Die Prozedur quadrat hat den Typ int -> int. Prozeduranwendung quadrat 4 besteht aus Prozedurbezeichner quadrat Argumentausdruck 4 Eine Klammerung des Argumentausdrucks einer Prozeduranwendung ist nur erforderlich, wenn er aus mehreren Teilausdrücken zusammengesetzt ist. Reihenfolge der Auswertung nach absteigender Priorität : ~ , prozeduranwendung, div mod , + -  , if then else

1.5 Lokale Deklarationen und Hilfsprozeduren Mit let ... in ... end können lokale Bezeichner für Hilfswerte sowie Hilfsprozeduren eingeführt werden. fun hoch8 (x:int) = let val a = x*x val b = a*a in b*b end fun hoch8 (x:int) = let fun q (y:int) = y*y in q(q(q(x))) end Die Gültigkeit der lokalen Deklarationen und Hilfsprozeduren endet mit dem Schlüsselwort end.

1.6 Tupel Tupel sind Werte, die mehrere Werte zusammenfassen. n-stelliges Tupel ( v1 , ... , vn ) mit der i-ten Komponente vi Paare sind zweistellige Tupel Auf Komponenten eines Tupels kann man mit Hilfe von Projektionen zugreifen. #2 (3,true,7)  true leeres Tupel ( ) Typ unit Baumdarstellung des Tupels ( 7 , ( 2 , true ) , ~3 ) ist : ( ) 7 ( ) ~3 2 true

1.7 Prozeduren und Tupel Tupel können als Argumente und Ergebnisse von Prozeduren verwendet werden. fun swap (x:int, y:bool) = (y,x) val swap : int*bool -> bool*int swap vertauscht die Komponenten eines Paares. swap (4,false) (false,4) : bool*int

als rekursive Prozedur. 1.8 Rekursive Prozeduren Eine Prozedur, die mittels Selbstapplikation definiert ist, bezeichnet man als rekursive Prozedur. fun potenz (x:int, n:int) = if n>0 then x*potenz(x,n-1) else 1 Der Ergebnistyp der rekursiven Prozedur wird unabhängig vom Prozedurrumpf direkt nach dem Argumentmuster deklariert. Auswertungsprotokoll (vereinfachte Fassung) Rekursionsbaum der Prozeduraufrufe potenz(4,2) →* 4potenz(4,1) →* 4(4potenz(4,0)) →* 4(41) →* 16 potenz(4,2) potenz(4,1) potenz(4,0)

1.9 Prozeduren und Umgebungen Unter freien Bezeichnern einer Deklaration versteht man diejenigen Bezeichner, die in der Deklaration ein Auftreten haben, welches nicht im Rahmen der Deklaration gebunden ist. fun q (x:int) = 3 + (p x) Eine Umgebung ist eine Sammlung von Bezeichnerbindungen, sodass keinem Bezeichner mehr als ein Wert zugeordnet wird. Programm : Auswertungsumgebung : fun p (x:int) = x fun q (x:int) = 3 + (p x) fun p (x:int) = 2x val y = q 5 { p → (fun p (x:int) = 2x, { }), q → (fun q (x:int) = 3 + (p x), { p → (fun p (x:int) = x, { }) }), y → 8 }

1.10 Syntax Zeichendarstellung paar(2x-3) Baumdarstellung  zusammengesetzt aus atomaren Ausdrücken und den Formen für Operator und Prozeduranwendungen paar -  3 2 x Wortdarstellung paar ( 2  x – 3 )

1.11 Klammern   + f   +  3 2 + f 2 x 3 f  x 3 2 x f(2(x+3)) (f 2)(x+3) f(2x)+3 Die wichtigsten Klammersparregeln : Punkt vor Strich 34+5  (34)+5 Operatoranwendung gruppiert nach links 2+3+4  (2+3)+4 Prozeduranwendung vor Operatoranwendung f 3+4  (f 3)+4 Prozeduranwendung gruppiert nach links f g 3  (f g) 3

1.12 Syntaxübersicht Wörter sind Konstanten, Operatoren, Schlüsselwörter, Bezeichner. Phrasen sind Ausdrücke, Deklarationen, Programme, Typen und Argumentmuster. Ausdrücke sind Atomare Ausdrücke (Konstante/Bezeichner), Applikationen (Operatoranwendungen, Projektionen, Prozeduranwendungen), Konditionale (if <Bedingung> then <Konsequenz> else <Alternative>), Tupel-Ausdrücke, Let-Ausdrücke (let <Deklarationen> in <Ausdruck> end). Deklarationen : val <Bezeichner> = <Ausdruck> val (<Bezeichner>, ... ,<Bezeichner>) = <Ausdruck> fun <Bezeichner> <Argumentmuster> = <Ausdruck> fun <Bezeichner> <Argumentmuster> : Ergebnistyp = <Ausdruck> Programme : Folge von Deklarationen Argumentmuster : (<Bezeichner> : <Typ> , ... , <Bezeichner> : <Typ>) Typen : Atomare Typen (int, bool, unit), Prozedurtypen <Typ>  <Typ> Tupeltypen <Typ>  ...  <Typ>

1.13 Semantische Zulässigkeit Bevor ein Interpreter ein Programm ausführt, prüft er zunächst, ob das Programm semantisch zulässig ist. Die damit verbundenen Bedingungen betreffen die Bindung von Bezeichnern und den typgerechten Aufbau von Ausdrücken. Wohlgetypte Phrasen sind typgerecht aufgebaut, d.h. jedes vorkommende Auftreten eines Bezeichners ist durch eine Deklaration gebunden. Die Bedingungen zur Wohlgetyptheit lassen sich mit Hilfe von Typregeln formulieren. Dazu später mehr.

1.14 Verarbeitungsphasen statische Phasen : Lexikalische Analyse (eingegebene Zeichenfolge = Folge von Wörtern?) Syntaktische Analyse / Parsing (Ergebnis von 1. = Programm?) Semantische Analyse / Elaboration (Ergebnis von 2. = semantisch zulässig?) dynamische Phasen : Ausführung / Evaluation (Auswertung des Programms)

1.15 Auswertung Auswertungsprobleme : Auswertung von Ausdrücken (geg. Ausdruck e und Umgebung V, bestimme den Wert, den e für V liefert) Auswertung von Deklarationen (geg. Deklaration d und Umgebung V, bestimme die Umgebung, die d für V liefert) Auswertung von Prozeduraufrufen (geg. Prozedur p und Wert v, der als Argument für p zulässig ist, bestimme den Wert, den p für v liefert)

1.16 Laufzeitfehler und Divergenz Möglichkeiten für den Verlauf der Ausführung eines Programms : Reguläre Terminierung (Ausführung endet nach endlich vielen Schritten OK) - Abbruch wegen Laufzeitfehlern (Abbruch aufgrund eines Fehlersignals) - Abbruch durch den Benutzer (Ctrl + C) - Abbruch wegen Ressourcenüberschreitung (Speicherplatz erschöpft) - Divergenz (Ausführung endet nicht)

1.17 Festkomma- und Gleitkommazahlen Festkommazahlen = ganze Zahlen (Moscow ML : Typ int [-230 , ... , 230 -1]) Bei Überlauf : Laufzeitfehler Overflow Gleitkommazahl x = m  10n (Moscow ML : Typ real ) Operatoren können überladen sein, was bedeutet, dass sie auf mehr als einen Typ angewendet werden können. Mischungen sind nicht zulässig, da Festkomma- und Gleitkommazahlen zu unterschiedlichen Darstellungssystemen gehören. Bei Überlauf : Rundungsfehler (Akkumulierung möglich)

1.18 Standardstrukturen Für die Erledigung von Standardaufgaben gibt es Standardprozeduren, welche von Standardstrukturen zur Verfügung gestellt werden. Die Objekte einer Standardstruktur werden durch zusammengesetzte Bezeichner identifiziert (z.B. Math.pi), die aus dem Bezeichner der Struktur (z.B. Math) und aus dem lokalen Bezeichner des Objektes (z.B. pi) bestehen.