Algoritmisch Denken: Dodo s Bit Parity

Vergelijkbare documenten
Opdracht 4: Overzichtelijker en generieker

Opdracht 4: Overzichtelijker en generieker

Opdracht 3: Betere oplossingen

Opdracht 3: Betere oplossingen

Opdracht 2: Constructies

Nascholing Algoritmisch Denken. Martin Bruggink Renske Smetsers

Opdracht 5: Dodo heeft plannen

Opdracht 5: Dodo wordt slimmer

Nascholing Algoritmisch Denken. Martin Bruggink Renske Smetsers

Opdracht 5: Dodo wordt slimmer

Opdracht 3: Dodo verdeelt haar werk

Opdracht 6: Dodo wordt blijvend slimmer

Nascholing Algoritmisch Denken. Martin Bruggink Renske Smetsers

Opdracht 6: Dodo wordt blijvend slimmer

Opdracht 7: Dodo s Race

Nascholing Algoritmisch Denken. Martin Bruggink Renske Smetsers

Opdracht 2: Dodo laten bewegen

Opdracht 1: Maak kennis met Dodo

Opdracht 8 Sokoban. Mimi kan een ei vooruit duwen; aan een ei trekken kan ze niet.

Opdracht 4: Dodo wordt slimmer

NAAM: Programmeren 1 Examen 29/08/2012

Algoritmisch Denken en Gestructureerd Programmeren

Opdracht 1: Maak kennis met Dodo

Elke groep van 3 leerlingen heeft een 9 setje speelkaarten nodig: 2 t/m 10, bijvoorbeeld alle schoppen, of alle harten kaarten.

Algoritmisch Denken en Gestructureerd Programmeren (in Greenfoot) Inleiding 1. Leerdoelen 1. Instructies 1

Opdracht 1: Maak kennis met Dodo

Algemene opzet cursus

Kennismaken Greenfoot

BEGINNER JAVA Inhoudsopgave

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

DomJudge-Practicum. Open Dag UU

Handleiding Voor de Personeelscyclus!

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Modelleren en Programmeren

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

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

In Vlaanderen bestaat er nog geen leerlijn programmeren! Hierdoor baseren wij ons op de leerlijn die men in Nederland toepast voor basisscholen.

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

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

LESRICHTLIJN OVERZICHT LES LESDOELEN MATERIALEN, MIDDELEN EN VOORBEREIDING. Opstarten - 10 minuten. Oefening: Algoritmes met tangram - 20 minuten

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Programmeermethoden NA. Week 5: Functies (vervolg)

Meer Blokken. 1. Dit is een functie genaamd Maximum, die twee argumenten heeft: number1 en number2.

Scratch les 3: Quiz! Je eigen spelshow

Opdracht 7: Dodo s race

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

Opdracht 7: Dodo s race

UNIT 2 ANIMATIES SCRIPTS UITVOEREN MAAK EEN BAND ORANJE VIERKANT, PAARSE CIRKEL IT S ALIVE! DEBUG IT! MUSIEKVIDEO

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

Examen Programmeren I 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011

[13] Rondjes draaien (loops)

PRAKTICUMOPGAVE 1. De eerste prakticumopgave is het maken van een applet om een "Mandelbrotfiguur" te tekenen, zoals hieronder omschreven.

Practicumopgave 3: SAT-solver

Functioneel programmeren

Veel succes! 1. Gegeven is de volgende klasse:

Games met Lua en Löve2D

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeren (1) Examen NAAM:

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Les 4 Snake. Een hele kleine Sprite. 1) Zie Afbeelding 1. Klik met je rechtermuisknop op sprite1. Kies vervolgens verwijderen.

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?

Microsoft Word Spellingcontrole

Inhoudsopgave Voorwoord 5 Voordat je begint 6 Wat heb je nodig? 7 De website bij het boek 7 Voor ouders, verzorgers en leraren

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

Hoe? Taal 1. Waar? Tijd? Extra? SPEL DENK

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

Test denkprofiel jongeren

Opdracht 9 Ballen en Bumpers

Modelleren en Programmeren

OEFENINGEN PYTHON REEKS 1

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

Opdracht 1: Toss Als een voetbalwedstrijd begint, gooit de scheidsrechter een muntje om te beslissen wie aftrapt. Dat heet de toss.

Technische nota AbiFire Rapporten maken via ODBC

Pagina 1 van 7. Controle instructies de Boer. Beste controleur,

U ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina.

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Programmeren op ruitjespapier

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

