Menu Chiudi

Blockly: istruzioni per l’uso 3

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.
Un blocco Count with … che visualizza i primi dieci numeri naturali. Qui il contatore è la variabile i, il valore iniziale è pari a uno, quello finale a 10 e l’incremento è ancora uno.

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).

Questo ciclo non dovrebbe essere eseguito nemmeno una volta! Il valore iniziale (3) è superiore al valore finale (1) e quindi il contatore è sin dall’inizio superiore al valore finale.

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).

Una possibile soluzione alternativa. Sulla sinistra il ciclo realizzato con il blocco Count with … che da origine al comportamento descritto nell’articolo, sulla destra lo stesso ciclo implementato con un blocco Repeat while …: il primo ciclo viene eseguito tre volte (sbagliato!) mentre il secondo non è eseguito nemmeno una volta (corretto!).

Articoli correlati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *