Grundgebiete der Informatik 2 Algorithmen und Programmiertechniken Tutorium
Grundgebiete der Informatik 2: Algorithmen und Programmiertechniken Tutorium zur Klausurvorbereitung RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 1
Termine 2. Teil des Tutoriums und Lösungsvorschlag zu Blatt 12: am 18. 07. 2006, 15: 00 Uhr AH 5 Letzte Fragestunde: am 14. 07. 2006, 14. 30 Uhr AH 5 Scheine: ab 15. August am Lehrstuhl i 3 RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 2
Klausurtermine Termine: 20. 07. , 14. 30 Uhr, 05. 09. , 13. 30 Uhr Fachrichtung/DPO Teil Termin ET/TI (DPO 4) 1 (Kraiss) 13. 09. 2005 ET/TI (DPO 4) 2 (Nagl) 28. 07. 2005 ET/TI (DPO 98) 1+2 (Kraiss + Nagl) 13. 09. 2005 Wirt. -Ing. Elekt. Energiet. (DPO 3) 2 (Nagl) 13. 09. 2005 Mag. TR 2. Hauptfach ET (DPO 1) 1 (Kraiss) 13. 09. 2005 Mag. TR 2. Hauptfach ET (DPO 1) 2 (Nagl) 28. 07. 2005 Lehramt (SII, ET) 1+2 (Kraiss + Nagl) 13. 09. 2005 ET/TI (DPO 87) (Kraiss + Nagl + Walke) mündl. Prüf. ET/TI (DPO 4) Nachholklausur für den 28. 07. 2 (Nagl) 13. 09. 2005 Hörsaalverteilung kurzfristig auf www-i 3. informatik. rwth-aachen. de/ggdi RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 3
EBNF • • Gibt mögliche Programmstruktur vor Darstellungsform für kontextfreie Grammatiken Äquivalent zu Syntaxdiagrammen Sequenz, Option [ ], Wiederholung { }, Alternative |, Rekursion number ident factor ( expression ! factor ) Rekursion factor : : = number | ident | ( expression ) | ! factor Nichtterminal. Symbol RWTH Aachen – Lehrstuhl für Informatik 3 Metasymbole der EBNF Terminal. Symbol Grundlagen der Informatik: Algorithmen und Programmiertechniken 4
Ableiten eines Worts aus einer EBNF • Wort: Folge von Terminalsymbolen, die durch Anwendung von Regeln einer Grammatik/EBNF erzeugt wurde • Beispiel bezieht sich auf EBNF aus Aufgabe 1 if ( a + b == !c) { cout << "test"; } 1 if ( expression ) { statement. List } 2 6 if ( simple. Expression relation simple. Expression ) { statement } 4 3 4 8 if ( factor add. Operator factor == factor) { cout << string; } 5 7 5 5 if (ident + ident == RWTH Aachen – Lehrstuhl für Informatik 3 ! factor ) { cout << string; } 5 ! ident) { cout << string; } Grundlagen der Informatik: Algorithmen und Programmiertechniken 5
Ebenen der Syntax & Semantik • Lexikalische Syntax: Schlüsselwörter, Bezeichner, Literale, Begrenzer, . . . EBNF • Kontextfreie Syntax (Aufbausyntax): Beschreibt Aufbau eines Programms Ausdrücke, Anweisungen, Deklarationen, Programmstruktur • Kontextsensitive Syntax: Beschreibt Beziehungen zwischen Teilen eines Programms • Semantik: Beschreibt die Bedeutung der Elemente, aus denen ein Programm aufgebaut ist RWTH Aachen – Lehrstuhl für Informatik 3 Umgangssprachlich Grundlagen der Informatik: Algorithmen und Programmiertechniken 6
Beispiel für Ebenen der Syntax #include <iostream. h> int summiere(int a, int b) { return a + b ; } int main() { int a, b, summe ; cin >> a >> b; summe = summiere(a, b); cout << summe << endl; } Lexikalische Syntax • Literale: 1. 8 e 6 ; ``Hallo`` • Schlüsselworte: int, return • Bezeichner: summiere, a, b • Begrenzer: ; { } ( ) space tab • Kommentare: Eine lexikalische Einheit, die aber ignoriert wird Kontextfreie Syntax Ausdrücke Deklarationen Anweisungen Programmstruktur Kontextsensitive Syntax Zur Deklaration RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 7
Aufgabe 2 a) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include "iostream" using namespace std; void Straight. Insertion(char ffeld[], int start, int ende) { int j; char elem for (int i=start+1; i<=ende, i++) { // aktuelles Element merken elem=ffeld[k]; /* an der richtigen Stelle in den bereits sortierten Anfang Einfuegen */ j=i; while ((j>start) & (elem<ffeld[j-1]) { ffeld[j] = ffeld[j-1]; j--; } ffeld[j] = elem; } } RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 8
Aufgabe 2 a) 4 void Straight. Insertion(char ffeld[], int start, int ende){ … 21 22 23 24 25 26 27 28 29 30 31 … } int main() { char feld[] ={ 'v', k, 'a', 'h', 'j', 'l', 'e', 'b'}; Straight. Insertion(*feld, 0, 7); for (int i=0; i<8; i++) { cout << feld[i] << ' '; } return 0; } RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 9
Kontrollstrukturen • Fallunterscheidungen if ( zahl > 0 ) { // Anweisungsfolge Einseitig bedingte Anweisung } if ( zahl > 0 ) { // Anweisungsfolge Zweiseitig bedingte Anweisung } else { // Alternative A. } RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 10
Kontrollstrukturen • Auswahlanweisung enum Wochentag { Mo, Di, Mi, Do, Fr, Sa, So }; Wochentag Tag; switch ( Tag ) { case Mo: // Anweisungen. Fall „Mo“ break; case Di: case Mi: Fälle ‚ „Di“ und „Mi“ // Anweisungen break; default: // Anweisungen. Alle anderen Fälle (optional) break; } RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 11
Kontrollstrukturen • Schleifen – Wiederholte Ausführung einer Anweisungsfolge (Block) – Unterscheidung • Anzahl der Iterationen bekannt for-Schleife // Berechnung der Fakultät int eingabe, fakultaet = 1; cin >> eingabe; for ( int i=1; i < eingabe; i++ ) { fakultaet *= i; } • Anzahl der Iterationen unbekannt while-Schleife // Reaktion auf Messfuehler while ( Messfuehler. Gib. Wert() > 0 ) { cout << "Aktueller Wert: " << Messfuehler. Gib. Wert() << endl; } cout << "Wert ist nicht mehr positiv!" << endl; RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 12
Prozedur vs. Funktion vs. Methode • Prozedur – – Führt eine Anweisungsfolge aus Basiert auf Parametern, verändert diese gegebenenfalls Kein Rückgabewert Beenden der Prozedur durch return; (optional) void Ausgabe( int a ) { cout << a << endl; } • Funktion – Wie Prozedur, aber: – Hat Rückgabewert ungleich void – Beenden der Funktion & Rückgabe durch return-Anweisung int Eingabe() { int eingabe; // Auf Groß-/Kleinschreibung achten! cin >> eingabe; } return eingabe; • Methode – Gehört zu einer Klasse (bspw. ADT) "member function" – Kann Prozedur oder Funktion sein – Durch Klassenzugehörigkeit: Zugriff auf RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen derprivate Informatik: Klassen-Elemente Algorithmen und Programmiertechniken 13
Variablen, Pointer, Referenzen Prinzipiell • Pointer var. Typ var. Bezeichner; – Deklaration: Vor jedem Var. -Bezeichner * • Referenzen – Deklaration: Vor jedem Var. -Bezeichner – Muss direkt initialisiert werden & • Dereferenzierung: * "Folgt dem Zeiger" • Adresse von: & "Liefert Zeiger auf" *pa; int a; // Integer-Variable, Name: "a" int // Pointer/Zeiger auf Integer-Variable int &ra = a; // Referenz auf Integer-Variable pa = &a; // Pointer "b" zeigt nun auf "a" a = 10; cout << a; *pa = 20; cout << a; ra = 30; cout << a; RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 14
Parameterübergabe: Beispiel Call by Reference Call by Value #include "iostream. h" void f(int &x, int y, int *z) { y++; x=*z+y; x++; ++(*z); } a b c vor 1. Aufruf 1 2 3 nach 1. Aufruf 7 2 4 nach 2. Aufruf 8 2 5 int main() { int a=1, b=2, c=3; f(a, b, &c); //1. Aufruf cout << "1. Aufruf: " << a << b << char(13) << char(10); f(a, b, &c); //2. Aufruf cout << "2. Aufruf: " << a << b << char(13) << char(10); return 0; } RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 15
Datentypen: vordefinierte, Typdeklaration Objektdeklaration • Vordefinierte Typen (Beispiele): [unsigned] int, char, [unsigned] double, short, float, . . . double dbl; • Arrays: int i[41]; int *i[41]; Objektdeklarationen • Typdeklaration: typedef int *p. Int. T; • Verwendung: p. Int. T pi; RWTH Aachen – Lehrstuhl für Informatik 3 Objektdeklaration Grundlagen der Informatik: Algorithmen und Programmiertechniken 16
Datentypen: Arrays, Strukturen, . . . • Aufzählungstypen [typedef] enum Werktag {di, mi}; • Arrays typedef int* Int. Ptr. Feld[41]; Typdeklaration • Strukturen [typedef] struct My. Struct { int i; My. Struct* next; }; • Verwendung My. Struct a. Struct; Int. Ptr. Feld an. Array; RWTH Aachen – Lehrstuhl für Informatik 3 Objektdeklarationen Grundlagen der Informatik: Algorithmen und Programmiertechniken 17
Datentypen: komplexes Beispiel struct My. Struct { int i; Some. Type* info; }; typedef My. Struct Complex. Array[7]; Complex. Array an. Array; 1 27 3 8 5 22 53 RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 18
Speicherallokation und Freigabe • Speicher auf dem Heap allokieren: i. Ptr int* i. Ptr; i. Ptr=new int; *i. Ptr=42; . . . • Allokierten Speicher wieder freigeben: delete i. Ptr; i. Ptr=NULL; RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 19
Datentypen: Zugriff auf Strukturkomponenten struct My. Struct { int i; My. Struct* next; }; My. Struct s; My. Struct *ps; ps=&s; s. i=9; (*ps). i=9; ps->i=9; RWTH Aachen – Lehrstuhl für Informatik 3 s->i=9; //falsch ps. i=9; //falsch Grundlagen der Informatik: Algorithmen und Programmiertechniken 20
Datenstrukturen: Verkettete Liste struct l. Elem. T{ int value; l. Elem. T *next; }; Laufzeiger head l. Elem. T* head; . . . head=NULL; 3 9 77 z. B. Element einfügen new. Elem z head 122 37 // z: Einfuegestelle l. Elem. T *new. Elem=new l. Elem. T; new. Elem->value=37; 3 9 77 122 new. Elem->next=z->next; z->next=new. Elem; RWTH Aachen – Lehrstuhl für Informatik 3 Grundlagen der Informatik: Algorithmen und Programmiertechniken 21
Graphrealisierungen 2 1 1 3 2 • • 3 knotenorientiert – Adjazenzlisten = Liste von Knoten, jeder Knoten hat Liste 1 2 seiner Nachfolger 3 • sequentiell • verkettet – charakteristische Adjazenzmatrix = Matrix, Knoten in Zeilenund Spaltenüberschriften, Kantengewichte bzw. 1/0 in Zellen kantenorientiert 1 2 3 – Kantenlisten 1 1 2 • sequentiell 2 3 3 • verkettet – charakteristische Inzidenzmatrix = Knoten in Zeilenüberschriften, Kanten in Spaltenüberschriften RWTH Aachen – Lehrstuhl für Informatik 3 2 3 3 1 2 3 1 2 1 -1 -1 2 1 3 3 -1 1 1 Grundlagen der Informatik: Algorithmen und Programmiertechniken 22
- Slides: 22