Fundamental · Oplossingen · 23. Programmeren met blokken StemExpert · Brecht Corbeel · schoolium.me
SE
StemExpert
F23. Programmeren met blokken — oplossingen
FFundamental · deel F6 · Programmeren en automatiseren
Oplossingen · hoofdstuk 23Programmeren met blokken
Sequentie, herhaling, keuze en variabelen: programmeren door blokken te stapelen
Uitgewerkte oplossingen bij de 15 opdrachten van het werkboek. Voor de leerkracht, en voor wie zichzelf wil verbeteren nadat hij het eerst zelf probeerde.
Waarom stopt het script nooit? En waarom zegt het nooit 5?
tijd springt van 1 naar −1 en is dus nooit precies 0: 'tijd = 0' wordt nooit waar. En de sprite zegt de nieuwe waarde, want 'verander' staat vóór 'zeg'.
c
Geef twee verschillende manieren om het te verbeteren.
(1) Test op 'tijd < 0' in plaats van 'tijd = 0' (en zet 'zeg' vóór 'verander', dan hoor je 5, 3, 1). (2) Laat tijd bij 6 beginnen: 6, 4, 2, 0 komt wel op 0. De eerste oplossing is robuuster: ze werkt voor elke startwaarde.
23.7
Drie scripts, drie bugs
Toepassen3Analyseren15 min
Geen van de drie scripts doet wat zijn maker wil.
Wat de maker wilde, staat erboven.
a
Wat gaat er mis in A, en hoe verbeter je het?
A heeft geen hoedblok: het start nooit vanzelf. Zet 'wanneer op de groene vlag wordt geklikt' erboven.
b
Wat zegt de sprite in B? Wat had de maker verwacht? Verbeter.
B zegt 10: de beginwaarde wordt in elke ronde opnieuw 0, en dan komt er 10 bij. Verwacht was 50. Zet 'maak [punten] (0)' vóór de lus.
c
In C zie je de sprite nauwelijks veranderen. Waarom? Verbeter.
C wisselt 20 keer van uiterlijk zonder te wachten: dat gaat zo snel dat je bijna niets ziet. Zet 'wacht (0.2) sec.' in de lus.
23.8
Een stroomdiagram omzetten: het wachtwoord
Toepassen3Programmeren20 min
Zet het stroomdiagram om in een Scratch-script.
Een wachtwoordcontrole met hoogstens drie pogingen.
a
Welke variabele heb je nodig? Welke Scratch-blokken passen bij de twee ruiten?
Een teller pogingen. De ruit 'antwoord = kas123?' wordt 'als <antwoord = kas123> dan ... anders ...'. De ruit 'pogingen = 3?' wordt de lus 'herhaal (3)' (of 'herhaal tot pogingen = 3').
b
Teken het script.
Zie de figuur.
c
Test je script in je hoofd: de gebruiker typt 'kas12', 'Kas123' en 'kas123'. Wat gebeurt er? (Scratch maakt geen verschil tussen hoofdletters en kleine letters bij '='.)
'kas12': Fout. 'Kas123': Scratch vergelijkt tekst zonder op hoofdletters te letten, dus dit is juist: Welkom! en alles stopt. De derde poging komt er niet. (Een echt wachtwoord moet wel hoofdlettergevoelig zijn.)
23.9
Signalen volgen
Toepassen3Begrijpen12 min
Je klikt op de groene vlag.
Anna en Bo sturen elkaar signalen.
a
Zet de tekstballonnen in de juiste volgorde, met het tijdstip waarop ze verschijnen.
0 s: Anna 'Hallo!' (2 s). 2 s: Bo 'Hoi!' (2 s). 4 s: Anna 'Tot straks!' (2 s).
b
Wat verandert er als Anna 'zeg (Hallo!)' gebruikt zonder '2 sec.'?
Dan zendt Anna het signaal meteen: Bo zegt 'Hoi!' al op 0 s en Anna 'Tot straks!' op 2 s. Ook 'Hallo!' blijft staan tot de volgende zeg-opdracht van Anna het vervangt.
Het script uit de proef meet één reactietijd. Breid het uit: het meet vijf keer na elkaar, toont telkens de tijd en op het einde het gemiddelde.
a
Welke variabele heb je extra nodig? Waar geef je haar een beginwaarde?
Een variabele totaal (de som van de tijden), beginwaarde 0 vóór de lus.
b
Bouw het script in Scratch en teken het hier.
Zie de figuur.
c
Meet bij drie klasgenoten. Noteer de gemiddelden.
Typisch tussen 0,2 en 0,4 s. Wie oefent, wordt vaak een beetje sneller.
Zo wordt dit beoordeeld
Variabele
Een variabele totaal met beginwaarde 0 vóór de lus.
Lus
Herhaal (5) rond het meten; de klok wordt bij elke meting op 0 gezet.
Gemiddelde
totaal / 5 na de lus, getoond met zeg.
Werkt
Getest; de willekeurige wachttijd blijft in de lus.
Uitdagen
Uitdagen
transfer, open problemen, leerlijnen combineren
23.12
Habitat: een realistischere simulatie
Uitdagen4Habitat45 min
De simulatie uit het handboek laat het vocht dag en nacht even snel dalen en merkt niet wanneer het reservoir leeg raakt. Maak twee verbeteringen: (1) 's nachts, van 0 tot 6 uur, daalt het vocht maar 2 procentpunt per uur (de planten verdampen minder); (2) zakt het water onder 5 L, dan zegt de sprite 'Reservoir bijvullen!' en stopt de simulatie. Laat de simulatie lopen tot dat gebeurt.
a
Welke variabele heb je extra nodig voor de nacht? Hoe weet je met 'modulo' welk uur van de dag het is?
Een variabele uur die elke ronde met 1 verhoogt. 'uur modulo 24' geeft het uur van de dag: bij 30 is dat 6, bij 47 is dat 23. De nacht is 'uur modulo 24 < 6'.
b
Teken het verbeterde script.
Zie de figuur.
c
Reken eerst zonder de nacht: na hoeveel dagen zakt het reservoir onder 5 L, als de kas 1,8 L per dag gebruikt?
Van 30 L tot 5 L is 25 L. 25:1,8≈13,9: in de loop van de 14de dag.
d
Met de trage nacht gebruikt de kas minder. Schat hoeveel minder per dag, en wat dat betekent voor het aantal dagen.
Zes nachturen met −2 in plaats van −5: 18 procentpunt minder daling per dag, dus 120−18=102 per dag. Dat vraagt 102:16≈6,4 beurten of ongeveer 1,5 L per dag. Het reservoir houdt dan 25:1,5≈16 dagen.
e
Portfolio: noteer het model (daling per uur dag/nacht, +16 per beurt, 0,24 L per beurt) en je uitkomst.
Bijvoorbeeld: 'Model: −5 per uur overdag, −2 's nachts (0-6 h), +16 en −0,24 L per beurt. Reservoir onder 5 L na ongeveer 16 dagen.'
Zo wordt dit beoordeeld
Model
Nacht (uur modulo 24 < 6) met −2, dag met −5; beurt +16 en −0,24 L.
Script
Eindeloze lus of 'herhaal tot water < 5', met de controle op het reservoir en 'stop alle'.
Rekenwerk
25 L : 1,8 L per dag ≈ 13,9 dagen; met de nacht minder verbruik en dus langer.
Kritisch
Beseft dat de getallen uit het model komen, niet uit een meting.
23.13
Onderzoek: welke drempel is het best?
Uitdagen4Onderzoeken25 min
Met de simulatie uit het handboek kan je snel proberen wat er gebeurt met een andere drempel. Een leerling liet het script 48 uur lopen met de drempels 20, 30 en 40 %. Het resultaat:
drempel
beurten in 48 h
water gebruikt
laagste vocht
hoogste vocht (na de eerste dag)
20 %
14
3,36 L
20 %
35 %
30 %
14
3,36 L
30 %
45 %
40 %
15
3,60 L
40 %
55 %
a
Welke variabele heeft de leerling veranderd, welke gemeten, welke gelijk gehouden?
Veranderd: de drempel. Gemeten: aantal beurten, waterverbruik, laagste en hoogste vocht. Gelijk gehouden: de beginwaarde (50 %), de daling (5 per uur), de beurt (+16, 0,24 L) en de duur (48 h).
b
Hangt het waterverbruik af van de drempel? Verklaar met het model.
Nauwelijks (14 of 15 beurten). In het model bepalen de planten het verbruik: elke dag verdwijnt 120 procentpunt vocht, en dat moet aangevuld worden, wat de drempel ook is. De drempel beslist alleen wanneer.
c
Wat verandert er dan wel? Welke drempel kies je voor planten die geen natte voeten willen maar ook niet mogen verdrogen?
Het niveau: bij 20 % schommelt het vocht tussen 20 en 35 %, bij 40 % tussen 40 en 55 %. Voor de meetkas is 30 % (tussen 30 en 45 %) een goed midden.
d
Waarom mag je dit besluit niet zomaar op de echte kas toepassen?
In het model hangt de daling niet af van het vocht zelf. In het echt verdampt natte grond sneller en kan water wegzakken of weglopen onder in de bakjes: een hoge drempel verspilt dan wel water. Het besluit moet getest worden met metingen (hoofdstuk 25).
23.14
Ontwerp: vang de druppels
Uitdagen4Ontwerpen60 min
Ontwerp een spel in Scratch. Een druppel valt van een willekeurige plaats bovenaan naar beneden. Met de pijltjestoetsen beweeg je een emmer onderaan. Vang je de druppel, dan krijg je een punt. Mis je hem, dan verlies je een leven. Na drie gemiste druppels is het spel voorbij.
a
Decompositie: welke sprites en welke scripts heb je nodig? Welke variabelen?
Sprites: Druppel en Emmer. Druppel: één script met een eindeloze lus (bovenaan starten, vallen tot de bodem of de emmer). Emmer: twee korte scripts voor de pijltjes. Variabelen: score en levens.
b
Bouw het spel. Teken het script van de druppel.
Zie de figuren: de druppel valt in stappen van 5 tot hij onder −160 komt of de emmer raakt. De variabele gevangen onthoudt wat er gebeurde; na de lus krijg je een punt of verlies je een leven.
c
Test en debug: noteer twee fouten die je vond en hoe je ze verbeterde.
Typische fouten: score en levens niet op hun beginwaarde bij de start; de druppel wordt dubbel geteld omdat hij na het vangen nog even de emmer raakt (daarom stopt de lus meteen als gevangen = 1); de druppel raakt de onderrand nooit, omdat Scratch een sprite altijd een beetje zichtbaar houdt (daarom testen op −160 en niet op −180); de emmer loopt van het speelveld.
d
Uitbreiding: laat de druppels sneller vallen naarmate de score stijgt. Welk blok verander je?
In 'verander y met (-5)' zet je in plaats van −5 bijvoorbeeld '0 − (5 + score / 5)': hoe hoger de score, hoe sneller de val.
Zo wordt dit beoordeeld
Decompositie
Twee sprites (druppel, emmer), aparte scripts voor vallen en besturen, variabelen score en levens.
Programma
Lus, keuze (raak ik emmer?), tellers met beginwaarden, stop bij 0 levens.
Debuggen
Twee echte fouten beschreven met hun verbetering.
Uitbreiding
Valsnelheid gekoppeld aan de score.
23.15
Lussen in lussen
Uitdagen4Rekenen15 min
Het aantal herhalingen van de binnenste lus is geen vast getal: het is de variabele n.
De binnenste lus hangt af van n.
a
Hoeveel keer loopt de binnenste lus bij elke ronde van de buitenste? Wat zegt de sprite?
n = 1, 2, 3, 4; binnen 1, 2, 3, 4 keer; som 1, 3, 6, 10. De sprite zegt 10.
b
Wat zegt de sprite als je 'herhaal (4)' vervangt door 'herhaal (10)'? Zoek een snelle manier.
1+2+⋯+10=55. Snel: zet de rij twee keer onder elkaar, omgekeerd: elk paar is 11, tien paren, de helft: 10×11:2=55 (hetzelfde patroon als bij selectiesorteren in hoofdstuk 22).
c
Voor welke tekening op ruitjespapier kan dit patroon dienen? Schets ze.
Een trap of driehoek van blokjes: 1 blokje in de eerste rij, 2 in de tweede, 3 in de derde, ... Samen 10 blokjes voor 4 rijen.