Vom Algorithmus zum Programm

Größe: px
Ab Seite anzeigen:

Download "Vom Algorithmus zum Programm"

Transkript

1 Vom Algorithmus zum Programm Menschen und Maschinen Spezifikation Maschinenorientierte Präzisierung Präzisierung von Daten- und Anweisungskonstruktoren Programm und Programmiersprache Syntax und Semantik

2 Menschen und Maschinen Ziel: Einsatz einer Maschine statt eines Menschen für den Verteilungsalgorithmus Unterschiede Mensch - (ideale) Maschine sehr schnell und vor allem unermüdlich absolut zuverlässig. Handlung beim millionsten Male genauso exakt wie beim ersten Male. unbedingt gehorsam; tun genau das, was man ihnen befiehlt; tun nichts, was man ihnen nicht befiehlt; führen jede Handlung ohne Verständnis aus

3 Menschen und Maschinen Ziel: Einsatz einer Maschine statt eines Menschen für den Verteilungsalgorithmus Unterschiede Mensch - (ideale) Maschine jedes Detail sehr schnell und vor allem unermüdlich vollständig und ganz exakt beschreiben; absolut zuverlässig. Handlung beim jede millionsten Situation Male genauso exakt wie beim ersten berücksichtigen Male. unbedingt gehorsam; tun genau das, was man ihnen befiehlt; tun nichts, was man ihnen nicht befiehlt; führen jede Handlung ohne Verständnis aus

4 Defizite des Verteilungsalgorithmus Exaktheit unseres Verteilungsalgorithmus: Was ist in Anweisung 1. und 2. eine "gut sichtbare Stelle"? Was bedeutet Anweisung 3.1 "Leere den Briefkasten", wenn keine Zettel abgegeben wurden, Briefkasten also schon leer ist? Was bedeutet Anweisung 3.2 "Schreibe auf jeden Zettel eine Zahl...", wenn der Briefkasten leer war, und daher in 3.2 gar keine Zettel da sind, auf die man etwas schreiben kann? viele weitere Defizite

5 technische Probleme Eine Maschine wird nicht... Briefkasten aufhängen Eintrittskarten verkaufen

6 technische Probleme Eine Maschine wird nicht... Briefkasten aufhängen Eintrittskarten verkaufen Menschen gelingt es kraft Vernunft, fehlende Information zu ergänzen und problematische Situationen und Anweisungen vernünftig zu bewältigen Maschinen derzeit nicht

7 Folgerungen Maschine wird nicht alle Tätigkeiten beim Verteilungsverfahren übernehmen, die vorher der Mensch erledigt hat Automatisierungsversuch scheitert auf jeden Fall an der unpräzisen Darstellung unseres Verteilungsalgorithmus

8 Spezifikation des Problems Spezifikation = exakte Definition, was der Computer leisten soll Formalisierung später hier nur umgangssprachlich

9 Spezifikation des Problems Kleincomputer C mit Tastatur und Bildschirm nach jeder Briefkastenleerung drückt M Taste "E" (Eingabe) und tippt die auf den Zetteln eingetragenen/angekreuzten Daten getrennt durch Druck auf Eingabetaste und Leertaste ein C codiert Eingaben und bildet Codenummer (Anw ) alle Zettel einer Leerung eingetippt? M drückt Taste "F" (fertig) C sortiert die Zahlen und mischt sie mit früher eingegebenen Werten zusammen letzte Leerung und alle Zettel eingetippt? M drückt fortlaufend Taste "A" (Abrufen); C zeigt jedes Mal eine Zahl in der vorgeschriebenen Reihenfolge auf dem Bildschirm; M ruft die letzten drei Ziffern dieser Zahl, also die Ordnungsnummer, aus.

10 Spezifikation des Problems Kleincomputer C mit Tastatur und Bildschirm nach jeder Briefkastenleerung drückt M Taste "E" (Eingabe) und tippt die auf den Zetteln eingetragenen/angekreuzten Daten getrennt durch Aufgabe: Druck auf Transformiere Eingabetaste und Leertaste ein C codiert Eingaben diese Aufgaben und bildet Codenummer nun in eine(anw ) Darstellung, die C auch alle Zettel einer Leerung eingetippt? M drückt Taste "F" (fertig) versteht C sortiert die Zahlen und mischt sie mit früher eingegebenen Werten zusammen letzte Leerung und alle Zettel eingetippt? M drückt fortlaufend Taste "A" (Abrufen); C zeigt jedes Mal eine Zahl in der vorgeschriebenen Reihenfolge auf dem Bildschirm; M ruft die letzten drei Ziffern dieser Zahl, also die Ordnungsnummer, aus.

11 Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise z.b.: , , Zettelstapel als Zahlenfolgen z.b.: [771036, , ]

12 Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise z.b.: , , oberster Zettel Zettelstapel als Zahlenfolgen z.b.: [771036, , ]

13 Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise z.b.: , , unterster Zettel Zettelstapel als Zahlenfolgen z.b.: [771036, , ]

14 Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise kein Zettelstapel =leere Zahlenfolge z.b.: , , [ ] Zettelstapel als Zahlenfolgen z.b.: [771036, , ]

15 Präzisierung der Objekte Zu präzisieren: Zahlen, Zettelstapel, Texte Zahlen sind schon präzise Texte in... : z.b.: , , Zettelstapel als Zahlenfolgen z.b.: [771036, , ] z.b.: "Kommen Sie von auswärts?"

16 Präzisierung der Elementaranweisungen Zu präzisieren: Daten merken, identifizieren, nachschauen identifizieren eindeutige Namen (Bezeichner) vergeben merken Zuweisung: z.b.: fertig [771036, , ] frage "Kommen Sie von auswärts?". z 1 leerung [ ]

17 Präzisierung der Elementaranweisungen Zu präzisieren: Daten einlesen von Tastatur, anzeigen auf Bildschirm einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig)

18 Präzisierung der Elementaranweisungen Zu präzisieren: bei Zahlen Daten und einlesen Texten von schließt Tastatur, anzeigen auf Bildschirm die Eingabe ab einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig)

19 Präzisierung der Elementaranweisungen Zu präzisieren: Daten Bei einlesen Eingabe von einer Tastatur, anzeigen auf Bildschirm Zahlenfolge ein weiteres Mal am Schluß der Eingabe einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig)

20 Präzisierung der Elementaranweisungen Zu präzisieren: 2Daten 7 einlesen 3 von 4 Tastatur, 6 1 anzeigen auf Bildschirm einlesen (Eingabe) lies(...) z.b.: lies(leerung) anzeigen (Ausgabe) zeige(...) z.b.: zeige(fertig) [27,3,461]

21 Präzisierung der Objektbeschreibung Motivation Identifizierung von Namen Bezeichnet leerung eine Zahlenfolge, eine einzelne Zahl oder einen Text? Davon hängt Ausführung der Anweisung lies(...) ab => Drücken der -Taste beendet Eingabe insgesamt oder nur die Eingabe einer Zahl einer Zahlenfolge

