Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.

Slides:



Advertisements
Verwante presentaties
Inleiding programmeren in C++ Life Science & Technology 26 januari Universiteit Leiden.
Advertisements

Universiteit Leiden Inleiding programmeren in C++ Life Science & Technology 16 februari
Algoritmen en Datastructuren

Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Project Software Engineering Universiteit AntwerpenPlanning 4.1 Hoe snel loopt iemand de 100 meter ?
HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 5.
Algoritmen en Datastructuren (ALDAT)
Real-Time Systems (RTSYST) Week C++ concurrent programmeren C++ heeft sinds C++11 een standaard library voor concurrent programmeren. Alternatieve.
Inleiding programmeren in C++ Life Science & Technology 23 februari Universiteit Leiden.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Hoofdstuk 20: GEGEVENSSTRUCTUREN.
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
Project Software Engineering Universiteit AntwerpenBetrouwbaarheid 2.1 Ontdek de 7 verschillen.
Conditionele expressie
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
1 Tentamen 21 januari 2008 uitleg Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
1/1/ / faculty of Computer Science eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(2): Vertalen.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
Inleidend probleem Data structuur (hiërarchie van classes)
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6.
Real-Time Systems (RTSYST) Week IPC inter process communication Shared variabele based (H5) Message based (H6) Kan ook gebruikt worden in systemen.
GESPRG Les 12 Gestructureerd programmeren in C. 152 Huiswerk Uitwerking void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last)
HM-ES-th1 Les 3 Hardware/Software Codesign with SystemC.
Zelfgemaakt datatype voor bomen nMet functies data Tree a = Bin (Tree a) (Tree a) | Leaf a foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree.
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
C++ handboek : C++ Leen Ameraal 6e druk academic service.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Wolter Kaper - AJAX en Javascript via Rails Deel 1 en 2.
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
P. 1 Vakgroep Informatietechnologie Scanf voorbeeld #include int main(void) { int i=-1,j=-1,k=-1,l=-1; int b; b=scanf("%d %d %d %d",&i,&j,&k,&l); printf("res=%d.
Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 SoftwareOntwikkeling 1 Conditionele compilatie in C met de macropreprocessor.
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoorcollege 5 Herhaling, game object interactie. Ball class class Ball { Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position,
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Tircms02-p les 7 systemcalls linux vervolg. Inleiding Onder /usr/include/linux staan bestanden die de linuxkernel o.a. gebruikt om drivers aan te spreken.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Enums. Enum Houd een state bij 'Uitgebreide boolean';  ipv 2 states (True, false) meerdere states Enum UnitState { IDLE, DEFENSIVE, AGRESSIVE} Public.
HM-ES-th1 Les 12 Hardware/Software Codesign with SystemC.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
De laatste essentiele dingen.  Classes ◦ Syntax ◦ Constructors & Destructors  Header & Source Files ◦ Waar gebruiken we dit voor  Compiler Theorie.
Objectgeoriënteerd Programmeren (2)
Pointers, arrays & dynamische geheugen
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Tinpro015b-les4 Klassen.
Voortborduren op eerder gedaan werk
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2

2 Stack LIFO (Last In First Out) buffer slechts op 1 plaats toegankelijk Memberfuncties: void push(const T& t) void pop() const T& top() const Voorbeeld van gebruik: expressie evaluator insert O(1) remove O(1) find O(1)

3 ADT Stack #ifndef _THR_Bd_Stack_ #define _THR_Bd_Stack_ template class Stack { public: Stack() {} virtual ~Stack() {} virtual void push(const T& t) =0; virtual void pop() =0; virtual const T& top() const =0; virtual bool empty() const =0; virtual bool full() const =0; private: // Voorkom toekennen en kopiëren void operator=(const Stack&); Stack(const Stack&); }; #endif

4 Toepassingen van stacks Balanced symbol checker A simple calculator Een eenvoudige calculator is een goed te (her)gebruiken component. Denk aan numerieke invoervelden.

5 Balance // Contoleer op gebalanceerde haakjes. Invoer afsluiten met een punt. #include #include "stacklist.h" // zie dictaat using namespace std; int main() { StackWithList s; char c; cin.get(c); while (c!=’.’) { if (c=='('||c=='{'||c=='[') s.push(c); else if (c==')'||c=='}'||c==']') if (s.empty()) cout<<"Fout"<<endl; else { char d(s.top()); s.pop(); if (d=='('&&c!=')'|| d=='{'&&c!='}'|| d=='['&&c!=']') { cout<<"Fout"<<endl; } cin.get(c); } if (!s.empty()) cout<<"Fout”<<endl; return 0; }

6 Postfix Wij zijn gewend infix notatie te gebruiken voor het noteren van expressies. Er bestaat nog een andere methode: reverse polish notation (RPN) of postfix genoemd. Prefix: operator operand operand Infix: operand operator operand Postfix: operand operand operator Voordelen postfix t.o.v. infix: Geen prioriteitsregel nodig Meneer Van Dale Wacht Op Antwoord. Hoe Moeten Wij Van De Onvoldoendes Afkomen? Geen haakjes nodig Eenvoudiger te bereken m.b.v. Stack We zullen eerst een postfix calculator maken en daarna een infix naar postfix convertor.

7 Postfix calculator // Evalueer postfix expressie. Invoer afsluiten met =. #include #include "stacklist.h" // zie dictaat using namespace std; int main() { StackWithList s; char c; int i; cin>>c; while (c!=’=’) { if (isdigit(c)) { cin.putback(c); cin>>i; s.push(i); } else if (c=='+') { int op2(s.top()); s.pop(); int op1(s.top()); s.pop(); s.push(op1+op2); } else if (c=='*') { int op2(s.top()); s.pop(); int op1(s.top()); s.pop(); s.push(op1*op2); } else cout<<“Fout"<<endl; cin>>c; } cout<<"="<<s.top()<<endl; s.pop(); if (!s.empty()) cout<<“Fout"<<endl; cin.get(); cin.get(); return 0; }

8 Infix  Postfix Gebruik een stack met karakters. Lees karakter voor karakter in. Als een ingelezen karakter geen haakje of operator is dan kan dit meteen worden doorgestuurd naar de uitvoer. Een haakje openen wordt altijd op de stack geplaatst. Als we een operator inlezen dan moeten we net zo lang operatoren van de stack halen en doorsturen naar de uitvoer totdat we: een operator op de stack tegenkomen met een lagere prioriteit of een haakje openen tegenkomen of totdat de stack leeg is. Daarna moet de ingelezen operator op de stack worden geplaatst. Als we een haakje sluiten inlezen dan moeten we net zo lang operatoren van de stack halen en doorsturen naar de uitvoer totdat we een haakje openen op de stack tegenkomen. Dit haakje openen moet wel van de stack verwijderd worden maar wordt niet doorgestuurd naar de uitvoer. Als we einde van de invoer bereiken moeten we alle operatoren van de stack halen en doorsturen naar de uitvoer.

9 Stack implementations Een stack kan op verschillende manieren geïmplementeerd worden: d.m.v. een array (of vector). d.m.v. een gelinkte lijst.

10 Stack met array #ifndef _THR_Bd_StackWithArray_ #define _THR_Bd_StackWithArray_ #include "stack.h" // zie dictaat template class StackWithArray: public Stack { public: explicit StackWithArray(int size); ~StackWithArray(); virtual void push(const T& t); virtual void pop(); virtual const T& top() const; virtual bool empty() const; virtual bool full() const; private: T* a; // pointer naar de array int s; // size van a (max aantal elementen op de stack) int i; // index in a van de top van de stack };

11 Stack met array template StackWithArray ::StackWithArray(int size): a(0), s(size), i(-1) { if (s<=0) { cerr 0"<<endl; s=0; } else a=new T[s]; } template StackWithArray ::~StackWithArray() { delete[] a; }

12 Stack met array template void StackWithArray ::push(const T& t) { if (full()) cerr<<"Can't push on an full stack"<<endl; else a[++i]=t; } template void StackWithArray ::pop() { if (empty()) cerr<<"Can't pop an empty stack"<<endl; else - -i; } template const T& StackWithArray ::top() const { if (empty()) { cerr<<"Can't top an empty stack"<<endl; exit(-1); // no valid return } return a[i]; }

13 Stack met array template bool StackWithArray ::empty() const { return i == -1; } template bool StackWithArray ::full() const { return i == s -1; } #endif

14 Stacktest #include #include "stackarray.h" using namespace std; int main() { StackWithArray s(32); char c; cout<<"Type een tekst, sluit af met."<<endl; cin.get(c); while (c!='.') { s.push(c); cin.get(c); } while (!s.empty()) { cout<<s.top(); s.pop(); } cin.get(); cin.get(); return 0; }

15 Stack met lijst #include "stack.h" template class StackWithList: public Stack { public: StackWithList(); virtual ~StackWithList(); virtual void push(const T& t); virtual void pop(); virtual const T& top() const; virtual bool empty() const; virtual bool full() const; private: class Node { public: Node(const T& t, Node* n); T data; Node* next; }; Node* p; // pointer naar de top van de stack };

16 Stack met lijst template StackWithList ::StackWithList(): p(0) { } template StackWithList ::~StackWithList() { while (!empty()) pop(); } template bool StackWithList ::empty() const { return p==0; } template bool StackWithList ::full() const { return false; } template StackWithList ::Node::Node(const T& t, Node* n): data(t), next(n) { }

17 Stack met lijst template void StackWithList ::push(const T& t) { p=new Node(t, p); } template void StackWithList ::pop() { if (empty()) cerr<<"Can't pop an empty stack"<<endl; else { Node* old(p); p=p->next; delete old; } template const T& StackWithList ::top() const { if (empty()) { cerr<<"Can't top an empty stack"<<endl; exit(-1); // no valid return } return p->data; }

18 Array versus gelinkte lijst Array is sneller. Array is statisch. Niet gebruikte gedeelte is overhead. Lijst is dynamisch. Heeft overhead van 1 pointer per element

19 Dynamisch stack kiezen Stack * s(0); cout<<"Welke stack? (l = list, a = array): "; char c; do { cin.get(c); if (c=='l' || c=='L') s=new StackWithList ; else if (c=='a' || c=='A') { cout >i; s=new StackWithArray (i); } } while (s==0); cout<<"Type een tekst, sluit af met."<<endl; cin.get(c); while (c!='.') { s->push(c); cin.get(c); } //... delete s;