Hoofdstuk 1. Week 3: Recursie. 1.1 Leesopdracht. 1.2 Eenvoudige recursie

Maat: px
Weergave met pagina beginnen:

Download "Hoofdstuk 1. Week 3: Recursie. 1.1 Leesopdracht. 1.2 Eenvoudige recursie"

Transcriptie

1 Hoofdstuk 1 Week 3: Recursie 1.1 Leesopdracht In Java Gently staat zeer weinig over recursie, de leesopdracht voor deze week bestaat dus alleen uit dit hoofdstuk van het dictaat. 1.2 Eenvoudige recursie Eén van de krachtigste concepten in de Informatica is recursie. Tot nog toe hebben we alleen kennis gemaakt met methods die andere methods aanroepen. Er is dan een soort hiërarchie in methods. Het is ook mogelijk dat methods, al dan niet via een omweg, zichzelf aanroepen. Zo een method noemen we een recursieve method. Het redeneren over recursie gaat het makkelijkste als we onderscheid maken tussen: 1. de basisstap en 2. de recursieve stap Als we een probleem dat we met recursie aanpakken, dan bepalen we vooraf wat de basisstap en de recursiestap zijn. De basisstap bestaat uit een oplossing van het probleem in een simpele situatie waarin we het antwoord vrijwel direct kunnen opschrijven. Met recursiestappen proberen we het probleem stapsgewijs te reduceren tot de basisstap. Laten we een voorbeeld nemen. We willen n!, waarbij n 0 uitrekenen; d.w.z (n 1) n. De basisstap ligt voor de hand; immers 0! is 1. Voor iedere andere waarde van n reduceren we het probleem. 1 voor n = 0 (basisstap) n! = (1.1) (n 1)! n voor n > 0 (recursiestap) Een mogelijke oplossing is gegeven in programma: 1

2 public static int faculteit( int n ) if ( n == 0 ) return 1; else return n * faculteit( n-1 ); 1.3 Tail-recursie Het voorgaande probleem, het uitrekenen van faculteiten is een typisch probleem dat met tail-recursie (staart-recursie) is op te lossen. Tail-recursie kenmerkt zich doordat de recursieve method zichzelf ten hoogste eenmaal aanroept in het laatst uit te voeren statement van die method. Het laatst uit te voeren statement hoeft natuurlijk niet het laatste statement in de programmatekst van de method te zijn. 1.4 Recursie vs. iteratie Tail-recursie is in feite een bijzondere vorm van herhaling, waarvan we de oplossing m.b.v. iteratie (d.w.z. met behulp van het while- of for-statement) de voorkeur verdient. public static int faculteit( int n ) int fac = 1; for ( int i = 1 ; i <= n ; i++ ) fac *= i; return fac; Bij iedere recursieve aanroep moet de nodige administratie verricht worden m.b.t. bijvoorbeeld de locale variabelen en parameters. Daarom heeft recursie een overhead t.o.v. iteratie. Het gebruik van recursie versus iteratie is meestal een afweging van schoonheid en duidelijkheid t.o.v. snelheid. 2

3 1.5 Machtsverheffen Een ander voorbeeld van tail-recursie is het machtsverheffen. We zoeken een method voor het uitrekenen van x y waarbij y integer en y 0. We zouden voor het volgende algoritme kunnen kiezen: x y 1 voor y = 0 (basisstap) = (1.2) x y 1 x voor y > 0 (recursiestap) Dit algoritme vraagt om y recursiestappen om x y te berekenen. Het volgende algoritme is slimmer: 1 voor y = 0 (basisstap) x y = (x 2 ) y div 2 voor y > 0 en y even (recursiestap) (1.3) x y 1 x voor y > 0 en y oneven (recursiestap) Dit algoritme vraagt om ongeveer Olog y recursiestappen om x y te berekenen. Dit laatste algoritme is dus beduidend efficiënter. Het eerste algoritme berekent bijvoorbeeld 2 10 als Het laatste algoritme berekent 2 10 = (2 5 ) 2 = (2 4 2) 2 = ((2 2 ) 2 2) 2. public static double macht( double x, int y ) if ( y == 0 ) return 1.0; else if ( y % 2 == 0 ) else return macht( x*x, y / 2 ); return x * macht( x, y - 1 ); 1.6 Afdrukken van een getal Java kent verschillende methoden om een geheel getal naar de uitvoer te sturen. Hierbij wordt een integer getal omgezet in een rijtje ASCII-symbolen die afgedrukt worden. De 3