22 Typen und Deklarationen 1 Lösung: Ergänze Typen "Zahl" "Zahlenfolge" "Text" Ergänze Vereinbarungen/Deklarationen: def fertig, leerung: Zahlenfolge def z: Zahl def frage: Text

23 Typen und Deklarationen 1 Lösung: Ergänze Typen "Zahl" "Zahlenfolge" "Text" fertig und leerung in Zukunft nur Zahlenfolgen; z nur eine Zahl; frage nur ein Text Ergänze Vereinbarungen/Deklarationen: def fertig, leerung: Zahlenfolge def z: Zahl def frage: Text

24 Typen und Deklarationen - Definitionen Definition Ein Bezeichner ist eine Zeichenfolge, die zur eindeutigen Identifizierung eines Objekts dient. Definition Die Zuweisung ist eine Anweisung, durch die ein Bezeichner einen (neuen) Wert erhält. Definition Eine Deklaration/Vereinbarung ist die Festlegung, welche Bedeutung ein Bezeichner im Algorithmus besitzen soll, d.h., welche Typen von Objekten mit dem Bezeichner benannt werden dürfen.

25 Präzisierung von Operationen auf Objekten wir können noch nicht auf Objekten operieren daher: bei Zahlen: +, -, *, / bei Zahlenfolgen: sort(f), misch(f,g)

26 Operationen - Beispiele Addition zweier Zahlen a und b: def a,b,c: Zahl; a 3; b 6; c a + b; zeige(c). 3.3 Sortiere die Zettel aufsteigend nach diesen Zahlen zu einem Stapel, die kleinste Zahl nach oben: leerung sort(leerung) 3.4 Mische diesen Stapel und den Stapel, der aus den Zetteln besteht, die du bei früheren Briefkastenleerungen geholt hast, zusammen: fertig misch(fertig,leerung)

27 weitere Operationen auf Folgen erstes(f): erste Zahl der Folge f Beispiel: erstes([771036, , ]) liefert rest(f): Folge f ohne das erste Folgenelement Beispiel: rest([771036, , ]) ist [971007, ]. Speziell: rest([771036]) ist die leere Folge [ ]. Anwendung: 5.1 Rufe die Ordnungsnummer des obersten Zettels aus; 5.2 Lege den Zettel beiseite wird zu zeige(erstes(fertig)); fertig rest(fertig)

28 Konkatenation von Folgen Konkatenation von Folgen = Verbinden zweier Zettelstapel: Beispiele: [3, 27, 5] [8, 1] = [3, 27, 5, 8, 1]. f [ ] = [ ] f = f

29 Bedingungen Bedingungsoperatoren: =, (bei allen Typen), <, >,, (bei Zahlen) z.b.: a=1, 3=4, [1,2] [2,3], f=[ ], "ja" antwort, erstes(f) 3 Verknüpfung von Bedingungen B und B': und: B und B' dann und nur dann wahr, wenn sowohl B als auch B' wahr ist oder: B oder B' dann und nur dann wahr, wenn entweder B oder B' oder beide wahr sind nicht: nicht B dann und nur dann wahr, wenn B nicht wahr sind

30 Bedingungen - Beispiele a=1 und erstes(f) 3. wahr, wenn sowohl Bezeichner a für Zahl 1 als auch erstes Folgenelement von f kleiner oder gleich 3 [1,2] f oder "ja" antwort. erfüllt, wenn entweder die Folge f verschieden von Folge [1,2] oder antwort nicht für den Text "ja" steht oder beides

31 Bedingungen - Beispiele (a=2 und b=3) oder f=[1,2]. erfüllt, wenn sowohl a für 1 als auch b für 3 steht, oder wenn f gleich [1,2], falls eine der ersten beiden Bedingungen nicht zutrifft aus einfachen Bedingungen mittels und und oder und Klammerbildung beliebig komplizierte Bedingungen formulieren. Prioritätenregelung: Klammern vor nicht vor und vor oder

32 Konstruktoren Konkatenation: wie bisher ; Alternative "Wenn... dann... sonst...": wenn Bedingung dann... sonst... ende. Iteration: Solange... tue folgendes...": solange Bedingung tue... ende Schlüsselwörter wenn, tue, ende,... unterstreichen

33 Konstruktoren - Beispiele Summe : def i,s: Zahl; i 1; s 0; solange i 10 tue s s + i; i i + 1 ende; zeige(s).

34 Konstruktoren - Beispiele Im Verteilungsalgorithmus: 5. Solange noch Eintrittskarten vorhanden sind, tue folgendes: 5.1 Rufe die Ordnungsnummer des obersten Zettels aus; 5.2 Lege den Zettel beiseite; 5.3 Verkaufe an die Gruppe mit dieser Ordnungsnummer die gewünschte Zahl an Eintrittskarten wird jetzt: solange taste = "A" und fertig [ ] tue zeige(erstes(fertig)); fertig rest(fertig); lies(taste) ende. Hierbei: def taste: Text.

35 Konstruktoren - Beispiele Im Verteilungsalgorithmus: Wenn auf die Frage "Kommen Sie von auswärts?" "ja" angekreuzt ist, dann ist die nächste Ziffer eine Null, sonst ist die nächste Ziffer eine Eins wird jetzt: wenn antwort = "ja" dann ziffer 0 sonst ziffer 1 ende

36 Vollständiger Verteilungsalgorithmus def ziffer, z, kinderzahl, ordnungsnr: Zahl; def fertig, leerung: Zahlenfolge; def antwort, taste: Text; fertig [ ]; lies(taste); solange taste = "E" tue leerung [ ]; solange taste "F" tue lies(kinderzahl); lies(antwort); wenn antwort = "ja" dann ziffer 0 sonst ziffer 1 ende; lies(ordnungsnr); z (100 - kinderzahl) * ziffer * ordnungsnr; leerung leerung [ z ]; lies(taste) ende; leerung sort(leerung); fertig misch(fertig,leerung); lies(taste) ende; solange taste ="A" und fertig [ ] tue zeige(erstes(fertig)); fertig rest(fertig); lies(taste) ende.

37 Schachtelung von Schleifen solange taste = "E" tue leerung [ ]; solange taste "F" tue lies(kinderzahl); lies(antwort); wenn antwort = "ja" dann ziffer 0 sonst ziffer 1 ende; lies(ordnungsnr); z (100 - kinderzahl) * ziffer * ordnungsnr; leerung leerung [ z ]; lies(taste) ende; leerung sort(leerung); fertig misch(fertig,leerung); lies(taste) ende; innere Schleife äußere Schleife

38 Schachtelungsdiagramm (mengenorientiert)

39 Schachtelungsdiagramm (mengenorientiert)

40 Präzisierung der Abstraktion Definition Die Zusammenfassung von Deklarationen und Anweisungen zu einer Einheit bezeichnet man als Prozedur. Liefert eine Prozedur einen Wert, so nennt man sie Funktion oder Funktionsprozedur. Jede beliebige Prozedur oder Funktion kann als elementare Anweisung oder elementarer Ausdruck (durch Aufruf) in jedem anderen Algorithmus verwendet werden.