Basistechnieken Microsoft Excel in 15 minuten

Blue-Bot ONDERWIJSGIDS

Programmeren. Inleiding

10. Mijn eerste programma

Lesbrief Code kraken / maken

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

1 KAS OPSTARTEN Klik 1x op BAR KASSA op bureaublad om het programma op pc te starten.

Les 4. Webform Inleiding. Voorbereiding

Scratch les 2: Vissen vangen!

Morenaments Ornamenten met symmetrie. Werkblad vooraf met begeleidende tekst en oplossingen

Les Webform INLEIDING VOORBEREIDING

Simon de schildpad J van Weert 1

5. Waarin onderscheid deze organisatie zich van vergelijkbare organisaties? 9. Wat vinden die zorgvragers/klanten/cliënten belangrijk denk je?

Van CaseTalk naar een database in SQLite studio

EEN VIDEO INSLUITEN OF EEN KOPPELING NAAR EEN VIDEO OPNEMEN IN UW PRESENTATIE

Akternatieve doorrekenen. 7.2 Tabellen

Bezoek een bedrijf. Wat kun je en wat weet je na deze lesbrief?

Rekenoefening groep 5 Doel

SOCIAL MEDIA VEILIGHEID & WACHTWOORD

Vragenlijst leerlingen Eureka! Oberon & Eureka!, januari 2012

Transcriptie:

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 algoritme voor een groot probleem in een flowchart beschrijven, zonder bezig te zijn met de details. (abstractie) Ik kan een algoritme beschrijven met: opeenvolging, keuze en herhaling. (algoritmiek) Ik kan subdoelen omschreven in een flowchart omzetten in code (gebruik makend van submethodes) en deze afzonderlijk testen. (programmeren) Ik kan beoordelen of een programma een correcte oplossing is voor het gegeven probleem. Ik kan op een gestructureerde manier achterhalen waar de oorzaak van een fout in een programma zit (debuggen). Ik kan suggesties ter verbetering van een algoritme aandragen. (beoordelen / debuggen / evaluatie) Ik kan (delen van) een oplossing herkennen en hergebruiken voor een ander, vergelijkbaar, probleem. (generalisatie) Uitdagingen: Er zijn in totaal vijf (the Big Five ) opdrachten die gemaakt kunnen worden. Afhankelijk van jouw voorkennis kun je kiezen tussen de volgende paden om verschillende opdrachten te doorlopen: Ik heb geen of weinig ervaring met het Greenfoot materiaal. Opdrachten: Rhino -> Buffalo -> Lion -> Afsluitende reflectie opdracht Ik heb een beetje ervaring met het Greenfoot materiaal. Opdrachten: Rhino -> Buffalo -> Leopard -> Lion -> Afsluitende reflectie opdracht Ik heb ervaring met Greenfoot en heb zin in een uitdaging. Opdrachten: Elephant -> Lion -> Afsluitende reflectie opdracht Afspraken: Mimi is een (My)Dodo. Ze is niet zo slim, zij kan niet meer dan een paar dingen onthouden. Mimi is ook nog eens bijziend, zij kan alleen zien wat er in het hokje zit waarin zij staat, of dat direct voor haar ligt. Zij weet daardoor niet hoe groot haar wereld is. Mimi mag niet buiten de wereld stappen. Welke methodes Mimi al kan uitvoeren ontdek je tijdens de opdrachten. Alles wat je Mimi aanleert moet ze in elke willekeurige wereld kunnen uitvoeren, bijvoorbeeld ook als de wereld waarin zij leeft twee keer zo groot wordt. Je mag alleen code in MyDodo aanpassen/toevoegen. Je mag geen methoden uit de klasse Actor aanroepen. De methodes van Bird en Dodo zijn beschreven in JavaDoc.

