
Continuiamo ad approfondire molti aspetti fondamentali della programmazione. Con le spiegazioni di questa puntata sarete in grado di realizzare del software sempre più sofisticato, compatto ed efficiente. Anche in questo caso, i concetti studiati sono presenti anche in altri linguaggi di programmazione, con le opportune differenze. Ricordiamo sempre che quanto studiato, prepara la strada alla programmazione definitiva di sistemi che interagiscono con le porte di I/O, per poter comandare dispositivi elettrici ed elettronici.
Introduzione
Nella scorsa puntata si è visto come realizzare alcuni programmi dotati di "vita propria", capaci di prendere decisioni ed effettuare compiti ripetitivi. Questa volta tratteremo un argomento estremamente importante, che non può essere tralasciato. Studieremo, infatti, i vettori e le matrici. Si tratta di potentissimi mezzi che consentono di ottimizzare al massimo i programmi e gestire, con una logica chiara ed efficiente, gli algoritmi. Anche in questo caso, gli esempi saranno di difficoltà sempre crescente, e verteranno spesso sull'elettronica. Come al solito, saranno proposti inizialmente degli esempi semplici ma concettualmente errati, senza utilizzare le argomentazioni trattate, proprio per far capire il vantaggio che esse forniscono nel loro utilizzo. Un po' come dire: "Prima togli il chiodo dal legno con le mani, poi ti insegno ad usare la pinza, vedrai come cambia la musica...".
Un esempio... quasi elettronico
Il seguente esempio mostra un po' l'embrione di ciò che creeremo in futuro. Si debba creare un gioco di luci nel quale delle ipotetiche lampade (che al momento non esistono ma sono solo virtuali) si accendono, seguendo una sequenza ben precisa ma complessa.
Il circuito virtuale è composto da otto lampadine (guarda caso...) e ogni combinazione luminosa corrisponde ad un codice ben preciso. Il numero delle lampade non è casuale: otto elementi, che possono assumere due distinti stati (On e Off), formano un byte e può gestire ben 256 stati diversi di commutazione.
Si assume anche che il prototipo preveda i seguenti giochi di luce, mostrati nella tabella di figura 1.
Come si vede in figura 1, il gioco di luci prevede ben 16 combinazioni diverse di illuminazione, opportunamente codificate secondo una semplice numerazione binaria. Sarà il microprocessore ad inviare al circuito la sequenza di codici e, di conseguenza, illuminare le corrette lampade. Nell'esempio non ci occuperemo, ovviamente, della circuiteria elettronica ma è sufficiente stampare, a video, la sequenza, in un ciclo senza fine, che è: 1, 2, 4, 8, 16, 32, 64, 128, 255, 0, 24, 36, 66, 129, 66, 0.
Listato non ottimizzato
Un primo approccio "stupido" porterebbe [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2666 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Potrebbe essere interessante progettare una bella GUI con raspberry pi che simuli la grafica della scacchiera implementando a sua volta la matrice per l’individuazione delle posizioni, seguita da una tabella tipo struttura per stabilire le regole del gioco.
Io non avrei usato il termine “vettore”. In italiano é sinonimo di “array” ma in inglese c’è una forte distinzione tra array (struttura di dati) e vector (tipo di dato astratto). Soprattutto in C/C++. Per il resto ottimo articolo!
In questi casi forse parlare di vettore e matrice anzichè di array modimensionale e bidimensionale può essere utile. In inglese array è la matrice/vettore di elementi omogenei, a differenza della struttura dati (struct) che di solito non è omogenea.
Articolo molto interessante. Anche io nel mio piccolo uso spesso il piccolo lampone per avvicinare i ragazzi alla programmazione.
Supponiamo di voler collocare in un array l’equivalente in decimale delle lettere riportate sui tasti di una tastiera PC, per poi andarli a visualizzare sullo schermo. Però, in via preliminare, non sappiamo quanti e quali tasti si andranno a pigiare. Forse 5, forse 10 o forse tutti.
Come si può impostare un simile array?
Per questo si possono usare gli array dinamici.
Per lo scopo occorre usare i puntatori e l’implementazione è un tantino più complessa.
Grazie per la risposta. Spero di poter vedere pubblicato quano prima un esempio di questa implementazione magari commentato da te.