4 programmeurs van de standaard classes hebben dit probleem voor jullie opgelost. Veronderstel dat we dit nu zelf moeten programmeren, hoe doen we dat? We beschikken uitsluitend over een methode voor het afdrukken van characters. Het essentiële probleem bij het afdrukken van getallen is dat we eerst het meest significante cijfer moeten afdrukken en vervolgens de minder significante cijfers, terwijl we met de operatie mod alleen het minst significante cijfer kunnen bekijken. Ergens in het algoritme moeten de cijfers in omgekeerde volgorde geplaatst worden. Deze verwisseling is zeer gemakkelijk recursief uit te voeren en met veel pijn en moeite iteratief. Het algoritme is simpel: 1. basisstap: getallen met 0 i < 10 drukken we direct af en 2. recursieve stap: van getallen met i 10 drukken we eerste recursief met WriteInt( i % 10 ) de eerste cijfers af en vervolgens het laatste cijfer. Een en ander resulteert in de method: public static void writeint( int i ) if (i < 10) System.out.print( i ); // basisstap; 1 cijfer else writeint( i / 10 ); System.out.print( i % 10 ); // recursie; meer cijfers 1.7 De grootste gemene deler Voor het uitrekenen van de grootste gemene deler van twee positieve getallen bestaat het Euclidische algoritme. Als de twee getallen gelijk zijn, dan is de grootste gemene deler gelijk aan het getal zelf. Als de twee getallen ongelijk zijn, dan kan men het kleinste getal van de grootste aftrekken; het zo gevormde paar getallen heeft dezelfde grootste gemene deler. Dit leidt tot het volgende recursieve algoritme: x voor x = y (basisstap) gcd(x, y) = gcd(x y, x) voor x > y (recursiestap) (1.4) gcd(x, y x) voor x < y (recursiestap) (gcd is een afkorting van greatest common divisor) Laten we dit controleren aan de hand van een simpel voorbeeld. Neem twee getallen die het product van priemfactoren zijn; 4

5 bijvoorbeeld = 260 en 7 13 = 91. De grootste gemene deler is nu 13. Bepaal nu met het Euclidische algoritme de grootste gemene deler van 260 en 91. We bepalen: gcd(260, 91). Trek de kleinste van de grootste af = 169 dus gcd(260, 91) = gcd(169, 91). Dit zetten we voort: gcd(260, 91) = gcd(169, 91) = gcd(78, 91) = gcd(78, 13) = gcd(65, 13) = (1.5) gcd(42, 13) = gcd(39, 13) = gcd(26, 13) = gcd(13, 13) (1.6) Tot slot berekenen we gcd(13, 13). Nu zijn de twee getallen gelijk dus gcd(13, 13) = 13. Hieruit volgt gcd(260, 91) = 13. De code wordt dus: public static int gcd( int x, int y ) if ( x == y ) return x; else if ( x < y ) else return gcd( x, y-x ); return gcd( x-y, x ); 1.8 Schaakprobleem Gegeven een schaakbord en een paard op een willekeurig veld. Bepaal voor ieder veld van het schaakbord in hoeveel paardesprongen dit veld vanuit het gegeven veld te bereiken is. Als we dit probleem willen aanpakken, met een z.g. top-down aanpak, dan moeten we het opbreken in kleinere deelproblemen. Een simpele opdeling is: Zet het bord klaar Vraag de startpositie Bereken hoeveel sprongen nodig zijn Geef uitvoer Dit kan b.v. leiden tot de volgende main() methode: 5

6 public static void main(string argv[]) int xb,yb; Extractor invoer = new Extractor(); initbord(); System.out.print("Coordinaten beginpunt: "); xb = invoer.readint(); yb = invoer.readint(); sprong(xb,yb,0); printbord(); Merk op dat we nog niets zeggen over hoe ieder van de onderdelen wordt opgelost, behalve het inlezen van de startpositie. We gaan nu één voor één de hiaten opvullen. Het simpelste is de initialisatie van het bord. We definieëren het bord als een 2-D array, waarop op iedere plaats het aantal sprongen van de kortste tot nu toe gevonden route wordt geadministreerd. Als we nog geen enkele route hebben gevonden, en zelfs het startpunt niet weten, gaan we ervan uit dat ieder punt in minder dan 2 miljoen zetten te bereiken is. Gezien de afmetingen van het bord moet dat lukken. We krijgen dan als code: private static int[][] bord = new int[8][8]; // het bord public static void initbord() int i,j; for ( i = 0; i <8; i++) for ( j = 0; j <8; j++) bord[i][j]= ; Het printen van het bord is ook simpel: 6

7 public static void printbord() int x,y; for ( y = 7; y >=0; y--) System.out.print((y+1) + " "); for ( x = 0; x <8; x++) System.out.print(bord[x][y] + " "); System.out.println(); System.out.println(); System.out.println(" a b c d e f g h"); Nu komt het lastigste: hoe berekenen we de kortste routes? Het idee is om dit recursief te doen. Stel we zijn na n sprongen op plek (x, y) terecht gekomen. Het eerste dat we moeten doen is kijken of we nog op het bord staan. Zo ja, dan moeten we kijken of de kortste route die tot nu toe gevonden is (gegeven door bord[x][y]) groter is dan n. Als dat het geval is, hebben we kennelijk een kortere route gevonden dan tot nu toe. We stellen dan eerst bord[x][y] gelijk aan n, en springen vanaf die positie in alle acht mogelijke richtingen, en herhalen daar de procedure voor al de niewe coordinaten, met n + 1 als aantal sprongen. In Java wordt dat koper zilver goud Figuur 1.1: Schematische voorstelling van de torens van Hanoi 7

