# Algoritmisch denken

# Inleiding

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/7p6-s_4IwOE" width="100%"></iframe>

### Samenvatting video

In de video wordt er uitgelegd dat ik een probleem heb, namelijk dat ik honger heb.  
Dan bedenk ik een algoritme (een paar stappen) dat ik kan uitvoeren om tot een oplossing te komen.

Kort samengevat is dit de situatie:  
**Probleem**: Ik heb honger (mijn maag is leeg)  
**Oplossing**: Een gevulde maag

Het algoritme dat ik heb bedacht om van het probleem tot de oplossing te komen is het volgende:

1. Ik zoek eten
2. Ik bereid dit eten
3. Ik eet het eten op

Tijdens het uitvoeren van mijn algoritme merk ik dat ik een nieuw probleem heb, ik weet niet hoe ik het eten kan bereiden.  
Gelukkig had iemand al een algoritme (een stappenplan) op de achterkant van het noedelpakje geschreven hoe ik dit kan doen.

#### Over dit onderdeel

In dit onderdeel zullen we zien:

- Wat algoritmes zijn
- Wat programma's zijn
- Hoe we zelf algoritmes kunnen opstellen

# Algoritmes



# Wat is een algoritme?

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?** - Weten wat een algoritme is  
- Voorbeelden kunnen geven waar we algoritmes tegen komen in het dagelijkse leven.</p>

Bekijk de volgende video's die uitleggen wat een algoritme is:

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/tnFpYaZRyTQ" width="100%"></iframe>

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/RUxT_H4uqcY" width="100%"></iframe>

### Eigenschappen algoritme

Aan de hand van de video's kunnen we de volgende eigenschappen toekennen aan een algoritme:

<p class="callout info">**1.** Het is een eindige reeks van instructies  
**2.** Waarvan de volgorde belangrijk is  
**3.** Die je uitvoert om tot een gewenst einddoel te raken of probleem op te lossen</p>

Hieronder bekijken we elke eigenschap wat nauwkeuriger.

#### 1. Het is een <span style="text-decoration: underline;">eindige</span> reeks van instructies

Een algoritme bestaat dus uit een aantal instructies of stappen die je moet volgen.  
Het is ook een <span style="text-decoration: underline;">eindige</span> reeks instructies. Eindig betekent dat de instructies niet oneinding lang doorlopen.  
Er is een bepaald punt waar je alle instructies hebt uitgevoerd.

#### 2. Waarvan de volgorde belangrijk is

De volgorde waarin de stappen worden uitgevoerd is belangrijk!

In de eerste video wordt duidelijk gemaakt dat als je aardappelen eerst frituurt, dan schilt en dan pas in frieten snijd je geen goede frieten zult maken.

