Inleiding programmeren in C++ Life Science & Technology 1 maart 2004 Universiteit Leiden.

Slides:



Advertisements
Verwante presentaties

Advertisements

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


Zonder onder migratie start bouw. onder architectuur zonder architectuur nieuwe systemenbestaande systemen 1 vakje verdeeld in 4-en.
Universiteit Leiden Inleiding programmeren in C++ Life Science & Technology 16 februari

Inleiding programmeren in C++ Life Science & Technology 23 februari Universiteit Leiden.
Hoofdstuk 8: Recursie.
Arduino project.
Gestructureerd programmeren in C
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Conditionele expressie
Inleiding: De bepaalde integraal
1 Tentamen 21 januari 2008 uitleg Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.

Computervaardigheden Hoofdstuk 4 — Scripting (Let op: dit is enkel voor studenten Biologie.)
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Een workshop over katten, muizen en nadenken in de Informatica
Frank Stalpers en Ad Baars
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
SWI cursus: ‘Inleiding programmeren in Java’
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology Inleiding
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Deel I: Programmeertaal C 6. Arrays en Pointers
Datastructuren Sorteren, zoeken en tijdsanalyse
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Inleiding tot programmeren
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
Coordinaten: Tom Tourwé 10F729 Tel: 3492 Organisatie van de oefeningen: * 1 uur bespreking van oplossing vorige les + bespreking opgave.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Universiteit Leiden, Opleiding Natuur- en Sterrenkunde 1 Elementaire Kinetische Theorie Electrodynamica (Maxwell theorie) Eerste en tweede jaar Klassieke.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Herhalingen
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Tinpro015b-les6 Templates.
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Programmastructuurdiagrammen (PSD)
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Small Basic Console deel 2
Implementatie Zoekboom
Nim, een strategisch spelletje
Doolhof. doolhof doolhof Maak een routine die de ‘hekken’ tussen de cellen weghaalt Maak een 2-dimensionale array met kolommen en rijen aangeklikt.
Python – For loop + strings
Transcript van de presentatie:

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden

Week 7 •Inhoud –Life, en (oude) tentamens •Doel –Wat is Life? En hoe maak je het goede tentamen / tentamen goed? •Materiaal –Dictaat Hoofdstuk 3.7 –De tweede programmeeropgave •Werkcollege –Afmaken tweede programmeeropgave

Life (1) •Spel zonder spelers, bedacht door J.H. Conway •Oneindig groot speelbord met vakjes, dat een kolonie levende cellen voorstelt •Iedere tijdseenheid gaan bepaalde cellen dood en komen andere tot leven; dit gebeurt “parallel” •Spelregels: –elke cel heeft 8 buren –een dode cel wordt levend als deze precies 3 levende buren heeft –een levende cel gaat dood •door eenzaamheid (minder dan 2 levende buren) •door overbevolking (meer dan 3 levende buren) •Zie internet!

Life (2) •Spelen? –starten met een beginconfiguratie –kijken naar de ontwikkeling van de groep cellen door de tijd heen •Interessant? –sterft de kolonie uit? –stabiele eindconfiguratie –herhalende patronen (terugkerend, verschuivend) –populatie neemt steeds maar toe: “glider gun” •Demo...

Life in C++ •Stap-functie: van bord t naar bord t+1 –werken met één bord is lastig: voor het berekenen van de nieuwe waarde zijn 8 oude waarden nodig –twee borden die om de beurt oud (bord t ) en nieuw (bord t+1 ) zijn •Oneindig groot bord? –voor het gemak een bord met eindige afmetingen –cellen aan de rand hebben maar 5 buren (of 3) –maak het bord aan alle kanten 1 vakje groter; let anders goed op arraygrenzen: alleen deze[i-1][j ] gebruiken als i > 0 –buitenste rand wordt niet afgedrukt en niet meegenomen in de stap- functie