Opdracht Rhino Deel 1 Gegeven is de volgende beginsituatie. Je ziet Mimi (een mooi exemplaar van een MyDodo) in de linker bovenhoek van de wereld staan. We spreken af dat een oneven aantal eieren in een rij of kolom duidt op een incorrecte eggbit. Beginsituatie Eindsituatie Doel: Help Mimi de incorrecte eggbit te vinden en deze te herstellen door op de juiste plek een ei te leggen. 1) Open het scenario. 2) Klik met jouw rechtermuisknop op Mimi die in de wereld staat. Je ziet nu welke dingen die Mimi al kan. Door te klikken op Inherited from Dodo krijg je daarnaast nog een aantal dingen te zien, namelijk die dingen die alle Dodo s kunnen. Eveneens kun je op dezelfde manier ontdekken wat alle Birds kunnen. Klik op deze methodes om inzicht te krijgen in wat ieder hulpmethode precies doet. Bekijk ook de JavaDoc: doc/dodo.html en doc/bird.html. 3) Bedenk een hoog-niveau algoritme waarmee Mimi de wereld doorloopt en de incorrecte bit vindt en herstelt. Maak gebruik van (een deel van) de hulpmethoden uit Dodo of Bird. Je mag de methoden uit de klasse Actor (dus Inherited from Actor ) niet gebruiken. 4) Teken (met pen en papier) de bijbehorende flowchart (op hoog niveau). Hieronder is een aantal onderdelen die je kunt gebruiken voor het maken van jouw flowchart. Een aantal onderdelen moet je zelf bedenken. Bedenk ook welke variabelen je nodig hebt voor jouw oplossing.

5) Je gaat nu het bijbehorende programma schrijven. a. Open Greenfoot. b. Open de code voor MyDodo. Dit doe je door rechts in de klassendiagram met de rechtermuisknop op Open editor te klikken. c. Vind de methode: findandfixincorrecteggbit(). d. Conform jouw flowchart, koppel de hulpmethodes aan elkaar om het doel als geheel te bereiken. e. Compileer en test jouw programma door op Run te klikken. Test ook met de volgende beginsituatie: Doet jouw programma niet wat je verwacht? Bedenk dan eerst of jouw code wel overeenkomt met jouw flowchart. Komt jouw code overeen met jouw flowchart, maar doet jouw programma nog niet wat je verwacht, zoek de fout dan in jouw flowchart. Als je een fout hebt gevonden, dan pas je zowel de code als de flowchart aan. Test het geheel opnieuw. Pas als je er van overtuigd bent dat het allemaal goed werkt ga je verder. Tip: Het kan tijdens het testen fijn zijn om iets af te drukken. Hieronder staat de code dat je gebruikt om naar de console te printen. Opdracht Rhino Deel 2 Gegeven is de volgende beginsituatie: Mimi staat op een willekeurige plek in de wereld. Beginsituatie Eindsituatie Doel: Help Mimi om, vanuit elke willekeurige startpositie (en kijkrichting), de incorrecte eggbit te vinden en deze te herstellen. Je gaat er nu zelf voor zorgen dat Mimi eerst naar de juiste startpositie gaat zodat jouw oplossing uit Rhino deel 1 hergebruikt kan worden.

1) We laden eerst de wereld zoals je hierboven ziet. Volg hiervoor de volgende stappen: a. Klik op Madagaskar in de klassendiagram aan de rechterzijde van je scherm; b. Kies Open editor ; Op de eerste twee regels in de klasse staat: private static String WORLD_FILE = "world_bitparityinittopleft.txt"; // private static String WORLD_FILE= "world_bitparityinitrandom.txt"; Zoek deze regels op. c. Zet de eerste regel in commentaar. Haal de tweede regel uit commentaar. Nu wordt de wereld geladen dat in het world_bitparityinitrandom.txt bestand staat. 2) Bepaal, aan de hand van jouw oplossing voor opdracht Rhino deel 1, waar Mimi moet beginnen en welke kijkrichting ze moet aannemen. 3) Bedenk een algoritme waarmee Mimi vanuit elke willekeurige positie en kijkrichting naar de juiste start positie gaat. Zorg er ook voor dat ze de juiste kijkrichting aanneemt. 4) Vertaal jouw algoritme in een flowchart. Je kunt, naast de flowchartonderdelen uit de Rhino deel 1-opdracht, ook nog de volgende hulpmiddelen gebruiken: 5) Schrijf de bijbehorende code voor jouw submethode. Geef deze methode een herkenbare naam. 6) Test deze submethode eerst apart. 7) Doet jouw submethode wat je ervan verwacht? Dan kun je deze in het geheel integreren: a. Geef in de oorspronkelijke flowchart aan waar deze submethode aangeroepen moet worden. b. Voeg de aanroep van jouw submethode toe in de code. c. Compileer en test jouw programma. Opdracht Buffalo Gegeven is een situatie waarin je niet zeker weet of er wel of geen foutief bitje zit. Beginsituatie met bit-fout Beginsituatie zonder bit-fout

