Dynamisch Programmeren. Het Rugzakprobleem
|
|
|
- Brecht Verstraeten
- 8 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
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
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
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
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,
IMP 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
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/
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.
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
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
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
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,
Datatypes 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
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");
Programmeermethoden. 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
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));
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
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/
Datastructuren 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
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
Programmeren 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)!
eerste 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
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 [email protected] en [email protected]
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
Een 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
Inhoud. 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
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,
NAAM: 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
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
Lineaire 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
Modelleren 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
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
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
Vereiste 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
Uitwerkingen 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
Opdracht 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
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
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
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
public 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.
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 18 december 2015 Overerving (inheritance) Constructors Overriding Inheritance demo Exceptions Zelf exceptions veroorzaken Overerving (inheritance) 2-dimensionaal
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
Programmeren 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
Tentamen 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
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)
Overerving & 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
Informatica. 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
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
Android 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
Game 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.
Robocode. 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
Derde 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
Tentamen 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.
In 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
Tentamen 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
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
Pascal 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
Voorbeeld: 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
Modulewijzer 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
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
BEGINNER 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
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
Inleiding 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
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
Objectgeorï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
Programmeren 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......................................
Scala. 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
Aquo 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
Tree 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
INFITT01 - 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
Programmeren 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
Tiende 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
Online 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
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!
Accelerometer 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
Javascript 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
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
Modelleren 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
Stacks 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
Zelftest 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
Ontwerp 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
ES1 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)
NetBeans 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