41 Umsetzung beim Verteilungsalgorithmus Zwei Zettelstapel S1 und S2 mischst du... zu S3...: def s1,s2,s3: Zahlenfolge M1. Solange auf beiden Stapeln S1 und S2 noch Zettel liegen, tue folgendes:... : solange s1 [ ] und s2 [ ] tue... ende. M1.1 Nimm von den beiden obersten Zetteln von S1 und S2 den mit der kleineren Codenummer weg: wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende

42 Umsetzung beim Verteilungsalgorithmus M2. Wenn einer der Stapel S1 oder S2 leer ist, dann hänge den anderen komplett hinten an den Stapel S3 an: s3 s3 s1 s2

43 Umsetzung beim Verteilungsalgorithmus M2. Wenn einer der Stapel S1 oder S2 leer ist, dann hänge den anderen komplett hinten an den Stapel S3 an: s3 s3 s1 s2 Prüfen Sie zur Übung nach, daß diese Zuweisung M2 korrekt beschreibt

44 Umsetzung beim Verteilungsalgorithmus M2. Wenn einer der Stapel S1 oder S2 leer ist, dann hänge den anderen komplett hinten an den Stapel S3 an: s3 s3 s1 s2 Mischen insgesamt: def s1, s2 s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2

45 Umsetzung beim Verteilungsalgorithmus Mangel 1 def s1, s2 s3: Zahlenfolge; Bezug zwischen solange s1 [ ] und s2 [ ] tueaufruf von Mischen und wenn erstes(s1) < erstes(s2) dann dieser Beschreibung s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2

46 Umsetzung beim Verteilungsalgorithmus funktion misch; def s1, s2 s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende

47 Umsetzung beim Verteilungsalgorithmus funktion misch; def s1, s2 s3: Zahlenfolge; Mangel 2 solange s1 [ ] und s2 [ ] tuebezug der Zahlenfolgen wenn erstes(s1) < erstes(s2) dann fertig und leerung zu s3 s3 [ erstes(s1) ]; s1 und s2 s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende

48 Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende

49 Umsetzung beim Verteilungsalgorithmus s1, s2 sind formale Parameter funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende

50 Umsetzung beim Verteilungsalgorithmus s1, s2 sind formale Parameter funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue fertig und leerung im wenn erstes(s1) < erstes(s2) dann Aufruf misch(fertig,leerung) s3 s3 [ erstes(s1) ]; sind aktuelle Parameter s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende

51 formale und aktuelle Parameter Definition: Als Parameter bezeichnet man variable oder austauschbare Objekte in einer Prozedur oder Funktion. Die in einer Prozedur oder Funktion benutzten und im Kopf der Prozedur anzugebenden Parameter heißen formale Parameter; sie sind Platzhalter für später einzusetzende Objekte. Die im Aufruf einer Prozedur oder Funktion stehenden Argumente nennt man aktuelle Parameter.

52 Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; Mangel 3 solange s1 [ ] und s2 [ ] tue Bezug zwischen Ergebnis wenn erstes(s1) < erstes(s2) dann des Mischens s3 s3 s3 [ erstes(s1) ]; und Aufruf s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2 funkende

53 Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge); def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2; ergebnis s3 funkende s3 ist das Ergebnis und tritt an die Stelle des Aufrufs misch(fertig,leerung)

54 der Typ des Ergebnisses von misch, also Zahlenfolge, wird hier festgehalten Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge) Zahlenfolge; def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2; ergebnis s3 funkende s3 ist das Ergebnis und tritt an die Stelle des Aufrufs misch(fertig,leerung)

55 Umsetzung beim Verteilungsalgorithmus funktion misch (s1,s2: Zahlenfolge) Zahlenfolge; def s3: Zahlenfolge; solange s1 [ ] und s2 [ ] tue wenn erstes(s1) < erstes(s2) dann s3 s3 [ erstes(s1) ]; s1 rest(s1) sonst s3 s3 [ erstes(s2) ]; s2 rest(s2) ende ende; s3 s3 s1 s2; ergebnis s3 funkende

56 Prozesse beim Aufruf

57 Prozesse beim Aufruf fertig misch(fertig,leerung)

58 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms.

59 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung.

60 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)?

61 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter

62 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus

63 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis

64 Prozesse beim Aufruf fertig misch(fertig,leerung) 1. unterbreche Ausführung des Programms. 2. wo ist misch? Suche Beschreibung. 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

65 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

66 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus fertig misch(fertig,leerung) 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

67 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

68 Prozesse beim Aufruf 1. unterbreche Ausführung Suche Beschreibung des Programms. besser: aufsuchen 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

69 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

70 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. (fertig,leerung) 2. wo ist misch? zahlenfolge zahlenfolge (s1,s2) 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

71 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

72 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? s1 fertig 3. Parameter passend (Typ, Anzahl)? s2 leerung 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

73 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

74 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus fertig s3 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

75 Prozesse beim Aufruf 1. unterbreche Ausführung des Programms. 2. wo ist misch? 3. Parameter passend (Typ, Anzahl)? 4. identifiziere aktuelle und formale Parameter 5. führe Anweisungen der Funktion aus 6. zum Schluß ersetze Aufruf durch den Wert hinter ergebnis 7. setze Programm an der unterbrochenen Stelle fort

76 Prozedurkonzept jede als Algorithmus formulierte Vorschrift kann zu Elementaranweisung in anderem Algorithmus werden Zerlegung und Strukturierung umfangreicher Algorithmen: Zerlegung des Problems in bis zu 10 Teilschritte je Teilschritt eine Prozedur/Funktion ggf. weitere Zerlegung schrittweise Verfeinerung bis kleine überschaubare Einheiten vorliegen

77 Prozedurschachtelung Definition: Eine Prozedur ist in einer anderen geschachtelt, wenn sie in ihr deklariert oder aufgerufen wird. Im ersten Fall spricht man von statischer, im zweiten Fall von dynamischer Schachtelung bzw. Abstützen einer Prozedur auf eine andere.

78 prozedur p1(...)... funktion p11(...)... prozedur p111(...) prozende; funktion p112(...) funkende;... funkende; prozedur p12(...)... funktion p121(...) funkende; prozedur p122(...) prozende;... prozende prozende; prozedur p2(...)... prozedur p21(...)... prozedur p211(...) prozende; prozedur p212(...) prozende;... prozende prozedur p22(...)... funktion p221(...) funkende; funktion p222(...) funkende;... prozende prozende...

79 prozedur p1(...)... funktion p11(...)... prozedur p111(...) prozende; funktion p112(...) funkende;... funkende; prozedur p12(...)... funktion p121(...) funkende; prozedur p122(...) prozende;... prozende prozende; prozedur p2(...)... prozedur p21(...)... prozedur p211(...) prozende; prozedur p212(...) prozende;... prozende prozedur p22(...)... funktion p221(...) funkende; funktion p222(...) funkende;... prozende prozende... Schachtelungsbaum