8 public static void sprong( int x, int y, int lengte) if (( x>=0 ) && (x<8) && ( y>=0 ) && (y<8) ) // we staan nog op het bord if (diepte < bord[x][y]) bord[x][y] = lengte; lengte ++; sprong( x-1, y-2, lengte); sprong( x+1, y-2, lengte); sprong( x-1, y+2, lengte); sprong( x+1, y+2, lengte); sprong( x-2, y-1, lengte); sprong( x+2, y-1, lengte); sprong( x-2, y+1, lengte); sprong( x+2, y+1, lengte); // kortere route gevonden // administratie bijhouden // lengte pad ophogen // springen maar!! 1.9 De torens van Hanoi Een van de bekendste voorbeelden van recursie is de legende van de torens van Hanoi. Volgens de legende stonden er lang geleden voor de tempel van Hanoi drie zuilen, een koperen, een zilveren en een gouden zuil. Op de koperen zuil bevonden zich 100 schijven, de onderste de grootste, en van onder naar boven in grootte steeds afnemend, zodat nimmer een grotere op een kleinere schijf geplaatst was. Een oude monnik had zich tot taak gesteld deze schijven van de koperen zuil naar de gouden zuil te verhuizen, één voor één en er steeds voor zorgend dat geen grotere op een kleinere schijf geplaatst zou worden. De legende vertelt, dat het einde van de wereld bereikt zou zijn, indien de monnik zijn werk had voltooid. De monnik had snel in de gaten, dat ook de zilveren zuil nodig zou zijn en kwam na lang mediteren tot de volgende oplossing: 1. transporteer de bovenste 99 schijven van de koperen naar de zilveren zuil 2. transporteer de onderste, grootste, schijf van de koperen naar de gouden zuil 8

9 3. transporteer de 99 schijven nu van de zilveren zuil naar de gouden zuil. Hoewel de monnik stap 1. en stap 3. aan zijn oudste leerling opdroeg, zien we nu, dat we in feite voor deze stappen weer hetzelfde probleem tegenkomen, echter met 99 in plaats van 100 schijven en met de zuilen verwisseld. De oudste leerling van de monnik stelde aldus een vergelijkbaar algoritme op (met de zuilen verwisseld) en droeg zijn oudste leerling op het probleem van de 98 schijven op te lossen. Elke monnik krijgt de opdracht om n schijven van de van zuil naar de naar zuil te verplaatsen; eventueel door gebruik te maken van de via zuil. De monnik hoort van de opdrachtgever welk nummer correspondeert met respectievelijk de van, de via en de naar zuil. Elke monnik voerde in feite het volgende uit: bestaat de toren uit meer dan één schijf, draag dan de oudste leerling op, de toren van aantal-1 schijven te verplaatsen van de van zuil naar de via zuil. verplaats dan zelf de grootste schijf van de van naar de naar zuil. bestaat de toren uit meer dan één schijf, draag dan de oudste leerling op, de toren van aantal-1 schijven te verplaatsen van de via zuil naar de naar zuil. Hieronder staat de gewenste uitvoer voor n = 4, waarbij als extra aanduiding de verdeling van de schijven, genummerd A t/m D in oplopende grootte, over de verschillende torens is weergegeven. DCBA verhuis schijf van 1 naar 2 DCB. A verhuis schijf van 1 naar 3 DC.. A... B... verhuis schijf van 2 naar 3 DC..... BA.. verhuis schijf van 1 naar 2 D... C... BA.. verhuis schijf van 3 naar 1 DA.. C... B... verhuis schijf van 3 naar 2 DA.. CB..... verhuis schijf van 1 naar 2 D... CBA.... verhuis schijf van 1 naar 3... CBA. D... verhuis schijf van 2 naar 3... CB.. DA.. verhuis schijf van 2 naar 1 B... C... DA.. verhuis schijf van 3 naar 1 BA.. C... D... verhuis schijf van 2 naar 3 BA..... DC.. verhuis schijf van 1 naar 2 B... A... DC.. verhuis schijf van 1 naar 3... A... DCB. verhuis schijf van 2 naar DCBA De recursieve code wordt dan 9

10 public class Hanoi public static void hanoi ( int n, int van, int via, int naar ) if ( n > 0 ) // Verplaats n-1 stenen naar de hulp toren // via met naar als hulp toren hanoi( n -1, van, naar, via ); // Schrijf de zet op die nodig is om de // onderste steen te verplaatsen System.out.println("verhuis schijf van " + van + " naar " + naar ); // Verplaats n-1 stenen van de hulp toren // via naar naar met van als hulp hanoi(n-1, via, van, naar); public static void main(string argv[]) hanoi(4,1,2,3); 1.10 Welke atomen passen in een molecuul Een probleem dat verwant is aan het z.g. knapzak probleem (dat jullie op het practicum krijgen) is dat van het vinden van alle combinaties van atomen, met bekende atoomgewichten, die een molecuul van een gegeven gewicht kunnen opleveren. We trekken ons hierbij 10

