Practicumopgave 3: SAT-solver
|
|
- Roel van der Zee
- 6 jaren geleden
- Aantal bezoeken:
Transcriptie
1 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 problemen en vraagstukken kunnen als formule in propositielogica worden uitgedrukt, waardoor het beantwoorden van het vraagstuk is gereduceerd tot de vraag of de formule vervulbaar is (en zo ja, onder welke valuatie). Een voorbeeld daarvan is het oplossen van een sudoku. In deze opgave gaan jullie formules uit de propositielogica representeren en een SAT-solver schrijven die bovenstaande vraag oplost. De invoer van een SAT-solver is dus een formule, en de uitvoer is het antwoord op de vraag of de formule vervulbaar is, en indien ja een valuatie die de formule waar maakt. Als er meerdere valuaties zijn die de formule waar maken, bijvoorbeeld omdat de formule een tautologie is, mag een SAT-solver een willekeurige valuatie geven. Uiteindelijk zullen jullie deze gebruiken om een sudoku op te lossen met jullie eigen SAT-solver! We gaan in deze opgave kijken naar formules met 3 connectieven: negatie (niet), conjunctie (en) en disjunctie (of). Omdat de standaard tekenset waar we mee werken de gebruikelijke symbolen niet bevat, gebruiken we - (minteken) voor negatie, /\ (slash en backslash) voor conjuctie en \/ (backslash en slash) voor disjunctie. Ook schrijven we rond elke formule met een disjunctie of conjuctie haakjes. Een voorbeeld van zo n formule is: (p /\ (-p \/ -q)) In woorden zouden we dit uitspreken als p en (korte stilte) niet p of niet q. Deze formule is waar onder de valuatie waarbij p waar is en q onwaar is. Startpakket Om te beginnen krijg je een deel van de code erbij, dit bestaat uit de volgende bestanden. Parser.java: Helper klasse om vanuit een String of bestand een formuleobject te maken. De code is nog net niet helemaal af en zal in opdracht 2 compleet gemaakt moeten worden zodat deze werkt. 1
2 Valuatie.java: Klasse om een valuatie als object te representeren. De implementatie hoef je verder niet te begrijpen, maar het is wel belangrijk om goed te kijken welke methoden deze klasse heeft en waar die voor gebruikt kunnen worden. Sudoku.java: Code om de formules te genereren voor onze SAT-solver vanuit sudoku s, aangepast naar het formaat dat wij gebruiken, zodat we deze kunnen gebruiken als invoer. LegeSudoku.txt: Formule voor de lege sudoku. MakkelijkeSudoku.txt: Formule voor een vrij makkelijke sudoku, die aan het einde van de opdracht door je code opgelost zou moeten kunnen worden. MoeilijkeSudoku.txt: Formule voor de een moeilijke sudoku die we met de standaard opdrachten uit deze opgave niet (snel) kunnen oplossen (maar misschien met de bonus wel). Opdrachten Lees eerst de gehele opgave goed door zodat je een overzicht hebt van wat er verwacht wordt. Maak daarna de volgende opdrachten en voeg een main toe om te testen of het allemaal nog werkt. Als je (tijdelijk) vastloopt zouden de opdrachten 2, 3 en 4 eventueel andere volgorde gemaakt kunnen worden omdat ze niet van elkaar afhangen 1. Representatie Als eerste zul je code moeten toevoegen om formules te representeren. Deze bestaat om te beginnen uit een interface Formule, waar je later methoden aan toe kunt voegen maar die je nu nog even leeg kunt laten. Voeg klassen toe om de verschillende formules als object te kunnen representeren en zorg dat deze de Formule interface implementeren. Denk goed na over de velden die elke klasse moet hebben; een conjuctie bestaat bijvoorbeeld uit twee andere formules. En wat is de meest simpele formule die je kunt bedenken? Ook daarvoor zul je een losse klasse moeten hebben. Zorg ook dat je klassen handige constructors hebben om nieuwe instanties aan te kunnen maken. Vul dan in de main de code in om een representatie van de voorbeeldformule te maken. Als je de constructors en klassenamen handig hebt gekozen zou dit niet zo moeilijk moeten zijn! Voeg ook een tostring-methode toe om je formule weer naar een String om te zetten, en zorg dat de uitvoer exact gelijk is aan het voorbeeld. 2. Parser Maak de Parser implementatie compleet door de vier methoden onderaan in te vullen. Als dit gedaan is hoef je niet meer handmatig de representatie voor elke formule te programmeren maar kun je deze automatisch door de Parser laten genereren. Dit is wel zo makkelijk, 2
3 zeker voor grotere formules. Je kunt deze testen door een van de gegeven tekst-bestanden te parsen en de verkregen formule naar het scherm te printen. Dit is een hele grote formule, maar als dit succesvol is dan is de code waarschijnlijk correct! 3. Variabelen verzamelen De aanpak die we nemen om uiteindelijk een valuatie te vinden, komt neer op het een voor een proberen van waardes voor de variabelen. Om dit voor elkaar te krijgen zullen we eerst van een gegeven formule moeten uitvinden welke variabelen er eigenlijk in zitten. Voeg een methode verzamel toe aan de Formule interface, die als argument een TreeSet<String> neemt. Deze methode heeft geen resultaat, maar voegt alle variabelen uit de formule toe aan de gegeven set. Omdat het argument een object is wordt call-by-reference gebruikt en heeft het toevoegen van een variabele aan die set dus gevolgen buiten de functie. Hierdoor zullen, als het goed is, na aanroep van deze methode alle variabelen die formule voorkomen aan de set zijn toegevoegd. Maar door het gebruik van TreeSet zit elk er precies één keer, wat we graag willen. Voeg ook code toe aan de main om dit te testen. Je zult dan dus eerst een nieuwe TreeSet<String> moeten aanmaken, dan de verzamel-methode moeten aanroepen met de set als argument (voor een bepaalde formule), en dan de elementen in de set moeten printen. Je kunt dan zelf controleren of alle variabelen uit de formule inderdaad voorkomen. 4. Kan formule waar/onwaar zijn Een slimme truc die we toepassen om straks snel een valuatie te kunnen vinden die de formule waar maakt is om tussendoor een controle te doen waarmee we, in sommige gevallen, met zekerheid kunnen vaststellen dat we op een dood spoor zitten. In andere woorden, als we in een geval zitten waarin we nog niet voor alle variabelen een waarde hebben gekozen, kan het zijn dat we zeker weten dat we de formule nooit meer vervullen, en dus heeft het dan ook geen zin meer om nog waarden voor de rest van de variabelen te proberen; we zullen onze eerdere keuzes moeten herzien. Als voorbeeld, voor de formule uit de introductie weten we bijvoorbeeld zeker dat als we p als onwaar kiezen de formule nooit meer waar kan zijn, ongeacht de waarde van q. Dit weten we doordat een conjunctie alleen waar kan zijn als beide kanten waar zijn, en de linkerkant (de formule p) kan nooit meer waar zijn. Maar het is een benadering (om het simpel te houden): als deze methode waar teruggeeft betekent dat niet per se dat de formule vervulbaar is. Bijvoorbeeld als we voor de formule uit de introductie testen voor q is waar, dan kan zowel de linkerkant van de conjunctie waar zijn (wanneer p waar is) als de rechterkant (wanneer p onwaar is), dus we zeggen dat de formule nog waar kan zijn, terwijl voor geen van de opties voor p de formule waar is. Voeg twee methoden toe aan de Formule interface die controleert of een formule nog waar (respectievelijk onwaar) zou kunnen zijn, en implementeer deze voor alle klassen die Formule implementeren. Voor variabelen 3
4 hangt deze waarde dus af van de valuatie; als de variabele in de valuatie voorkomt weten we zeker of de formule waar (onwaar) kan zijn, en zo niet kunnen beide opties nog. Voor elk van de drie connectieven hangt deze waarde af van het resultaat van deze methoden van de formule(s) waaruit deze is opgebouwd. 5. SAT-solver Deze opdracht, die de kern is van de hele opgave, gaat erom om met behulp van de eerdere opdrachten een valuatie te vinden die de gegeven formule waar maakt, oftewel de SAT-solving. Het idee is dat we met behulp van recursie alle mogelijkheden afgaan: we proberen voor elke variabele true en false en gaan zo alle mogelijkheden af. Er zijn alleen heel erg veel mogelijkheden: in een formule met n verschillende variabelen zijn er 2 n mogelijkheden. Dat is voor een formule met maar 10 verschillende variabelen al meer dan 1000 mogelijkheden! Om te zorgen dat onze code niet alle mogelijkheden hoeft te proberen gebruiken we de slimme truc uit opdracht 4. Elke keer als we een waarde voor een variabele kiezen controleren we of de formule in principe nog vervuld zou kunnen worden. Zo niet, dan weten we dat de keuzes die we tot nu toe gemaakt hebben in combinatie nooit een oplossing gaan opleveren, en dus hoeven we alle combinaties van waarden die we nog niet gekozen hebben niet meer te proberen. Dit kan een heel groot verschil maken! Het algoritme dat we gebruiken voor de SAT-solving wordt hieronder beschreven. We beginnen met eerst één keer alle variabelen te verzamelen, en daarna recursief voor elke variabele beide opties te proberen en door te gaan, net zo lang tot we voor elke variabele een keuze hebben gemaakt en de formule nog steeds vervulbaar kan zijn. Het mooie van de code uit opdracht 4 is dat in het geval dat de valuatie wel alle variabelen bevat, dat de methode voor die valuatie de waarheidswaarde oplevert. In dat geval hebben we dus een oplossing gevonden. Programmeer dit als volgt, informeel beschreven in wat ook wel pseudocode wordt genoemd: vervulbaar(f): vars = alle variabelen uit f return vervulbaarrecursief(f, vars, lege valuatie) vervulbaarrecursief(f, vars, val): if(vars is leeg): // Dit is een oplossing return val var = kies variabele uit vars verwijder var uit vars // Probeer var = true 4
5 voeg var = true toe aan val if(f kan nog waar zijn voor val): resultaat = vervulbaarrecursief(f, vars, val) if(resultaat!= null): return resultaat verwijder var uit val // Probeer var = false voeg var = false toe aan val if(f kan nog waar zijn voor val): resultaat = vervulbaarrecursief(f, vars, val) if(resultaat!= null): return resultaat verwijder var uit val // Geen oplossing gevonden voeg var weer toe aan vars return null De methode vervulbaar geeft nu een valuatie terug als er een oplossing gevonden is, en anders null. Als dit gelukt is, probeer dan eerst of je code werkt voor de voorbeeldformule. Als dat werkt kun je door met de sudoku s: hoe snel je code is hangt sterk af van de volgorde waarop de variabelen gekozen worden. Als je de variabelen met een TreeSet verzameld hebt en je elke keer het eerste element kiest als volgende variabele, dan zullen de variabelen op alfabetische volgorde geprobeerd worden wat voor de lege sudoku erg efficient is. Deze zou dan ook binnen enkele seconde een resultaat moeten geven. Voor de makkelijke sudoku zal dit wat langer duren, maar met bovenstaande methode toch niet meer dan enkele minuten. Dat lijkt misschien wat traag, maar bedenk dat je dus een hele algemene SAT-solver hebt geschreven die nog veel meer kan oplossen, en die ook nog eens zo snel is dat hij sudoku s kan oplossen sneller dan dat jij dat met de hand kunt! Een behoorlijk goede prestatie. En bedenk ook dat er maarliefst 729 variabelen in de formule voor deze sudoku zitten, waardoor het aantal mogelijke valuaties voor deze formule een getal is dat uit 220 cijfers bestaat... Er is ook nog een moeilijke sudoku gegeven, maar die duurt waarschijnlijk veel (maar dan ook echt veel) langer met de code die je tot nu toe hebt. Als bonusopgave kun je proberen om je code zo te optimaliseren dat ook deze snel kan worden opgelost, maar het is de vraag of dat lukt. 5
6 Bonusopdrachten Voor de wat meer gevorderde studenten zijn er nog twee bonusopgaven te doen om het cijfer te verhogen. Zonder deze opdrachten te maken is het mogelijk om een 10 te halen, maar de bonusopdrachten kunnen gebruikt worden om kleine fouten in de overige opgaven te compenseren. Daarnaast is het een goede oefening om je Javakennis te vergroten. Sudoku-constructie De Sudoku klasse bouwt nu een String op die we later weer parsen, maar het zou natuurlijk beter zijn om direct een object aan te maken dat de formule representeert. Pas de code van de Sudokuklasse zo aan dat dit op die manier gedaan wordt. Slimmere zoekstrategie Zoals gezegd maar de volgorde van keuze van variabelen in de recursieve zoekstrategie heel erg veel uit. Veel onderzoek binnen de SAT-solving gaat dan ook over het slim kiezen van de volgende variabele. Een van de trucs is de volgende: in sommige gevallen zijn er variabelen die nog niet in je valuatie zitten die nog maar één mogelijke waarde kunnen hebben, en in dat geval is het altijd slim om die variabelen vast te leggen. Probeer dit te implementeren om je code in veel gevallen een stuk efficienter te maken. Maar andere slimme trucs die goed werken worden ook aangemoedigd! Als je een bonusopdracht maakt, meldt dit dan in het commentaar. Inleveren De opgave dient alleen of in tweetallen gemaakt te worden. Code van andere(n) (tweetallen) bekijken of overnemen of code delen met andere(n) (tweetallen) is uitdrukkelijk niet toegestaan. Het programma moet worden geschreven in Java en moet draaien op de practicummachines. De code moet worden ingeleverd via Submit, zie de practicumpagina 1 op de vakwebsite voor meer informatie. De code wordt beoordeeld op de volgnde criteria: leesbaarheid (maximaal 5 punten aftrek) correctheid (maximaal 10 punten aftrek) runbaarheid (niet runbaar, niet hoger dan een 5) stijl (bv redundantie) correctheid voor randgevallen motiveer steeds, in het commentaar, ontwerpbeslissingen die je neemt 1 6
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
Nadere informatieModelleren 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 informatieInleiding logica Inleveropgave 3
Inleiding logica Inleveropgave 3 Lientje Maas 30 september 2013 Ik (Rijk) heb verbeteringen in rood vermeld. Deze verbeteringen meegenomen zijn dit correcte uitwerkingen van de derde inleveropgaven. 1
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 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen
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 informatieMededelingen. TI1300: Redeneren en Logica. Metavariabelen Logica, p Minder connectieven nodig
Mededelingen TI1300: Redeneren en Logica College 5: Semantiek van de Propositielogica Tomas Klos Algoritmiek Groep Tip: Als ik je vraag de recursieve definitie van een functie over PROP op te schrijven,
Nadere informatieElke groep van 3 leerlingen heeft een 9 setje speelkaarten nodig: 2 t/m 10, bijvoorbeeld alle schoppen, of alle harten kaarten.
Versie 16 januari 2017 Sorteren unplugged Sorteren gebeurt heel veel. De namen van alle leerlingen in de klas staan vaak op alfabetische volgorde. De wedstrijden van een volleybal team staan op volgorde
Nadere informatieProgrammeeropdracht 2 Toernooi Algoritmiek, voorjaar 2019
Programmeeropdracht 2 Toernooi Algoritmiek, voorjaar 2019 Inleiding Al meer dan twintig jaar organiseert Karlijn aan het eind van het jaar een toernooi bij de volleybalclub, het zogenaamde oliebollentoernooi.
Nadere informatieDatastructuren: 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 informatieDisclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen
Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen dat er zowel typografische als inhoudelijke onvolkomenheden
Nadere informatieFunctioneel programmeren
Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein
Nadere informatieInleiding 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 informatiePropositielogica. Evert De Nolf Delphine Draelants Kirsten Storms Evelien Weyn. 24 augustus Universiteit Antwerpen
Propositielogica Evert De Nolf Delphine Draelants Kirsten Storms Evelien Weyn Universiteit Antwerpen 24 augustus 2006 Propositionele connectoren Negatie Conjunctie Disjunctie Implicatie Equivalentie Propositionele
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 informatieElfde college complexiteit. 23 april NP-volledigheid III
college 11 Elfde college complexiteit 23 april 2019 NP-volledigheid III 1 TSP Als voorbeeld bekijken we het Travelling Salesman/person Problem, ofwel het Handelsreizigersprobleem TSP. Hiervoor geldt: TSP
Nadere informatieProject Paper: Tiling problem
Project Paper: Tiling problem Groep 11: Said Hattachi, Ismael el Hadad Hakim, Muttalip Küçük Januari 015 Abstract Dit artikel beschrijft een heuristiek waarmee een veld op een systematische wijze gevuld
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 informatieTegenvoorbeeld. TI1300: Redeneren en Logica. De truc van Gauss. Carl Friedrich Gauss, 7 jaar oud (omstreeks 1785)
Tegenvoorbeeld TI1300: Redeneren en Logica College 3: Bewijstechnieken & Propositielogica Tomas Klos Definitie (Tegenvoorbeeld) Een situatie waarin alle premissen waar zijn, maar de conclusie niet Algoritmiek
Nadere informatiestart -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c
Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer
Nadere informatieMededelingen. TI1300: Redeneren en Logica. Waarheidstafels. Waarheidsfunctionele Connectieven
Mededelingen TI1300: Redeneren en Logica College 4: Waarheidstafels, Redeneringen, Syntaxis van PROP Tomas Klos Algoritmiek Groep Voor de Fibonacci getallen geldt f 0 = f 1 = 1 (niet 0) Practicum 1 Practicum
Nadere informatieProgrammeren 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 informatieInleiding 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 informatieStroomschema s maken op papier
1 Stroomschema s maken op papier Een programma direct maken in Python, gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk commando
Nadere informatieTI1300: Redeneren en Logica, Practicum 2 Deadline: 1 oktober 2010, 10:45 uur
TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica TI1300: Redeneren en Logica, Practicum 2 Deadline: 1 oktober 2010, 10:45 uur Introductie In deze practicumopgave komt de
Nadere informatieLogica voor Informatica
Logica voor Informatica 10 Predikatenlogica Wouter Swierstra University of Utrecht 1 Vorige keer Syntax van predikatenlogica Alfabet Termen Welgevormde formulas (wff) 2 Alfabet van de predikatenlogica
Nadere informatieZo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.
Spirograaf in Python Een kunstwerk maken Met programmeren kun je alles maken! Ook een kunstwerk! In deze les maken we zelf een kunstwerk met Python. Hiervoor zal je werken met herhalingen en variabelen.
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 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 informatieTentamen TI1300 en IN1305-A (Redeneren en) Logica
TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica Tentamen TI1300 en IN1305-A (Redeneren en) Logica 21 Januari 2011, 8.30 11.30 uur LEES DEZE OPMERKINGEN AANDACHTIG DOOR
Nadere informatieLogic for Computer Science
Logic for Computer Science 06 Normaalvormen en semantische tableaux Wouter Swierstra University of Utrecht 1 Vorige keer Oneindige verzamelingen 2 Vandaag Wanneer zijn twee formules hetzelfde? Zijn er
Nadere informatieVergelijkingen met breuken
Vergelijkingen met breuken WISNET-HBO update juli 2013 De bedoeling van deze les is het doorwerken van begin tot einde met behulp van pen en papier. 1 Oplossen van gebroken vergelijkingen Kijk ook nog
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 informatie2. Het proces De handleiding is opeenvolgend opgebouwd in de logisch te volgen stappen:
Handleiding STKKR 1. Introductie STKKR is een eenvoudig te gebruiken clouddienst waarmee middels de AFAS Get- en UpdateConnectoren gegevens opgehaald, bewerkt en, eventueel aan de hand van filters, teruggestuurd
Nadere informatieOnafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms
Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie
Nadere informatieExamen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.
Nadere informatieUitwerkingen Sum of Us
Instant Insanity Uitwerkingen Sum of Us Opgave A: - Opgave B: Voor elk van de vier kubussen kun je een graaf maken die correspondeert met de desbetreffende kubus. Elk van deze grafen bevat drie lijnen.
Nadere informatieAan het begin verliet Tony Campmans ons team, we hebben dus het hele project met één persoon minder gewerkt.
INFOB1PICA 2013-2014 EINDVERSLAG Team 5: Solvify 1. Individuele teamleden en algemene informatie Studentnr Naam Uren 4153553 Joost Besseling 143 4145607 Coen Boot 161 4146603 Joost Houben 171 4088646 Michiel
Nadere informatieGeldwisselprobleem van Frobenius
Geldwisselprobleem van Frobenius Karin van de Meeberg en Dieuwertje Ewalts 12 december 2001 1 Inhoudsopgave 1 Inleiding 3 2 Afspraken 3 3 Is er wel zo n g? 3 4 Eén waarde 4 5 Twee waarden 4 6 Lampenalgoritme
Nadere informatieLet s play baseball! Let s get ready! Voorkennis: Sprites, Lopen, Variabelen, Scores, xy. Leerdoelen: 3D illusie, Klonen
Let s play baseball! Voorkennis: Sprites, Lopen, Variabelen, Scores, xy Leerdoelen: 3D illusie, Klonen Let s get ready! Jullie weten ongetwijfeld wat het belangrijkste is van het succes van elk goed spel
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieU kunt een waardebon toepassen op alle klanten, op een klantengroep of op een enkele klant; u kunt de vervaldatum bepalen.
Winkelwagenregels Winkelwagenregels De pagina "Winkelwagenregels" geeft u toegang tot een geavanceerde tool dat het waardebonnensysteem van PrestaShop 1.4 opvolgt. Doorgewinterde PrestaShop-gebruikers
Nadere informatieExamen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief
Nadere informatieScratch les 3: Quiz! Je eigen spelshow
Scratch les 3: Quiz! Je eigen spelshow Hoeveel weten jouw vriendjes en vriendinnetjes over jouw favoriete onderwerp? Test het met je zelfgemaakte quiz! Ga naar https://scratch.mit.edu/projects/112774047/.
Nadere informatieLogica voor Informatica. Propositielogica. Syntax & Semantiek. Mehdi Dastani Intelligent Systems Utrecht University
Logica voor Informatica Propositielogica Syntax & Semantiek Mehdi Dastani m.m.dastani@uu.nl Intelligent Systems Utrecht University Wat is Logica? Afleiden van conclusies uit aannames Jan Sara Petra Schuldig
Nadere informatieSupportLog Handleiding
SupportLog Handleiding SupportLog Handleiding... 1 1. Doel... 1 2. Aanmelden... 1 3. Ingeven van een nieuwe call... 2 4. Bekijken van Details van je Call... 3 5. Gegevens toevoegen aan bestaande call...
Nadere informatiePraktijkinstructie Tekstverwerking 1 (CSE12.1/CREBO:53139)
instructie Tekstverwerking 1 (CSE12.1/CREBO:53139) pi.cse12.1.v2 ECABO, 1 september 2003 Alle rechten voorbehouden. Niets uit deze uitgave mag worden vermenigvuldigd, overgenomen, opgeslagen of gepubliceerd
Nadere informatieTentamentips. Tomas Klos. 14 december 2010
Tentamentips Tomas Klos 14 december 010 Samenvatting In dit document vind je een aantal tentamen tips. Het gaat om fouten die ik op tentamens veel gemaakt zie worden, en die ik je liever niet zie maken.
Nadere informatieTI1300: Redeneren en Logica, Practicum 1 Deadline: 17 september 2010, 10:45 uur
TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica TI1300: Redeneren en Logica, Practicum 1 Deadline: 17 september 2010, 10:45 uur Introductie In deze practicumopgave komt
Nadere informatieSLIMSTAMPEN HANDLEIDING
SLIMSTAMPEN HANDLEIDING Dit is een korte handleiding voor de SlimStampen website. Een gebruiker van de website kan verschillende activiteiten kiezen door op één van de knoppen boven aan de eerste pagina
Nadere informatieSamenvatting. TI1306 Redeneren & Logica Review Guide 2014 Door: David Alderliesten. Disclaimer
Samenvatting TI1306 Redeneren & Logica Review Guide 2014 Door: David Alderliesten Disclaimer De informatie in dit document is afkomstig van derden. W.I.S.V. Christiaan Huygens betracht de grootst mogelijke
Nadere informatieInleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord December 17, 2018 Vandaag Naar aanleiding van de opdrachten Zelle hoofdstuk 11 Boolean variabelen: niet checken met == Fout: if clicked == True : gohome () Goed:
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 informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2012 2013, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieLogica voor Informatica. Propositielogica. Normaalvormen en Semantische tableaux. Mehdi Dastani
Logica voor Informatica Propositielogica Normaalvormen en Semantische tableaux Mehdi Dastani m.m.dastani@uu.nl Intelligent Systems Utrecht University Literals Een literal is een propositieletter, of de
Nadere informatieGa naar en remix dit project.
Quiz In deze handleiding leer je hoe je een quiz kunt maken waarmee je kunt testen hoeveel jouw vriendjes en vriendinnetjes over jouw favoriete onderwerp weten. Ga naar https://scratch.mit.edu/projects/112774047/
Nadere informatieAlgoritmisch Denken: Dodo s Bit Parity
Algoritmisch Denken: Dodo s Opdrachtomschrijving: Jouw opdracht, als je deze accepteert, is om Mimi (een Dodo) te leren een bit parity fout te ontdekken en te herstellen. Leerdoelen: Ik kan een correct
Nadere informatieU ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina.
Gegevens exporteren en bewerken vanuit GRIEL Stap 1. Selecteer de juiste gegevens en download deze 1. Stel het datumfilter in op de gewenste periode. Druk op ververs. 2. Maak met behulp van het filter
Nadere informatieInhoud Inhoud. Over dit boek 7. 1 Eclipse IDE (Integrated Development Environment) 9. 2 Functionele specificatie 13
5 Inhoud Inhoud Over dit boek 7 1 Eclipse IDE (Integrated Development Environment) 9 2 Functionele specificatie 13 3 Implementatie grafische gebruikersinterface 31 4 De klassen en methoden 57 5 Technische
Nadere informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2014 2015, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
Nadere informatieHandleiding enquetemaken.be
Hoofdstuk : Starten met je eigen enquête - Registreren - Enquete Maken - Instellingen Hoofdstuk 2 : Opstellen van de vragenlijst - Vragen maken - Vraagtypes - Vragenlijst beheren - Vertakkingen invoeren
Nadere informatiealgoritmiek - 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 informatieSoftware-Ontwikkeling I Academiejaar 2006-2007
Software-Ontwikkeling I Academiejaar 2006-2007 Project: Bibliotheekbeheer 1 1. Digitale bibliotheek a. Inleiding Bibliotheken houden onder meer hun collecties van uitleenbare artikels bij in digitaal formaat.
Nadere informatieStroomschema s maken in Word
1 Stroomschema s maken in Word Een programma direct maken in Scratch gaat vaak wel goed als het een klein programma is. Als het programma groter en moeilijker is, is het lastig om goed te zien welk commando
Nadere informatieEventing. Introductie. Regel verwerking. Basis structuur
Eventing Eventing...1 Introductie...1 Regel verwerking...1 Basis structuur...1 Waar of Onwaar...2 AND en OR...2 Haakjes...3 Operatoren...3 Apparaten...3 Functies...4 Acties...4 Parameters van apparaten
Nadere informatiePythoncursus. Opdrachtenserie 3. Tanja, Koen en Marein oktober Opdracht 1 - Turtlegraphics
Pythoncursus Opdrachtenserie 3 Tanja, Koen en Marein oktober 2018 Opdracht 1 - Turtlegraphics In deze opdracht gaan we tekenen! Hiervoor gebruiken we de library turtlegraphics, waarmee je met Python een
Nadere informatieToetsen in Blackboard
Toetsen in Blackboard Met de tool Test kun je toetsvragen maken en afnemen. In dit document wordt uitgelegd 1. Hoe een toets gemaakt kan worden. 2. Hoe een toets bewerkt kan worden. 3. Hoe een toets beschikbaar
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 informatieJe gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?
1 Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? Voordat je begint met programmeren, moet je Ruby installeren.
Nadere informatieHANDLEIDING Q1600 Fashion
HANDLEIDING Q1600 Fashion Pag.: 1 Inhoudsopgave Inleiding...3 Beheer...4 Kleurlijsten beheren...4 Kleurlijst groep aanmaken...6 Kleurlijst groep verwijderen...6 Kleuren (kleurnummers) aanmaken/wijzigen...7
Nadere informatieProgrammeermethoden NA. Week 5: Functies (vervolg)
Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def
Nadere informatieIntroductie Coach 6 videometen. 1 Eerste oefening
Introductie Coach 6 videometen 1 Eerste oefening Open het programma coach6. Het pictogram vind je op het bureaublad van je pc. Je krijgt dan het onderstaande scherm te zien. Verander docent in student.
Nadere informatieCombinatorische Algoritmen: Binary Decision Diagrams, Deel III
Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Sjoerd van Egmond LIACS, Leiden University, The Netherlands svegmond@liacs.nl 2 juni 2010 Samenvatting Deze notitie beschrijft een nederlandse
Nadere informatieHoofdstuk 16: Zoek- en verwijzingsfuncties
Hoofdstuk 16: Zoek- en verwijzingsfuncties 16.0 Inleiding Eén van de belangrijkste functies binnen Excel is de mogelijkheid om te zoeken naar een specifieke waarde binnen een groot aantal cellen met gegevens.
Nadere informatieLeerpaden maken. 1. Account en wachtwoord. 2. Maak een nieuw leerpad aan. 3. Inhoud aan een leerpad toe voegen. 4. Structuur aanbrengen op een pagina.
Leerpaden maken 1. Account en wachtwoord 2. Maak een nieuw leerpad aan. 3. Inhoud aan een leerpad toe voegen. 4. Structuur aanbrengen op een pagina. 5. Structuur aanbrengen met stappen 6. Structuur aanbrengen
Nadere informatieEen 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 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 informatieExamen Datastructuren en Algoritmen II
Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele
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 informatieInformatica: C# WPO 12
Informatica: C# WPO 12 1. Inhoud Datacontainers, bestanden uitlezen, bestanden schrijven en data toevoegen aan en bestand, csv-bestanden 2. Oefeningen Demo 1: Point2D Demo 2: Notepad Demo 3: Read CSV-file
Nadere informatieSTAPPENPLAN SMARTSCHOOL
2014 Karel De Grote Hogeschool Campus Pothoekstraat Mark Callens STAPPENPLAN SMARTSCHOOL Dit document helpt leerlingen uit 2PBSO te werken met Smartschool op het niveau van een leerkracht. stappenwijzer
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 informatieMaak automatisch een geschikte configuratie van een softwaresysteem;
Joost Vennekens joost.vennekens@kuleuven.be Technologiecampus De Nayer We zijn geïnteresseerd in het oplossen van combinatorische problemen, zoals bijvoorbeeld: Bereken een lessenrooster die aan een aantal
Nadere informatieWISKUNDE B -DAG 2002 1+ 1 = 2. maar en hoe nu verder? 29 november 2002
- 0 - WISKUNDE B -DAG 2002 1+ 1 = 2 maar en hoe nu verder? 29 november 2002 De Wiskunde B-dag wordt gesponsord door Texas Instruments - 1 - Inleiding Snel machtverheffen Stel je voor dat je 7 25 moet uitrekenen.
Nadere informatieSCRATCH GEVORDERDEN Inhoudsopgave
Inhoudsopgave 1 2 3 4 5 Pen gereedschap Lussen tekenen Lussen tekenen Gavere lijnen De computer helpen 1.1 1.2 1.3 1.4 1.5 1 Pen gereedschap 1 Je kent de basis van Scratch en hebt je eerste game gemaakt.
Nadere informatieHOOFDSTUK 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 informatieProgrammeerstructuren met App Inventor
Programmeerstructuren met App Inventor Kevin Krul, Universiteit Utrecht Roncalli, Bergen op Zoom Inhoud: Les 1: Introductie tot App Inventor, when statement en variabelen. Les 2: Introductie if-statement
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 informatieOefeningenexamen Informatica: juni 2015
Oefeningenexamen Informatica: juni 2015 Voornaam: Naam: IT-nummer: PC-nummer: Vul je naam, IT-nummer en PC-nummer (staat op de computer, bv. PC15) hierboven in. De examenbladen moeten mee afgegeven worden,
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 informatieHandleiding Wordpress
Handleiding Wordpress Inhoudsopgave 1. Inloggen 2. Berichten en Pagina s 3. Afbeeldingen en video s 4. Weblinks 1. Inloggen 1.1 Inloggen bij Wordpress We starten met het inloggen op je WordPress gebaseerde
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 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 informatieToets Programmeren, 2YP05 op donderdag 13 november 2008, 09:00-12:00
Toets Programmeren, 2YP05 op donderdag 13 november 2008, 09:00-12:00 TU/e Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica (Na de toets gecorrigeerde versie) PROBLEEM: Sleutels Lees
Nadere informatieHandleiding JCreator. Inhoud. Een Workspace en een eerste project maken
Handleiding JCreator Inhoud Een Workspace en een eerste project maken Een tweede project maken De editor van JCreator Aanpassen van de basis-directory Documentatie over klassen en methoden van de JDK Bestand
Nadere informatieHet omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.
Datastructuren 2016 Programmeeropdracht 3: Patroonherkenning Deadlines. Woensdag 23 november 23:59, resp. vrijdag 9 december 23:59. Inleiding. Deze opdracht is gebaseerd op Hoofdstuk 13.1.7 in het boek
Nadere informatieSnel starten met Testweb Diagnose
Snel starten met Testweb Diagnose WAAR? Je vind Testweb Diagnose op de volgende website: www.testweb.bsl.nl Je kunt inloggen in het groene vak aan de rechterkant: Direct inloggen Testweb Diagnose INLOGGEN
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 informatieLabo 2 Programmeren II
Labo 2 Programmeren II L. Schoofs K. van Assche Gebruik Visual Studio 2005 om een programma te ontwikkelen dat eenvoudige grafieken tekent. Deze opgave heb je vorig academiejaar reeds in Java geïmplementeerd.
Nadere informatie