Doel: Help Mimi de incorrecte eggbit, als deze er is, te vinden en die dan te corrigeren. Jouw programma moet dus ook correct werken als er geen fout bitje in zit. Aanwijzingen: Gebruik jouw code en de hulpmethodes uit de vorige Rhino opdracht. Tip 1: Programmeurs gebruiken vaak strategieën of recepten voor bekende soorten problemen. We weten dat als er een fout bitje gevonden wordt in een rij, dat de variabele incorrectrownr de waarde van die rij krijgt. Als je nu vooraf incorrectrownr een speciale waarde geeft, zoals -1 (er is namelijk geen rij met nummer -1), dan kun je na het doorlopen van de rijen bepalen of er een incorrect bitje in een rij is gevonden. Deze strategie heet het Primed Sentinel Plan. Tip 2: Bedenk, implementeer en test een submethode die true of false oplevert als een incorrecte bit gevonden is. Weet je zeker dat deze werkt zoals je verwacht, integreer deze dan in jouw Rhino oplossing. Opdracht Leopard Doel: Help Mimi verder te leren. In de vorige opdrachten heb je een aantal methodes uit Dodo gebruikt om tot een oplossing te komen. Wellicht kun je Mimi, de MyDodo, slimmer maken dan de rest van haar Dodo familie. In deze opdracht gaat Mimi afkijken bij haar familie om problemen op haar eigen manier op te lossen. Je kunt kiezen uit de volgende methodes van Dodo waarvan je nu zelf de code gaat schrijven: void walktocoordinate ( int rows, int column) int counteggsinrow ( ) boolean iseven ( int value ) boolean morerowstocheck ( ) int getincorrectrownr ( ) Je kunt de volgende submethodes van Bird en Dodo gebruiken in jouw oplossing: Je gaat als volgt te werk: 1. Klik met jouw rechtermuisknop op Mimi die in de wereld staat. Je ziet nu welke dingen die Mimi al kan. Door te klikken op Inherited from Dodo krijg je daarnaast nog een aantal dingen te zien, namelijk die dingen die alle Dodo s kunnen. Hetzelfde kun je doen de klasse Bird. Klik op deze methodes om inzicht te krijgen in wat ieder hulpmethode precies doet. Bekijk ook de JavaDoc: doc/dodo.html en doc/bird.html.

2. Kies een methode waarmee je aan de slag gaat 3. Onderzoek wat de methode doet. Natuurlijk probeer je meerdere beginsituaties. Beschrijf de begin- en eindsituatie van Mimi. 4. Bedenk een algoritme waarmee Mimi jouw omschreven eindsituatie bereikt. 5. Teken een flowchart. 6. Vertaal jouw flowchart in code. Dit wordt een submethode in MyDodo. 7. Test jouw submethode. 8. Klik op Run en test ook of jouw programma als geheel nog goed werkt. Toelichting: Als je voor Mimi s nieuwe submethode precies dezelfde naam gebruikt dan zal Greenfoot MyDodo s nieuwe versie uitvoeren in plaats van de submethode die in Dodo beschreven staat. Doet jouw programma niet wat je verwacht? Bedenk dan of jouw code wel overeenkomt met jouw flowchart. Komt jouw code overeen met jouw flowchart, maar doet jouw programma nog niet wat je verwacht, zoek de fout dan in jouw flowchart. Pas deze aan, alsook de bijbehorende code. Test opnieuw. 9. Ben je tevreden met hoe het werkt? Vergelijk dan jouw oplossing met de gelijknamige submethode in Dodo. Wat valt je op? Opdracht Elephant Gegeven is de volgende beginsituatie. Je ziet Mimi (een mooi exemplaar van een MyDodo) ergens op een willekeurige plek in de wereld staan. We spreken af dat een oneven aantal eieren duidt op een incorrecte eggbit. Je krijgt maar beperkte hulpmethodes voorgegeven, deze worden in de opdracht hieronder omschreven. Beginsituatie Eindsituatie Doel: Help Mimi om, vanuit elke willekeurige startpositie (en kijkrichting) de incorrecte eggbit (als deze er is) te vinden en te herstellen. 1) Open het scenario Elephant. 2) Klik met jouw rechtermuisknop op Mimi (de Dodo) in de wereld. Je ziet nu welke dingen MyDodo al kan doen.

