Documentatie
Programmeerstructuren
Overzicht
Discussiegroep
Introductieboek
Basisinstructies
Programmeerstructuren
- commentaar
- herhalingen
- als-structuren
- logische expressies
- procedures
- einde
Voorbeeld programma's
Educatie
Arabic (العربية) Chinese (中文) Dutch (Nederlands) French (Français) English German (Deutsch) Portuguese (Português) Swedish (Svenska)

Programmeerstructuren

Hieronder volgen de verschillende structuren die toegestaan zijn om het gedrag van de robot te programmeren.

Commentaar

# tekst die niet door de robot gelezen wordt
alle tekst in een programma dat na het hekje, '#', staat wordt niet geinterpreteerd als instructies. Pas op de volgende regel worden de instructies weer gelezen door de robot. Gebruik deze mogelijkheid om een programma desgewenst te voorzien van extra informatie.

Herhalingen

herhaal(n){...instructies...}
herhaalt de instructies tussen accolades precies n keer.

Voorbeeld:

# een 2x2 vierkantje
herhaal(4)
{
    vooruit(2)
    rechts()
}
                  

herhaal(){...instructies...}
blijft de instructies tussen accolades telkens herhalen.

Voorbeeld:

# blijf alsmaar rechtdoor gaan 
# (zal uiteindelijk blijven botsen)
herhaal()
{
    vooruit()
}

herhaalZolang(conditie){...instructies...}
herhaalt de instructies tussen accolades net zo lang totdat de conditie niet meer opgaat. De conditie moet logische expressie zijn die de waarde waar of onwaar aanneemt (bijv. voorIsVrij())

Voorbeeld:

# blijf rechtdoor gaan, totdat je niet verder kunt
herhaalZolang(voorIsObstakel)
{
    vooruit(1)
}

doorbreekLus
zorgt ervoor dat de lus waar deze instructie in staat wordt beëindigd, en er wordt verder gegaan met de eerste instructie na deze lus.

Voorbeeld:

# blijf rechtdoor gaan, totdat je niet verder kunt
herhaal()
{
    als(voorIsObstakel())
    {	
        doorbreekLus
    }
    anders
    {	
        vooruit(1)
    }
}

 

Als-structuren

als(conditie){...instructies...}
voert de instructies tussen accolades alleen uit als de conditie opgaat. De conditie moet logische expressie zijn die de waarde waar of onwaar aanneemt (bijv. voorIsVrij())

Voorbeeld:

# als je links een witte stip ziet, maak hem zwart
als(linksIsWit())
{
    links()
    vooruit(1)
    verfWit()
    stopVerven()
    achteruit(1)
    rechts()
}
                  

als(conditie){...instructies...}anders{...instructies...}
voert de instructies tussen het eerste paar accolades alleen uit als de conditie opgaat, anders voert het alleen de instructies uit tussen het tweede paar accolades. De conditie moet logische expressie zijn die de waarde waar of onwaar aanneemt (bijv. voorIsVrij())

Voorbeeld:

# als je links een witte stip ziet, maak hem zwart, 
# rij anders een stukje door;
als(linksIsWit())
{
    links()
    vooruit(1)
    verfWit()
    stopVerven()
    achteruit(1)
    rechts()
}
anders
{
    vooruit(1)
}
als(conditie){...instructies...} anders als {...instructies...}
is de makkelijkere notatie zonder extra accolades voor: als(conditie){...instructies...} anders { als {...instructies...}}. Het codeblok van anders wordt alleen uitgevoerd als zijn overeenkomende conditie het geval is. Deze constructie is met name nuttig wanneer er meerdere verschillende gevallen moeten worden gecontroleerd en uitgevoerd. In het voorbeeld volgt de robot een stapje een witte lijn op de grond.
als(voorIsWit())
{
    # alleen als voor is wit
    vooruit(1)
}
anders als(rechtsIsWit())
{
    # alleen als rechts is wit
    rechts()
    vooruit(1)
}
anders als(linksIsWit())
{
    # alleen als links is wit
    links()
    vooruit(1)
}
anders
{
    # alleen als ALLE voorgaande condities niet het geval waren
    rechts()
    rechts()
    vooruit()
} 

 

Logische expressies

De conditie van als- en herhaalZolang-structuren zijn zogenaamde logische expressies. Deze expressies zijn een voorwaarde die de waarden waar of onwaar aannemen, waarna naar het overeenkomende deel van de code kan worden gesprongen alvorens de uitvoering te hervatten .

