Inleiding
In de les ‘Klein en Groot’ wordt een programma ontwikkeld om het kleinste en het grootste getal in een reeks te zoeken. Tevens zal dit programma worden gebruikt om zelf nieuwe blokken (categorie Mijn blokken) te bouwen.
Klein en Groot: Algoritme
Probleemstelling
| Dag | Hoogste temperatuur | Dag | Hoogste temperatuur | Dag | Hoogste temperatuur |
|---|---|---|---|---|---|
| 1 juli | 18.2 | 11 juli | 21.1 | 21 juli | 25.1 |
| 2 juli | 22.8 | 12 juli | 22.3 | 22 juli | 24.5 |
| 3 juli | 23.5 | 13 juli | 20.5 | 23 juli | 24.6 |
| 4 juli | 20.0 | 14 juli | 16.8 | 24 juli | 24.8 |
| 5 juli | 20.4 | 15 juli | 16.2 | 25 juli | 23.9 |
| 6 juli | 19.6 | 16 juli | 18.9 | 26 juli | 21.3 |
| 7 juli | 22.3 | 17 juli | 25.2 | 27 juli | 21.4 |
| 8 juli | 22.2 | 18 juli | 26.5 | 28 juli | 20.7 |
| 9 juli | 21.3 | 19 juli | 24.5 | 29 juli | 20.9 |
| 10 juli | 21.9 | 20 juli | 24.4 | 30 juli | 21.8 |
| 31 juli | 19.9 |
Bovenstaande tabel bevat de temperatuurgegevens opgetekend in Ukkel voor de maand juli 2021. Hoe zoek je nu bijvoorbeeld de grootste waarde in deze reeks?
Het grootste getal vinden
Probeer even te volgen hoe we dit als mens waarschijnlijk oplossen. Je kijkt naar de temperatuur op 1 juli en je onthoudt de meting van 18.2. Dit is voorlopig de hoogste waarde. Dan bekijk je de meting van 2 juli (22.8) en je vergelijkt deze waarde met de voorlopig hoogste waarde (18.2). 22.8 is hoger dan 18.2 en dus onthou je nu 22.8. De waarde 18.2 mag je vergeten. De meting van 3 juli (23.5) is weer hoger dan de voorlopig hoogste waarde (22.8) en je onthoudt nu de waarde 23.5. De waarde 20.0 van 4 juli is kleiner dan de voorlopig hoogste waarde (23.5). Deze waarde interesseert je niet. Op deze manier bekijk je alle gegevens en je vergelijkt voortdurend de nieuw ingelezen waarde met de waarde die je voorlopig als grootste getal hebt bijgehouden.
Op een gelijkaardige manier kunnen we natuurlijk ook het kleinste getal in de reeks vinden.
Variabelen
Het aantal benodigde variabelen is beperkt. Het getal dat we aan het bekijken zijn moet zich natuurlijk in een variabele bevinden. We kunnen deze geheugenplaats aanduiden met de naam Temperatuur. De laagste gevonden temperatuur bewaren we dan in de variabele LaagsteTemperatuur en de hoogste temperatuur in de variabele HoogsteTemperatuur. Het eerste element in de reeks is duidelijk een uitzondering. Dit element kan namelijk nog niet worden vergeleken met de hoogste en kleinste gevonden waarde. Het is dus aan te bevelen om het aantal bekeken elementen bij te houden. Deze variabele kunnen we bijvoorbeeld aanduiden met de naam AantalGelezen.
Algoritme
Volgende pseudocode is een voorstelling van het algoritme:
AantalGelezen = 0
Input Temperatuur
Repeat Until Temperatuur = ""
Verhoog AantalGelezen met 1
If AantalGelezen = 1 Then
LaagsteTemperatuur = Temperatuur
Else
If Temperatuur < LaagsteTemperatuur Then
LaagsteTemperatuur = Temperatuur
End If
End If
If AantalGelezen = 1 Then
HoogsteTemperatuur = Temperatuur
Else
If Temperatuur > HoogsteTemperatuur Then
HoogsteTemperatuur = Temperatuur
End If
End If
Input Temperatuur
End Repeat
If AantalGelezen > 0 Then
Output LaagsteTemperatuur
Output HoogsteTemperatuur
End If
Klein en Groot: Scratch-programma
Het omzetten van de pseudocode naar een Scratch-programma levert weinig moeilijkheden:

Enkel de voorwaarde in het herhaal tot-blok vraag wellicht wat meer uitleg. De voorwaarde
controleert of de standaardvariabele antwoord (te vinden in de categorie Waarnemen) leeg is. De herhaal tot-structuur eindigt dus als er geen gegevens worden ingevuld bij de uitvoering van het vraag-blok.
Zelf blokken maken
Bovenstaand programma werkt prima. De structuur wordt echter wat onoverzichtelijk. Vooral de verschillende als…dan…anders-blokken vervat in de herhaal tot-structuur bemoeilijken het lezen en begrijpen van het programma.
Als we het programma even van dichtbij analyseren dan kunnen we een drietal onderdelen onderscheiden:
- Het kleinste getal zoeken;
- Het grootste getal zoeken;
- De resultaten afdrukken.
Scratch biedt de mogelijkheid om goed afgelijnde onderdelen in een afzonderlijke procedure onder de categorie Mijn blokken op te nemen. Een procedure is een bundeling van instructies die samenhoren en die kan worden uitgevoerd door de naam van de procedure te aanroepen.
Een procedure definiëren

Een procedure kan worden gedefinieerd via de categorie Mijn blokken. De knop Maak een blok (zie rode pijl) laat toe om de procedure te definiëren in volgend venster:

Een procedure (blok) krijgt steeds een naam. De naam van een blok is willekeurig. In ons voorbeeld hebben we gekozen voor zoek_Kleinste, zoek_Grootste en druk_Resultaten. Het is natuurlijk aan te bevelen om een naam te gebruiken die duidelijk maakt wat de procedure doet. Na het indrukken van de knop OK wordt de procedure gedefinieerd via een nieuw definieer-blok
in deel C. De knoppen (Voeg een invoer toe) onderaan het definitievenster worden in een latere les besproken.

In de categorie Mijn blokken worden de gedefinieerde blokken toegevoegd. Deze blokken zijn volledig vergelijkbaar met de gewone blokken die we onder de andere categorieën aantreffen. Enkel de werking van elk blok moet nog worden opgebouwd.
Een procedure opbouwen
De instructies die in een bepaald blok moeten worden uitgevoerd worden toegevoegd aan het definieer-blok beschikbaar in deel C. Alle gedefinieerde variabelen zijn beschikbaar en kunnen ook in deze blokken worden gebruikt. De blokken zoek_Kleinste en zoek_Grootste worden dan als volgt opgemaakt:


De procedure druk_Resultaten wordt als volgt vervolledigd:

Een procedure oproepen
Een procedure kan worden uitgevoerd door de naam van de procedure te gebruiken in een script. In Scratch wordt, zoals steeds, een van onze blokken uit deel B (categorie Mijn blokken) gesleept naar de juiste plaats in het programma.
Het programma ziet er dan als volgt uit:

Evaluatie
In het tweede deel van deze les werd het programma ‘Klein en Groot’ opgebouwd door middel van procedures. Door het programma op te splitsen in kleinere delen wordt het oorspronkelijk programma beter leesbaar en begrijpbaar. Tevens kunnen procedures, indien goed opgebouwd, in latere programma’s opnieuw worden gebruikt.