80 prozedur p1(...)... funktion p11(...)... prozedur p111(...) prozende; funktion p112(...) funkende;... funkende; prozedur p12(...)... funktion p121(...) funkende; prozedur p122(...) prozende;... prozende prozende; prozedur p2(...)... prozedur p21(...)... prozedur p211(...) prozende; prozedur p212(...) prozende;... prozende prozedur p22(...)... funktion p221(...) funkende; funktion p222(...) funkende;... prozende prozende... Schachtelungsbaum hierarchische Modularisierung

81 Programm und Programmiersprache Verteilungsproblem nun vollständig gelöst automatisierbare Elemente bestimmt dargestellt in einer Form, daß C sie ausführen kann solche Darstellungen heißen Programm Sprachen mit geeigneten Darstellungselementen und erforderlicher Präzision: Programmiersprachen die hier erfundene Sprache heißt PRO

82 Programm und Programmiersprache Definition: Eine Sprache zur Formulierung von Algorithmen, die von einem Computer ausgeführt werden können, bezeichnet man als Programmiersprache. Die Formulierung eines Algorithmus in einer Programmiersprache nennt man Programm.

83 Algorithmus und Programm Algorithmus relativ allgemein beschrieben an keine besonderen formellen Vorschriften gebunden Programm im exakt definierten Formalismus einer Programmiersprache verfaßt ein Algorithmus ist eine Abstraktion aller Programme, die ihn formal beschreiben

84 Welt der Programmiersprachen

85 Welt der Programmiersprachen

86 Welt der Programmiersprachen deklarativ: Problem beschreiben prozedural: Lösungsweg zum Problem beschreiben

87 Welt der Programmiersprachen deklarativ: Problem beschreiben funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Fakten und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben

88 Welt der Programmiersprachen deklarativ: Problem beschreiben funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Fakten und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben imperativ: Lösungsweg durch Anweisungen beschreiben

89 Welt der Programmiersprachen deklarativ: Problem beschreiben ML, MIRANDA, Gofer, Haskell funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Fakten und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben imperativ: Lösungsweg durch Anweisungen beschreiben

90 Welt der Programmiersprachen deklarativ: Problem beschreiben ML, MIRANDA, Gofer, Haskell funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Prolog, Gödel, Fakten CLP und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben imperativ: Lösungsweg durch Anweisungen beschreiben

91 Welt der Programmiersprachen deklarativ: Problem beschreiben funktional: Problem durch funktionale Zusammenhänge beschreiben prädikativ: Problem durch Prolog, Gödel, Fakten CLP und logische Beziehungen beschreiben prozedural: Lösungsweg zum Problem beschreiben ML, MIRANDA, Gofer, Haskell PRO, ADA, ALGOL, BASIC, C, EIFFEL, FORTRAN, MODULA, OBERON, PASCAL imperativ: Lösungsweg durch Anweisungen beschreiben

92 Syntax und Semantik

93 Syntax und Semantik Programmiersprachen immer präzise und eindeutige Syntax und Semantik

94 Syntax und Semantik Programmiersprachen immer präzise und eindeutige Syntax und Semantik Syntax: sprachliche Notierung von Programmen

95 Syntax und Semantik Programmiersprachen immer präzise und eindeutige Syntax und Semantik Syntax: sprachliche Notierung von Programmen Semantik: Bedeutung syntaktisch korrekter Programme

96 Syntax und Semantik welche Zeichenreihen sind syntaktisch korrekte eindeutige Syntax und Semantik Programme? Syntax: sprachliche Notierung von Programmen Programmiersprachen immer präzise und Semantik: Bedeutung syntaktisch korrekter Programme

97 Syntax und Semantik welche Zeichenreihen sind syntaktisch korrekte eindeutige Syntax und Semantik Programme? Syntax: sprachliche Notierung von Programmen welche Wirkung Semantik: Bedeutung hat syntaktisch ein syntaktisch korrekter Programme korrektes Programm auf dem Rechner? Programmiersprachen immer präzise und

98 Semantikansätze Semantik operationale Semantik: Art und Weise, wie ein Rechner es ausführt axiomatische Semantik: Eigenschaften, die die (Ein-/Ausgabe-)Variablen vorher und nachher erfüllen denotationale Semantik: Funktion, die das Programm berechnet

99 Syntax und Semantik Beispiel 1

100 Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s).

101 Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt

102 Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus".

103 Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus". Semantik denotational: fp: Z Z mit fp(s)=0 für alle s Z.

104 Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus". Semantik denotational: fp: Z Z mit fp(s)=0 für alle s Z. Programm mit gleicher Semantik: zeige(0)

105 Syntax und Semantik Beispiel 1 Programm P def s: Zahl; lies(s); s 0; zeige(s). syntaktisch korrekt Semantik (ugs.): : "Lies eine beliebige Zahl ein und gib die Zahl 0 aus". Semantik denotational: fp: Z Z mit fp(s)=0 für alle s Z. Programm mit gleicher Semantik: zeige(0) Programme können semantisch äquivalent sein.

106 Syntax und Semantik Beispiel 2

107 Syntax und Semantik Beispiel 2 Programm P' def i,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 zeige(s)

108 Syntax und Semantik Beispiel 2 Programm P' n nicht def i,s: Zahl; deklariert lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 zeige(s)

109 Syntax und Semantik Beispiel 2 Programm P' n nicht def i,s: Zahl; deklariert lies(n); i 1; s 0; solange i n tue s s ende + i; fehlt i i + 1 zeige(s)

110 Syntax und Semantik Beispiel 2 Programm P' n nicht def i,s: Zahl; deklariert lies(n); i 1; s 0; solange i n tue s s ende + i; fehlt i i + 1 zeige(s) syntaktisch nicht korrekt

111 Syntax und Semantik Beispiel 2 Programm P def i,n,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 ende; zeige(s)

112 Syntax und Semantik Beispiel 2 Programm P def i,n,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 ende; zeige(s) Semantik ugs: "Falls der eingegebene Wert n kleiner oder gleich 0 ist, so gib die Zahl 0 aus. Falls n größer als 0 ist, so gib die Summe der ersten n Zahlen n aus".

113 Syntax und Semantik Beispiel 2 Programm P def i,n,s: Zahl; lies(n); i 1; s 0; solange i n tue s s + i; i i + 1 ende; zeige(s) Semantik ugs: "Falls der eingegebene Wert n kleiner oder gleich 0 ist, so gib die Zahl 0 aus. Falls n größer als 0 ist, so gib die Summe der ersten n Zahlen n aus". Semantik denotational: fp": Z Z mit n { Σ i, falls n 1, fp"(n)= i=1 0, sonst.