11 niets aan van chemische wetten. Laten we uitgaan van de volgende declaraties in de class Molecuul: import local.*; public class Molecuul private static class Atoom public String naam; public int nummer, massa; public Atoom( String n, int num, int m ) naam = n; nummer = num; massa = m; public static Atoom[] atoomsoort; public static int aantal, combinatie[], mogelijkheden = 0; Dit levert ons declaraties van een lijst met elementen van de private class Atoom, de int aantal geeft de lengte van deze lijst. De array combinatie geeft het aantal van ieder atoom in de huidige combinatie, en mogelijkheden administreerd het aantal mogelijke moleculen dat tot nu toe gevonden is. We moeten deze variabelen natuurlijk wel initialiseren: public static void initatoomsoort( String fnaam ) FileExtractor invoer = new FileExtractor(fnaam); aantal = invoer.readint(); invoer.readline(); atoomsoort = new Atoom[aantal]; combinatie = new int[aantal]; for (int i=0; i < aantal; i++ ) atoomsoort[i] = new Atoom (invoer.readstring(), invoer.readint(), invoer.readint() ); 11

12 De volgende vraag is natuurlijk wanneer een combinatie een mogelijk molecuul opleverd. Dit is het geval als de som van de massa s van alle atomen in de combinatie gelijk is aan het gezochte molecuulgewicht. Stel dat we een combinatie hebben gevonden. Dan moeten we eerst de teller van het aantal mogelijkheden verhogen, en we moeten natuurlijk het molecuul ook een beetje aardig weer kunnen geven. Dit gebeurt in de methode printmolecuul: public static void printmolecuul() mogelijkheden ++; System.out.print( mogelijkheden + ": " ); for (int i=0; i<aantal; i++ ) if ( combinatie[i] > 0 ) System.out.print(" " + atoomsoort[i].naam ); if ( combinatie[i] > 1 ) System.out.print( " " + combinatie[i] ); System.out.println(); Het eigenlijke werk komt nu. Gegeven een molecuulmassa M, proberen we van de eerste atoomsoort met massa A alle mogelijke aantallen n die passen er in te stoppen (n = 0, 1,..., M/A), en we rekenen uit hoeveel van de molecumassa overblijft voor ieder van die mogelijke aantallen (M na). Daarna kijken we welke verschillende moleculen er te maken zijn met massa M na, met de resterende atoomsoorten. Dit is dus een kleinere versie van hetzelfde probleem dat we hadden! We zijn klaar als we aantal atoomsoorten hebben geprobeerd, en de overgebleven massa is nul. Dan moeten we dus printmolecuul aanroepen. De volgende method geeft het gewenste resultaat: public static void mogelijkemoleculen( int massa, int index ) if ( index == aantal ) // basisstap if ( massa == 0 ) printmolecuul(); else // recursiestap for ( int i = massa / atoomsoort[index].massa; i>=0 ; i-- ) combinatie[index] = i; mogelijkemoleculen( massa - i*atoomsoort[index].massa, index + 1 ); 12

13 De main method wordt simpelweg: public static void main (String argv[]) int molecuulmassa; Extractor invoer = new Extractor(); initatoomsoort( argv[0] ); System.out.print("Molecuulmassa: "); molecuulmassa = invoer.readint(); mogelijkemoleculen( molecuulmassa, 0 ); Voor een invoerfile met atoomgewichten: 5 nummer massa H 1 1 C 6 12 N 7 14 O 8 16 U Levert dit als uitvoer voor een molecuulmassa van 18: Molecuulmassa: <18> 1: H 18 2: H 6 C 3: H 4 N 4: H 2 O 13

14 1.11 Practicum 1 Week 3: Recursie Opgave 1 Opgavenaam: Paard (Te paard!) Deze opgave is een variant op het schaakprobleem in het hoorcollege. We laten een paard uit een schaakspel springen zoals hij dat gewend is. Het bord breiden we aanzienlijk uit: we bekijken een oneindig twee-dimensionaal bord (vraag: moet je dit implementeren?). De velden op het bord nummeren we als roosterpunten in een twee-dimensionaal assenstelsel. Onder een paardenroute verstaan we nu een rij punten P 0, P 1,..., P n waarbij voor elke i 1,..., n geldt dat P i 1 P i een paardesprong is. We noemen n de lengte van zo n route. Voorbeeld: (2, 1), (4, 2), (5, 0), (4, 2), (3, 0), (4, 2), (6, 1) is een paardenroute van lengte 6 van (2, 1) naar (6, 1). einde voorbeeld 1. Ontwerp een (recursieve) method public static int nroutes(xb,yb,xe,ye,n) die het aantal paardenroutes bepaalt van (xb, yb) naar (xe, ye) ter lengte n. 2. Een stuk code is gegeven in de file Paard.java die op de volgende bladzijde is afgedrukt. Implementeer de method in deze class, die de gebruiker de gelegenheid geeft begin- en eindpunt en de lengte van de route op te geven en dat vervolgens het aantal mogelijke routes bepaalt. Voorbeeld: Bepalen aantal paardenroutes Coordinaten beginpunt: 2 1 Coordinaten eindpunt: 6 1 Aantal stappen: 6 Aantal routes: Bepaal eens, zonder je programma te gebruiken, hoeveel paardenroutes er zijn van het punt (0,0) naar het punt (30,30) in 9 stappen. De naieve implementatie van de functie nroutes heeft nogal wat rekentijd nodig om dit antwoord te vinden. Bedenk een eenvoudig te berekenen criterium waarmee je 14