Dat is niet veel en als je een van de methodes selecteert dan merk je meteen dat deze niet doen wat ze beloven. Dat ga jij in deze opdracht veranderen. Waar je gebruik van mag maken zijn de methodes uit de klasse Dodo (ook niet echt spannend) en de klasse Bird. Je mag de methodes uit de klasse Actor (dus in de lijst Inherited from Actor ) niet gebruiken. Dat betekent dat je het moet doen met: 3) Bedenk een hoog-niveau algoritme waarmee Mimi de wereld doorloopt en de incorrecte bit vindt en herstelt. Splits je probleem op in deelproblemen die je vervolgens verder uitwerkt (decompositie). Ieder deelprobleem resulteert in een hulpmethode. Verzin een zinvolle naam voor zo n hulpmethode die beschrijft welk deelprobleem wordt opgelost. Dit zorgt ervoor dat jouw beschrijving makkelijk leest. 4) Teken (met pen en papier) de bijbehorende flowchart (op hoog niveau). Bedenk ook welke variabelen je nodig hebt voor jouw oplossing. 5) Je gaat nu de bijbehorende programma schrijven. a. Open de code voor MyDodo. Dit doe je door rechts in de klassediagram met de rechtermuisknop op Open editor te klikken. b. Voor ieder van jouw blokjes in jouw flowchart schrijf je de bijbehorende code als submethodes. Test elke submethode afzonderlijk. Pas als je ervan overtuigd bent dat deze allemaal goed werken ga je verder. c. Conform jouw flowchart, koppel de hulpmethodes aan elkaar om het doel als geheel te bereiken. Deze roep je in de act() methode aan, gevolgd door greenfoot.stop(). d. Compileer en test jouw programma door op Run te klikken. Test ook met de volgende beginsituatie: Doet jouw programma niet wat je verwacht? Bedenk dan eerst of jouw code wel overeenkomt met jouw flowchart. Komt jouw code overeen met jouw flowchart, maar doet jouw programma nog niet wat je verwacht, zoek de fout dan in jouw flowchart. Als je een fout hebt gevonden, dan pas je zowel de code als de flowchart aan. Test het geheel opnieuw.

Opdracht Lion Gegeven is de volgende beginsituatie: Mimi staat op een willekeurige plek in de wereld. Beginsituatie Eindsituatie Doel: Dit keer geldt dat Mimi geen weet heeft van windrichtingen. Concreet betekent dat dat de methode facingnorth niet meer gebruikt mag worden., Maar nog steeds is het doel om Mimi te helpen vanuit elke willekeurige startpositie (en kijkrichting), de incorrecte eggbit te vinden en deze te herstellen. 1. Ga verder met jouw vorige scenario. 2. Bedenk een algoritme om het doel te bereiken. Je mag daarbij geen gebruik maken van submethodes waarmee Mimi weet welke kant ze op kijkt (facingnorth kan dus niet gebruikt worden). Mimi heeft dus geen kompas meer. 3. Implementeer en test jouw algoritme. 4. Evalueer en verbeter: Leg uit wat de voordelen zijn van dit algoritme (ten opzichte van het algoritme waarbij Mimi op haar kompas kijkt om te bepalen welke kant ze op moet lopen). Kun je generaliseren om de methode voor tellen van eieren in rijen te hergebruiken voor de kolommen? Voer deze aanpassing door. Nu je deze methode hebt geïmplementeerd, zie je andere verbeteringen die aan de code gemaakt kunnen worden? Voer ook deze door. In welke gevallen (beginsituaties) werkt jouw oplossing niet?

Opdracht Evaluatie en Reflectie Resultaat Ik weet dat mijn oplossing werkt omdat Ik ben trots op mijn oplossing omdat Ik zou mijn oplossing kunnen verbeteren door... Proces Mijn aanpak was goed omdat... Wat ik volgende keer anders zou doen is... Succes Criteria: Ik kan een correct algoritme voor een groot probleem in een flow-chart beschrijven, zonder bezig te zijn met de details. (abstractie) Hoe is het gegaan? Ik kan een algoritme beschrijven met: opeenvolging, keuze en herhaling. (algoritmiek) Ik kan subdoelen omschreven in een flowchart omzetten in code (gebruik makend van submethodes) en deze afzonderlijk testen. Ik kan beoordelen of een programma een correcte oplossing is voor het gegeven probleem. Ik kan op een gestructureerde manier achterhalen waar de oorzaak van een fout in een programma zit (debuggen). Ik kan suggesties ter verbetering van een algoritme aandragen. (beoordelen / debuggen / evaluatie) Ik kan beredeneren of mijn aanpak geschikt was en kan suggesties doen waarmee ik volgende keer makkelijker tot een (betere) oplossing kan komen. (reflectie) Ik kan het Het is me een beetje gelukt, maar ik begrijp het niet helemaal Ik snap er niks van