[![JJ0bpuy.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2020-12/scaled-1680-/jj0bpuy.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2020-12/jj0bpuy.png)

#### 3. Die je uitvoert om tot een gewenst einddoel te raken of probleem op te lossen.

De reden dat je een algoritme uitvoert is om van een beginsituatie naar een eindsituatie te raken.

Je hebt bijvoorbeeld vuile kleren, en je wilt ze proper maken.

**Beginsituatie**: vuile kleren  
**Gewenste eindsituatie (doel)**: propere kleren

Je zou dan het algoritme (de stappen) van de 2e video kunnen volgen om de was te doen.  
Deze stappen leggen uit hoe je van de beginsituatie naar de eindsituatie raakt.

<p class="callout info">**Belangrijk** Vaak worden ook de woorden "Probleem" en "Oplossing" gebruikt in plaats van beginsituatie en eindsituatie.  
In het voorbeeld hierboven zou dit dan zo zijn:  
**Probleem**: vuile kleren  
**Oplossing**: propere kleren</p>

### Oefeningen

#### 1. Culinair algoritme

In de eerste video wordt er gesproken over een "culinair algoritme".

Wat wordt er hiermee bedoeld denk je?  
Welk ander woord kan je gebruiken om dit te beschrijven?

Als het formulier hieronder niet werkt kan je [hier](https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJURFAwQVRPOElQS05HOUpSOFdKWU4xM0lIMy4u) klikken.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="600px" marginheight="0" marginwidth="0" src="https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJURFAwQVRPOElQS05HOUpSOFdKWU4xM0lIMy4u&embed=true" style="border: none; max-width: 100%; max-height: 100vh;" width="100%"> </iframe>

#### 2. Volgorde van de stappen

In de video hieronder wordt er nog een culinair algoritme uitgelegd.  
Bekijk de stappen nauwkeurig.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/rb0o0F_7RzM" width="100%"></iframe>

Probeer nu zelf de stappen in de juiste volgorde te zetten zoals beschreven in de video.  
(Je kan de blokjes slepen in de juiste volgorde of de pijltjes achteraan elk blokje gebruiken)

Als het formulier hieronder niet werkt kan je [hier](https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUOUE1STQ3RFYwWlMxODlZTEdOUDYwN0NHWC4u) klikken.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="1000px" marginheight="0" marginwidth="0" src="https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUOUE1STQ3RFYwWlMxODlZTEdOUDYwN0NHWC4u&embed=true" style="border: none; max-width: 100%; max-height: 100vh;" width="100%"> </iframe>

#### 3. Welke andere algoritmes ken je?

We hebben hierboven al een paar voorbeelden aangehaald van algoritmes:  
\- Een recept (een kookalgoritme)  
\- Het inladen van een wasmachine

Welke andere algoritmes ken je vanuit je dagelijkse leven?  
Kies er een uit en typ dit neer in het formulier dat hieronder is gelinkt.  
Schrijf dan ook kort uit wat de verschillende stappen zijn in dat algoritme.

Als het formulier hier onder niet werkt kan je [hier](https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUNVJWM0xDNlQ3RUtKQUVaRDVFMDEzN1hGSi4u) klikken.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="600px" marginheight="0" marginwidth="0" src="https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUNVJWM0xDNlQ3RUtKQUVaRDVFMDEzN1hGSi4u&embed=true" style="border: none; max-width: 100%; max-height: 100vh;" width="100%"></iframe>

# Wat is een programma?

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wat een (computer)programma is  
- Weten wat het verschil is tussen een algoritme en een computerprogramma</p>

[![CFUyNeF.jpg](https://books.jeroenpelgrims.com/uploads/images/gallery/2020-12/scaled-1680-/cfuynef.jpg)](https://books.jeroenpelgrims.com/uploads/images/gallery/2020-12/cfuynef.jpg)

### Wat is een programma?

Zoals verteld in het onderdeel computer onderdelen voert de processor in een computer instructies uit. De computer kan zelf niet nadenken maar kan alleen instructies uitvoeren die hem gegeven worden.

Een computer is dus een ideaal hulpmiddel om algoritmes automatisch te laten uitvoeren want algoritmes zijn gewoon een lijst van instructies.

#### Computertaal

Maar computers verstaan geen gewone spreek- of schrijftaal.  
Daarom moeten algoritmes eerst in een speciale computertaal of programmeertaal geschreven worden.  
Op deze manier begrijpt de computer de stappen in het algoritme.

<p class="callout info">Wanneer een algoritme is neergeschreven op een manier dat de computer dit begrijpt noemen we dit een **(computer)programma**.  
**Alle** computerprogrammas zijn geschreven op basis van een algoritme.</p>

##### Verschil algoritme (computer)programma

<table border="1" id="bkmrk-algoritme-programma-" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50%;">**Algoritme**</td><td style="width: 50%;">**Programma**</td></tr><tr><td style="width: 50%;">Een algoritme is een <span style="text-decoration: underline;">beschrijving</span> van hoe je een probleem kan oplossen.</td><td style="width: 50%;">Een programma is een implementatie van een algoritme.

(Het algoritme is neergeschreven in een programmeertaal die de computer begrijpt)

</td></tr><tr><td style="width: 50%;">De computer verstaat dit niet en kan dit niet uitvoeren</td><td style="width: 50%;">De computer kan dit wél uitvoeren en verstaan</td></tr></tbody></table>

#### Programmeertalen

Er zijn verschillende types programmeertalen met elk hun eigen doelen.

Een videospel zal bijvoorbeeld in een andere programmeertaal geschreven worden dan een website.  
Bij verzekeringsmaatschappijen gebruiken ze speciale programmeertalen om statistische berekeningen te maken.

##### Een paar populaire programmeertalen

[![NgxCmYg.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2020-12/scaled-1680-/ngxcmyg.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2020-12/ngxcmyg.png)

<table border="1" id="bkmrk-naam-waarvoor-de-taa" style="border-collapse: collapse; width: 100%; height: 336px;"><tbody><tr style="height: 29px;"><td style="width: 50%; height: 29px;">**Naam**</td><td style="width: 50%; height: 29px;">**Waarvoor de taal gebruikt wordt**</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">Java</td><td style="width: 50%; height: 29px;">Desktop applicaties, Games, Android apps</td></tr><tr style="height: 46px;"><td style="width: 50%; height: 46px;">C++</td><td style="width: 50%; height: 46px;">Programma's die zeer snel moeten draaien en niet groot mogen zijn, Games, Desktop applicaties</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">Python</td><td style="width: 50%; height: 29px;">Desktop applicaties, websites, wetenschappelijke berekeningen</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">C#</td><td style="width: 50%; height: 29px;">Desktop applicaties, Websites, Games</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">Javascript</td><td style="width: 50%; height: 29px;">Voornamelijk websites</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">PHP</td><td style="width: 50%; height: 29px;">Websites</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">R</td><td style="width: 50%; height: 29px;">Statistische berekeningen</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">MATLAB</td><td style="width: 50%; height: 29px;">Statistische en wetenschappelijke berekeningen</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">Swift</td><td style="width: 50%; height: 29px;">Wordt vooral gebruikt om Apple apps te schrijven</td></tr><tr style="height: 29px;"><td style="width: 50%; height: 29px;">Objective-C</td><td style="width: 50%; height: 29px;">Wordt vooral gebruikt om Apple apps te schrijven</td></tr></tbody></table>

#### Oefening

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="1500px" marginheight="0" marginwidth="0" src="https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUM1ZSUVk5SjBXWlA0MDg4M1lKUkZIVDdCMi4u&embed=true" style="border: none; max-width: 100%; max-height: 100vh;" width="100%"> </iframe>

# Probleemoplossend denken



# Inleiding

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten welke stappen er bij probleemoplossend denken gebruikt worden.  
- Weten in welke volgorde de stappen uitgevoerd worden.</p>

### Probleemoplossend denken

Algoritmisch denken wordt ook probleemoplossend denken genoemd.  
Als je een probleem hebt begin je best niet willekeurig wat dingen uit te proberen om tot je doel te komen maar denk je best even na welke stappen je kan ondernemen.

Bij probleemoplossend denken gebruiken we een paar stappen om tot een goed algoritme te komen.

1. Probleemdefinitie
2. Analyse
3. Algoritme opstellen
4. Programma schrijven
5. Testen en documenteren

Elk van deze stappen zullen we nu nader bekijken in de volgende stukken.

# 1. Probleemdefinitie

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?** - Een probleem en een doel kunnen identificeren.</p>

In deze stap probeer je eerst je probleem en je doel uit te zoeken.  
Deze stap wordt soms ook de probleemstelling genoemd.

### Lego voorbeeld

**Probleem**: Je hebt een hoop Legoblokjes maar je weet niet hoe je een kasteel kan bouwen.  
**Doel**: Je wilt een kasteel van Legoblokjes hebben.[![image-1615757630660.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-03/scaled-1680-/image-1615757630660.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-03/image-1615757630660.png)

## Oefeningen

### Oefening 1

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="1100px" marginheight="0" marginwidth="0" src="https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUMFc3UkFRR0pCVjJDMTJCQ1BBU05HSFQxWi4u&embed=true" style="border: none; max-width: 100%; max-height: 100vh;" width="100%"> </iframe>

### Oefening 2

Stel het is lunchpauze en je wilt je lunch eten.  
Welke van deze afbeeldingen zou het probleem zijn, en welke het doel?

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="1500px" marginheight="0" marginwidth="0" src="https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAO__YywobJUOFBEOVg0OTJKRzg2NUEyNDlDWElOSFRRSC4u&embed=true" style="border: none; max-width: 100%; max-height: 100vh;" width="100%"> </iframe>

# 2. Analyse

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wat je moet doen in een analyse</p>

# Analyse

- Wat heb je tot je beschikking?
- Welke verwerking moet er met deze beschikbare onderdelen gebeuren?

## Lego voorbeeld

**Ter beschikking**:  
We hebben witte blokken, gele blokken, grijze blokken, enz…  
Mochten we zien dat we geen blauwe blokken hebben kunnen we dus later bij het opstellen van het algoritme niet zeggen “bouw een blauwe toren”, want daarvoor hebben we niet alle benodigde materiaal.

![](https://i.imgur.com/MTkWxhA.png)

**Welke verwerking moet er gebeuren?**  
De blokken moeten zo worden neergezet dat we uiteindelijk een lego kasteel hebben.

- We gaan de blokken nog niet écht neer zetten maar moeten wel ongeveer weten wat we er mee gaan doen.  
    We weten dus bijvoorbeeld dat we ze niet gaan gebruiken om in het rond te gooien, maar dat we ze gaan neer zetten en op elkaar zetten.

![](https://i.imgur.com/i5RjiPO.jpg)

## Kook voorbeeld

Als we bijvoorbeeld iets willen koken kunnen we in de keuken zien welke gereedschappen er zijn dat we kunnen gebruiken.

![](https://i.imgur.com/EyAYAuN.jpg)

Mocht het hier blijken dat we geen deegrol hebben, dan weten we al dat het moeilijk gaat zijn om een recept op te stellen waar we een platte deeg bodem nodig hebben.

# 3. Algoritme opstellen

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wat een deelprobleem is  
- Zelf een simpel algoritme kunnen opstellen</p>

## Ons probleem opsplitsen in deelproblemen (decompositie)  


![](https://i.imgur.com/2vHVLnf.png)

Als je probleem wat groter is dan maak je niet 1 groot algoritme maar deel je het probleem op in kleinere stukken. Deze noemen deelproblemen.  
Op deze manier heb je meerder kleinere problemen die apart makkelijker op te lossen zijn dan een groot probleem in één keer.

Als je terugdenkt aan de video die in de [inleiding](https://books.jeroenpelgrims.com/books/algoritmisch-denken/page/inleiding "Inleiding") staat (waar ik noedels maak).  
Dan had ik dit algoritme ontworpen:

1. Ik zoek eten
2. Ik bereid het eten
3. Ik eet het eten op

Maar stap 2 is veel te vaag beschreven want ik wist niet hoe ik de noedels moest bereiden.  
Stap 2 is dus een deelprobleem waarvoor dus een stappenplan moet worden gemaakt.

## Een stappenplan (algoritme) opstellen voor elk deelprobleem

![](https://i.imgur.com/SJJvVEc.png)

Je gaat nu voor elk deelprobleem stap voor stap uitleggen hoe je dit deelprobleem kan oplossen.  
Voor stap 2 in het noedelprobleem waren dit de stappen:

1. Doe 200ml water in een pannetje
2. Doe de kruiden erbij
3. Wacht tot het water kookt
4. Voeg dan de noedels toe
5. Wacht tot het water is weggekookt

Nu weten we exact hoe we de noedels moeten bereiden.  
Het volledige algoritme voor de video is dus dit:

1. Ik zoek eten
2. **Ik bereid het eten**: 
    1. Doe 200ml water in een pannetje
    2. Doe de kruiden erbij
    3. Wacht tot het water kookt
    4. Voeg dan de noedels toe
    5. Wacht tot het water is weggekookt
3. Ik eet het eten op

## Deelproblemen in deelproblemen

Het kan zijn dat in een deelprobleem nog andere deelproblemen zitten (En daarin nog eens enz…).  
Hiervoor moet dan ook een algoritme worden opgesteld.

Stel dat ik niet wist hoe ik 200 ml water in het pannetje moest doen, dan had dit het volledige algoritme kunnen zijn:

1. Ik zoek eten
2. Ik bereid het eten: 
    1. **Doe 200ml water in een pannetje**: 
        1. Zoek een pannetje en een maatbeker
        2. Doe water in de maatbeker tot het water even hoog staat als de 200 ml lijn.
        3. Doe dit water in het pannetje
    2. Doe de kruiden erbij
    3. Wacht tot het water kookt
    4. Voeg dan de noedels toe
    5. Wacht tot het water is weggekookt
3. Ik eet het eten op

## Lego voorbeeld

**Deelproblemen**: We gaan ons lego kasteel niet in 1 keer helemaal bouwen, maar we bouwen *onderdeel per onderdeel*.  
Een deelprobleem in ons kasteel zou kunnen zijn:

- Hoe bouwen we een torentje?
- Of hoe bouwen we de poort?

Dit zijn kleinere problemen binnen ons hoofdprobleem.

**Stappenplan**:  
Om bijvoorbeeld een torentje te bouwen zou dit ons algoritme kunnen zijn.

![](https://i.imgur.com/pu92VXI.png)

# 4. Programma schrijven

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten dat een programma een vertaling is van een algoritme voor een computer.  
- Weten dat deze vertaling gebeurt aan de hand van een programmeertaal of computertaal.</p>

# Programma schrijven

Nadat je hebt bepaald welke stappen er moeten worden uitgevoerd om van je probleem tot je doel te komen kan je dit automatiseren door een computer het algoritme te laten uitvoeren.

Maar zoals gezegd in het deel “Wat is een programma?” kunnen we niet gewoon ons algoritme aan de computer geven.  
Het algoritme moet eerst worden omgezet in een taal die de computer verstaat. Een programmeertaal, of *code*.

Met deze code beschrijven we elke stap in het algoritme.

Een algoritme is dus zo neergeschreven dat mensen het kunnen verstaan, en een programma is datzelfde algoritme vertaald naar een computertaal zodat een computer dat kan verstaan.

## Lego voorbeeld

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/Bn0Jg326drw?start=47&end=71" width="100%"></iframe>

Voor deze robot is een speciaal programma geschreven gebaseerd op een algoritme om een lego torentje te bouwen.

### Voorbeeld algoritme &amp; code

Een voorbeeld van het algoritme en de code zou dit kunnen zijn:

![](https://i.imgur.com/nbvpSRV.png)

> **Opgelet!** Dit is geen echt algoritme en geen echte code, het is maar een voorbeeld om aan te tonen hoe verschillend deze 2 er kunnen uitzien.  
> Het programma is geschreven in de programmeertaal Python.

# 5. Testen en documenteren

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten waarom je test  
- Weten waarom je documenteert</p>

## Testen

Nadat we ons programma hebben geschreven moeten we testen of het werkt.

### Lego voorbeeld

#### Werkt ons programma ook als we blauwe blokken gebruiken in plaats van rode? En met gele?

![](https://i.imgur.com/NSWeIpq.png)

#### Bouwt ons programma wel een toren? Of bouwt het iets anders?

![](https://i.imgur.com/QTkQ12Y.png)

#### Kan onze robot de blokjes nog vinden als ze op deze tafel liggen?

![](https://i.imgur.com/AdachI7.png)

## Documenteren

Na het schrijven van een programma is het belanglijk dat andere mensen je code kunnen begrijpen. Daarom kan het handig zijn om documentatie schrijven die verklaart wat je code doet.  
Één manier om dit te doen is om commentaar te schrijven in je code.

In de code hieronder is de tekst die achter de 2 schuine strepen staat commentaar. (De tekst die in het grijs staat)  
Zelfs zonder te kunnen programmeren weet je nu ongeveer wat de code doet.

![image-1615823390113.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-03/scaled-1680-/image-1615823390113.png)

### Iedereen is vergeetachtig

Documenteren is ook handig voor jezelf!  
Het gebeurt vaak dat als je een programma hebt geschreven, en je moet er een paar maanden later iets aan veranderen dat je helemaal geen idee meer hebt hoe je code ineen steekt!

# Zelf algoritmes ontwerpen



# Inleiding

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wanneer en waarom we een diagram gebruiken om een algoritme voor te stellen.  
- Weten wat een Nassi-Shneiderman diagram is  
- Weten dat een Nassi-Shneiderman diagram uit verschillende types blokken bestaan</p>

Gewone algoritmes kunnen we nog gewoon met wat tekst beschrijven. Maar vanaf dat het wat ingewikkelder gebruiken we best een gestructureerde manier om ons algoritme te beschrijven.

Door een complex algoritme als een diagram te tekenen wordt het makkelijker te verstaan.  
Er zullen ook minder verwarringen voorkomen als iemand anders je diagram leest.

## Nassi-Shneiderman diagram

Één zo’n type diagram is een Nassi-Shneiderman diagram.

![](https://i.imgur.com/F9QD1Mc.png)

> Dit is een voorbeeld van een Nassi-Shneiderman diagram waar alle mogelijke blokken gebruikt zijn.

### Blokken

Een Nassi-Shneiderman diagram is samengesteld uit verschillende blokken die elk hun eigen betekenis hebben.  
Deze blokken worden dan met elkaar gecombineerd om een algoritme te bouwen.

#### Proces blok

![](https://i.imgur.com/v86zDW3.png)

#### Selectie blok

![](https://i.imgur.com/tS7nNfK.png)

#### Iteratie blok

![](https://i.imgur.com/tZGVdg1.png)

In de volgende stukken zullen we elk blokje bekijken, uitleggen wat hun doel is en hoe we ze kunnen gebruiken.

# Proces blok

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wat een procesblok in een diagram betekent  
- Zelf een diagram kunnen opstellen door procesblokken te gebruiken</p>

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/UNfXIYuSylI" width="100%"></iframe>

Het eerste, en simpelste blokje dat je kan gebruiken in een Nassi-Shneiderman diagram is het procesblok.  
Dit duid eigenlijk gewoon een stap aan die moet worden uitgevoerd.

![](https://i.imgur.com/7YlGRqC.png)

Het ziet er uit als een rechthoek met daarin tekst.  
De tekst duid aan wat er moet gebeuren in deze stap.

## Blokken combineren

![](https://i.imgur.com/aQF5GvF.png)

In een algoritme is de volgorde van de stappen belangrijk.  
De volgorde waarin je de blokken plaatst is dus ook belangrijk!  
De blokken worden van boven naar beneden uitgevoerd.

## Omelet voorbeeld

Het algoritme om een omelet te bakken uit het onderdeel “[Wat is een algoritme?](https://books.jeroenpelgrims.com/books/algoritmisch-denken/page/wat-is-een-algoritme "Wat is een algoritme?")” kan dus zo getekend worden als een Nassi-Shneiderman diagram:

![](https://i.imgur.com/744KHBW.png)

## Hoe proces blokken tekenen?

Om onze diagrammen te tekenen zullen we gebruik maken van [draw.io](https://draw.io/).  
Hierin kunnen we digitaal diagrammen tekenen en deze opslagen als afbeeldingen op de computer.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="500" src="https://www.youtube.com/embed/VXaM4bA3QKY" title="YouTube video player" width="100%"></iframe>

## Oefeningen

Volg bij het uitvoeren de stappen 1-3 van [probleemoplossend denken](https://books.jeroenpelgrims.com/books/algoritmisch-denken/chapter/probleemoplossend-denken "Probleemoplossend denken").  
Je schrijft dus de probleemdefinitie en de analyse uit.  
Nadien ontwerp je dan je diagram in [draw.io](https://draw.io)

### Oefening 1. Noedels maken

Teken een NSD (Nassi–Shneiderman diagram) uit dat de stappen bevat die je moet uitvoeren om een pakket noedels klaar te maken.  
De verschillende stappen kan je hieronder op de achterkant van het noedelpakket aflezen.

Gebruik alleen de nuttige tekst.  
Je mag ook stappen opdelen als dit het algoritme makkelijker maakt.

[![noedels.jpg](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/noedels.jpg)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/noedels.jpg)  
Klik op de afbeelding voor een grotere versie.

### Oefening 2. Geld afhalen van een bankautomaat

Beeld je in dat je iets wilt gaan kopen waarvoor je cash geld nodig hebt.  
Maar je doet je portefeulle open en je ziet dat hij leeg is.  
Teken een algoritme uit om dit probleem op te lossen.

[![image-1651236091655.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2022-04/scaled-1680-/image-1651236091655.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2022-04/image-1651236091655.png)

### Oefening 3. Een boterham met muizenstrontjes smeren

Teken een algoritme uit in een NSD dat uitlegt hoe je een boterham met muizenstrontjes (hagelslag) maakt.  
In één van je stappen moet je boter smeren.

![identiteit22.jpg](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/identiteit22.jpg)

### Oefening 4. Croque monsieur maken

Teken een algoritme uit in een NSD dat uitlegt hoe je een Croque monsieur (of tosti) maakt.  
Een croque monsieur bevat meestal de volgende ingredienten: Brood, ham, kaas.

[![image-1621255598262.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621255598262.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/image-1621255598262.png)

### Oefening 5. Schoenen knopen

Teken een algoritme uit in een NSD dat de stappen toont om schoenveters te knopen.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="//www.youtube.com/embed/6oHVewk3dRk" title="YouTube video player" width="560"></iframe>

### Oefening 6. Papieren vliegtuig vouwen

Teken een algoritme uit in een NSD dat de stappen toont hoe je een papieren vliegtuigje kan vouwen.  
Je kan een van de stappenplannen hieronder gebruiken, of je kan je eigen favoriete vliegtuig uitleggen.

#### Zweeftopper

[![zweeftopper.jpg](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/zweeftopper.jpg)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/zweeftopper.jpg)

#### Origami vliegtuig 2

[![image-1620593145915.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1620593145915.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/image-1620593145915.png)

Meer vliegtuigplannen vind je [hier](https://www.foldnfly.com/index.html#/1-1-1-1-1-1-1-1-2).

# Selectie blok

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wat een selectieblok in een diagram betekent  
- Zelf een diagram kunnen opstellen waarin een selectieblok gebruikt wordt.  
- Het selectieblok gebruiken in combinatie met procesblokken of andere selectieblokken  
</p>

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/4YSkCZsWn94" width="100%"></iframe>

Het tweede blokje is het selectie blok.  
Deze duidt aan dat er een keuze moet gemaakt worden in je algoritme.  
Op basis van deze keuze ga je dan sommige dingen wel of net niet doen.  
Op deze plek krijg je dan een splitsing. Je zult dan 2 kolommen van proces blokken naast elkaar zien.

Hieronder is de selectieblok in het vet aangeduid:

<div id="bkmrk--0">![](https://i.imgur.com/5Dhyl4V.png)</div>De selectieblok staat dus tussen andere blokken in.  
De blokken worden nog steeds van boven naar beneden uitgevoerd.  
In dit voorbeeld is dit de volgorde waarop de blokken worden uitgevoerd:

1. Zoek iets om te eten
2. Dan wordt de selectieblok uitgevoerd
3. Eet de boterham op

Hoe de selectieblok werkt zien we hieronder.

## Selectie met 2 keuzes

De simpelste selectieblok heeft maar 2 keuzes, zoals in dit voorbeeld:

<div id="bkmrk--1">![](https://i.imgur.com/VQoANCc.png)</div>Groene driehoek: De keuze die gemaakt moet worden.  
Blauw: De eerste keuzemogelijkheid. (Choco in dit geval)  
Rood: De tweede keuzemogelijkheid. (Hagelslag in dit geval)

Als je choco kiest dan word de procesblok onder de blauwe driehoek uitgevoerd.  
“Smeer de choco op het brood”.  
De procesblokken onder de keuze Hagelsag worden *niet* uitgevoerd.

Maar als je hagelslag kiest dan worden de blokken onder de rode driehoek uitgevoerd.  
2 blokken dus: “Smeer border op het brood” en “Strooi hagelslag over de boter”.  
Maar de procesblok “Smeer de choco op het brood” wordt *niet* uitgevoerd, omdat die niet onder de rode driehoek staan.

## Meer dan 2 keuzes

Een selectieblok kan ook méér dan 2 keuzes hebben.  
Bekijk onderstaande video.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/gA-n_Gqd-90" width="100%"></iframe>

## Selectieblokken *in* selectieblokken

Onder de keuzes in een selectieblok kan je dus andere blokken zetten om uit te voeren.  
Je kan daar *eender welk type* blok zetten.  
Tot nu toe hebben we enkel maar procesblokken onder de keuzes gezet, maar je kan er ook nog eens een selectieblok onder zetten!  
Zo krijgen we dus een selectieblok *in* een selectieblok.

Een voorbeeld:

![](https://i.imgur.com/G2KGKzV.png)

Hier moeten we dus eerst kiezen of we choco willen of hagelslag.  
Als we voor hagelslag kiezen moeten we ook nog eens kiezen of we boter willen of niet.

Deze video legt het verder uit:

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/F44uiuWh2ZQ" width="100%"></iframe>

## Hoe een selectieblok tekenen

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="500" src="https://www.youtube.com/embed/B8c7ZxdrXlE" title="YouTube video player" width="100%"></iframe>

## Oefeningen

Volg de stappen in deze oefening.  
Nadien kan je onderaan deze pagina zien naar een mogelijke oplossing.

### Oefening 1: Een ei koken

Teken het NSD (Nassi–Shneiderman diagram) om een ei te koken.  
In je diagram moet je de keuze kunnen maken tussen een hardgekookt of zachtgekookt ei.

Ter informatie:

- Om een **zachtgekookt** ei te hebben moet een ei **4,5 minuten** koken
- Om een **hardgekookt** ei te hebben moet een ei **8 minuten** koken

### Oefening 2: Thee maken

**1. Diagram om een simpele thee te maken**

Bedenk even de situatie waarbij iemand een tas thee bestelt in een café.  
Hoe zou het NSD voor het maken van de thee er kunnen uitzien?  
Teken dit diagram. (In dit diagram moet je dus nog geen keuze maken)

**2. Een keuze toe voegen**  
In een café kan je normaal gezien eerst kiezen welke thee je juist wilt.  
Bijvoorbeeld zwarte thee, fruitthee, muntthee, …  
Welke stap in ons diagram zou dan veranderen?

Voeg een stap toe in je diagram waarin je kunt kiezen welke thee je wil.

**3. Nog een keuze**

Sommige mensen hebben graag suiker in hun thee.

Voeg een stap toe aan je diagram waarin je de keuze kan maken om wel of geen suiker toe te voegen aan de thee.

**4. Nog meer keuzes**

Voeg ook stappen toe in je diagram voor de volgende keuzes:

- Of je melk in je thee wilt
- Of je citroen in je thee wilt

### Oefening 3: De juiste trein nemen

Als je een trein wil nemen naar ergens moet je natuurlijk zien dat je de juiste trein neemt op het juiste perron.  
Maak een NSD waarin een persoon kan kiezen om naar een bepaalde stad te gaan.  
Dit NSD moet deze persoon dan begeleiden naar het juiste perron.

Hieronder een voorbeeld van mogelijke steden en perrons:

[![image-1650357242157.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2022-04/scaled-1680-/image-1650357242157.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2022-04/image-1650357242157.png)

# Iteratie blok

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Weten wat een iteratieblok in een diagram betekent  
- Zelf een diagram kunnen opstellen waarin een iteratie gebruikt wordt.  
- Het iteratieblok gebruiken in combinatie met procesblokken, selectieblokken en andere iteratieblokken  
</p>

Het woord iteratie betekent hetzelfde als het woord herhaling.  
In de iteratie blok zullen we dus bepaalde andere blokken blijven herhalen.

Bekijk de video hieronder voor een uitleg.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/FZIcc1xNpMU" width="100%"></iframe>

[![image-1620597106923.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1620597106923.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/image-1620597106923.png)

Het deel dat in groen is aangeduid hierboven bevat een voorwaarde (of controle) waarvan het resultaat waar of niet waar is.  
Zolang de voorwaarde waar is zullen alle blokken rechts van de groene haak herhaald worden.  
In dit geval is dat de procesblok die in het blauw is aangeduid. "Giet water in het glas".  
We blijven dus water gieten zo lang het glas niet vol is.

Nadien, als de voorwaarde niet meer waar is, wanneer het glas vol is, dan drinken we het water op.  
Deze laatste procesblok zit niet in het iteratieblok en wordt dus niet herhaald.

## Oefeningen

Maak een tekening van het diagram voor elke oefening.  
Nadien kan je onderaan deze pagina de mogelijke oplossingen bekijken.

### Oefening 1: fietsband

Tijdens het fietsen krijgen we een een platte fietsband.  
We repareren de band en moeten deze nadien opblazen met onze fietspomp.  
Hoe zou een NSD er kunnen uitzien voor deze fietsband op te blazen?

We gaan er van uit dat onze fietspomp een drukmeter heeft en dat de bandendruk 4 <abbr title="Eenheid van druk">bar</abbr> moet zijn.

### Oefening 2: autostrade

Beeld je in dat je op de autostrate aan het rijden bent naar ergens.  
Je moet blijven rijden tot je aan je bestemming aankomt.  
Maar als je op de autostrade een afrit tegen komt moet je wel de keuze maken of je er af rijd of niet.

Hoe zou je dit opstellen in een NSD?  
Denk er aan dat je bepaalde blokken in andere blokken kunt steken.

### Oefening 3: kleren sorteren

Stel, je hebt een wasmand vol met kleren die gewassen moeten worden.  
Elk kledingstuk in de wasmand moet eerst gesorteerd worden in een hoop van witte kleren en gekleurde kleren.  
Hoe zou je dit voorstellen in een NSD?

### Oefening 4: verkeerslicht

Een verkeerslicht loopt telkens door de zelfde volgorde van kleuren.  
Eerst groen, dan oranje, dan rood. (En dan weer groen)  
Stel dit algoritme voor in een NSD.

Bewerk je algoritme zodat het ook de situatie behaldelt wanneer een voetganger op het knopje heeft geduwd om over te gaan.

# Correcties van oefeningen

Hieronder vinden jullie een lijstje van vaak gemaakte fouten bij het tekenen van de diagrammen.

## Fout: Plaatsing van blokken

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/V6h1kODnVVw" width="100%"></iframe>

Het is belangrijk dat blokken aansluiten op elkaar.  
Anders is het niet duidelijk waar een diagram begint en eindigt.

<table class="part" data-endline="18" data-startline="16" id="bkmrk--0" style="height: 469px;"><thead><tr style="height: 29px;"><th style="height: 29px; width: 422.867px;">![:x:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/x.png)</th><th style="height: 29px; width: 386.133px;">![:heavy_check_mark:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/heavy_check_mark.png)</th></tr></thead><tbody><tr style="height: 440px;"><td style="height: 440px; width: 422.867px;">![](https://i.imgur.com/Zfx6xYz.png)</td><td style="height: 440px; width: 386.133px;">![](https://i.imgur.com/dSFWPUL.png)</td></tr></tbody></table>

## Fout: Blokken naast elkaar

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/DLKsHWw7bvQ" width="100%"></iframe>

Blokken kunnen enkel naast elkaar staan in een selectieblok.

De proces blokken “Voeg suiker toe” en “Voeg citroen toe” staan naast elkaar. Dit kan niet.  
Ze kunnen enkel naast elkaar staan in 1 van de kolommen in een selectie blok.  
De keuze die gemaakt moet worden moet er dus duidelijk staan.

<table class="part" data-endline="32" data-startline="30" id="bkmrk--2"><thead><tr><th>![:x:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/x.png)</th><th>![:heavy_check_mark:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/heavy_check_mark.png)</th></tr></thead><tbody><tr><td>![](https://i.imgur.com/5EXR4WH.png)</td><td>![](https://i.imgur.com/OZ8kWzX.png)</td></tr></tbody></table>

## Fout: Geen blokken onder de keuzes in een selectieblok

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/_KlYzTn0Fyk" width="100%"></iframe>

Er is een selectieblok toegevoegd, maar er wordt niet aangeduid wat er moet gebeuren onder elke keuze.  
De keuze die gemaakt moet worden moet ook duidelijk genoteerd worden.

<table class="part" data-endline="42" data-startline="40" id="bkmrk--4"><thead><tr><th>![:x:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/x.png)</th><th>![:heavy_check_mark:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/heavy_check_mark.png)</th></tr></thead><tbody><tr><td>![](https://i.imgur.com/VDGGZ3u.png)</td><td>![](https://i.imgur.com/tvsV9Rz.png)</td></tr></tbody></table>

## Fout: De haak van de iteratie blok

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" src="//www.youtube.com/embed/13fzNIWy0mQ" width="100%"></iframe>

In dit voorbeeld is het niet duidelijk waar de “Was je kleren” proces blok staat.  
Moet deze herhaald worden - en staat deze dus in de iteratie blok?  
Of moet deze niet herhaald worden en staat deze er buiten?

<table class="part" data-endline="55" data-startline="52" id="bkmrk-wel-herhaald%3A-%C2%A0-niet"><thead><tr><th>![:x:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/x.png)</th><th>![:heavy_check_mark:](https://assets.hackmd.io/build/emojify.js/dist/images/basic/heavy_check_mark.png)</th></tr></thead><tbody><tr><td>![](https://i.imgur.com/D6kjdp5.png)</td><td>**Wel herhaald:** ![](https://i.imgur.com/JGbZe81.png)</td></tr><tr><td> </td><td>**Niet herhaald:**  ![](https://i.imgur.com/5BSROni.png)</td></tr></tbody></table>

# Zelf programma’s schrijven



# Inleiding tot Scratch

### 1. Oefeningen openen &amp; kopiëren

#### 1.1. Een oefening openen

Om een oefening te openen klik je gewoon op de <span style="color: #3366ff;">**Bekijk van binnen knop**</span> die in de cursus bij de oefening staat.

![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)

De oefening wordt dan geopend in Scratch.  
Deze oefening kan je niet bewerken!

#### 1.2. Kopie maken van een oefening

Om een oefening te kunnen bewerken moet je op de <span style="color: #339966;">**Remix**</span> knop bovenaan klikken.

![remix.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/remix.png)

Na op deze knop te drukken wordt er een <span style="text-decoration: underline;">privé</span> kopie van de oefening gemaakt.  
Deze kan je dan wel bewerken.

#### 1.3. Delen van je oplossing

Nadat je de oefening opgelost hebt moet je deze delen.  
Dan wordt de oplossing zichtbaar voor iedereen en dan kan ik deze verbeteren.  
De oefening delen doe je door bovenaan op de <span style="color: #ff6600;">**Delen**</span> knop te klikken.

![delen.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/delen.png)

#### Video die de stappen bovenaan uitlegt

<iframe allowfullscreen="allowfullscreen" data-mce-fragment="1" frameborder="0" height="400" src="//www.youtube.com/embed/uRdlhFmeo2o" title="YouTube video player" width="100%"></iframe>

### 2. Scratch gebruiken

Na het openen van een oefening krijg je de map van de oefening te zien.  
Op deze map zijn er witte vakjes aangeduid. In deze witte vakjes staan er een paar symbolen.

![image-1618358839590.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618358839590.png)  
Deze map heeft 4 vakjes met in het bovenste en onderste vakje een paar symbolen.

#### Symbolen op de map

<table border="1" id="bkmrk-dit-is-een-schatkist" style="height: 57px; width: 58.5185%; border-collapse: collapse;"><tbody><tr style="height: 47px;"><td class="align-center" style="width: 9.25925%; height: 47px;">![schatkist.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/schatkist.png)

</td><td style="width: 90.7408%; height: 47px;">Dit is een schatkist. Dit is het doel in elke oefening.  
Hier moet je karakter op komen te staan.</td></tr><tr style="height: 10px;"><td class="align-center" style="width: 9.25925%; height: 10px;">![karakter.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/karakter.png)</td><td style="width: 90.7408%; height: 10px;">Het karakter dat je zult bewegen over de map.  
Dit karakter kan enkel bewegen over de witte vakken.  
Als je een van de zwarte vakken raakt dan zal het programma een foutmelding tonen.</td></tr></tbody></table>

#### Van het begin naar de schatkist raken

Om ons karakter te laten bewegen zullen we dit instructies moeten geven.  
Dit kunnen we door gebruik te maken van een paar instructie blokken die het karakter zal uitvoeren.

Deze blokken vinden we onder <span style="color: #ff00ff;">**Mijn blokken**</span> in de menu links.  
![image-1618427940159.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618427940159.png)  
Na daar op te klikken krijgen we de volgende blokken te zien:

<table border="1" id="bkmrk-door-dit-blokje-te-g" style="border-collapse: collapse; width: 100%; height: 30px;"><tbody><tr style="height: 10px;"><td style="width: 13.9506%; height: 10px;">![1 vak vooruit.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/1-vak-vooruit.png)</td><td style="width: 86.0494%; height: 10px;">Door dit blokje te gebruiken zal het karakter 1 vak vooruit bewegen.  
In de richting naar waar de punt van het karakter wijst.</td></tr><tr style="height: 10px;"><td style="width: 13.9506%; height: 10px;">![draai links.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/draai-links.png)</td><td style="width: 86.0494%; height: 10px;">Door dit blokje te gebruiken zal het karakter zijn punt 90 graden naar **links** draaien.</td></tr><tr style="height: 10px;"><td style="width: 13.9506%; height: 10px;">![draai rechts.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/draai-rechts.png)</td><td style="width: 86.0494%; height: 10px;">Door dit blokje te gebruiken zal het karakter zijn punt 90 graden naar **rechts** draaien.</td></tr></tbody></table>

#### Hoe je programma uitvoeren

Na het programma te openen zie je de volgende blok staan:

![wanneer op vlag wordt geklikt.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/wanneer-op-vlag-wordt-geklikt.png)

Dit is de Start blok.   
Onder deze blok kan je andere blokjes gaan hangen. (Deze klikken er in zoals een puzzelstuk)  
Je kan deze vanuit het menu links rechtstreeks onder dit gele blokje slepen.  
Hier onder kan je dus de roze blokken van uit de <span style="color: #ff00ff;">**Mijn blokken**</span> menu hangen.

Nadat je je programma geschreven hebt dan kan je op deze knop klikken rechtsboven:

![image-1618427965424.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618427965424.png)

Scratch gaat dan zien welke blokken er onder de Start blok hangen.  
En Scratch zal deze blokken dan stap per stap uitvoeren van boven naar beneden.

#### Video die de stappen bovenaan uitlegt

<iframe allowfullscreen="allowfullscreen" data-mce-fragment="1" frameborder="0" height="400" src="//www.youtube.com/embed/CbKYPYT-d_s" title="YouTube video player" width="100%"></iframe>

# De sequentie

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Een eenvoudig programma kunnen opstellen in Scratch om tot een bepaald doel te raken.  
- Begrijpen dat de volgorde van de uit te voeren stappen belangrijk is.  
- Begrijpen dat je een probleem op verschillende manieren kan oplossen en daar de beste manier kunnen kiezen  
</p>

Wanneer we een programma schrijven moeten we tegen de computer zeggen wat hij juist moet doen.  
Dit moeten we doen aan de hand van een algoritme (een stappenplan).  
Bekijk nog eens [de eigenschappen van een algoritme](https://books.jeroenpelgrims.com/books/algoritmisch-denken/page/wat-is-een-algoritme).

Wanneer we een algoritme opstellen is het dus belangrijk dat de stappen in de <span style="text-decoration: underline;">juiste volgorde</span> staan.  
Dit is belangrijk om om te letten in de volgende oefeningen.  
De volgorde van de stappen moet juist zijn want anders zal je niet tot de juiste oplossing komen in deze oefeningen.

<p class="callout warning">**Belangrijk!**  
Druk na het openen van een oefening altijd eerst op de ![remix.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/remix.png) knop om de oefening te kopiëren.  
En als je klaar bent klik je op de ![delen.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/delen.png) knop bovenaan.</p>

### Sequentie 1

![image-1617918014758.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1617918014758.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501425823/)

In deze oefening moet je maar 1 blokje gebruiken.  
Het blokje om vooruit te stappen:

![1 vak vooruit.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/1-vak-vooruit.png)

### Sequentie 2

![image-1618420308327.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618420308327.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515630490/)

### Sequentie 3

![image-1618358839590.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618358839590.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501433323/)

In deze oefening heb je ook een van de volgende blokjes nodig:

![draai links.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/draai-links.png) ![draai rechts.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/draai-rechts.png)

### Sequentie 4

![image-1618358925902.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618358925902.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501434328/)

### Sequentie 5

![image-1618358963850.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618358963850.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501477664/)

In deze oefening zijn er 2 nieuwe symbolen op de map en is er ook 1 nieuw blokje.

##### Nieuwe mapsymbolen

<table border="1" id="bkmrk-dit-symbool-duid-een" style="border-collapse: collapse; width: 100%; height: 121px;"><tbody><tr style="height: 62px;"><td class="align-center" style="width: 7.90124%; height: 62px;">[![poort.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/poort.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/poort.png)</td><td style="width: 92.0988%; height: 62px;">Dit symbool duid een poort aan op de map. Hier kan je niet door.  
Als je het blokje <span style="color: #ff00ff;">**1 vak vooruit**</span> zou gebruiken hier dan zal je programma een foutmelding tonen.</td></tr><tr style="height: 59px;"><td class="align-center" style="width: 7.90124%; height: 59px;">[![knop.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/knop.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/knop.png)</td><td style="width: 92.0988%; height: 59px;">Dit symbool duid een een knop aan.  
Als je op deze knop drukt dan zal de poort verdwijnen.</td></tr></tbody></table>

##### Nieuwe blokjes

<table border="1" id="bkmrk-%C2%A0-als-het-rode-karak" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 14.6913%;">[![druk op knop.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/druk-op-knop.png)](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/druk-op-knop.png)

</td><td style="width: 85.3087%;">Als het rode karakter op de knop staat en je gebruikt dit blokje, dan zal de knop worden ingeduwd.  
Als de knop is ingeduwd dan zal de poort verdwijnen.  
Dan kan je dus doorlopen.</td></tr></tbody></table>

### Sequentie 6

![image-1618420576722.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618420576722.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515561983/)

### Sequentie 7

![image-1618420594064.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618420594064.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515627740/)

### Sequentie 8

![image-1618359009893.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618359009893.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501479304/)

### Sequentie 9

![image-1618359045315.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618359045315.png)  
[![Oefening bekijken.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501482672/)

In deze oefening heb je veel blokjes nodig..  
In het volgende deel, Iteraties, zien we hoe dit makkelijker kan met minder blokjes.

# De iteratie

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Patronen kunnen vinden in een probleem  
- Een herhaling kunnen gebruiken in een programma  
- Je programma zo kort (en simpel) mogelijk maken door het gebruik van een herhaling of een geneste herhaling.  
</p>

In deze oefeningen zullen we bepaalde stappen meerdere keren moeten uitvoeren.  
Als we bijvoorbeeld 10 keer een stap vooruit moeten zetten zou het veel werk zijn om 10 keer een blokje <span style="color: #ff00ff;">**1 vak vooruit**</span> te zetten.  
Het zou makkelijker zijn als we gewoon zouden kunnen zeggen "<span style="color: #ff6600;">**Herhaal 10 keer**</span> het blokje <span style="color: #ff00ff;">**1 vak vooruit**</span>".

Dat kunnen we doen met het <span style="color: #ff6600;">**Herhaal** </span>blokje:  
Nu wordt het blokje <span style="color: #ff00ff;">**1 vak vooruit**</span> 10 keer uitgevoerd.  
Het is dus alsof er 10 keer na elkaar het blokje <span style="color: #ff00ff;">**1 vak vooruit**</span> staat.

![herhaal 1 vooruit](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/herhaal-1-vooruit.png)

Dit blokje kan je links vinden in de sectie "Besturen".

![image-1618451595412.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618451595412.png)

Binnenin het <span style="color: #ff6600;">**Herhaal**</span> blokje kan je méérdere blokjes zetten.

![herhaal 1 vooruit draai links](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/herhaal-1-vooruit-draai-links.png)

Nu wordt er 10 keer na elkaar de blokjes <span style="color: #ff00ff;">**1 vak vooruit**</span> en <span style="color: #ff00ff;">**draai links** </span>uitgevoerd.

#### Geneste blokken

Je kan het <span style="color: #ff6600;">**Herhaal** </span>blokje ook binnenin een ander <span style="color: #ff6600;">**Herhaal**</span> blok zetten. Dit noemen ze blokken "nesten".  
Dit ga je nodig hebben vanaf oefening 6.

![nested](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/nested.png)

### Iteratie 1

![image-1618450363214.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450363214.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501963670/)

### Iteratie 2

![image-1618450389252.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450389252.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501981985/)

### Iteratie 3

![image-1618450415006.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450415006.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/501969157/)

### Iteratie 4

![image-1618450438667.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450438667.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515815323/)

### Iteratie 5

![image-1618450462378.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450462378.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/502014886/)

### Iteratie 6

![image-1618450509010.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450509010.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515822019/)

### Iteratie 7

![image-1618450643063.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618450643063.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515840709/)

### Iteratie 8

![image-1618482828371.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1618482828371.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/515817336/)

# De selectie

<p class="callout success">**Wat moet je kennen en kunnen na dit deel?**  
- Keuzes kunnen maken in je programma met behulp van een selectie.  
</p>

In dit deel zullen we gebruik maken van een paar nieuwe blokjes in Scratch.  
Het <span style="color: #ff9900;">**Als-Dan**</span> blokje en het <span style="color: #ff9900;">**Als-Dan-Anders** </span>blokje:

![als-dan.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/als-dan.png) ![als-dan-anders.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/als-dan-anders.png)

Deze blokjes vind je in het "Besturen" menu links:  
![image-1621598762535.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621598762535.png)

#### Condities

Bovenaan in elk blokje zie je een donkere zeshoekige ruimte.  
Hierin moeren we een **<span style="color: #00ccff;">Conditie</span>** (of voorwaarde) zetten.

<p class="callout info">Een **<span style="color: #00ccff;">Conditie</span>** is een **ja-nee vraag**. Dit type vraag heeft altijd maar 2 mogelijke antwoorden.  
**Ja** of **Nee**. (Soms worden ook **Waar** of **Onwaar** gebruikt in plaats van **Ja** en **Nee**)</p>

In Scratch kunnen we alle mogelijke **<span style="color: #00ccff;">Condities</span>** vinden in het "Waarnemen" menu links:  
![image-1621167124214.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621167124214.png)

De conditie die we het meest zullen gebruiken in de oefeningen is de <span style="color: #00ccff;">**"Raak ik" conditie**</span>:

![raak-ik.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/raak-ik.png)

Deze conditie controleert of het huidige karakter een ander iets aanraakt.  
Standaard wordt er gecontroleerd of het karakter de muisaanwijzer aanraakt.  
Maar dit kunnen we veranderen door op het pijltje te klikken:

![raak-ik-open.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/raak-ik-open.png)

We kunnen dus ook kiezen om te controleren of we iets anders aanraken.  
Zoals de schatkist of een knop.

In de oefeningen hieronder komt er een nieuw symbool bij, een boom.  
Dit symbool wordt later verder uitgelegd.  
![image-1621172518940.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621172518940.png)

#### Als-Dan(-Anders)

Deze condities kunnen we dan gebruiken in de <span style="color: #ff9900;">**Als-Dan**</span> of de <span style="color: #ff9900;">**Als-Dan-Anders**</span> blok.  
De conditie wordt gecontroleerd, en als het resultaat **Waar** is, dan worden de blokjes binnenin het <span style="color: #ff9900;">**Als-Dan**</span> blok uitgevoerd.  
Als de conditie **Niet waar** is dan worden de blokjes binnenin het <span style="color: #ff9900;">**Als-Dan**</span> blok overgeslagen.

![als-boom.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/als-boom.png)

In het voorbeeld hierboven wordt er gecontroleerd of ons karakter een boom raakt.  
Zo ja, dan wordt de boom omgekapt. (het blokje <span style="color: #ff00ff;">**Kap boom**</span> wordt <span style="text-decoration: underline;">wel</span> uitgevoerd).  
Anders wordt het blokje **<span style="color: #ff00ff;">Kap boom</span>** <span style="text-decoration: underline;">niet</span> uitgevoerd.

![als-boom-anders.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/als-boom-anders.png)

In het voorbeeld hierboven wordt <span style="color: #ff00ff;">**Kap boom**</span> uitgevoerd als de conditie <span style="color: #00ccff;">**raak ik boom** </span><span style="text-decoration: underline;">waar</span> is.  
Als deze <span style="text-decoration: underline;">niet waar</span> is dan wordt het blokje <span style="color: #ff00ff;">**1 vak vooruit**</span> uitgevoerd.  
Bij het <span style="color: #ff9900;">**Als-Dan-Anders**</span> blokje wordt er dus altijd 1 van de 2 blokjes uitgevoerd.

#### De boom

In de oefeningen hieronder komt er dus een nieuw symbool bij, de boom.  
![image-1621172518940.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621172518940.png)  
Bomen kunnen enkel maar groeien op de **groene vakken** op de kaart.  
Om voorbij een boom te raken moet je op het vakje van de boom gaan staan en het <span style="color: #ff00ff;">**Kap boom**</span> blokje gebruiken.

<p class="callout warning">**Opgelet! Bomen staan er niet altijd!**  
Elke keer dat je op de start knop drukt worden de bomen opnieuw geplaatst.  
Er is 50% kans dat er een boom zal verschijnen op een groen vak, en 50% kans dat er geen boom zal staan.</p>

Je kan enkel het blokje **<span style="color: #ff00ff;">Kap boom</span>** gebruiken als er een boom staat.  
Je zal dus om deze oefeningen op te lossen het <span style="color: #ff9900;">**Als-Dan**</span> blokje of het <span style="color: #ff9900;">**Als-Dan-Anders**</span> blokje moeten gebruiken.

### Selectie 1

![image-1619690900207.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1619690900207.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/519272024)

### Selectie 2

![image-1619712043964.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/image-1619712043964.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/519512268/)

### Selectie 3

![image-1621183602313.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621183602313.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/531251546/)

### Selectie 4

![image-1621470221450.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621470221450.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/533104871/)

In deze oefening zie je een paars vak staan.  
Als je op de **<span style="color: #339966;">groene vlag</span>** klikt zal dit paarse vak veranderen naar rood of blauw.   
Als het vak **<span style="color: #ff0000;">rood </span>**is dan moet je de <span style="text-decoration: underline;">linkse</span> afslag nemen.  
Als het vak **<span style="color: #0000ff;">blauw</span>** is dan moet je de <span style="text-decoration: underline;">rechtse</span> afslag nemen.  
Probeer eens meerdere keren op de groene vlag te klikken. Het pad is niet altijd het zelfde! Maar het programma dat je schrijft moet wel altijd tot het einde raken.

Om te controleren of je op een rood of een blauw vak staat kan je deze <span style="color: #00ccff;">**Conditie**</span> gebruiken:  
![raak-ik-kleur.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/raak-ik-kleur.png)

Als je op het bolletje klikt met de kleur in dan kan je een andere kleur kiezen:

![image-1621471380959.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621471380959.png)  
  
Als je dan op de onderste knop klikt (hierboven aangeduid met een rode cirkel) dan kan je een andere kleur aanduiden.  
Je kan dan de rode of blauwe kleur linksboven op de map selecteren.

### Selectie 5

![image-1621470247620.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621470247620.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/533113906/)

### Selectie 6

![image-1621470268259.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621470268259.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/533125690/)

### Selectie 7

Deze oefening kan je op meerdere manieren oplossen.  
Een van deze blokjes kan daarin helpen:

 ![herhaal.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/herhaal.png) ![herhaal-tot.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/Mw3herhaal-tot.png)

Het linkse blokje herhaalt oneindig en het rechtse herhaalt totdat een bepaalde conditie waar is.

In het herhaal tot blokje kan je een <span style="color: #00ccff;">**Conditie**</span> zetten.  
Het zal de blokjes binnenin zich blijven herhalen tot de conditie waar is.  
Dan stopt de herhaling.

Probeer je oplossing zo kort mogelijk te maken!  
Je kan deze oefening oplossen door maar 6 blokken en 2 condities te gebruiken.

![image-1621598233912.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621598233912.png)  
[![Bekijk van binnen](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-04/scaled-1680-/oefening-bekijken.png)](https://scratch.mit.edu/projects/534041241/)

# CodeCombat

![image-1621525767351.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621525767351.png)

![image-1621525809288.png](https://books.jeroenpelgrims.com/uploads/images/gallery/2021-05/scaled-1680-/image-1621525809288.png)