Dynamisch Programmeren. Het Rugzakprobleem
|
|
- Brecht Verstraeten
- 6 jaren geleden
- Aantal bezoeken:
Transcriptie
1 INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding Oplossing Subprobleem Datastruktuur Uitvoer Testdata Rekenvoorbeeld Programma Index Het Rugzakprobleem Piter Dykstra 12 januari Inleiding. Het probleem is als volgt. Een inbreker breekt in bij mensen die je rustig tot de categorie der zinloos rijken kunt rekenen. In de juwelenkamer vindt onze kleine zelfstandige een aantal items van verschillende omvang en verschillende waarde. Nu is de rugzak van onze handwerker beperkt van omvang, zodat het er op aan komt om alleen de meest waardevolle zaken (per volume) mee te nemen. De vraag is nu: Hoe kan de zakenman het best te werk gaan? Naïef beredeneerd zal bijna iedereen als volgt te werk gaan: 1. Je neemt de dingen met de hoogste prijs-per-volume-verhouding. Net zolang tot die er niet meer zijn, of totdat er geen plaats meer is in de rugzak. 2. Als er nog plek over is in de rugzak neem je daarna van het item dat dan de meest optimale prijs-volume-verhouding heeft zoveel als mogelijk. 3. En daarmee ga je door totdat je alle items hebt geprobeerd.
2 2 Dynamisch Programmeren OPLOSSING 1 Dit werkt in de praktijk uitstekend, zo wijst de ervaring uit. Maar de methode is niet helemaal waterdicht. En omdat het om echt groot geld gaat, is het wel de moeite om daar even god naar te kijken. Het is mogelijk dat door van een groot en duur ding er één te veel te nemen, er een redelijk grote ruimte in de rugzak overbijft, die niet meer optimaal gevuld kan worden. Door nou iets minder gretig te zijn op de allerduurste dingen, kan het zijn dat de rest efficiënter kan worden gevuld, zodat uiteindelijk toch meer waarde in de zak verdwijnt. Ver gezocht? Jazeker! Maar het aardige is dat de waterdichte oplossing een door zijn eenvoud schitterend voorbeeld van dynamisch programmeren geeft, waardoor het een stuk eenvoudiger wordt om alignment en clustering te begrijpen. 2. Oplossing. Om niet de gouden oplossing mis te lopen passen we dynamisch programmeren toe. Daarvoor zijn in het probleem 3 componenten nodig: 1. Een eenvoudig subprobleem, waarin een deel van het probleem wordt opgelost. Er moet uit een aantal item s worden gekozen totdat er niet meer in de zak past. Een lege zak is snel gevuld en geen items is ook snel opgelost. Hoe meer items des te moeilijker; hoe groter de zak, eveneens, des te moeilijker. Een subprobleem kan dus zijn: probleem(i, j ), waarin i het aantal items is, j de grootte van de zak en probleem is de oplossing van het hele rugzakprobleem voor i items en j-grootte; d.w.z. de manier om een rugzak ter grootte van j met i mogelijke items te vullen, zodat de waarde van die items samen maximaal is. We beginnen zonder items (i = 0) en met een zak waar niks in kan (j = 0). En van hieruit breiden we als een olievlek het aantal opgeloste subproblemen uit. De resterende twee componenten zijn eigenlijk eigenschappen waaraan het subprobleem moet voldoen. 2. Subprobleem-overlap. Bij de oplossing van een subprobleem moet er gebruik worden gemaakt van oplossingen van andere (kleinere) subproblemen. Dat heet de subprobleem overlap. We hebben twee mogelijkheden: als we probleem(i, j ) willen oplossen, kunnen we gebruik maken van probleem(i - x, j ) of probleem(i, j - y ). De vraag is nu of we uitgaande van de optimale deeloplossingen wel een optimale oplossing voor probleem(i, j ) kunnen krijgen?
3 2 SUBPROBLEEM Dynamisch Programmeren 3 We zullen in 3 zien dat dat inderdaad zo is. 3. Subprobleem-optimalisatie Wanneer we steeds meer subproblemen hebben opgelost, door i en j steeds op te hogen, komen we vanzelf terecht in een situatie waarin probleem(aantalitems, maxgrootte ) is opgelost. De vraag is dan of ook het hele probleem is opgelost? Dat is triviaal in ons geval omdat het subprobleem op twee parameters na gelijk is aan het hoofdprobleem, maar dat is in het algemeen niet zo; een subprobleem kan dan ook net iets anders geformuleerd zijn. 3. Subprobleem. Stel we willen probleem(i, j ) oplossen en we hebben optimale oplossingen voor probleem(i, j ) met i < i. Welke van die oplossingen kunnen we gebruiken om een optimale oplossing voor probleem(i, j ) te krijgen? Eigenlijk is de enige keus die we hebben: We gebruiken item i it wel (*), of niet (**). In dat laatste geval is: probleem(i, j ) = probleem(i - 1, j ).(**) Maar als het wel verstandig is om item i te gebruiken (*), dan is de meest optimale oplossing gelijk aan de meest optimale oplossing voor een rugzak die de grootte van item i kleiner is dan wat we nu hebben (!) plus de waarde van item i. Dus: probleem(i, j ) = probleem(i - 1, j - grootte(item(i)) ) + waarde(item(i)) (*) Ons subprobleem heeft dus de subprobleem-overlap-eigenschap! We hebben alleen een alternatief wanneer er een deelprobleem-oplossing bestaat, d.w.z. : j - grootte(item(i)) 0 Maar wanneer is (*) de aangewezen keus boven (**)? Wel, wanneer (*) meer oplevert dan (**), d.w.z. : probleem(i - 1, j - grootte(item(i)) ) + waarde(item(i)) > probleem(i - 1, j ) In ons geval zou dat als volgt kunnen: Stel we willen probleem(i, j ) oplossen en we hebben al optimale oplossingen voor probleem(i - 1, j ). Dan beschouwen we item i en we gaan na of de oplossing voor probleem(i,
4 4 Dynamisch Programmeren UITVOER 3 j - grootte(item(i)) ) plus de waarde(item(i)) meer is dan probleem(i - 1, j ). Zo ja, dan nemen we die nieuwe waarde, anders houden we gewoon probleem(i - 1, j ) als oplossing voor probleem(i, j ). De rest is implementatie. 4. Datastruktuur. We hebben in dit probleem niet te maken met een tweedimensionaal array, zoals bij paarsgewijze alignment, omdat we niet geïnteresseerd zijn in oplossingen met minder dan i items, wanneer we ze al voor i items hebben uitgerekend. Daarom houden we een ééndimensionaal array van oplossingen bij. Of eigenlijk twee arrays, want we gebruiken van de oplossing van een subprobleem twee zaken: 1. De waarde (ofwel rugzakwaarde ); de hoogste waarde van de items, die totnutoe in de rugzak van grootte i is verzameld. 2. Het item dat als laatste is toegevoegd aan de rugzak van grootte i. Meer is niet nodig! Of in Java: define Volume int define leeg 1 define Item int define Waarde int define maxvolume 23 De data 4 static Waarde [ ] rugzakwaarde new Waarde[maxVolume]; static Item [ ] rugzakitem new Item [maxvolume ]; See also section Uitvoer. Wanneer we voor de rugzakken van elke grootte weten wat er als laatste aan toe is gevoegd om een optimale inhoud te krijgen, dan kunnen we door gebruik te maken van de subprobleem overlap-eigenschap, bij de oplossing voor rugzak van grootte i volume(laatsteitem ), zien wat het voorlaatste item moet zijn geweest. Dat is namelijk van die rugzak het laatste item. Als we van rugzak met volume maxvolume 1 = 22 (meest rechtse in figuur 1) willen weten wat er allemaal in zit, dan zien we in rugzakitem [22] dat het item 5 als laatste is toegevoegd. Item 5 is 6 eenheden groot. Rugzak
5 5 UITVOER Dynamisch Programmeren Fig 1. Het bepalen van de inhoud van de grootste rugzak (meest rechtse) aan de hand van de subproblemen. 22 is optimaal gevuld, omdat gebruik is gemaakt van de optimaal gevulde rugzak 22-6, dus rugzak 16 plus het waardevolste item in deze situatie. Bij rugzak 16 zien we dat item 5 daar ook als laatste is toegevoegd. En de optimale oplossing die daarvoor is gebruikt, was rugzak 16-6 = 10. Voor rugzak 10 was item 4 de beste keus in combinatie met de oplossing van rugzak 10-5 = 5. En rugzak 5 kan op zijn best één item 4 bevatten. De beste oplossing voor rugzak 22 is de lijst met items: 5, 5, 4, 4 met een totale waarde van = 46! define writeln System.out.println Geef uitvoer. 5 static void printoplossing () { Item huidigeitem ; Neem de grootste zak. 6 while (rugzakitem [huidigezak ] leeg ) {... Tot we de bodem zien doen we het volgende: We nemen het item dat het laatst is toegevoegd. 7 En drukken het af. 8 En ga verder met volgende deeloplossing Neem de grootste zak. 6 Volume huidigezak maxvolume 1; This code is used in section We nemen het item dat het laatst is toegevoegd. 7 huidigeitem rugzakitem [huidigezak ]; This code is used in section 5.
6 6 Dynamisch Programmeren REKENVOORBEELD 8 8. En drukken het af. 8 writeln ("De rugzak bevat een item: " + huidigeitem + " met waarde: " + waarde [huidigeitem ]); This code is used in section En ga verder met volgende deeloplossing. 9 huidigezak huidigezak volume[huidigeitem ]; This code is used in section Testdata. Van de items moeten natuurlijk een paar eigenschappen worden bijgehouden: de Waarde en het Volume. Vergeef me de non-objectgeoriënteerde aanpak. Het volgende tabelletje, waarmee we het principe programmeren, wordt uitgevoerd als twee integer-arrays: Item Waarde Volume De data 4 + static Waarde [ ] waarde { 3, 4, 7, 8, 10, 13 ; static Volume [ ] volume { 2, 3, 4, 6, 5, 6 ; 11. Rekenvoorbeeld. Allereerst lossen we het eenvoudigste geval op: geen items te stelen. We initialiseren de arrays rugzakwaarde en rugzakitem : Voor als er helemaal geen items zijn 11 for (int i 0; i < rugzakwaarde.length ; i++) rugzakwaarde [i] 0; for (int i 0; i < rugzakitem.length ; i++) rugzakitem [i] leeg ;
7 12 REKENVOORBEELD Dynamisch Programmeren De arrays zien er dan zo uit: Grootte Item - Waarde Aan deze lege set van items voegen we steeds ééntje toe en gaan voor alle rugzakken na wat de dan de beste samenstelling wordt: Voor alle items i doe: 12 for (int i 0; i < waarde.length ; i++) 13. en rugzakken... Voor alle rugzakken j doe: 13 for (int j 0; j < maxvolume; j++) 14. Beginnend bij item 0 kijken we voor elke rugzak of we het resultaat kunnen verbeteren. Item 0 is 2 eenheden groot; dus bij elke even rugzak kan er weer een item bij. Nadat twee items 0 zijn toegevoegd, ziet de score er zo uit: Grootte Item Waarde Nadat alle rugzakken maximaal met alleen items 0 zijn gevuld: Grootte Item Waarde Daarna gaan we verder met item 1. Dat is 3 eenheden groot en kan dus pas voor het eerst in rugzak 3. En het levert ook een prestatieverbetering van 1 op! Item 1 heeft een lagere waarde/volume-verhouding dan item 0. Toch is er in de rugzakken met een oneven volume plaats voor zo n item, omdat de totale waarde van de rugzak net een puntje hoger uitkomt.
8 8 Dynamisch Programmeren REKENVOORBEELD 14 Een item 0 gaat er dus uit daarvoor in de plaats komt een item 1 en de zak (van het subprobleem) is helemaal gevuld. Grootte Item Waarde Als we aan rugzak 4 een item 1 (met waarde 4 en volume 3) willen toevoegen, moeten we bij rugzak 1 kijken, hoe die verder optimaal gevuld kan worden. Rugzak 1 is leeg; de score is dus 4 en dat is lager dan we hadden (6). Niks doen dus Bij rugzak 5 hebben we wel succes. Toevoegen van item 1 brengt ons bij rugzak 2 met score 3 en 3+5 = 7 is 1 meer dan we hadden. In rugzak 5 voegen we dus item 1 toe. De stand ziet er dan zo uit: Grootte Item Waarde Wat we in elke stap doen is het oplossen van een subprobleem en in code ziet dat er zo uit: probleem(i, j). 15 Bepaal zoekindex subprobleem 16 if (zoekindex 0) { Bepaal zoekwaarde van dat subprobleem 17 if (rugzakwaarde [j] < zoekwaarde ) { Neem item j Het subprobleem voor item i heeft deze index: Bepaal zoekindex subprobleem 16 int zoekindex j volume[i]; This code is used in section De waarde van alternatief (**) wordt:
9 17 REKENVOORBEELD Dynamisch Programmeren 9 Bepaal zoekwaarde van dat subprobleem 17 int zoekwaarde rugzakwaarde [j volume [i]] + waarde [i]; This code is used in section Werk de resultaten bij: Neem item j 18 rugzakwaarde [j] zoekwaarde ; rugzakitem [j] i; This code is used in section Nog twee tabellen waarin per array per item de stand nog eens is weergegeven.. rugzakitem voor i=0 tot maxvolume - 1: rugzakwaarde voor i=0 tot maxvolume - 1:
10 10 Dynamisch Programmeren PROGRAMMA Programma. (Rugzak.java 20) public class Rugzak { De data 4 public static void main (String [ ] args ) { Voor als er helemaal geen items zijn 11 Voor alle items i doe: 12 { Voor alle rugzakken j doe: 13 { probleem(i, j). 15 printoplossing (); Geef uitvoer En wanneer we dit allemaal hebben uitgevoerd is de volgende tekst op het scherm onze beloning: piter@gandalf: /javablast/rugzak> make run javatangle Rugzak.w Output file(s): (Rugzak.java) javac *.java java Rugzak De rugzak bevat een item: 5 met waarde: 13 De rugzak bevat een item: 5 met waarde: 13 De rugzak bevat een item: 4 met waarde: 10 De rugzak bevat een item: 4 met waarde: 10 piter@gandalf: /javablast/rugzak>
11 22 NAMES OF THE SECTIONS Dynamisch Programmeren Index. args 20. dynamisch 1. huidigeitem 5, 7, 8, 9. huidigezak 5, 6, 7, 9. Item [4], 5. item 2, 4. laatsteitem 5. leeg [4], 5, 11. length 11, 12. main 20. maxvolume [4], 5, 6, 13. omvang 1. out 5. overlap 2, 5. println 5. printoplossing 5, 20. programmeren 1. Rugzak 20. rugzakitem 4, 5, 7, 11, 18. rugzakwaarde 4, 11, 15, 17, 18. String 20. subprobleem 2, 5. System 5. Volume [4], 6, 10. volume 5, 9, 10, 16, 17. Waarde [4], 10. waarde 1, 4, 8, 10, 12, 17. writeln [5], 8. zoekindex 15, 16. zoekwaarde 15, 17, 18. Names of the Sections. (Rugzak.java 20) Bepaal zoekindex subprobleem 16 Used in section 15. Bepaal zoekwaarde van dat subprobleem 17 Used in section 15. De data 4, 10 Used in section 20. En drukken het af. 8 Used in section 5. En ga verder met volgende deeloplossing. 9 Used in section 5. Geef uitvoer. 5 Used in section 20. Neem de grootste zak. 6 Used in section 5. Neem item j 18 Used in section 15. Voor alle items i doe: 12 Used in section 20. Voor alle rugzakken j doe: 13 Used in section 20. Voor als er helemaal geen items zijn 11 Used in section 20. We nemen het item dat het laatst is toegevoegd. 7 Used in section 5. probleem(i, j). 15 Used in section 20.
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 informatieModelleren 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 informatieModelleren 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 informatieVoorbeeldtentamen 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 informatieProgrammeermethoden. 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 informatieIMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
Nadere informatiehttp://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 informatieTentamen 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 informatieTentamen 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 informatieSPOJ 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 informatieModelleren 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 informatieProgrammeermethoden. 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 informatieDergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.
Indexers in C#.Net In deze tutorial ga ik het hebben over indexers. Bij het gebruik van bijvoorbeeld een ArrayList object, kan je de gegevens uit deze collectie opvragen als ware het een array. // ArrayList
Nadere informatieDatatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
Nadere informatieOefeningen 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 informatieProgrammeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/
Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun
Nadere informatieModelleren 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 informatieVeel succes! 1. Gegeven is de volgende klasse:
Dit tentamen is in elektronische vorm beschikbaar gemaakt door de TBC van A Eskwadraat. A Eskwadraat kan niet aansprakelijk worden gesteld voor de gevolgen van eventuele fouten in dit tentamen. Derde deeltentamen
Nadere informatieDe 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 informatieDIAGNOSTISCHE TOETS Softwaresystemen UITWERKING
DIAGNOSTISCHE TOETS Softwaresystemen datum: Donderdag van Week 7 UITWERKING Deze diagnostische toets bevat vragen over excepties en concurrency. Beantwoord de vragen zo goed mogelijk in 30 minuten Bespreek
Nadere informatieTentamen 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 informatiesheets 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 informatieDatastructuren Werkcollege Intro
Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs
Nadere informatieProgrammeren (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 informatieProgrammeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
Nadere informatieeerste voorbeelden in Java
Beginselen van programmeren 2 eerste voorbeelden in Java vereisten: een editor: om programma in te tikken en te bewaren een Java compiler: zet ingetikte (bron-) programma om naar byte-code een Java Virtuele
Nadere informatieVakgroep 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 informatieTentamen 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 informatieEen gelinkte lijst in C#
Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk
Nadere informatieInhoud. Eindtoets. Introductie 2. Opgaven 3. Bijlage bij opgaven 9. Terugkoppeling 12
Open Universiteit Inhoud Introductie 2 Opgaven 3 Bijlage bij opgaven 9 Terugkoppeling 12 1 Open Universiteit Objectgeoriënteerd programmeren in Java 1 I N T R O D U C T I E Deze eindtoets is bedoeld als
Nadere informatieAPPLICATIEBOUW 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 informatieNAAM: Programmeren 1 Examen 29/08/2012
Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je
Nadere informatieIngebouwde 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 informatieLineaire data structuren. Doorlopen van een lijst
Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 november 2013 Organisatie Docenten Jeroen Bransen Michael Moortgat Docenten Jeroen Bransen Imperatief programmeren (Java) Tot de kerst (ongeveer) Michael Moortgat
Nadere informatieUitwerking 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 informatieProgrammeren 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 informatieVereiste kennis. 1 Java-editor. 2 Het compileren van een programma
3 Vereiste kennis Dit boek richt zich op het leren programmeren door het oefenen met programmeercodes. Veel theorie komt in het begin niet aan de orde. Dat is een grote uitdaging want het is niet makkelijk
Nadere informatieUitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur
Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een
Nadere informatieVoortgezet 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 informatieOpdracht 7a. Applicatiebouw 2014/2015
Applicatiebouw 2014/2015 Opdracht 7a Inhoud Applicatiebouw op dag 7 College In het college wordt oa. overerving behandeld, waarmee je uit een bestaande klasse een nieuwe andere klasse kan maken. Ook zijn
Nadere informatieHoofdstuk 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 informatieNegende 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 informatieEen 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 informatiepublic Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);
Vaknaam: Programmeren I (Java) - Tentamen Module: 2 Datum/Tijd: 17 mrt 2015 / 18.30 20:30 Richting: ICT Code: IC011 Docent: E. Lieuw Boeken en aantekeningen NIET toegestaan. Kladpapier is wel toegestaan.
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 18 december 2015 Overerving (inheritance) Constructors Overriding Inheritance demo Exceptions Zelf exceptions veroorzaken Overerving (inheritance) 2-dimensionaal
Nadere informatieInformatica: 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 informatieProgrammeren 1 23 januari 2013 Prof. T. Schrijvers
Programmeren 1 23 januari 2013 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet
Nadere informatieTentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale
Nadere informatieModelleren 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 informatieOvererving & Polymorfisme
Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit
Nadere informatieInformatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2015. Parallel Systems: Introduction
Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari mei 2015 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic
Nadere informatierecursie 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 informatieAndroid apps met App Inventor 2 antwoorden
2014 Android apps met App Inventor 2 antwoorden F. Vonk versie 1 11-11-2014 inhoudsopgave Mollen Meppen... - 2 - Schrandere Scholier... - 15 - Meteoor... - 21 - Dit werk is gelicenseerd onder een Creative
Nadere informatieGame of Life in Java
Game of Life in Java Auteur: drs. M.S.L.F. Manssen http://www.manssen.eu Game of Life is een spel van een rooster van cellen, waarbij telkens een ronde gebeurt waarbij de nieuwe waardes van cellen gebeurt.
Nadere informatieRobocode. Inleiding tot programmeren
Robocode Inleiding tot programmeren Inhoud Doel cursus Java-controlestructuren Robotje programmeren Doel cursus Inleiding Java Robocode Java Object-gerichte programmeertaal Sun 1991 http://java.sun.com
Nadere informatieDerde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
Nadere informatieTentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.
Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Gesloten boek examen: er mag geen gebruik worden gemaakt van het studieboek.
Nadere informatieEerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur
Naam: Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal
Nadere informatieIn BlueJ. Doe onderstaande met muis/menu s:
In BlueJ Doe onderstaande met muis/menu s: Download en unzip het bestand sklok-run.zip en open het in BlueJ Maak een Schaakklok-object Voer herstart() uit voor dit object Vraag de resterende tijd op voor
Nadere informatieTentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld
Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek
Nadere informatieTentamen 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 informatiePascal uitgediept Data structuren
Pascal uitgediept Data structuren MSX Computer & Club Magazine nummer 68-juni/juli 1994 Herman Post Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering wordt bekeken hoe zelf een datastructuur
Nadere informatieVoorbeeld: Simulatie van bewegende deeltjes
Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten Simulatie Samenhang van objecten sim geërfd van Form stap zelf gedeclareerd auto r1
Nadere informatieProgrammeren 1 20 januari 2012 Prof. T. Schrijvers
Programmeren 1 20 januari 2012 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet
Nadere informatieModulewijzer Tirdat01
Modulewijzer Tirdat01 W. Oele 25 augustus 2008 1 Inhoudsopgave 1 Inleiding en leerdoelen 3 2 Voorkennis 3 2.1 tirprg01 en tirprg02........................ 3 2.2 tirprg03.............................. 4
Nadere informatieRecursion. 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 informatieBEGINNER JAVA Inhoudsopgave
Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire
Nadere informatieInformatica. 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 informatieInleiding programmeren
Inleiding programmeren Docent: José Lagerberg Assistenten: Robin de Vries, Jordy Perlee, Dimitri Belfor, Stephen Swatman, Erik Kooistra, Daan Kruis, Daniel Louwrink Cursusinformatie: https://staff.fnwi.uva.nl/j.m.lagerberg
Nadere informatieTijd 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 informatieAchtste 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 informatieObjectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.
Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze
Nadere informatieProgrammeren in Java. De Java-GUI
DE JAVA-GUI Programmeren in Java 1 Programmeren in Java Section Page Inleiding................................................. 1 1 De Java-GUI............................................. 2 1 Swing-componenten......................................
Nadere informatieScala. Korte introductie. Sylvia Stuurman
Korte introductie Sylvia Stuurman Wat is er zo bijzonder aan? Schaalbaar Objectgeoriënteerd (handiger dan Java!) Functioneel Scripts schrijven Gecompileerd: Java bytecode Pagina 2 voor scripts Pagina 3
Nadere informatieAquo Domeintabellen Services (Aquo DS) Handleiding Webservice
Aquo Domeintabellen Services (Aquo DS) Handleiding Webservice handleiding voor de programmeur Auteur: Informatiehuis Water Documentbeheer Wijzigingshistorie Datum Versie Auteur Wijziging Aat van den Heuvel
Nadere informatieTree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011
15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree
Nadere informatieINFITT01 - Internettechnologie WEEK 8
INFITT01 - Internettechnologie WEEK 8 Programma Databases (JDBC, JNDI, ORM, JPA) MVC & Spring/Struts EJB Databases Veel web applicaties moeten informatie over langere tijd op kunnen slaan. Een voor de
Nadere informatieProgrammeren in Java 3
2 september 2007 voor deeltijdstudenten Kop van Zuid Rotterdam, 3 juni 2007 Even voorstellen Naam: Wessel Oele(31) Docent bij opleiding technische informatica Kamer: I210 (tweede verdieping, links de gang
Nadere informatieVeel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.
Eerste deeltentamen Gameprogrammeren Vrijdag 26 september 2014, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten
Nadere informatieTiende college algoritmiek. 26 april Gretige algoritmen
Algoritmiek 01/10 College 10 Tiende college algoritmiek april 01 Gretige algoritmen 1 Algoritmiek 01/10 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag
Nadere informatieElfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort
Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D
Nadere informatieOnline c++ leren programmeren:
Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma
Nadere informatieRecursie. 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 informatieAccelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368
Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject
Nadere informatieProject network. Gebaseerd op paragrafen , uit het boek. We simuleren een sociaal netwerk
Project network Gebaseerd op paragrafen 10.1-10.7, 11.1-11.6 uit het boek. We simuleren een sociaal netwerk Er zijn twee soorten berichten: tekstberichten en fotoberichten,... voorgesteld door de klassen
Nadere informatieTentamen Formele Methoden voor Software Engineering (213520)
Tentamen Formele Methoden voor Software Engineering (213520) 15 april 2010, 8:45 12:15 uur. BELANGRIJK: geef op je tentamen duidelijk aan: je studierichting of je beide huiswerkopgaven gemaakt hebt, en
Nadere informatieJavascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Nadere informatieTentamen 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 informatieModelleren en Programmeren voor KI
Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver Tomas Klos Het SAT probleem Parvulae Logicales: Propositielogica, Hoofdstuk 6 (Semantiek), p. 62: Het SAT probleem Ik geef je een propositielogische
Nadere informatieAanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur
Dit tentamen is in elektronische vorm beschikbaar gemaakt door de TBC van A Eskwadraat. A Eskwadraat kan niet aansprakelijk worden gesteld voor de gevolgen van eventuele fouten in dit tentamen. Aanvullende
Nadere informatieExamen Programmeren I 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011
Examen Programmeren I 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2010-2011 juni 2011 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.
Nadere informatieStacks and queues. Hoofdstuk 6
Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked
Nadere informatieZelftest Programmeren in Java
Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test
Nadere informatieDesign principes.
Design principes joost.vennekens@kuleuven.be Doelstelling Code die werkt doet wat klant wil betrouwbaar is gemakkelijk te veranderen is En dit ook blijft doen Software rot Rottende software geeft geurtjes
Nadere informatieOntwerp van Informatiesystemen
1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents
Nadere informatieES1 Project 1: Microcontrollers
ES1 Project 1: Microcontrollers Les 1: Installeren en verifiëren van de SDE Door Hugo Arends, augustus 2012 Microcontrollers Een microcontroller is een elektronische component dat gebruikt wordt om (complexe)
Nadere informatieVeel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.
Tweede deeltentamen Gameprogrammeren Vrijdag 18 oktober 2013, 11.00-13.00 uur Naam: Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 6 punten op, en opgave
Nadere informatieNetBeans tutorial, Rik Eshuis, Kees Huizing versie 2.2 Augustus 2009
NetBeans tutorial, Rik Eshuis, Kees Huizing versie 2.2 Augustus 2009 NetBeans is een IDE voor (o.a.) Java, een programma waarmee je Javaprogramma's kunt schrijven en uitvoeren. Deze tutorial bevat informatie
Nadere informatieTwaalfde college complexiteit. 11 mei 2012. Overzicht, MST
College 12 Twaalfde college complexiteit 11 mei 2012 Overzicht, MST 1 Agenda voor vandaag Minimum Opspannende Boom (minimum spanning tree) als voorbeeld van greedy algoritmen Overzicht: wat voor technieken
Nadere informatie