Cerca

modulo attività

modulo tecnica

Liste con microbit
Le liste in micro:bit vengono trattate con le funzioni di array.
Gli array di micro:bit sono elenchi ordinati di dati dello stesso tipo tra i seguenti: numeri, valori binari o stringhe.
In un elenco ordinato ogni dato è caratterizzato da un indice che ne specifica la posizione all’interno dell’elenco.
Vedi anche la pagina ufficiale.

Le argomentazioni di questo articolo si riferiscono al progetto "array0".

 

Gli array sono utilizzabili per registrare i valori di cose che hanno più parametri per essere descritti (es. la carta di identità) o eventi che si protraggono nel tempo (come può accadere per i data logger … o anche solo per il registro dei voti di uno studente ed anche di tutti gli studenti della classe).
Una volta registrati, i dati si possono leggere in un momento successivo per farci delle operazioni a posteriori utilizzando l’indice.
indice
Il primo indice è “0” e l’n-esimo dato in elenco ha indice n-1.
Ogni volta che si aggiunge un dato in coda la lunghezza dell’array cresce di 1 e lo stesso accade ogni volta che si inserisce un dato.
Viceversa, ogni volta che si elimina un dato la lunghezza diminuisce di uno.
In entrambi i casi vengono riposizionati tutti i dati successivi a quello inserito o rimosso modificandone l’indice.
lunghezza
Un array ha una propria lunghezza che può crescere o diminuire.
I dati si possono aggiungere in coda all’array, si possono inserire e togliere e la sua lunghezza ne viene modificata.
Si possono anche modificare i dati.


Esempio
Viene ora proposto un esempio che contenga le istruzioni essenziali per generare lo array.
Si pone il caso di creare un file per ricordare la successione della pressione di uno dei due pulsanti “A” o “B” di microbit.
Premendo contemporaneamente i due pulsanti si provoca la lettura sequenziale dei dati registrati.

Creare un arrayarray var pulsanti
L’array deve essere creato con una variabile a cui viene assegnato un valore costituito dal primo elemento di una variabile di tipo adatto (stringa, numero, boolean) assegnandogli un nome e dichiarando il tipo di dati che deve conservare.

array initQuesto viene realizzato all’avvio con l’istruzione composta "imposta __ crea un array con__".

 

lista0All'array viene assegnato il nome “pulsanti” ed il primo dato, che occupa la posizione “0” è ”K” che sta anche ad indicare che i dati saranno di tipo "stringa".

Nel campo celeste c'è l'indice e nel campo aranicio c'è il dato.

Scrivere un dato in una cella
array aggiungiPer scrivere un dato occorre specificare la posizione che deve assumere nella lista il valore da memorizzare.
Per ora ci si accontenti di aggiungere un dato in fondo alla lista con l'istruzione "aggiungi valore_ alla fine"

La lista denominata “pulsanti” viene allungata con una cella al fondo che viene riempita col valore “B”.


Leggere un dato

array leggiPer leggere un dato è necessario conoscerne la posizione in modo da inserirlo nell’istruzione sotto forma di indice.
La lettura del dato avviene con l’istruzione "leggi valore all'indice__".

L’istruzione legge il contenuto della cella nella posizione 2 dello array di nome “pulsanti” … legge!
“Legge” significa che il valore letto è prelevato dall'array alla posizione indicata dall’indice e viene conservato in un registro interno che, però, non è a disposizione del programmatore.
Se si vuole utilizzare quel valore occorre che il valore letto venga scritto da qualche parte, per esempio in una variabile appositamente creata o anche solo mostrato sul display.
non è a disposizione delprogrammatore.

array shakeCon lo script attivabile scuotendo (shake) il dispositivo mostra il valore della cella iniziale (indice =0).

Ovviamente si può inserire un valore dell’indice a piacere purché esista la cella corrispondente.

Aggiungere più dati in sequenza
array tastoAOra si deve creare uno script che serva ad inserire molti dati, uno alla volta:
quando si preme “tasto A” si inserisce la lettera “A”
quando si preme “tasto B” si inserisce la lettera “B”


Quando si preme “tasto A” la prima istruzione inserisce in coda alla lista il dato “A” in questo modo:
- incrementa di uno la lunghezza della lista creando una nuova cella in fondo alla lista e
- inserisce la lettera “A” in questa cella
- viene mostrato per un secondo il valore inserito

lista1Micro:bit ha memorizzato da qualche parte questo risultato che è una lista di lunghezza 2.

Per completare l'esempio si premono in successione i tasti “B”, “B”, “A”.

 

lista5La lista ora contiene i 4 risultati dovuti alla pressione dei due tasti più il dato inserito all’atto della sua creazione (“K” in posizione 0); la lunghezza è 5.

Lunghezza della lista
La lettura di un qualunque valore della lista è possibile solo inserendo nel campo dell’indice un valore valido ovvero la cella deve esistere, deve essere stata creata ed avere un indice ed un valore.
Per sapere se esiste la cella è necessario conoscere la lunghezza della lista.
La lunghezza dell'array si ottiene con il valore ricavabile con il comando: array lunghezza

Nota la lunghezza della lista, si può affermare che gli indici validi sono quei valori numerici compresi fra zero e la lunghezza della lista diminuita di uno.

Leggere tutti i dati uno dopo l'altro
array ripetiSi tratta di scrivere un programma per recuperare la sequenza di tutti i dati inseriti nella lista prelevando un dato alla volta a partire dal primo, quello con indice zero, e ripetendo la lettura fino all’ultimo.
Per fare questo bisogna scorrere la lista per tutta la sua lunghezza cioè ripetere l’operazione di lettura di un dato per un numero di volte pari alla lunghezza della lista.
La lettura multipla viene eseguita con il ciclo “ripeti__volte”.

Ovviamente al posto del numero 4 occorre inserire il numero che ci serve cioé la lunghezza della lista.

arrayo incrementa IndicePrima dell’inizio del ciclo è necessario impostare il valore iniziale dell’indice a zero in modo che venga letto il primo valore (che è K).
Per leggere uno dopo l’altro i dati occorre incrementare di uno il valore dell’indice dopo ciascuna lettura con:

 

arrayABleggiI dati recuperati vengono mostrati sul display uno dopo l’altro.
Per separare la visualizzazione dei dati, il display viene spento per 300 ms ogni volta che si passa al successivo.

 

Il video
Il progetto array0 è scaricabile.

 

Miglioramenti

array1 è una evoluzione del progetto array0.

Con alcune modifiche dello script è possibile migliorare la visualizzazione dei dati ed anche la leggibilità del programma.

Nella fase di scrittura dei dati si leggono in successione l'indice della cella ed il dato inserito.

Nella fase di lettura si legge dapprima la lunghezza della lista (il primo valore non viene considerato) e poi l'elenco completo con l'indice ed il dato.

Si utilizza anche la "chiamata ad una funzione" per alleggerire lo script di lettura raggruppando alcune operazioni che sono da utilizzate più volte.

array1 creaFunzTra i comandi avanzati c'è un gruppo per creare le funzioni.

Col pulsante "crea funzione" viene messa a disposizione una procedura che può essere richiamata da più parti.

Alla funzione va attribuito un nome.

Nell'esempio il nome è "leggi una cella"

array1 chiamataQuesto comando andrà inserito negli script.

Nello script, contemporaneamente appare il contenitore della procedura.

All'interno del contenitore vanno inserite le istruzioni che devono essere eseguite tutte le volte che viene chiamata la procedura.

array1 funzioneNell'esempio si hanno tutte le operazioni che servono a mostrare l'indice ed il dato contenuto nella cella.