Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 31 Grundgebiete der Informatik 2: Algorithmen und.

Ähnliche Präsentationen


Präsentation zum Thema: "Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 31 Grundgebiete der Informatik 2: Algorithmen und."—  Präsentation transkript:

1 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 31 Grundgebiete der Informatik 2: Algorithmen und Programmiertechniken Tutorium zur Klausurvorbereitung

2 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 32 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: nach Ankündigung auf den Internetseiten des Lehrstuhls i3

3 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 33 Klausurtermine Fachrichtung/DPOTeilTermin ET/TI (DPO 4)1 (Kraiss)05.09.2006 ET/TI (DPO 4)2 (Nagl)20.07.2006 ET/TI (DPO 98)1+2 (Kraiss + Nagl)05.09.2006 Wirt.-Ing. Elekt. Energiet. (DPO 3)2 (Nagl)20.07./05.09. Mag. TR 2. Hauptfach ET (DPO 1)1 (Kraiss)05.09.2006 Mag. TR 2. Hauptfach ET (DPO 1)2 (Nagl)20.07.2006 Lehramt (SII, ET)1+2 (Kraiss + Nagl)05.09.2006 ET/TI (DPO 87)(Kraiss + Nagl + Walke)mündl. Prüf. ET/TI (DPO 4) Nachholklausur für den 20.07. 2 (Nagl)13.09.2005 Termine: 20.07., 14.30 Uhr, 05.09., 13.30 Uhr Hörsaalverteilung kurzfristig auf www-i3.informatik.rwth-aachen.de/ggdi

4 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 34 EBNF Gibt mögliche Programmstruktur vor Darstellungsform für kontextfreie Grammatiken Äquivalent zu Syntaxdiagrammen Sequenz, Option [ ], Wiederholung { }, Alternative |, Rekursion Nichtterminal- Symbol Terminal- Symbol Metasymbole der EBNF factor ::= number | ident | ( expression ) | ! factor Rekursion number ident expression factor () !

5 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 35 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"; } if ( expression ) { statementList } 2 6 if ( simpleExpression relation simpleExpression ) { statement } 4 3 4 8 if ( factor addOperator factor == factor) { cout << string; } 5 7 5 5 if (ident + ident == ! factor ) { cout << string; } 5 if (ident + ident == ! ident) { cout << string; } 1

6 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 36 Ebenen der Syntax & Semantik Lexikalische Syntax: Schlüsselwörter, Bezeichner, Literale, Begrenzer,... 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 EBNF Umgangs- sprachlich Umgangs- sprachlich

7 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 37 Beispiel für Ebenen der Syntax Ausdrücke Deklarationen Anweisungen Programmstruktur Kontextfreie Syntax #include 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; } Kontextsensitive Syntax Zur Deklaration Lexikalische Syntax Literale: 1.8e6 ; `` Hallo `` Schlüsselworte: int, return Bezeichner: summiere, a, b Begrenzer: ; { } ( ) space tab Kommentare: Eine lexikalische Einheit, die aber ignoriert wird

8 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 38 Alte Klausuraufgabe 1 #include "iostream" 2 using namespace std; 3 4 void StraightInsertion(char ffeld[], int start, int ende) { 5 int j; 6 char elem 7 8 for (int i=start+1; i<=ende, i++) { 9 // aktuelles Element merken 10 elem=ffeld[k]; 11 /* an der richtigen Stelle in 12 den bereits sortierten Anfang 13 Einfuegen */ 14 j=i; 15 while ((j>start) & (elem<ffeld[j-1]) { 16 ffeld[j] = ffeld[j-1]; 17 j--; 18 } 19 ffeld[j] = elem; 20 } 21 }

9 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 39 Alte Klausuraufgabe 4 void StraightInsertion(char ffeld[], int start, int ende){ … 21 } 22 23 int main() 24 { 25 char feld[] ={ 'v', k, 'a', 'h', 'j', 'l', 'e', 'b'}; 26 StraightInsertion(*feld, 0, 7); 27 for (int i=0;i<8;i++) { 28 cout << feld[i] << ' '; 29 } 30 return 0; 31 }