Een logische expressie kan een van de waarnemingsintructies zijn, zoals bijvoorbeeld linksIsWit(). Waarnemingsinstructies kunnen ook worden samengevoegd met de booleaanse operatoren niet, en, of.

Voorbeeld:

# als je links een witte stip ziet, maak hem zwart
als(linksIsWit())
{
    links()
    vooruit(1)
    verfWit()
    stopVerven()
    achteruit(1)
    rechts()
}
                  

De conditie kan echter ook verfijnt worden om precieser aan te geven wanneer de bijbehoren instructies moeten worden uitgevoerd met een van de volgende operatoren.

Operatie
Alternatieve
notatie
Aantal
argumenten
Uitleg
niet ~ 1

Keert de waarde van het argument om:

Waarheidstabel:
niet waar = onwaar
niet onwaar = waar

Voorbeeld:
niet voorIsVrij()

en & 2

Alleen waar als beide argumenten waar zijn.

Waarheidstabel:
waar en waar = waar
waar en onwaar = onwaar
onwaar en waar = onwaar
onwaar en onwaar = onwaar

Voorbeeld:
voorIsVrij() en rechtsIsWit()

of | 2

Waar als een van beide argumenten waar is.

Waarheidstabel:
waar of waar = waar
waar of onwaar = onwaar
onwaar en waar = onwaar
onwaar en onwaar = onwaar

Voorbeeld:
voorIsVrij() of rechtsIsWit()

De waarden waar en onwaar kunnen ook direct worden gebruikt net als een waarnemingsinstructie.

De volgorde van deze operatoren is van belang (net zoals bij vermenigvuldigen en optellen). De operatie niet bindt het sterkst, gevolgd door en, gevolgd door of. Er kunnen haakjes worden gebruikt om de volgorde naar wens aan te passen.

Voorbeelden:

				
herhaalZolang(niet voorIsVrij() en (linksIsWit() of rechtsIsWit())){
	vooruit(1)
}

als(kopOfMunt() en niet rechtsIsWit())
{
    rechts()
    achteruit(1)
}

als(waar en onwaar){
	#deze instructie wordt nooit uitgevoerd
	vooruit(1)
}
 

Procedures

procedure naam(par1, par2, ..., parN){...instructies...}
definieert een nieuwe procedure met een zelf gekozen naam. De procedure kan beschikken over een aantal parameters die hier par1, par2, . . . , parN worden genoemd. Dit zijn de namen van de variabelen die je wilt gebruiken in de instructies die tussen accolades staan.

Voorbeeld:

# definieer het tekenen van een rechthoek 
procedure rechthoek(breedte, hoogte)
{
    verfWit()
    herhaal(2)
    {
        vooruit(hoogte)
        rechts()
        vooruit(breedte)
        rechts()
    }
    stopVerven()
}

naam(arg1, arg2, . . . , argN)
is de aanroep van de procedure met dezelfde naam en hetzelfde aantal parameters. De argumenten arg1, arg2, . . . , argN zijn de concrete waarden voor de parameters in de proceduredefinitie.

Voorbeeld:

vooruit(1)
rechthoek(3,2) # de aanroep gebruikt de bovenstaande definitie
vooruit(3)
rechthoek(1,4) # nog een aanroep, nu met andere argumenten

retourneer
zorgt ervoor dat de uitvoer van de huidige procedure wordt afgebroken. De uitvoer zal worden hervat bij de eerste insructie na de procedure-aanroep. Op deze manier is het mogelijk slehts een eerste deel van de procedure te laten uitvoeren.

piet()
# hier gaat de uitvoer verder nadat 'piet' is voltooid 
links() 
vooruit(1)


procedure piet()
{
    vooruit(5)
    als(voorIsObstakel())
    {
        # breek de uitvoer van deze procedure af
        retourneer
    }
    vooruit(3)
}

Einde

einde
zorgt ervoor dat het hele programma direct stopt met de uitvoer als deze instructie wordt bereikt.

Voorbeeld:

# stop na 5 stappen, of eerder als je rechts een baken ziet
herhaal(5)
{
	vooruit(1)
	als(rechtsIsBaken())
	{
		einde # breek het programma af
	}
}
# normaal einde van het programma
                  

 

RoboMind.net - Copyright © 2005 - 2008 - Arvid Halma