15 kunt bepalen dat het eindpunt niet is te bereiken in het toegestane aantal stappen. Maak hiervan gebruik in een tweede versie van je programma. Bewaar ook je eerste oplossing en vergelijk de tijd die je twee oplossingen nodig hebben op het geval van 9 stappen van (0,0) naar (30,30). Het is deze meer efficiente oplossing die ter beoordeling moet worden ingestuurd. Er wordt ook gecontroleerd op de efficientie van je oplossing. import local.*; public class Paard public static int nroutes( int xb, int yb, int xe, int ye, int lengte ) // jullie moeten hier iets toevoegen public static void main(string argv[]) int xb, yb, xe, ye; Extractor invoer = new Extractor(); System.out.println("Bepalen aantal paardenroutes"); System.out.print("Coordinaten beginpunt: "); xb = invoer.readint(); yb = invoer.readint(); System.out.print("Coordinaten eindpunt: "); xe = invoer.readint(); ye = invoer.readint(); System.out.print("Aantal stappen: "); System.out.println("\nAantal routes: " + nroutes(xb,yb,xe,ye, invoer.readint())); 15

16 Opgave 2 Opgavenaam: MaxWinst (Maximale winst) Hint: deze opgave heeft wel wat weg van het molecuul-gewicht probleem uit het hoorcollege. Als je als fabrikant een beetje succes wilt hebben, dan kun je er maar niet op los produceren. Je zult díe zaken moeten produceren die de grootste winst opleveren. Maar daarbij zul je ook duidelijk rekening moeten houden met de beschikbare productiemiddelen (grondstoffen, arbeidskrachten, beschikbaarheid van de apparatuur etc.). Een zorgvuldige planning zal de totale winst moeten maximaliseren. In deze opgave geven we een aanzet tot een programma dat hierbij dienst kan doen. Om niet geheel te verdrinken in alle factoren waar rekening mee moet worden gehouden, maken we de volgende veronderstellingen. Er is een lijst met alle mogelijke artikelen die door ons bedrijf geproduceerd kunnen worden. Van elk artikel wordt in de periode waar de planning betrekking op heeft ten hoogste één exemplaar gefabriceerd. Bij elk artikel is de netto winst bekend. Er is slechts één productiefactor die beperkt beschikbaar is. Bij elk artikel is bekend hoeveel van deze productiefactor nodig is. We maken gebruik van de tekst die aan het eind van deze set is afgedrukt. Ook zijn er twee voorbeeld invoerfiles aanwezig (artikelen1 en artikelen2) 1. Compileer de gegeven Java-file en voer de gegenereerde executable uit met als invoerparameter de gegeven file artikelen1. 2. Construeer een procedure die de ingelezen gegevens overzichtelijk afdrukt. 3. Construeer een function die bij een gegeven rij artikelgegevens de maximaal haalbare winst berekent, rekening houdend met de beschikbare hoeveelheid productiefactor. 4. Completeer het programma zo, dat de gebruiker de hoeveelheid beschikbare productiefactor kan invoeren en dat vervolgens de maximaal te behalen winst wordt afgedrukt. 5. Verwijder het afdrukken van de ingelezen gegevens uit je hoofdprogramma. Het resulterende programma leest dus de gegevens uit een file, maar vraagt aan de gebruiker (vanaf het toestenbord) de hoeveelheid beschikbare productiefactor. Tot slot wordt de maximaal haalbare winst afgedrukt. Zie ook het voorbeeld. Voorbeeld: met de geleverde file artikelen1 als invoerfile: Geef beschikbare hoeveelheid productiefactor: <14> Maximaal haalbare winst: 42 16

17 import local.*; public class MaxWinst private static class Product public String naam; public int winst; public int tijd; public Product( String n, int t, int w ) naam = n; winst = w; tijd = t; public static Product[] assortiment; public static int grootte; public static void initassortiment( String fnaam ) FileExtractor invoer = new FileExtractor(fnaam); grootte = invoer.readint(); invoer.readline(); assortiment = new Product[grootte]; for (int i=0; i < grootte; i++ ) assortiment[i] = new Product(invoer.readString(), invoer.readint(), invoer.readint() ); public static int maxwinst( /* jullie code hier */ int resttijd, int laatste ) public static void main (String argv[]) int uren; Extractor invoer = new Extractor(); initassortiment( argv[0] ); 17

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N! Recursie Faculteit: in de wiskunde: n! is gedefiniëerd als: 0! = 1 n! = n (n 1)! in Java: public static int faculteit( int n ) // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Nadere informatie

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden:

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden: Recursie: definitie Een object wordt recursief genoemd wanneer het partieel bestaat uit of partieel gedefinieerd is in termen van zichzelf. Recursie wordt gebruikt bij wiskundige definities, bijvoorbeeld:

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Small Basic Programmeren Text Console 2

Small Basic Programmeren Text Console 2 Oefening 1: Hoogste getal Je leest een reeks positieve gehele getallen in totdat je het getal 0 (nul) invoert. Daarna stopt de invoer en druk je een regel af met het hoogste getal uit de reeks. Voorbeeld:

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)

