Inhoudsopgave > Programmeerstructuren documentatie   

Programmeerstructuren

Om aan te geven wanneer welke basisinstructie moet worden uitgevoerd, kan je gebruik maken van de volgende programmeerstructuren:

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 als maar 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 waarnemingsinstructie zijn (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 waarnemingsinstructie zijn (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 doet waarnemingsinstructie zijn (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
} 

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 hetzelde aantal parameters. De argumenten arg1, arg2, . . . , argN zijn de concrete waarden voor de parameters in de procedure definitie.

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

 


naar inhoudsopgave naar top