114 Korrektheit und Komplexität Korrektheit: exakt beweisen, daß das Programm die Spezifikation erfüllt, also stets und in jeder Hinsicht das Gewünschte leistet,... Komplexität:... und die Zeitvorgaben einhält in der Regel: sehr hoher Aufwand bei Korrektheit ( nicht berechenbar) mittelgroßer Aufwand bei Komplexität Beispiel: Mischen

115 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

116 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* n Werte Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

117 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

118 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* aufsteigend Funktionaler Zusammenhang: sortiert Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

119 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

120 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: m Werte Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

121 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

122 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: aufsteigend Für s1=[x1,...,xn] mit x1 x2... xn sortiert und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

123 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

124 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2. n+m Werte

125 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

126 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] aufsteigend mit x1 x2... xn und s2= [y1,...,ym] mit sortiert y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

127 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

128 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn es sind und die gleichen s2= [y1,...,ym] mit y1 y2... ym Werte ist s3=[z1,...,zn+m] wie in s1 und mit s2 z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

129 Mischen - Spezifikation Spezifikation: präzise Beschreibung der Anforderung an das Programm (funktionale) Spezifikation Mischen (halbformal): Eingabe: s1,s2 IN0* Ausgabe: s3 IN0* Funktionaler Zusammenhang: Für s1=[x1,...,xn] mit x1 x2... xn und s2= [y1,...,ym] mit y1 y2... ym ist s3=[z1,...,zn+m] mit z1 z2... zn+m und s3 ist eine Permutation von s1 s2.

130 Mischen - Beweis Korrektheit Behauptung: misch terminiert nach höchstens n+m Schleifendurchläufen und erfüllt die Spezifikation. Beweis: (vollständige Induktion über n+m) Induktionsanfang: Zeige, daß Behauptung für n+m=0 gilt. Beweis des Induktionsanfangs: Bei Eingabe von s1=[ ] und s2=[ ] werden im Programm durchlaufen: s3 [ ]; s3 s3 s1 s2; ergebnis s3 Zum Schluß wie gewünscht: s3=[ ]. Folglich ist der Induktionsanfang bewiesen.

131 Mischen - Beweis Korrektheit Induktionsvoraussetzung: Sei Behauptung wahr bis zur Zahl n+m. Induktionsbehauptung: Behauptung gilt dann auch für n+m+1. Beweis der Induktionsbehauptung: Ist s1=[ ] oder s2= [ ], so folgt Behauptung durch Nachvollziehen des Programms: s3 [ ]; s3 s3 s1 s2; ergebnis s3.

132 Mischen - Beweis Korrektheit Sei also s1 [ ] s2. O.B.d.A. erstes(s1)<erstes(s2). Dann ist erstes(s1)=min{x1,...,xn,y1,...,ym} und in der Schleife wird s3 s3 [erstes(s1)]; s1 rest(s1) ausgeführt. Zu Beginn des zweiten Schleifendurchlaufs gilt also s3=[erstes(s1)] und s1=[x2,...,xn].

133 Mischen - Beweis Korrektheit Sei also s1 [ ] s2. O.B.d.A. erstes(s1)<erstes(s2). Dann ist erstes(s1)=min{x1,...,xn,y1,...,ym} und in der Schleife wird s3 s3 [erstes(s1)]; s1 rest(s1) ausgeführt. Zu Beginn des zweiten Schleifendurchlaufs gilt also s3=[erstes(s1)] und s1=[x2,...,xn]. ohne Beschränkung der Allgemeinheit

134 Mischen - Beweis Korrektheit Sei also s1 [ ] s2. O.B.d.A. erstes(s1)<erstes(s2). Dann ist erstes(s1)=min{x1,...,xn,y1,...,ym} und in der Schleife wird s3 s3 [erstes(s1)]; s1 rest(s1) s1 und s2 sind jeweils ausgeführt. Zu Beginn des n-1 zweiten und m, zusammen Schleifendurchlaufs gilt also n+m-1 groß s3=[erstes(s1)] und s1=[x2,...,xn]. ohne Beschränkung der Allgemeinheit

135 Mischen - Beweis Korrektheit Ergebnis: zwei Folgen mit zusammen nur noch n+m Elementen zu mischen. Induktionsvoraussetzung beide Folgen werden durch Programm in der behaupteten Weise mit höchstens n+m Schleifendurchläufen gemischt. Da jede Operation nur Elemente hinten an s3 anfügt, bleibt das erste Element das Minimum aller Folgenelemente. Dann werden also die beiden ursprünglichen Folgen in korrekter Weise mit höchstens n+m+1 Schleifendurchläufen gemischt.

136 Mischen - Beweis Korrektheit Ergebnis: zwei Folgen mit zusammen nur noch n+m Elementen zu mischen. Induktionsvoraussetzung beide Folgen werden durch Programm in der behaupteten Weise mit höchstens n+m Schleifendurchläufen gemischt. Da jede Operation nur Elemente hinten an s3 anfügt, bleibt das erste Element Ergebnis: das Programm Minimum aller ist bezgl. Folgenelemente. Spezifikation korrekt. Dann werden also die beiden ursprünglichen Folgen in korrekter Weise mit höchstens n+m+1 Schleifendurchläufen gemischt.

137 Mischen - Komplexität Wie effizient ist Mischen realisiert? allgemeines Vorgehen: jede Operation kostet Zeit zähle, wieviele Elementaroperationen bei Eingabe zweier Folgen ausgeführt werden. Da diese Zahl von den Elementen der Folge abhängt, gehe vom schlimmsten Fall (worst-case) aus.

138 Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.

139 Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. linearer zusätzlicher Aufwand Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.

140 Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. quadratischer linearerzusätzlicher zusätzlicher Aufwand Aufwand Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.

141 Mischen - Beweis Komplexität Behauptung: Zum Mischen zweier Folgen mit n+m Elementen benötigt Funktion misch höchstens 11(n+m)+4 elementare Operationen. Beweis: Seien s1=[x1,...,xn] mit x1... xn und s2=[y1,...,ym] mit y1... ym die zu mischenden Folgen. Korrektheitsbeweis höchstens n+m Schleifendurchläufe erforderlich. exponentieller quadratischer zusätzlicher linearerzusätzlicher Aufwand zusätzlicher Aufwand Aufwand Je Durchlauf 11 Elementaroperationen (selbst nachzählen). Außerhalb der Schleife noch einmal 4 Operationen. Insgesamt also höchstens 11(n+m)+4 Operationen.

142 Zusammenfassung Zwang zur Präzisierung des Verteilungsalgorithmus Programm in PRO Objekte deklarieren, benennen, einlesen, verändern, ausgeben Anweisungen und die Konstruktoren formulieren Prozeduren und Funktionen mit Parameterübergabe Programmiersprachen Syntax Semantik

4 Vom Algorithmus zum Programm

4 Vom Algorithmus zum Programm 4-1 4 Vom Algorithmus zum Programm 4.1 Menschen und Maschinen Unsere Absicht ist es, Maschinen statt Menschen mit der Ausführung von Algorithmen (speziell unseres Verteilungsalgorithmus) zu beauftragen.

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 21. Oktober 2015 Automat versus Computer Ein Automat ist eine Maschine,

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in

