Introduzione alla programmazione visuale con Blockly
Questa volta si tratta di realizzare tre piccole applicazioni, in sequenza.
Contenuti
- Il blocco If … return …
- Il blocco Repeat while …, help online per il blocco repeat while …
- Il blocco Count with …, help online per il blocco Count with …
- Inserire un elemento in una lista, il blocco In list … insert …, help online per il blocco In list … insert …
Il fattoriale di un numero naturale
Il primo compito, quello principale, richiede una funzione che calcoli il fattoriale di un numero naturale. Il primo video, qui di seguito, illustra un possibile algoritmo (non ricorsivo) per il calcolo del fattoriale.
A questo punto, se ve la sentite, potete provare a implementare la funzione senza guardare il secondo video e usare il video solo come aiuto via via che procedete con il compito, oppure seguire completamente il video successivo e poi svolgere il compito. In ogni caso la prossima consegna vi obbligherà a fare un po’ da soli e quindi possiamo usare questi primi problemini solo per familiarizzare …
N.B.: per qualche motivo che capiremo nel corso del laboratorio (spero), non è possibile implementare con Blockly il calcolo del fattoriale utilizzando un algoritmo ricorsivo.
Una volta completata e controllata la funzione, modificarla (migliorarla) aggiungendo controlli sul valore passato alla funzione (per esempio: se il numero di cui calcolare il fattoriale è negativo? La funzione realizzata funziona correttamente se il numero di cui calcolare il fattoriale è zero o uno (ricordiamo che 0! = 1 e 1! = 1)?
Utilizzare il fattoriale
Si chiede un programma che:
- chieda in input un numero naturale n
- trasformi in giorni il numero di secondi pari a n!
- mostri a video questo numero di giorni.
In sostanza: si vuole sapere a quanti giorni corrispondono n! secondi.
N.B.: si deve cercare di riutilizzare la funzione fattoriale: il lavoro dovrebbe essere solo quello di usare la funzione fattoriale per calcolare n! e poi convertire questo numero in giorni. Il punto cruciale di questo esercizio/problema è proprio riusare funzioni già pronte!
P.S.: per convertire in giorni un certo numero di secondi è sufficiente dividere i secondi per (24 * 3660) – i secondi in un giorno – oppure direttamente per 86.400.
Curiosità: provatelo su 10!, quanti giorni sono? Non vi dice nulla il numero che avete ottenuto?
Il video qui di seguito precisa meglio la frase … si deve cercare di riutilizzare la funzione fattoriale … e propone una soluzione coerente con la consegna del compito assegnato: realizzare un’applicazione che usi il fattoriale piuttosto che modificarlo perchè faccia qualcosa di diverso!
Il fattoriale dei primi n numeri naturali
Concludiamo il laboratorio con una ulteriore espansione (e utilizzo) del programma scritto per il fattoriale.
Si tratta di calcolare il fattoriale dei primi n numeri naturali. In altre parole: realizzate un’applicazione che richiede all’utente un numero naturale n e risponde restituendo (mostrando a video) il fattoriale di tutti i numeri naturali da 0 a n. Controllare, anche per questo secondo compito, i casi particolari (l’utente sceglie per n un numero negativo, …).
Si tratta della prima consegna senza una guida “passo passo” quindi avete un po’ di libertà e la possibilità di scegliere come operare. Una volta che tutto funziona, almeno nei casi standard, migliorate la funzione ottimizzando l’output fornito all’utente aggiungendo qualche funzionalità ulteriore, per esempio:
- ogni fattoriale mostrato accanto al corrispondente numero naturale di cui è il fattoriale con un output del tipo (2, 2), (3, 6), …
- tutti i fattoriali mostrati in un’unica finestra di dialogo, …
Questo programma potrebbe farvi incorrere in un particolare comportamento di Blockly che produce un errore, dovuto al generatore di codice e non a un vostro comportamento, piuttosto difficile da scoprire ma che è meglio conoscere. Perdete qualche minuto di tempo per leggere questo articolo: Blockly: istruzioni per l’uso 1.