Nadere informatie

Voortgezet Prog. voor KI

Voortgezet Prog. voor KI Voortgezet Prog. voor KI Docent: Michael Wilkinson IWI 142 tel. 050-3638140 (secr. 3633939) Frank Brokken RC 352 tel. 050-3633688 Voorkennis: Inleiding Programmeren voor KI (nieuwe stijl) Stof: Practicum

Nadere informatie

Dynamisch Programmeren. Het Rugzakprobleem

Dynamisch Programmeren. Het Rugzakprobleem INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan

Nadere informatie

Informatica: C# WPO 11

Informatica: C# WPO 11 Informatica: C# WPO 11 1. Inhoud Pass by reference (ref, out), recursie, code opdelen in verschillende codebestanden 2. Oefeningen Demo 1: Swapfunctie Demo 2: TryParse(int) Demo 3: Recursion Tree Demo

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

OEFENINGEN PYTHON REEKS 6

OEFENINGEN PYTHON REEKS 6 OEFENINGEN PYTHON REEKS 6 1. A) Schrijf een functie die een getal x en een getal y meekrijgt. De functie geeft de uitkomst van volgende bewerking als returnwaarde terug: x y x als x y x y y als x < y B)

Nadere informatie

Datastructuren college 10

Datastructuren college 10 we hadden Backtracking verbetering i i Datastructuren college 0 0: : : 0: : : P r r r r r b r b r P r r r b r b r backtracking we hoeven vaak de kandidaat niet helemaal af te maken om hem te kunnen verwerpen

Nadere informatie

Arrays in LOGO. In LOGO heeft de eerste item van de array standaard index 1.

Arrays in LOGO. In LOGO heeft de eerste item van de array standaard index 1. Arrays in LOGO Een array Is één variabele die verschille items bevat. Iedere item heeft een waarde. De items staan in een bepaalde volgorde. Het is dus een rij van waarden. De positie van iedere item in

Nadere informatie

Small Basic Console Uitwerking opdrachten

