Cicli e valore iniziale del contatore
Terzo articolo dedicato al generatore di codice Blockly che condivide le esperienze fatte con questo strumento nel corso delle attività del progetto. Fa seguito a Blockly: istruzioni per l’uso 2.
Un comportamento un po’ indipendente del blocco Count with, che si presenta quando si vuole realizzare un ciclo in cui il valore iniziale del contatore è superiore al valore finale ma l’incremento dello stesso contatore è positivo.
Il blocco Count with …
Il blocco Count with … ha quattro parametri:
- il primo è la variabile contatore
- il secondo è il valore iniziale da assegnare al contatore
- il terzo è il valore finale: il ciclo si interrompe quando il contatore supera questo valore finale
- il quarto è l’incremento: a ogni ciclo il contatore è aumentato (o diminuito se l’incremento è negativo) di questo incremento.
Scegliendo un valore iniziale maggiore, già in partenza, del valore finale (avendo fissato un incremento positivo), il ciclo non dovrebbe essere eseguito nemmeno una volta: il contatore viene inizializzato al valore iniziale, questo valore è già maggiore del valore finale e il ciclo si interrompe (ancora prima di iniziare).
Purtroppo un ciclo di questo genere viene, invece, eseguito comunque: Blockly, di sua iniziativa, lo esegue come se l’incremento fosse -1! Per cui il ciclo presentato nella figura precedente è eseguito tre volte, per valori di i pari a 3, 2, 1 e si interrompe quando i diventa nullo: il ciclo è stato eseguito con incremento pari a -1 anche se è stato scelto un incremento di 1!
Questo comportamento è particolarmente fastidioso se valore iniziale e/o valore finale non sono noti a priori ma sono definiti da variabili il cui valore è assegnato in esecuzione.
La figura che segue mostra una possibile soluzione al problema, utilizzando però un blocco (un ciclo) Repeat while … (sono possbili ovviamente anche soluzioni diverse da questa che vuole solo essere un suggerimento).