Documentazione RoboMind
Documentazione
Strutture di programmazione
Panoramica
Introduzione
Istruzioni Base
Strutture di programmazione
- commenti
- cicli
- struttura-if
- procedure
- Fine
Esempi di codice

Strutture di programmazione

Qui puoi trovare la "grammatica" e le strutture di controllo che puoi usare per far muovere il robot .

Commenti

# libero testo che non sara' letto

Tutto il testo che c'e' dopo il # non sara' letto dal compilatore. Il robot procedera' a leggere la riga successiva del codice. Sarebbe utile usare i commenti nelle vari parti del codice per avere una documentazione personale e/o nel caso si debba far leggere il codice a qualche altro utente per facilitarne la comprensione

Cicli

Ripeti(n){...istruzioni...}
ripeti le istruzioni racchiuse tra le parentesi graffe per n volte.

Example:

# un rettangolo 2x2
Ripeti(4)
{
	Avanti(2)
	Destra
}
                  

Ripeti{...istruzioni...}
Continua a ripetere le istruzioni fra le graffe.

Esempio:

# va solo avanti
# (e inevitabilmente colpir� un muro o un ostacolo)
Ripeti
{
	Avanti(1)
}

RipetiFinoAChe(condizioni){...istruzioni...}
Ripete le istruzioni fra le parentesi graffe, fino a che diventa falsa l'istruzione tra le parentesi tonde(for example DavantiLibero)

Esempio:

# andra' sempre avanti,a'
# ma si ferma quando non potra' andare piu' avanti
RipetiFinoAChe(DavantiLibero)
{
	Avanti(1)
}

Esci
ti permette di uscire fuori dal ciclo (e.g. a Ripeti ciclo), impedendo di eseguire il resto delle istruzioni delle parentesi graffe. Il robot continuera' ad eseguire le prossime istruzioni fuori dal ciclo .

Esempio:

# va avanti fino a che puo'
Ripeti
{
	Se(DavantiBloccato}	{
		Esci
	}
	Altrimenti
	{	
		Avanti(1)
	}
}
                  

Struttura-se

Se(condizione){...istruzioni...}
Eseguira' le istruzioni che ci sono fra le parentesi graffe se la condizione scritta tra le parentesi tonde e' vera.Altrimenti il robot passera' alle istruzioni scritte dopo.La condizione dev'essere l'istruzione tipo: DavantiBloccato e simili

Esempio:

# se alla tua sinistra c'e' bianco allora dipingi nero
Se(SinistraBianco)
{
	Sinistra
	Avanti(1)
	DipingiNero
	FermaDipingi
	Indietro(1)
	Destra
}
                  

Se(condizione){...instructions...}Altrimenti{...istruzioni...}
Il robot eseguira' il primo blocco d'istruzioni sono la condizione e' vera, altrimenti eseguira' il secondo blocco d'istruzioni. La condizione dev'essere tipo: DavantiBloccato e simili

Esempio:

# se vedi bianco a sinistra allora dipingi in nero
# altrimenti guida avanti per 3 passi
Se(SinistraBianco)
{
	Sinistra
	Avanti(1)
	DipingiNero
	FermaDipingere
	Indietro(1)
	Destra
}
Altrimenti
{
	Avanti(3)
}
                  

Espressioni
Logiche

Le condizioni del Se- e RipetiFinoAChe sono chiamate espressioni logiche.Le espressioni logiche danno come risultato Vero or Falso.Vengono utilizzate per decidere le istruzioni.

Una logica espressione puo' essere data da le istruzioni di percezione, e.g.: SinistraBianco. Le istruzioni base posso essere composte inoltre anche da not, and, or.

Esempio:

Se(SinistraBianco)
{
    Sinistra
    Avanti(1)    
}

Le condizioni posso anche essere combinate tra loro per indicare quando eseguire una determinata istruzioni.

Operazione
Notazione
alternativa
Numero degli
argomenti
Spiegazione
non ~ 1

Nega il valore degli argomenti :

Tavola delle verita' :
non vero = Falso
non falso = vero

Esempio:
non DavantiLibero

e & 2

Vero solo se entrambi gli argomenti sono veri

Tavola della verita':
vero e vero = vero
vero e falso = falso
falso e vero = falso
falso e falso = falso

Esempio:
DavantiLibero and DestraBianco

o | 2

Quando uno dei due e' vero.

Truth table:
vero o vero = vero
vero o falso = vero
falso o vero = vero
falso o falso = falso

Esempio:
DavantiLibero o DestraBianco

I valori vero e falso posso essere applicati diettamente alle istruzioni di percezione.

L'ordine degli operatori e' molto importante(come moltiplicare e aggiungere numeri). L'operazione non si lega maggiormenete, se seguita da e, e poi dao. Le parentesi possono essere utilizzate per influenzare l'ordine di valutazione.

Esempio:

				
RipetiFinoAChe(non DavantiLibero e (SinistraBianco o DestraBianco)){
    Avanti(1)
}

Se(LancioMoneta e non DestraBianco)
{
    Destra
    Indietro(1)
}

Se(Vero e Falso){
    # questa istruzione non sara' mai esguita
    Avanti(1)
}
              

Procedure

procedura nome(par1, par2, ... , parN){...istruzioni...}
Definisce un nuovo blocco d'istruzioni con il nome desiderato.La procedura puo' avere zero o piu' parametri, e ed consigliato dare nomi utili al fine di ricordare cosa faccia quella procedura.Qui puoi usare n-parametri e sono le variabili che puoi utilizzare nelle istruzioni tra le parentesi graffe. Il codice di una procedura non viene eseguito automaticamente, ed e' necessario scrivere una "chiamata alla procedura" ogni volta che si desidera eseguire le istruzioni nella definizione
Suggerimento: creare una nuova procedura quando si utilizza una sequenza di istruzioni piu' di una volta.

Esempio:

# definisce come disegnare un rettangolo
procedura rettangolo(larghezza, altezza)
{
	DisegnaBianco
	Ripeti(2)
	{
		Avanti(altezza)
		Destra
		Avanti(larghezza)
		Destra
	}
	FermaDipingi
}
                  

nome(arg1, arg2, . . . , argN)
E' la chiamata alla procedura, i cui parametri corrispondo ai valori degli argomenti. Gli argomenti arg1,arg2...argN sono particolari valori che vengono usati per definire una procedura .

Esempio:

# saranno eseguite queste istruzioni
Avanti(1)
rettangolo(3,2) # chiamata alla procedura "rettangolo"
Avanti(3)
rettangolo(1,4) # un'altra chiamata alla procedura


# questa e' la procedura di "rettangolo"
procedura rettangolo(larghezza, altezza)
#in base alle varie chiamata, larghezza e altezza
#una volta avranno valore "3","2" come dice la prima chiamata
#nella seconda chiamata avranno valore "1","4"
{
	DipingiBianco
	Ripeti(2)
	{
		Avanti(altezza)
		Destra
		Avanti(larghezza)
		Destra
	}
	FermaDipingere
}                  

Fine

end
Con questa istruzioni il programma terminera'.

Esempio:

# fermati dopo 5 passi, o prima quando c'e' un faro sulla destra
Ripeti(5)
{
	Avanti(1)
	Se(DestraFaro)
	{
		Fine # il programma si ferma
	}
}
# normale fine del programma
                  
RoboMind - Copyright � 2005 - 2014 - Research Kitchen