Small Basic Console Uitwerking opdrachten Opdracht 1 3 getallen => inlezen Gemiddelde uitrekenen Resultaat afdrukken TextWindow.WriteLine("Dit programma berekend het gemiddelde van drie door U in te voeren getallen.") TextWindow.Write("Voer getal

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force

Vierde college algoritmiek. 23/24 februari Complexiteit en Brute Force Algoritmiek 2017/Complexiteit Vierde college algoritmiek 23/24 februari 2017 Complexiteit en Brute Force 1 Algoritmiek 2017/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:

Nadere informatie

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin: Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de

Nadere informatie

Hoofdstuk 0. Van Python tot Java.

Hoofdstuk 0. Van Python tot Java. Hoofdstuk 0. Van Python tot Java. In dit eerste hoofdstuk maken we de overstap van Python naar Java. We bespreken de verschillen en geven wat achtergrondinformatie. In het volgende hoofdstuk gaan we dieper

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

2 Recurrente betrekkingen

2 Recurrente betrekkingen WIS2 1 2 Recurrente betrekkingen 2.1 Fibonacci De getallen van Fibonacci Fibonacci (= Leonardo van Pisa), 1202: Bereken het aantal paren konijnen na één jaar, als 1. er na 1 maand 1 paar pasgeboren konijnen

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid.

Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid. Complexiteit of efficiëntie van algoritmen Hoe meet je deze? Tijd is geen goede maatstaf, want is afhankelijk van computer waarop algoritme wordt gedraaid. Een betere maatstaf is het aantal berekeningsstappen

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken - belangrijkste punten: - ontleden van de programmatekst - bijhouden van de datastructuren Data Structuren en Algoritmen

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Faculteit EWI Tentamen Programmeren in C (EE1400) 28 jan 2011, 9.00 12.00 - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

REEKS I. Zaterdag 6 november 2010, 9u

REEKS I. Zaterdag 6 november 2010, 9u TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS I Zaterdag 6 november 2010, 9u NAAM :... VRAAG 1: MINSTENS [5 PUNTEN] Schrijf een methode minstens(), met twee

Nadere informatie

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester. In onderstaande oefeningen zijn kleuren gebruikt. Deze dienen aleen om de structuren makkelijker terug te kunnen herkennen. Ze worden niet standaard zo gebruikt. De dunne rood/roze balken zijn ook geen

Nadere informatie

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Achtste college algoritmiek. 8 april Dynamisch Programmeren Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst

Nadere informatie

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, 13.30-15.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Opgaven 1 levert 8 punten op, opgave 2 levert 12 punten

Nadere informatie

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2 Controle structuren De algemene vorm: 1 bloks door middel van indentatie Keuze Herhaling if expressie :...... In de volgende vorm is het else gedeelte weggelaten: if expressie :... Het if keuze- of conditioneel

Nadere informatie

Memoriseren: Een getal is deelbaar door 10 als het laatste cijfer een 0 is. Of: Een getal is deelbaar door 10 als het eindigt op 0.

Memoriseren: Een getal is deelbaar door 10 als het laatste cijfer een 0 is. Of: Een getal is deelbaar door 10 als het eindigt op 0. REKENEN VIJFDE KLAS en/of ZESDE KLAS Luc Cielen 1. REGELS VAN DEELBAARHEID. Luc Cielen: Regels van deelbaarheid, grootste gemene deler en kleinste gemeen veelvoud 1 Deelbaarheid door 10, 100, 1000. Door

Nadere informatie

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd Inhoudsopgave 1 Inleiding... 1 2 Toekenning- en herhalingsopdrachten (for loop)... 2 2.1 De wet van Ohm... 3 2.2 De spaarrekening... 3 2.3 De transformator... 3 3 Keuze- en herhalingsopdrachten (if, switch,

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Tentamen Imperatief Programmeren

Tentamen Imperatief Programmeren Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Kwis (3) class X { public void a() { System.out.println(x); public static void main(string[] args) { X x = new X(); Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

Nadere informatie

Tweede college algoritmiek. 12 februari Grafen en bomen

Tweede college algoritmiek. 12 februari Grafen en bomen College 2 Tweede college algoritmiek 12 februari 2016 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices)

Nadere informatie

algoritmiek - antwoorden

algoritmiek - antwoorden 2016 algoritmiek - antwoorden F. Vonk versie 1 28-8-2016 inhoudsopgave eenvoudige algoritmes... - 3 - complexe algoritmes... - 7 - zoeken (vwo)... - 10 - sorteren (vwo)... - 12 - Dit werk is gelicenseerd

Nadere informatie

1. Recursieve Algoritmen

1. Recursieve Algoritmen 1. Recursieve Algoritmen Doel : Verdiepen van je inzicht in recursieve procedures ; bestudeer ook hoofdstuk 15 van de WWW-B1- reader op www.cs.kun.nl/~gerp/b1 (en/of Savitch Hfst 14) Aan het einde van

Nadere informatie

van PSD naar JavaScript

van PSD naar JavaScript 2015 van PSD naar JavaScript F. Vonk versie 2 19-9-2015 inhoudsopgave 1. inleiding... - 2-2. ontwikkelomgeving... - 3-3. programmeerconcepten... - 4 - statement... - 4 - sequentie... - 4 - variabele en

Nadere informatie

SEQUENTIE-STRUCTUUR. Oefening: Dichtheid

SEQUENTIE-STRUCTUUR. Oefening: Dichtheid SEQUETIE-STRUCTUUR Oefening: Dichtheid geef diameter vd bol(m) //Declaratie input variabelen double diameter; double soortmassa; //Declaratie variabelen voor tussenresultaten double volume; diameter //Declaratie

Nadere informatie

Ingebouwde klassen & methodes

Ingebouwde klassen & methodes Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private

Nadere informatie

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall, sheets Programmeren 1 Java college 4, Walter Kosters De sheets zijn gebaseerd op met name hoofdstuk 8 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Programmeren (1) Examen NAAM:

Programmeren (1) Examen NAAM: Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

1 Recurrente betrekkingen

1 Recurrente betrekkingen WIS1 1 1 Recurrente betrekkingen 1.1 De torens van Hanoi De torens van Hanoi Edouard Lucas, 1884: Gegeven 3 pinnen en 64 schijven van verschillende grootte. Startsituatie: 64 op linkerpin, geordend naar

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder?

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder? D -DAG 13 februari 2014: 1+ 1 = 2 (en hoe nu verder?) 1 = 2en hoe nu verder? 1 Inleiding Snel machtsverheffen Stel je voor dat je 7 25 moet uitrekenen. Je weet dat machtsverheffen herhaald vermenigvuldigen

Nadere informatie

Tentamen in2705 Software Engineering

Tentamen in2705 Software Engineering Tentamen in2705 Software Engineering Voorbeeld (bijna tweemaal te groot) U mag meenemen naar dit tentamen: Lethbridge, afdrukken PPT slides, afdrukken handouts. 1. De TU wil een nieuw systeem ontwikkelen

Nadere informatie

Wiskundige Analyse I. Hoofdstuk 1. Vraag 1.1 Het beginvoorwaardenprobleem. x 2 y + xy + x 2 y = 0, y(0+) = 1, y (0+) = 0. bezit een unieke oplossing.

Wiskundige Analyse I. Hoofdstuk 1. Vraag 1.1 Het beginvoorwaardenprobleem. x 2 y + xy + x 2 y = 0, y(0+) = 1, y (0+) = 0. bezit een unieke oplossing. Hoofdstuk 1 Wiskundige Analyse I Vraag 1.1 Het beginvoordenprobleem x 2 y + xy + y = 0, y(0+) = 1, y (0+) = 0 bezit een unieke oplossing. vals Vraag 1.2 Het beginvoordenprobleem x 2 y + xy + x 2 y = 0,

Nadere informatie

Practicum Programmeerprincipes

Practicum Programmeerprincipes REEKS 3 Practicum Programmeerprincipes 2009-2010 fvdbergh@vub.ac.be WERKEN MET FUNCTIES IN PICO Functies, controlestructuren, recursie, iteratie, blokstructuren en functionele parameters in Pico. Het woordenboek

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 1 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/ Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void

Nadere informatie

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println(Hallo! Voorbeeld Java-programma import java.io.*; één klasse...met één functie...met één opdracht public class Hallo { public static void main (String[] a) { System.out.println("Hallo!"); accolades begrenzen

Nadere informatie

Java Les 3 Theorie Herhaal structuren

Java Les 3 Theorie Herhaal structuren Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Genetische algoritmen in Java met JGAP

Genetische algoritmen in Java met JGAP Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen

Nadere informatie

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,

Nadere informatie

Informatie over. 5VWO DT51: JavaLogo. Casper Bezemer. Toetsweek 1 13 oktober 2016

Informatie over. 5VWO DT51: JavaLogo. Casper Bezemer. Toetsweek 1 13 oktober 2016 Informatie over 5VWO DT51: JavaLogo Casper Bezemer Toetsweek 1 13 oktober 2016 1 Informatie Voor toets DT51 wordt jou gevraagd Java(Logo) programma s te schrijven. De eerste opdracht is een Krimpfiguur,

Nadere informatie

9. Strategieën en oplossingsmethoden

9. Strategieën en oplossingsmethoden 9. Strategieën en oplossingsmethoden In dit hoofdstuk wordt nog even terug gekeken naar alle voorgaande hoofdstukken. We herhalen globaal de structuren en geven enkele richtlijnen voor het ontwerpen van

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)

Nadere informatie

Negende college algoritmiek. 15 april Dynamisch Programmeren

Negende college algoritmiek. 15 april Dynamisch Programmeren Negende college algoritmiek 15 april 2016 Dynamisch Programmeren 1 algemeen Uit college 8: DP: - nuttig bij problemen met overlappende deelproblemen - druk een oplossing van het probleem uit in oplossingen

Nadere informatie

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

SPOJ oplossingen Gilles Callebaut 7 augustus 2015 SPOJ oplossingen 2012-2013 Gilles Callebaut 7 augustus 2015 DISCLAIMER Oefeningen zijn niet altijd correct of optimaal. Gelieve de oefeningen enkel te gebruiken ter ondersteuning. Van kopiëren leer je

Nadere informatie

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,

Nadere informatie

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force

Vierde college algoritmiek. 1 maart Toestand-actie-ruimte Brute Force Algoritmiek 2019/Toestand-actie-ruimte Vierde college algoritmiek 1 maart 2019 Toestand-actie-ruimte Brute Force 1 Algoritmiek 2019/Toestand-actie-ruimte Torens van Hanoi Voorbeeld 3: Torens van Hanoi

Nadere informatie

sheets Programmeren 1 Java college 6, Walter Kosters De sheets zijn gebaseerd op met name hoofdstuk 13 en 14 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Practicumopgave 3: SAT-solver

Practicumopgave 3: SAT-solver Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel

Nadere informatie

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :... OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

Nadere informatie

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren Achtste college algoritmiek 12 april 2019 Verdeel en Heers Dynamisch Programmeren 1 Uit college 7: Partitie Partitie Partitie(A[l r]) :: // partitioneert een (sub)array, met A[l] als spil (pivot) p :=

Nadere informatie

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2011-2012 Zaterdag 5 november 2011, 9u30 NAAM :... VRAAG 1: EVEN VEEL [5 PUNTEN] Schrijf een methode evenveel(), met twee argumenten,

Nadere informatie

Vijfde college algoritmiek. 2/3 maart Exhaustive search

Vijfde college algoritmiek. 2/3 maart Exhaustive search Vijfde college algoritmiek 2/3 maart 2017 Exhaustive search 1 Voor- en nadelen Brute force: Voordelen: - algemeen toepasbaar - eenvoudig - levert voor een aantal belangrijke problemen (zoeken, patroonherkenning)

Nadere informatie

Oefeningen Java Oplossingen

Oefeningen Java Oplossingen Oefeningen Java en Opgave 1 Is de uitvoer van het volgende code-fragment (a), (b) of (c)? System.out.print("A"); System.out.println("B"); System.out.print("C\n"); System.out.print("D" + "E"); System.out.print("F");

Nadere informatie

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari mei 2014 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic

Nadere informatie

Algoritmiek. 15 februari Grafen en bomen

Algoritmiek. 15 februari Grafen en bomen Algoritmiek 15 februari 2019 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices) en E een verzameling van

Nadere informatie

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, uur Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 2 juni 2009, 10.00 13.00 uur Opgave 1. a. Een toestand wordt bepaald door: het aantal lucifers op tafel, het aantal lucifers in het bezit van Romeo,

Nadere informatie

Datum. Vraag het bedrag in BEF. Reken om naar EURO. Toon het bedrag in EURO. --- Vraag het bedrag in BEF--- --- Reken om naar EURO---

Datum. Vraag het bedrag in BEF. Reken om naar EURO. Toon het bedrag in EURO. --- Vraag het bedrag in BEF--- --- Reken om naar EURO--- 3UREOHPHQRSORVVHQPHW9%$WRHSDVVLQJHQELMGHHO Naam. NR : Klas. PC : Datum. 23*$9( Hieronder vind je het algoritme om een bedrag in BEF om te rekenen naar EURO. Zet het algoritme om in programmacode. Noem

Nadere informatie