Mehr

Einführung in die Programmierung WS 2014/15. 2. Algorithmus, Berechenbarkeit und Programmiersprachen 2-1

Einführung in die Programmierung WS 2014/15. 2. Algorithmus, Berechenbarkeit und Programmiersprachen 2-1 Einführung in die Programmierung WS 2014/15 2. Algorithmus, Berechenbarkeit und Programmiersprachen 2-1 2. Alg., Ber. & PS Inhalt 1. Algorithmen 2. Programmiersprachen Algorithmus und Programm(iersprache)

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Softwaretechnik. Wesentliche Inhalte der Vorlesung

Softwaretechnik. Wesentliche Inhalte der Vorlesung Softwaretechnik Prof. Dr. Bernhard Schiefer schiefer@informatik.fh-kl.de http://www.informatik.fh-kl.de/~schiefer Prof. Dr. Bernhard Schiefer 1-1 Wesentliche Inhalte der Vorlesung Phasen der Software-Entwicklung

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm 1 Vom Problem zum Programm Ein Problem besteht darin, aus einer gegebenen Menge von Informationen eine weitere (bisher unbekannte) Information zu bestimmen. 1 Vom Problem zum Programm Ein Algorithmus ist

Mehr

Kapitel 3. Mein erstes C-Programm

Kapitel 3. Mein erstes C-Programm Kapitel 3 Mein erstes C-Programm 1 Gliederung Kapitel 3 Mein erstes C-Programm 3.1 Einleitung 3.2 Mein erstes C-Programm 3.3 Zusammenfassung 2 Problem Algorithmus Mittelwert für Messwerte berechnen DGL

Mehr

Entwicklung eines korrekten Übersetzers

Entwicklung eines korrekten Übersetzers Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung

Mehr

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit

Mehr

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik Grundlagen der Informatik II Teil I: Formale Modelle der Informatik 1 Einführung GdInfoII 1-2 Ziele/Fragestellungen der Theoretischen Informatik 1. Einführung abstrakter Modelle für informationsverarbeitende

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008 PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2007/2008 FB Informatik

Mehr

Softwareentwicklung Allgemeines und prozedurale Konstrukte

Softwareentwicklung Allgemeines und prozedurale Konstrukte Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Allgemeines und prozedurale Konstrukte E-Mail: sonntag@fim.uni-linz.ac.at http://www.fim.uni-linz.ac.at/staff/sonntag.htm Institut für Informationsverarbeitung

Mehr

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Kontrollstrukturen, Pseudocode und Modulo-Rechnung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 29.10.2012 CoMa-Übung III (TU Berlin) Kontrollstrukturen, Pseudocode und Modulo-Rechnung 29.10.2012 1 / 1 Themen der Übung 1

Mehr

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Programmieren Formulierung eines Algorithmus in einer Programmiersprache Zum Titel der Vorlesung: Programmieren Formulierung eines in einer Programmiersprache Beschreibung einer Vorgehensweise, wie man zu jedem aus einer Klasse gleichartiger Probleme eine Lösung findet Beispiel:

Mehr

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri 2009-10-30 (Folien basieren auf dem gemeinsamen Kurs mit Stefan Thater, der für diese Vorlesung auf Alexander Kollers Java-Kurs basierte) Organisatorisches Wöchentliche

Mehr

Übungen zu C++ Kapitel 1

Übungen zu C++ Kapitel 1 Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe 1 Kapitel 1 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler, Einordnung von Java Ein einfaches Java-Programm erstellen, übersetzen und ausführen Java-Programme dokumentieren 3 Informatik

Mehr

2 Grundlagen der Programmierung

2 Grundlagen der Programmierung 2 Grundlagen der Programmierung In diesem Kapitel bereiten wir die Grundlagen für ein systematisches Programmieren. Wichtigstes Ziel ist dabei die Herausarbeitung der fundamentalen Konzepte von Programmiersprache.

Mehr

Kapitel 5: Applikative Programmierung

Kapitel 5: Applikative Programmierung Kapitel 5: Applikative Programmierung In der applikativen Programmierung wird ein Programm als eine mathematische Funktion von Eingabe-in Ausgabewerte betrachtet. Das Ausführen eines Programms besteht

Mehr

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich 13 OOP MIT DELPHI Delphi war früher "Object Pascal". Dieser Name impliziert eine Funktionalität, welche in der Welt der Programmierung nicht mehr wegzudenken ist: die objektorientierte Programmierung,

Mehr

Programmieren in Haskell Einführung

Programmieren in Haskell Einführung Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:

Mehr

Grundlagen Programmierung

Grundlagen Programmierung 13. Aufgabe (13 Punkte) Schreiben Sie eine neue Klasse Zahlenanalyse, mit der Integer-Objekte genauer betrachtet werden können. Bei den zu entwickelnden Methoden kann es immer sinnvoll sein, sich den Ablauf

Mehr

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Grundstrukturen: Sub [name]([übergabe]) End Sub [Übergabe] ist

Mehr

Erste Schritte in Java

Erste Schritte in Java Erste Schritte in Java Im einführenden Kapitel haben wir die Grundbegriffe der imperativen Programmierung an einem Beispiel (Algorithmus von Euklid) kennengelernt. In diesem Kapitel sehen wir uns an einem

Mehr

SOI 2013. Die Schweizer Informatikolympiade

SOI 2013. Die Schweizer Informatikolympiade SOI Die Schweizer Informatikolympiade Lösung SOI Wie schreibe ich eine gute Lösung? Bevor wir die Aufgaben präsentieren, möchten wir dir einige Tipps geben, wie eine gute Lösung für die theoretischen

Mehr

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Algorithmische Kernsprache Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging. Ausdrücke Anweisungen Ausdrücke bezeichnen einen Wert Kontext stellt Werte von Variablen Werte

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Grammatiken. Einführung

Grammatiken. Einführung Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische

Mehr

Mathematik-Dossier. Die lineare Funktion

Mathematik-Dossier. Die lineare Funktion Name: Mathematik-Dossier Die lineare Funktion Inhalt: Lineare Funktion Lösen von Gleichungssystemen und schneiden von Geraden Verwendung: Dieses Dossier dient der Repetition und Festigung innerhalb der

Mehr

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de Diskrete Strukturen und Logik WiSe 2007/08 in Trier Henning Fernau Universität Trier fernau@uni-trier.de 1 Diskrete Strukturen und Logik Gesamtübersicht Organisatorisches Einführung Logik & Mengenlehre

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 06/07 ITI Wagner Musterlösung Problem : Average-case-Laufzeit vs Worst-case-Laufzeit pt (a) Folgender Algorithmus löst das Problem der

Mehr

Programmiertechnik II

Programmiertechnik II Analyse von Algorithmen Algorithmenentwurf Algorithmen sind oft Teil einer größeren Anwendung operieren auf Daten der Anwendung, sollen aber unabhängig von konkreten Typen sein Darstellung der Algorithmen

Mehr

Theoretische Informatik

