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

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Programme in C++.
Ziele von EINI I + II Einführen in „Informatik“
Imperative Programmierung
Klassen - Verkettete Liste -
Ein- und Ausgabe von Dateien
Forschungszentrum caesar
Agenda Sitzung 2 für den Programmaufbau
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Das erste Programm (Folie 16)
Einführung in C++ und das objektorientierte Programmieren (OOP)
Einführung in die Programmierung Datensammlung
Einfach verkettete Listen
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Dynamische Datentypen
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Arduino Kurs Abend 2.
EPROG Tutorium #3 Philipp Effenberger
Starten der Entwicklungsumgebung (IDE)
BMEVIEEA100 Grundlagen der Programmierung
early binding (frühe Bindung) late binding (späte Bindung)
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Lehrstuhl für Informatik 3 – Prof. Dr.-Ing. M. Nagl RWTH Aachen Grundgebiete der Informatik 2 Lösungsvorschlag zur Probeklausur Prof. Dr.-Ing. M. Nagl.
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 31 Grundgebiete der Informatik 2: Algorithmen und.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Wiederholte Programmausführung
Programmieren in C Grundlagen C 1
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Einführung in die Programmierung
Unterschiedliche Kontrollstrukturen
SS 04 Christiane Rauh Christian Hellinger
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Einführung in die Programmierung
Unterschiedliche Arten von Kontrollstrukturen
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Einführung in die Programmierung
Implementieren von Klassen
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
Schleifen Datenfelder (Arrays) Verzweigungen
Einführung in die Programmierung
 Präsentation transkript:

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

Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 32 Termine 2. Teil des Tutoriums und Lösungsvorschlag zu Blatt 12: am , 15:00 Uhr AH 5 Letzte Fragestunde: am , Uhr AH 5 Scheine: nach Ankündigung auf den Internetseiten des Lehrstuhls i3

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

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 () !

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 } if ( factor addOperator factor == factor) { cout << string; } if (ident + ident == ! factor ) { cout << string; } 5 if (ident + ident == ! ident) { cout << string; } 1

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

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

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 }

Grundlagen der Informatik: Algorithmen und ProgrammiertechnikenRWTH Aachen – Lehrstuhl für Informatik 39 Alte Klausuraufgabe 4 void StraightInsertion(char ffeld[], int start, int ende){ … 21 } 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 }

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

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)

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;

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

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;

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

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

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

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;

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

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

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

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