Inleiding programmeren in C++ Life Science & Technology 23 februari 2004 Universiteit Leiden.

Slides:



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

Objectgeoriënteerd Programmeren in C++


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


Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
Een speciale website voor ouders: het ouderportaal
Real-Time Systems (RTSYST) Week C++ concurrent programmeren C++ heeft sinds C++11 een standaard library voor concurrent programmeren. Alternatieve.

Arduino project.
Gestructureerd programmeren in C
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
DARE Wetenschappelijke communicatie in beweging Werkgemeenschap Informatiewetenschappen, 27 februari 2004 Lilian van der Vaart.
Conditionele expressie


Gijs Verdoes Kleijn Kapteyn Instituut Universiteit Groningen
Februari 2010 Co-creatie als meerwaarde 1 Voor CMI-MEDIA CO-CREATIE MEDMEC 03.
Numerieke Natuurkunde
Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.
GESPRG Les 9 Gestructureerd programmeren in C dimensionale array Array van array’s int i = 31; int a[4] = {7, 23, 6, 2}; int m[2][4] = { {1, 1,
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
MICPRG Les 14 Microcontroller Programmeren in C. 153 Duurzaam AVR gebruik De AVR ATmega32A is de opvolger van de ATmega32. De A versie is ongeveer 40%
Het Europees Sociaal Fonds F.A.Q. Ontmoeting 10 februari 2010 Service Public de Programmation Int é gration Sociale, avec le soutien de l ’ Union Europ.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
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.
Naam van de Auteur 7 januari 2008 Kennis van Waarde Maken met Vier in Balans Alfons ten Brummelhuis Hoofd onderzoek Kennisnet 6 februari.
Ecosystemen simuleren in de klas Yuri Matteman De Praktijk Caspar Geraedts Vrije Universiteit NIBI-onderwijsconferentie 11 januari 2013.
Hom Com Ledenvergadering 21/02/2011. Google – Bezoek virtueel musea en bekijk de werken – 17 topmusea nu al – Nog geen.
Consoletoepassing Variabelen Klassen
Inleiding programmeren in C++ Life Science & Technology Inleiding
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Open Dag Informatica (28 nov 2003) 3D Graphics Workshop Dr. Erwin M. Bakker Ing. Ernst Lindoorn Leiden Institute of Advanced Computer Science Leiden University.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 4 - onderwerpen Multiplexen.
Virtueel discursief kennisnetwerk: een project van de Digitale Universiteit Anneke Dirkx, INHOLLAND.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 2: IDaSS.
Twee naar Een Platform OA Rotterdam 25 maart 2010 Willem van der Wolk,
Data Acquisition & Control System
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.
Sparkle een bewijssysteem voor Clean Maarten de Mol Katholieke Universiteit Nijmegen 11 januari 2002.
Zoek de bij! Met dank aan Arie Koster voor de foto’s.
Presentatietitel: aanpassen via Beeld, Koptekst en voettekst 1 VOORLICHTING B3 KEUZERUIMTE februari 2015 Gert Brinkman
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.
Informatiebijeenkomst Studiereis 2015 Onderwijsinstituut Moleculaire Wetenschappen.
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
© Justin Ringeling & Daniël van der Wansem
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Finite State Machine (Eindige.
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,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag User-defined characters op de.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Universiteit Leiden, Opleiding Natuur- en Sterrenkunde 1 Elementaire Kinetische Theorie Electrodynamica (Maxwell theorie) Eerste en tweede jaar Klassieke.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
Graphics, input & more!.  Graphics  Input  Sound  … game loop?
Optische “illusie” met spiegels
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  de track structuur van een MIDI file interpreteren.
18 Februari 2013 Where friends have access to your privates!
Objectgeoriënteerd Programmeren (2)
Pointers, arrays & dynamische geheugen
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
Technasium in de bovenbouw
Software Development fundamentals
Transcript van de presentatie:

Inleiding programmeren in C++ Life Science & Technology 23 februari Universiteit Leiden

Intermezzo #include using namespace std; // ZIE DIKTAAT void alias (int r, int & s ) { int t; t = 3; r = r + 2; s = s + r + t; t = t + 1; r = r - 3; cout << r << s << t << endl; } // alias int main ( ) { int t = 12; alias (t,t); cout << t << endl; return 0; } // main Wat gebeurt er? En wat als er een & bij int r wordt tussengevoegd?

Week 6 Inhoud –Zoeken en sorteren Doel –De meest gebruikte array-operaties snappen Materiaal –Dictaat Hoofdstuk 3.8 en opgaven 42/46 –De tweede programmeeropgave Werkcollege –Werken aan de tweede programmeeropgave, met name de optie Sorteren

Zoeken en sorteren Lineair zoeken –Van links naar rechts in een niet-gesorteerde rij zoeken Binair zoeken –Handig zoeken in een gesorteerde rij Simpelsort –Kleinste (lineair) zoeken en omwisselen met de voorste Bubblesort –Elementen die verkeerd-om staan omwisselen tot alles goed staat Insertion sort –Voeg ieder element op de juiste plaats tussen (in een nieuwe of de bestaande rij), net als bij kaarten Hoe zit het met de complexiteit van deze algoritmen?

Lineair zoeken int lineairzoeken (int rij[ ], int lengte, int getal) { int index = 0; bool gevonden = false; while ( ! gevonden && index < lengte ) if ( getal == rij[index] ) gevonden = true;// of: return index; else index++; if ( gevonden ) return index; else return -1; } // lineairzoeken

Binair zoeken int binairzoeken (int rij[ ], int rechts, int getal) { int links = 0, midden; bool gevonden = false; while ( ! gevonden && links <= rechts ) { midden = (links + rechts) / 2; if (getal == rij[midden]) gevonden = true;// of: return midden; else if ( getal > rij[midden] ) links = midden + 1; else rechts = midden - 1; } // while if ( gevonden ) return midden; else return -1; } // binairzoeken

Complexiteit zoekalgoritmen Verband tussen de grootte van het probleem en de hoeveelheid “werk” (bijvoorbeeld het aantal vergelijkingen) om het probleem op te lossen Uitgedrukt in een “orde”, –bijvoorbeeld O(n 2 ): kwadratische orde Lineair zoeken –in een ongesorteerde rij –complexiteit O(n): lineaire orde Binair zoeken –alleen in een gesorteerde rij –complexiteit O(log n): logaritmische orde, want in het slechtste geval zijn voor een rij van lengte n = 2 k – 1, k vergelijkingen nodig

Zoeken in tekst (1) // Zoek een woord van lengte woordlengte (woord.length ( ) zou ook kunnen) // in een verhaal van lengte verhaallengte (idem verhaal.length ( )) // Resultaat is de startplek van het woord // en -1 als het woord niet is gevonden int komtvoor (string woord, string verhaal, int woordlengte, int verhaallengte) { int i = 0, j; bool gevonden = false; while ( ! gevonden && ( i + woordlengte <= verhaallengte ) ) { gevonden = true; for ( j = 0; j < woordlengte; j++ ) if ( woord[j] != verhaal[i+j] ) gevonden = false; i++; } // while if ( gevonden ) return (i-1); else return -1; } // komtvoor

Zoeken in een tekst (2) int main ( ) { string mijnverhaal = "Dit is een lang verhaal\nvan twee regels"; string zoekwoord; int woordlengte, verhaallengte = mijnverhaal.length ( ); int startwoord, i; cout << "Zoek woord: "; cin >> zoekwoord;// leest een heel woord woordlengte = zoekwoord.length ( ); startwoord = komtvoor (zoekwoord, mijnverhaal, woordlengte, verhaallengte); if ( startwoord >= 0 ) { cout << "Gevonden op plek " << startwoord << " het woord "; for ( i = startwoord; i < startwoord + woordlengte; i++ ) cout << mijnverhaal[i]; cout << endl; } // if else cout << "Woord niet gevonden." << endl; return 0; } // main

Sorteren Simpelsort Bubblesort Insertion sort

Simpelsort void simpelsort (int rij[ ], int lengte) { int voorste, kleinste, plaatskleinste, k; for ( voorste = 0; voorste < lengte; voorste++ ) { plaatskleinste = voorste; kleinste = rij[voorste]; for ( k = voorste + 1; k < lengte; k++ ) { if ( rij[k] < kleinste ) { kleinste = rij[k]; plaatskleinste = k; } // if } // for-k if ( plaatskleinste > voorste ) wissel (rij[plaatskleinste], rij[voorste]); } // for-voorste } // simpelsort

Bubblesort void bubblesort (int rij[ ], int lengte) { int ronde, j; for ( ronde = 1; ronde < lengte; ronde++ ) for ( j = 0; j < lengte - ronde; j++ ) if ( rij[j] > rij[j+1] ) wissel (rij[j], rij[j+1]); } // bubblesort int main ( ) { int getallen[MAX];... bubblesort (getallen, MAX);... } // main Mogelijke verbetering: stoppen als er een hele ronde niet gewisseld is Let op de dubbele loop!

Insertion sort void invoegsorteer (int A[ ], int n) { int i, // i-de element straks steeds invoegen j, // om reeds gesorteerde stuk af te lopen temp; // om tijdelijk tussen te voegen getal te bevatten for ( i = 1; i < n; i++ ) { // voeg A[i] in op juiste plaats temp = A[i]; j = i - 1; while ( ( j >= 0 ) && ( A[j] > temp ) ) { A[j+1] = A[j]; j--; } // while A[j+1] = temp; } // for } // invoegsorteer Variant:maak een nieuwe (lege) rij en voeg elk element op de juiste plaats tussen

Complexiteit sorteeralgoritmen Simpelsort –de kleinste zoeken in een rij van n-1 elementen, dan in een rij van n-2 elementen, enzovoorts: (n-1)+(n-2) = ½n(n-1) vergelijkingen –complexiteit O(n²): kwadratische orde Bubblesort –bij een rij met n elementen (n-1)+(n-2) = ½n(n-1) vergelijkingen –complexiteit O(n²): kwadratische orde Insertion sort –in het slechtste geval (welk geval is dat?) (n-2) + (n-1) = ½n(n-1) –in het beste geval n vergelijkingen –complexiteit O(n²): kwadratische orde

Shellsort void shellsort (int rij[ ], int lengte) { int i, j, sprong = lengte; bool klaar; while ( sprong > 1 ) { sprong = sprong / 2; klaar = false; while ( ! klaar ) { // soort bubblesort klaar = true; for ( i = 0; i <= lengte-sprong-1; i++ ) { j = i + sprong; if ( rij[i] > rij[j] ) { wissel (rij[i], rij[j]); klaar = false; } // if } // for } // while } // shellsort Complexiteit: O(n  n) Geen tentamenstof Ook snel: Quicksort