Life in C++ – vervolg int main ( ) { bool even_bord[RIJ][KOLOM], oneven_bord[RIJ][KOLOM]; // constanten RIJ en KOLOM zijn expres 2 te groot int generatie = 0;// Stappenteller init_bord (even_bord);// Beginconfiguratie in even bord leeg_bord (oneven_bord);// Oneven bord leeg voor de zekerheid toon_bord (even_bord);// Toon de beginconfiguratie while ( true ) { if ( generatie % 2 == 0) { // Afwisselend van even naar oneven stap (even_bord, oneven_bord);// Berekenen toon_bord (oneven_bord);// en tonen } else { stap (oneven_bord, even_bord); toon_bord (even_bord); } // else generatie++; } // while return 0; } // main

void stap (bool deze[RIJ][KOLOM], bool volgende[RIJ][KOLOM]) { int aantal;// Teller voor het aantal levende buren leeg_bord (volgende);// Doel-bord leeg maken for ( int i = 1; i < (RIJ-1); i++ ) { for ( int j = 1; j < (KOLOM-1); j++ ) { aantal = 0;// Aantal levende buren if ( deze[i-1] [j-1] ) aantal++;// van deze[i][j] bepalen if ( deze[i] [j-1] ) aantal++; if ( deze[i+1] [j-1] ) aantal++; if ( deze[i-1] [j] ) aantal++; if ( deze[i+1] [j] ) aantal++; if ( deze[i-1] [j+1] ) aantal++; if ( deze[i] [j+1] ) aantal++; if ( deze[i+1] [j+1] ) aantal++; if ( deze[i][j] ) {// Levend if ( aantal == 2 || aantal == 3 ) volgende[i][j] = true; } else {// Dood if ( aantal == 3 ) volgende[i][j] = true; } // else } // for-j } // for-i } // stap

Tentamen...!?!? •Simpele functies •Parameters en variabelen –call by value en call by reference parameters –globale en locale variabelen –formele en actuele parameters •Zoeken en sorteren •Twee-dimensionale matrices (arrays)

Opgave 19 – Call by value/reference •Globale variabelen a en b (beide int) hebben waarden 2 respectievelijk 6 bij binnenkomst ellen Wat wordt afgedrukt bij cout << ellen (a, b); cout << a << b << endl; •En nu met een & in alle parameters van peter en ellen? int peter (int r, int s) { s--; return r+s+2; } // peter int ellen (int p, int q) { int a = 7; p++; q -= 2; for ( a = 2; a < q; a++ ) p = p + peter (p, q); cout << a << p << q << endl; return a+p+q; } // ellen

Opgave 19 antwoorden •Eerste peter (p,q) geeft 8, de tweede 16. TWEE doorgangen door de for-loop. •Op beeldscherm: •Nu geeft peter (p,q) weer 8, en laagt q met 1 af; dus maar EEN doorgang door de for-loop. •Op beeldscherm:

Opgave 44 a – Sorteren •Stoppen zodra er een ronde zonder verwisselingen is geweest 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

Opgave 44 a antwoord void bubblesort2 (int rij[ ], int lengte) { bool gewisseld = true; // is er gewisseld? int ronde = 1, j; while ( gewisseld ) { gewisseld = false; for ( j = 0; j < lengte - ronde, j++ ) { if ( rij[j] > rij[j+1] ) { wissel (rij[j],rij[j+1]); gewisseld = true; } // if } // for-j ronde++; } // while } // bubblesort2

Opgave 31 a en b – Puzzel •Boolese functie BestaatHoriWoord (puzzel, i, j), die true oplevert als er op positie (i, j) een horizontaal woord begint •functie Nummeren (puzzel, nummers), waarbij in nummers de volgnummers staan van woorden die op die plek beginnen (horizontaal of verticaal); gebruik BestaatHoriWoord en BestaatVertiWoord const int m = 30; const int n = 40; char puzzel[m][n]; int nummers[m][n]; HET# A#OM #SPA

Opgave 31 a antwoord •De plek [i][j] bevat geen # EN •De eerste kolom (0) OF er staat een # voor EN •NIET De laatste kolom (n-1) EN er staat GEEN # achter bool BestaatHoriWoord (char P[m][n], int i, int j) { return ( P[i][j] != '#' ) && ( j == 0 || P[i][j-1] == '#' ) && ( j != n-1 && P[i][j+1] != '#' ); } // BestaatHoriWoord

Opgave 31 b antwoord void Nummeren (char P[m][n], int nummers[m][n]) { int i, j, teller = 1; for ( i = 0; i < m; i++ ) for ( j = 0; j < n; j++ ) if ( BestaatHoriWoord (P,i,j) || BestaatVertiWoord (P,i,j) ) { nummers[i][j] = teller; teller++; } // if else nummers[i][j] = 0; } // Nummeren

Opgave 32 a – 2-dimensionale arrays •Array T[m][n] houdt van m personen bij op welke tijdschriften men is geabonneerd •Dus maximaal n abonnementen per klant •Oplopend gesorteerd, met 0 op niet gebruikte (willekeurige) plekken •Twee voorbeelden die dezelfde situatie beschrijven: –klant 0 leest tijdschrift 3, 10 en 13 –klant 1 leest alleen tijdschrift 10 –enz... •Schrijf een functie die de persoon met de meeste abonnementen oplevert

Opgave 32 a antwoord int meeste (int T[ ][n], int m) { int i, j, besteklant, telabo, grootste = -1; for ( i = 0; i < m; i++ ) { // check klant i telabo = 0; for ( j = 0; j < n; j++ ) if ( T[i][j] != 0 ) telabo++; if ( telabo > grootste ) { grootste = telabo; besteklant = i; } // if } // for-i return besteklant; } // meeste

Tot slot … •Tentamen –vrijdag 12 maart 2004, – uur, Gorlaeus zaal 1 –dinsdag 8 juni 2004, – uur, idem –maandag 23 augustus 2004, – uur, idem •Vragenuur –woensdag 10 maart 2004, uur, Gebouw W&I (Snellius), zaal 176 (op eerste etage boven ingang)