10 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 310 Kontrollstrukturen Fallunterscheidungen if ( zahl > 0 ) { // Anweisungsfolge } if ( zahl > 0 ) { // Anweisungsfolge } else { // Alternative A. } Einseitig bedingte Anweisung Zweiseitig bedingte Anweisung

11 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 311 Kontrollstrukturen Auswahlanweisung enum Wochentag { Mo, Di, Mi, Do, Fr, Sa, So }; Wochentag Tag; switch ( Tag ) { case Mo: // Anweisungen break; case Di: case Mi: // Anweisungen break; default: // Anweisungen break; } Fall „Mo“ Fälle ‚ „ Di “ und „ Mi “ Alle anderen Fälle (optional)

12 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 312 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.GibWert() > 0 ) { cout << "Aktueller Wert: " << Messfuehler.GibWert() << endl; } cout << "Wert ist nicht mehr positiv!" << endl;

13 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 313 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 private Klassen-Elemente

14 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 314 Variablen, Pointer, Referenzen Prinzipiell varTyp varBezeichner; Pointer –Deklaration: Vor jedem Var.-Bezeichner * Referenzen –Deklaration: Vor jedem Var.-Bezeichner & –Muss direkt initialisiert werden Dereferenzierung: * "Folgt dem Zeiger" Adresse von: & "Liefert Zeiger auf" int a;// Integer-Variable, Name:"a" int *pa;// Pointer/Zeiger auf Integer-Variable int &ra = a;// Referenz auf Integer-Variable pa = &a; // Pointer "pa" zeigt nun auf "a" a = 10; cout << a; *pa = 20; cout << a; ra = 30; cout << a;

15 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 315 #include "iostream.h" void f(int &x, int y, int *z) { y++; x=*z+y; x++; ++(*z); } int main() { int a=1, b=2, c=3; f(a, b, &c); //1. Aufruf cout << "1. Aufruf: " << a << b << c << char(13) << char(10); f(a, b, &c); //2. Aufruf cout << "2. Aufruf: " << a << b << c << char(13) << char(10); return 0; } Parameterübergabe: Beispiel Call by Value Call by Reference abc vor 1. Aufruf123 nach 1. Aufruf724 nach 2. Aufruf825

16 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 316 Datentypen: vordefinierte, Typdeklaration Vordefinierte Typen (Beispiele): [unsigned] int, char, [unsigned] double,double dbl; short, float,... Arrays: int i[41];int *i[41]; Typdeklaration: typedef int *pIntT; Verwendung: pIntT pi; Objekt- deklarationen Objekt- deklaration

17 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 317 Datentypen: Arrays, Strukturen,... Aufzählungstypen [typedef] enum Werktag {di, mi}; Arrays typedef int* IntPtrFeld[41]; Strukturen [typedef] struct MyStruct { int i; MyStruct* next; }; Verwendung MyStruct aStruct; IntPtrFeld anArray; Typ- deklaration Objekt- deklarationen

18 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 318 Datentypen: komplexes Beispiel struct MyStruct { int i; SomeType* info; }; typedef MyStruct ComplexArray[7]; ComplexArray anArray; 1 27 3 8 5 22 53

19 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 319 Speicherallokation und Freigabe Speicher auf dem Heap allokieren: Allokierten Speicher wieder freigeben: int* iPtr; iPtr=new int; *iPtr=42;... delete iPtr; iPtr=NULL; iPtr

20 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 320 Datentypen: Zugriff auf Strukturkomponenten struct MyStruct { int i; MyStruct* next; }; MyStruct s; MyStruct *ps; ps=&s; s.i=9; (*ps).i=9; ps->i=9; s->i=9; //falsch ps.i=9; //falsch

21 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 321 Datenstrukturen: Verkettete Liste head Laufzeiger 9 3 77122 struct lElemT{ int value; lElemT *next; }; lElemT* head;... head=NULL; head 9 3 77122 37 z.B. Element einfügen // z: Einfuegestelle lElemT *newElem=new lElemT; newElem->value=37; newElem->next=z->next; z->next=newElem; newElem z

22 Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 322 Graphrealisierungen knotenorientiert –Adjazenzlisten = Liste von Knoten, jeder Knoten hat Liste seiner Nachfolger sequentiell verkettet –charakteristische Adjazenzmatrix = Matrix, Knoten in Zeilen- und Spaltenüberschriften, Kantengewichte bzw. 1/0 in Zellen kantenorientiert –Kantenlisten sequentiell verkettet –charakteristische Inzidenzmatrix = Knoten in Zeilenüberschriften, Kanten in Spaltenüberschriften 1 2 3 11 1 1 2 3 123 1 11 1 2 3 123 1 2 3 112 233 123 1 2 3 23 3


Herunterladen ppt "Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 31 Grundgebiete der Informatik 2: Algorithmen und."

Ähnliche Präsentationen


Google-Anzeigen