Preambolo:
Manuale per
adulto. (Cercasi volontario per scrivere il manuale per bambini)
Il programma
si trova qui: https://sourceforge.net/projects/abclogico/files/
L’obiettivo è di creare un programma che porta il
gattino a casa.
Nel panello a
destra ci sono istruzioni che si può trascinare col mouse sulla lista
d'istruzioni.

Con drag and drop
si trascina gli istruzioni dal elenco dei comandi alla lista del programma. Alcuni bambini trova difficoltà di mantenere
premuto il pulsante durante il trascinamento. Quindi è attivato un opzione che consente di cliccare una volta per prendere e di nuovo cliccare per rilasciare il widget nella
posizione desiderata nel listato del
programma.
A destra si trova
la finestra di visualizzazione del esito dei operazioni svolte nella
programma. Bisogna contare quante volte
il gatto deve fare un passo avanti e inserire il corrispondente numero di
istruzioni [Avanti] nel listato. Idem per orientare il gatto destra, sinistra
su e giù.
Il codice
potrebbe essere riordinato trascinare i comandi su/giù o al cestino, ultimo
rimuove l’istruzione del listato. Con un click sul cestino si svuota la lista.
Quando il gatto
si trova avanti la ciotola del cibo deve mangiare avendo inserito il comando
corrispondente [Mangia].
Per avviare il
programma bisogna resettare premendo la casetta. Tale operazione porta il gatto
la posizione di start e porta l’esecutore del programma a puntare alla prima
istruzione.
Quando si preme
il pulsante [Avvia] il gatto esegue le istruzioni una a volta (Step) e si
dovrebbe osservare come il gatto si muove secondo il programma. Un doppio click
passa all’esecuzione automatica (Run). Il programma termina al ultima
istruzione o al raggiungimento della casa o un cane.
Il pulsante
punto-domanda serve per dare suggerimento o spiegazioni dei varie elementi.
Quando l’alunno
deve pianificare il percorso potrebbe (ansi dovrebbe!) servirsi dei coordinati
cartesiani riportato nella barra di stato nel finestra
del output (console campo). Quando si clicca sul campo viene aggiornato la
linea di stato con la posizione del coordinato cliccato.
Esempio: se il
gatto è al posizione x=3, y=1 e deve andare a posizione x=4, y=3, la bambina
dovrebbe fare i calcoli (vettoriali) della distanza tipo: movimento
orizzontale 4-3 = 1 e movimento
verticale 3 – 2 = 2. Quindi deve
inserire 1 elemento [avanti] (dopo aver orientato il gatto a destra), girare in
su (elemento [su]) per poi aggiungere 2 istruzioni [avanti].
Per salvare programmi o cambiare la
complessità scegli il pulsante [Strumenti
] che
accede ad una finestra di opzioni. Qui si può caricare un programma e/o
salvarlo.
Il numero di
cibi, cani e ostacoli possono essere cambiati. Si può generare un nuovo
scenario (compito) in cui cani etc. vengono posizionati in modo random.
Successivamente si potrebbe trascinare gli elementi in altri posizione col
mouse direttamente nel finestra campo (bisogna salvare eventuali modifiche col
pulsante [Salva] prima di avviare il programma). In tale modo si potrebbe
addirittura nascondere cibo o cani dietro i cancelli, e quindi dare motivo per
utilizzare l’istruzione condizionali e test (if – then) nel livello 3.
Il livello della
complessità determina l’instruction set, ovvero la diversità dei comandi.
Dopo il primo
livello si passa ad utilizzare il ‘for next loop‘. L’istruzione [Ripeti] viene
aggiunto al panello dei comandi. Essa potrebbe essere inserito prima
dell’istruzione (o gruppo) da ripetere in modo di ridurre il numero di comandi.
L’obiettivo del buon programmatore, in spe, diventa la sfida di ridurre
il numero di righe del listato con il vantaggio che anche la velocita di
scrittura del programma aumenta.
A questo livello
introduciamo un elemento importante nella programmazione, la struttura di
controllo. Con comandi che controlla la condizione avanti il gatto ([Cane?],
[Cibo?], [Ostacolo?]) si controlla il flusso di esecuzione nella sua forma più
semplice. Funge come se-allora (if-then) e dà la possibilità del giovane coder
di imparare uno dei principi che rende il computer ‘intelligente’. Se vale la condizione, esegui l’istruzione
(o blocco) seguente, altrimenti salta direttamente al’istruzione (blocco)
successivo.
Esempio: Il gatto sta avanti un cancello e
deve decidere se dietro si nasconde cibo (o un cane). Con inserimento delle
sequenze tipo [Cibo?][Mangia] non rischia la rissa con un cane oppure di
mangiarsi l’erba.
Con i blocchi, parentesi graffe, [
] il
coder potrebbe cominiciare a pensare astratto (“object oriented”) e raggruppare
il codice in procedure, funzioni o subroutine.

Per esempio. Quando il gatto controlla se
c'è un cane, il [Cane?] potrebbe condizionare un blocco che realizza un
‘metodo’ per fuggire dal pericolo. Un soluzione per salvare il micio
potrebbe essere realizzato così
[Cane?] [Ripeti 4]
[Cane?] [Gira]
.
Se un blocco
viene aggiunto dopo il blocco chiamato Main![]()
diventa una subrutine con un nome (per es. S3). Essa può essere
invocato col comando [Call S3]. Al fine del blocco l’esecuzione ritorna a
eseguire l’istruzione dopo il [Call]
Carissimo/a
supercoder, riesci a scrivere un programma che risolve qualsiasi compito, dato
che il problema abbia una soluzione?