Theoretische Informatik Theoretische Informatik Einheit 1 Mathematische Methodik 1. Problemlösen 2. Beweistechniken 3. Wichtige Grundbegriffe Methodik des Problemlösens Klärung der Voraussetzungen Welche Begriffe sind zum Verständnis

Mehr

Minimalismen in der. Informatik

Minimalismen in der. Informatik Minimalismen in der Informatik Andreas Schwill Institut für Informatik Universität Potsdam Überblick Einstieg Maschinenbegriff Bausteinsätze Modellierung Phantasien zu Komplexität und Kompliziertheit 2

Mehr

Programmiersprachen im. Informatikunterricht

Programmiersprachen im. Informatikunterricht Programmiersprachen im Informatikunterricht Andreas Schwill Institut für Informatik Überblick Bedeutung von Programmiersprachen Informatische Komponente Die Welt der Programmiersprachen Merkmale der Programmiersprachen

Mehr

Semantik von Programmiersprachen

Semantik von Programmiersprachen Semantik von Programmiersprachen 1. Einführung Werner Struckmann Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Sommersemester 2013 1. Einführung 1.1 Sprachen und

Mehr

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie und, oder, nicht, wenn... dann zwischen atomaren und komplexen Sätzen. I. Aussagenlogik 2.1 Syntax Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen. Sätze selbst sind entweder wahr oder falsch. Ansonsten

Mehr

Programmiersprachen und Programmierkonzepte

Programmiersprachen und Programmierkonzepte Programmiersprachen und Programmierkonzepte Inhalt Programmiersprachen- Entwicklung Programmiersprachen und Programmierparadigmen Die Geschichte der Programmiersprachen Anfänge vor 200 Jahren Programmierbare

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Grundlagen der Programmiersprache C++

Grundlagen der Programmiersprache C++ / TU Braunschweig Grundlagen der Programmiersprache C++ Um den Studierenden den Einstieg in die FE-Programmierung zu erleichtern werden die wesentlichen Elemente eines C-Programmes beschrieben, soweit

Mehr

Kontrollstrukturen - Universität Köln

Kontrollstrukturen - Universität Köln Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung.

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung. I. Programmierung ================================================================== Programmierung ist die Planung einer Abfolge von Schritten (Instruktionen), nach denen ein Computer handeln soll. Schritt

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Spezifikation der zulässigen Parameter. Bemerkungen: Bemerkungen: (2) Design by Contract:

Spezifikation der zulässigen Parameter. Bemerkungen: Bemerkungen: (2) Design by Contract: Spezifikation der zulässigen Parameter Bemerkungen: Bei jeder (partiellen) Funktion muss man sich überlegen und dokumentieren, welche aktuellen Parameter bei einer Anwendung zulässig sein sollen. Der Anwender

Mehr

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) 57 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32,

Mehr

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise Coma I Einleitung 1 Computer und Algorithmen Programmiersprachen Algorithmen versus Programmiersprachen Literaturhinweise 2 Computer und Algorithmen Programmiersprachen Algorithmen versus Programmiersprachen

Mehr

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12 EINI WiMa/LW Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Einleitung und Begriffliches. Einleitung. Programmiersprachen. Software-Komplexität ist inhärent und hat vor allem folgende Ursachen

Einleitung und Begriffliches. Einleitung. Programmiersprachen. Software-Komplexität ist inhärent und hat vor allem folgende Ursachen Einleitung Einleitung und Begriffliches Software-Komplexität ist inhärent und hat vor allem folgende Ursachen Komplexität des gegebenen Problems Schwierigkeiten beim Management des Entwicklungsprozesses

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009 PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2008/2009 FB Informatik

Mehr

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik Grundlagen der Programmierung 1 Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2 Softwaretechnik Prof. Dr. O. Drobnik Professur Architektur und Betrieb verteilter Systeme Institut für

Mehr

Excel Funktionen durch eigene Funktionen erweitern.

Excel Funktionen durch eigene Funktionen erweitern. Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion

Mehr

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen können, wissen Sie als Access [basics]-leser schon längst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Algorithmen und deren Programmierung Prof. Dr. Nikolaus Wulff Definition Algorithmus Ein Algorithmus ist eine präzise formulierte Handlungsanweisung zur Lösung einer gleichartigen

Mehr

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder Programmieren in PASCAL Bäume 1 1. Baumstrukturen Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder 1. die leere Struktur oder 2. ein Knoten vom Typ Element

Mehr

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele. 1. Einführung in die Informatik Inhalt 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele Peter Sobe 1 Darstellung von Algorithmen Aus den Einführungsbeispielen und

Mehr

Funktionale Programmierung (in Clojure)

Funktionale Programmierung (in Clojure) Funktionale Programmierung (in Clojure) Einführung Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Wintersemester 2014/15 Übersicht Paradigmen von Programmiersprachen Paradigmen von Programmiersprachen

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

SWP Prüfungsvorbereitung

SWP Prüfungsvorbereitung 20. Juni 2011 1 Grammatiken 2 LL(1) 3 EXP 4 Datentypen 5 LP Grammatiken Angabe Erstellen Sie First- und Follow-Mengen aller Non-Terminale der folgenden Grammatik. S a S S B y B A C A A b b A x A ɛ C c

Mehr

Motivation. Inhalt. URI-Schemata (1) URI-Schemata (2)

Motivation. Inhalt. URI-Schemata (1) URI-Schemata (2) 14. URIs Uniform Resource Identifier 14-1 14. URIs Uniform Resource Identifier 14-2 Motivation Das WWW ist ein Hypermedia System. Es enthält: Resourcen (Multimedia Dokumente) Verweise (Links) zwischen

Mehr

Kap. 4.2: Binäre Suchbäume

Kap. 4.2: Binäre Suchbäume Kap. 4.2: Binäre Suchbäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 11. VO DAP2 SS 2009 26. Mai 2009 1 Zusätzliche Lernraumbetreuung Morteza Monemizadeh:

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Grundlagen der Programmierung - Algorithmen

Grundlagen der Programmierung - Algorithmen Kapitel 5: Grundlagen der Programmierung - lgorithmen Einführung in die Informatik Wintersemester 2007/08 Prof. ernhard Jung Übersicht Folien im Web: http://www.informatik.tu-freiberg.de/lehre/pflicht/grundl/index_ws0708.html

Mehr

Funktionen in PHP 1/7

Funktionen in PHP 1/7 Funktionen in PHP 1/7 Vordefinierte Funktionen in PHP oder vom Entwickler geschriebene Funktionen bringen folgende Vorteile: gleiche Vorgänge müssen nur einmal beschrieben und können beliebig oft ausgeführt

Mehr

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare

Beispiele: (Funktionen auf Listen) (3) Bemerkungen: Die Datenstrukturen der Paare (2) Die Datenstrukturen der Paare Beispiele: (Funktionen auf Listen) (3) Bemerkungen: 5. Zusammenhängen der Elemente einer Liste von Listen: concat :: [[a]] -> [a] concat xl = if null xl then [] else append (head xl) ( concat (tail xl))

Mehr

Zum Einsatz von Operatoren im Informatikunterricht

Zum Einsatz von Operatoren im Informatikunterricht Friedrich-Schiller-Universität Jena Fakultät für Mathematik und Informatik Professur für Didaktik der Informatik/Mathematik Claudia Strödter E-Mail: claudia.stroedter@uni-jena.de Zum Einsatz von Operatoren

Mehr

Microsoft Excel 2007 Basis

Microsoft Excel 2007 Basis w w w. a c a d e m y o f s p o r t s. d e w w w. c a m p u s. a c a d e m y o f s p o r t s. d e Microsoft Excel 2007 Basis L E SEPROBE online-campus Auf dem Online Campus der Academy of Sports erleben

Mehr

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ Objektorientierte Programmierung Objektorientierte Programmierung Eine Einführung mit BlueJ stellt die Daten, ihre Struktur und ihre Beziehungen zueinander in den Vordergrund. Weniger im Blickpunkt: die

Mehr

Sortierverfahren für Felder (Listen)

Sortierverfahren für Felder (Listen) Sortierverfahren für Felder (Listen) Generell geht es um die Sortierung von Daten nach einem bestimmten Sortierschlüssel. Es ist auch möglich, daß verschiedene Daten denselben Sortierschlüssel haben. Es

Mehr

Kapitel 11: Wiederholung und Zusammenfassung

Kapitel 11: Wiederholung und Zusammenfassung Wiederholung und Zusammenfassung 1: Begriff und Grundprobleme der Informatik Begriff Informatik Computer als universelle Rechenmaschine Grenzen der Berechenbarkeit Digitalisierung Problem der Komplexität

Mehr

Formale Methoden: Ein Überblick

Formale Methoden: Ein Überblick Formale Methoden, Heinrich Rust, Lehrstuhl für Software-Systemtechnik, BTU Cottbus, 2004-09-16, p. 1 Formale Methoden: Ein Überblick Heinrich Rust Lehrstuhl für Software-Systemtechnik BTU Cottbus 2004-09-16

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm Studienanforderungen Studiengang Maschinenbau Programmieren Begleitende Übungen zu Veranstaltungen Umsetzen des Algorithmus in ein lauffähiges Programm Studiengang Bauingenieurwesen Programmieren Begleitende

Mehr

Kapitel 3 Das Projekt Bankkonto Seite 1

Kapitel 3 Das Projekt Bankkonto Seite 1 Kapitel 3 Das Projekt Bankkonto Seite 1 3 Das Projekt Bankkonto Nun wirst du dich etwas gründlicher mit dem Quelltext einer Klasse beschäftigen. Du lernst, wie zwei Objekte eine gemeinsame Aufgabe erledigen.

Mehr

1. Entwicklung der Datenverarbeitung

1. Entwicklung der Datenverarbeitung 1. Entwicklung der Datenverarbeitung 1.1. Vom Abakus zum Pentium Schon im Altertum war man bestrebt, sich Hilfsmittel zu schaffen, die das Zählen und Rechnen erleichterten. Formulierung mechanischer Abläufe

Mehr

Klassendefinitionen verstehen

Klassendefinitionen verstehen Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen

Mehr

Einführung in die Informatik Grammars & Parsers

Einführung in die Informatik Grammars & Parsers Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

Mehr

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

1. Grundlegende Konzepte der Informatik

1. Grundlegende Konzepte der Informatik 1. Grundlegende Konzepte der Informatik Inhalt Algorithmen Darstellung von Algorithmen mit Programmablaufplänen Beispiele für Algorithmen Aussagenlogik Zahlensysteme Kodierung Peter Sobe 1 Algorithmen

Mehr

4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04

4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04 4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04 JOACHIM VON ZUR GATHEN, OLAF MÜLLER, MICHAEL NÜSKEN Abgabe bis Freitag, 14. November 2003, 11 11 in den jeweils richtigen grünen oder roten Kasten

Mehr

Wie entsteht ein Computerprogramm?

Wie entsteht ein Computerprogramm? Wie entsteht ein Computerprogramm Grundstrukturen von Programmen Programmiersprachen Entwicklungsschritte eines Programms Programmdokumentation Seite 1 Telefonanruf-Algorithmus Start Rufnummer bereitstellen

Mehr

Programmieren für Fortgeschrittene

Programmieren für Fortgeschrittene Programmieren für Fortgeschrittene 1. Einführung Werner Struckmann Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Wintersemester 2013/2014 1. Einführung 1.1 Sprachen

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

1.4.12 Sin-Funktion vgl. Cos-Funktion

1.4.12 Sin-Funktion vgl. Cos-Funktion .4. Sgn-Funktion Informatik. Semester 36 36.4.2 Sin-Funktion vgl. Cos-Funktion Informatik. Semester 37 37 .4.3 Sqr-Funktion Informatik. Semester 38 38.4.4 Tan-Funktion Informatik. Semester 39 39 .5 Konstanten

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 28 Einstieg in die Informatik mit Java Algorithmen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 28 1 Überblick 2 Algorithmus 3 Grundalgorithmen in Java 4 Flussdiagramme

Mehr

Vorübung 1 Beschriften Sie die Tabelle wie in der Abbildung dargestellt.

Vorübung 1 Beschriften Sie die Tabelle wie in der Abbildung dargestellt. Diese Anleitung führt in einige Grundfunktionen des Tabellenkalkulationsprogramms Microsoft Excel ein. Sie erstellen nach einigen Vorübungen mit Excel ein kleines Programm, das auf der Grundlage der Gesamtpunktzahl

Mehr

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Funktionen Prof. Dr. Nikolaus Wulff Rekursive Funktionen Jede C Funktion besitzt ihren eigenen lokalen Satz an Variablen. Dies bietet ganze neue Möglichkeiten Funktionen zu

Mehr

Vgl. Oestereich Kap 2.7 Seiten 134-147

Vgl. Oestereich Kap 2.7 Seiten 134-147 Vgl. Oestereich Kap 2.7 Seiten 134-147 1 Sequenzdiagramme beschreiben die Kommunikation/Interaktion zwischen den Objekten (bzw. verschiedenen Rollen) eines Szenarios. Es wird beschrieben, welche Objekte

Mehr

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler Inhaltsverzeichnis Grundbegriffe der C-Programmierung 1. Grundsätzliches... 2 1.1 Darstellung von Werten... 2 1.1.1 Dezimale Zahlendarstellung... 2 1.1.2 Binäre Zahlendarstellung... 3 1.1.3 Hexadezimale

Mehr

Einführung in PROLOG. Christian Stocker

Einführung in PROLOG. Christian Stocker Einführung in PROLOG Christian Stocker Inhalt Was ist PROLOG? Der PROLOG- Interpreter Welcher Interpreter? SWI-Prolog Syntax Einführung Fakten, Regeln, Anfragen Operatoren Rekursion Listen Cut Funktionsweise

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

Mehr