Un array multidimensionale è una struttura dati in cui gli elementi sono a loro volta array. Questi tipi di array possono essere ulteriormente multidimensionali, formando quindi una struttura a più livelli. Ad esempio, gli array unidimensionali sono una forma di array multidimensionali.
Dunque, gli array che ho spiegato nelle precedenti lezioni sono unidimensionali.
Sintassi – array multidimensionale
La sintassi per definire un array multidimensionale è la seguente:
Dove il numero di dimensioni corrisponde al numero di costanti specificate durante la dichiarazione dell’array. Di solito, nei problemi comuni, non si utilizzano più di tre dimensioni.
Esempi di Dichiarazione
Ecco dunque alcuni esempi di dichiarazioni di array multidimensionali:
Array: int a[M];
Matrice: int a[M][N];
Array Tridimensionale: int a[M][N][P];
Le dimensioni specificate all’interno delle parentesi quadre definiscono la forma dell’array e possono rappresentare il numero di righe, colonne o strati, a seconda del contesto.
Rappresentazione di una matrice
Per rappresentare una matrice, utilizziamo una tabella in cui il primo indice rappresenta le righe e il secondo le colonne.
<TipoElementi><NomeArray>[<Righe>] [ <Colonne>]
dove righe e colonne indicano rispettivamente il numero di righe e di colonne della matrice.
Guardiamo questa matrice di esempio, ho omesso gli indici di riga e colonna.
12
21
33
44
67
1
6
11
58
34
23
2
45
8
6
11
4
7
18
3
1
7
9
34
78
In questa matrice il numero 8, in grassetto, è l’elemento (2,3) cioè di riga 2 e colonna 3 (ricordiamo che gli indici di riga e di colonna partono da 0). L’ultimo numero, 78, sarà l’elemento (4,4) cioè di riga e colonna 4.
Quindi si può accedere ad un singolo elemento di un array bidimensionale usando due indici: uno per le righe e uno per le colonne. Ad esempio A[2][3] seleziona il quarto elemento della terza riga.
Se viene utilizzato un solo indice, come in A[2], verrà selezionata l’intera terza riga.
Esempi di Array Bidimensionali
Ecco alcuni esempi di dichiarazioni di array bidimensionali:
Limiti e Considerazioni per gli array multidimensionali
Sebbene non ci siano limiti specifici al numero di dimensioni che un array può avere in C, è generalmente sconsigliato utilizzare più di tre dimensioni. Questo perché la complessità della gestione degli array aumenta rapidamente con il numero di dimensioni, rendendo il codice meno leggibile e più soggetto a errori.
Inoltre, gli array multidimensionali possono richiedere una quantità significativa di memoria, specialmente per dimensioni elevate. Pertanto, è importante considerare attentamente le dimensioni dell’array e l’utilizzo effettivo della memoria durante la progettazione del software.
Conclusioni
Gli array multidimensionali in C sono una potente struttura dati che consente di organizzare e manipolare dati complessi in modo strutturato. Da vettori bidimensionali ad array tridimensionali, questa flessibilità consente di rappresentare una vasta gamma di dati in modo efficace.
Nel corso di questo articolo, abbiamo esaminato la sintassi per la dichiarazione di array multidimensionali e abbiamo discusso delle loro rappresentazioni, con particolare attenzione alle matrici. Abbiamo anche esplorato come accedere agli elementi degli array multidimensionali utilizzando indici multipli.
È importante considerare i limiti e le considerazioni quando si lavora con array multidimensionali, compresa l’attenzione alla gestione della memoria e alla complessità del codice.
In definitiva, gli array multidimensionali sono uno strumento fondamentale nella programmazione in C, e una comprensione approfondita del loro utilizzo può portare a codice più chiaro, efficiente e robusto.
JavaScript, è diventato un elemento cardine nella programmazione web lato client. Il linguaggio è progettato per essere eseguito direttamente nei browser web, consentendo agli sviluppatori di creare esperienze interattive e dinamiche per gli utenti. Il suo nome, talvolta confuso con il linguaggio di programmazione Java, è in realtà stato scelto per sfruttare il crescente interesse nei confronti di Java in quel periodo.
È essenziale comprendere la distinzione tra la programmazione web lato client e lato server. JavaScript opera nel primo ambito, il lato client, il che significa che gli script sono interpretati direttamente sul computer di ogni utente dal suo browser. Al contrario, i linguaggi web lato server eseguono il loro codice sul server che ospita il sito web, inviando il risultato elaborato al browser dell’utente che ne ha fatto richiesta.
Storia di JavaScript
JavaScript è stato creato da Brendan Eich mentre lavorava presso Netscape Communications Corporation nei primi anni ’90. Fu introdotto per la prima volta nel 1995 nel browser Netscape Navigator 2.0. Originariamente, JavaScript era stato sviluppato con l’obiettivo di rendere le pagine web interattive, consentendo agli sviluppatori di aggiungere piccoli script direttamente nelle pagine HTML.
Nel 1997, JavaScript è stato standardizzato attraverso il processo di Ecma International, e la specifica risultante è nota come ECMAScript. ECMAScript è il nucleo del linguaggio JavaScript e ha subito diverse evoluzioni nel corso degli anni, con nuove versioni che introducono nuove funzionalità e miglioramenti.
Alcune versioni significative di ECMAScript includono:
Nel 1999 ECMAScript 3 (ES3): Rilasciato nel 1999, ha consolidato diverse caratteristiche del linguaggio e ha fornito una base stabile per gli sviluppatori per molti anni.
ECMAScript 5 (ES5): Introdotta nel 2009, ha aggiunto nuove funzionalità, inclusa la modalità “strict” per migliorare la sicurezza e la correttezza del codice.
ECMAScript 6 (ES6) o ECMAScript 2015: Rilasciato nel 2015, è stata una delle revisioni più significative, introducendo molte nuove caratteristiche come arrow functions, template literals, classi, e destructuring.
Da ES6 in poi, il comitato ECMAScript ha adottato un modello di rilascio annuale, introducendo nuove funzionalità ogni anno. Le versioni successive, come ES2016, ES2017, e così via, hanno continuato a migliorare il linguaggio.
L’attenzione alla compatibilità è sempre stata una priorità, e gli sviluppatori spesso utilizzano strumenti di transpilazione come Babel per convertire il codice scritto in versioni più recenti di ECMAScript in una forma compatibile con le versioni precedenti, garantendo così un’ampia adozione e compatibilità tra i browser.
Questa breve panoramica storica sottolinea l’importanza di JavaScript e la sua continua evoluzione nel mondo dello sviluppo web. Ora, con questa comprensione, possiamo procedere all’approfondimento dei concetti, iniziando dalla stampa del primo messaggio in output.
Stampa del primo messaggio in output
Nella precedente lezione, ci siamo concentrati sull’integrazione del codice JavaScript nelle pagine web e sulle diverse modalità per farlo ora vederemo come stampare a video il primo messaggio.
Iniziamo utilizzando due metodi:
document.write e document.writeln
Questi metodi possono essere utilizzati per scrivere del testo direttamente nel documento HTML. La differenza principale tra i due è che document.writeln aggiunge una nuova riga (newline) dopo il testo, mentre document.write non lo fa. Pertanto, se vuoi che il testo successivo venga visualizzato su una nuova riga, document.writeln può essere utile.
Vediamo un esempio stampando la frase ‘Hello World!:
// Utilizzo di document.write
document.write("Hello World!");
// Utilizzo di document.writeln
document.writeln("Hello World!");
Tuttavia, entrambi i metodi possono comportare problemi in contesti più complessi e l’uso di metodi moderni come console.log è generalmente preferito per scopi di debugging e logging.
Iniziare a studiare JavaScript
Per iniziare con JavaScript, è importante comprendere alcuni concetti fondamentali. Ecco alcune aree chiave da esplorare:
Variabili e Tipi di Dati:
Imparare a dichiarare variabili usando var, let e const.
Familiarizzare con i tipi di dati come stringhe, numeri, booleani, array e oggetti.
Operatori:
Conosci gli operatori aritmetici, di confronto e logici.
Strutture di Controllo:
Esplorare istruzioni condizionali come if, else, switch.
Capire i cicli come for, while e do-while.
Funzioni:
Comprendere come dichiarare e chiamare funzioni.
Apprendere concetti come i parametri delle funzioni e il ritorno dei valori.
Eventi e Gestione degli Eventi:
Scoprire come gestire gli eventi nell’interfaccia utente, come il clic del mouse o la pressione di un tasto.
Oggetti e Array:
Approfondire la creazione e la manipolazione di oggetti e array.
DOM (Document Object Model):
Comprendere come il DOM rappresenta la struttura di un documento HTML e come JavaScript può interagire con esso per modificare dinamicamente il contenuto della pagina.
AJAX e Fetch API:
Studiare la comunicazione asincrona con il server, anche utilizzando la Fetch API.
Gestione degli Errori:
Imparare a gestire gli errori con try-catch per garantire un flusso di esecuzione più robusto.
ES6 e Versioni Successive:
Esplorare le caratteristiche introdotte in ECMAScript 2015 (ES6) e versioni successive, come le arrow functions, le template literals, e le destructuring assignments.
IDE JavaScript
Un IDE (Integrated Development Environment) è uno strumento software che fornisce un ambiente completo per lo sviluppo di applicazioni. Per lo sviluppo in JavaScript, ci sono diversi IDE che offrono funzionalità avanzate per scrivere, testare e debuggare il codice.
Tra gli IDE più popolari per lo sviluppo in JavaScript troviamo Visual Studio Code (VSCode):
Visual Studio Code è un IDE leggero e potente sviluppato dalla Microsoft. È estensibile con una vasta gamma di plugin, supporta il debugging integrato per JavaScript e TypeScript, e offre funzionalità come l’autocompletamento del codice, il controllo di versione e molto altro.
Si possono anche utilizzare ambienti online come ad esempio JSFiddle, CodePen, Repl.ito altri, senza installare nessun software sul proprio computer.
Concetto di funzione in JavaScript
Ora, approfondiremo ulteriormente alcuni concetti chiave, tra cui quello fondamentale di “funzione”. Le funzioni in JavaScript svolgono un ruolo cruciale, consentendo agli sviluppatori di organizzare e riutilizzare il codice in modo efficiente, promuovendo la modularità e la chiarezza del codice. Continuando il nostro tutorial, esploreremo come le funzioni possono essere utilizzate in maniera potente e versatile nella programmazione JavaScript.
Parleremo delle funzioni in dettaglio più avanti ma dato che nelle prossime lezioni inserirò degli esempi con le funzioni in JavaScript in questa lezione dò una breve definizione.
function JavaScript
Una function è un blocco di codice dove inserire delle istruzioni ed è eseguita quando è invocata (chiamata).
In genere una funzione viene richiamata in una pagina web tramite un pulsante o al verificarsi di un determinato evento.
Una function in JavaScript ha un nome ed inoltre può avere anche dei parametri racchiusi tra due parentesi tonde.
Le istruzioni da eseguire sono invece indicate tra parentesi graffe.
Facciamo dunque degli esempi per capire meglio il funzionamento:
function ora() {
const d = new Date();
const ora = d.toLocaleTimeString();
alert(ora);
}
Notiamo innanzitutto che stiamo utilizzando new Date() per creare un oggetto di tipo Date.
L’oggetto Date è utilizzato per lavorare con le date e con gli orari. Il metodo toLocaleTimeString restituisce l’ora.
All’interno della function ora(), che non ha parametri racchiusi tra parentesi tonde, memorizziamo l’ora in una variabile e richiamiamo il metodo alert. Ricordiamo che il metodo alert() serve per creare una finestra che si apre nel browser. Nel nostro caso specifico mostrerà l’ora.
Dopo inseriamo nella nostra pagina web un richiamo alla funzione creata in JavaScript nel punto desiderato.
Ad esempio si può inserire un pulsante che al click richiami la funzione ora.
Potete vedere il risultato facendo clic sul pulsante sotto: ‘mostra l’ora‘. Vi mostrerà l’orario attuale.
Realizziamo lo stesso esempio ma visualizzando il messaggio nella pagina html, piuttosto che in una finestra di dialogo. Utilizziamo il semplice metodo document.write per questo scopo, come nell’esempio sotto:
function ora() {
const orario = new Date();
const ora = orario.toLocaleTimeString();
document.write("Altro modo per visualizzare un messaggio! ");
document.write("<p>Orario: " + ora + "</p>");
}
<body onload="ora()">
...
</body>
Provate ad inserire questo codice per visualizzare l’orario nella vostra pagina web per vederne il risultato. Nelle prossime lezioni introdurremo le varaibili e le costanti.
In Scratch è possibile anche creare delle storielle. Io ne ho inventata una semplicissima che si intitola Pico e il dinosauro.
Struttura della storia
La storia è strutturata così:
Pico si muove fino ad arrivare ad una certa distanza dal dinosauro.
A quella distanza il dinosauro apre la bocca e chiede dove va Pico.
Pico con fare deciso gli dice che sta andando al castello a sconfiggere l’orco.
Ecco che allora il dinosauro lo fa passare.
Blocchi in Scratch
Per la creazione di questo gioco ho utilizzato i blocchi in Scratch. I blocchi servono a creare una sequenza di passi o azioni che poi si possono semplicemente utilizzare richiamandone il nome.
Inserisco innanzitutto lo sfondo e gli sprite che servono. Io ho scelto quelli della figura sotto.
Creo i blocchi per il movimento di Pico. Vado sulla sezione altri blocchi e clicco su crea un blocco. Decido ad esempio di chiamarlo movimento. Quindi definisco in questo blocco i passi che Pico deve compiere facendogli cambiare costume (Pico ha tanti costumi predefiniti).
Quando si clicca sulla bandierina Pico si muove fino alla posizione x=-20. Gli altri blocchi che ho programmato per Pico sono basati sullo scambio di messaggi tra Pico e il Dinosauro.
Il dinosauro manderà il messaggio fermati che gli consentirà di cambiare costume, passando al costume pico-d. Quando invece riceverà il messaggio dove, ovvero, dopo aver risposto alla domanda del dinosauro su dove andava, Pico manderà il messaggio orco al dinosauro che farà e dirà qualcosa e dopo gli manderà a sua volta il messaggio vai!
Di seguito gli script associati allo sprite dinosauro:
È facile e divertente creare delle storie in Scratch! Se ti è piaciuta e vuoi scaricare la storia completa clicca sul link sotto:
Realizziamo degli algoritmi sui triangoli con scratch per verificare se un triangolo è isoscele, equilatero o scaleno.
Prendiamo tre numeri in ingresso e verifichiamo se questi possono essere la lunghezza dei tre lati di un triangolo e poi determiniamo se il triangolo avente come lati le lunghezze indicate è equilatero, isoscele o scaleno.
Partiamo dal fatto che non sempre è possibile costruire un triangolo. Infatti ricordiamo la proprietà fondamentale dei lati di un triangolo che dice: In un triangolo ogni lato è minore della somma degli altri due.
Sviluppo dell’algoritmo sui triangoli con Scratch
Uso delle funzioni logiche
Scegliamo uno sfondo ed uno sprite. Io ho scelto quelli della figura sotto:
Creiamo tre variabili e le chiamiamo lato1, lato2 e lato3.
Quindi dopo aver chiesto in input i tre lati, verifichiamo che tutte e tre le condizioni siano vere. Se non sono vere facciamo visualizzare in output il messaggio: ‘Non è sempre possibile costruire un triangolo! In un triangolo ogni lato è minore della somma degli altri due!’
Se invece sono vere possiamo determinare se si tratta di un triangolo equilatero, isosceleoppure scaleno.
Come?
Dapprima verifichiamo se i tre lati sono uguali con la funzione logica e:
se lato1=lato2 e lato2=lato3
allora il triangolo è equilatero.
Dopo verifichiamo se i lati sono uguali a due a due, usando la funzione logica o:
lato1=lato2 o lato2=lato3 o lato1=lato3
se ciò è vero allora il triangolo è isoscele.
Se le due condizioni sopra non sono vere allora il triangolo è scaleno.
Allego lo script sotto:
Sviluppo dell’algoritmo sui triangoli con scratch
Senza l’uso delle funzioni logiche
Ho apportato delle modifiche alla verifica che determina se si tratta di un triangolo equilatero, isoscele oppure scaleno.
La verifica se i tre numeri presi in input possono essere la lunghezza dei tre lati di un triangolo la lascio risolta sempre con gli operatori logici per evitare strutture con troppi se, ma si potrebbe modificare anche quella.
Quindi, se lato1=lato2 controllo che anche lato2=lato3, se ciò è vero si tratta di un triangolo equilatero, altrimenti selato2 è diverso da lato3 comunque sarà isoscele(in quanto rimane vera la condizione che lato1=lato2).
Se invece lato1 non è uguale a lato3 mi rimangono due opzioni affinché sia isoscele: o lato2=lato3 oppure lato1=lato3. Costruisco la struttura sempre con i se annidati. Dunque se lato2=lato3 allora il triangolo è isoscele, altrimenti se lato1=lato3 è isoscelealtrimenti è scaleno.
Allego lo script sotto:
L’algoritmo sui triangoli è stato sviluppato anche con Algobuild, se vuoi vederlo vai al link: triangoli con algobuild.
Creiamo adesso un gioco in Scratch dove lo squalo mangia dei pesci e guadagna punti, ma attenzione se tocca il granchio perde una vita.
Istruzioni
Forniamo ad esempio le seguenti istruzioni:
Ogni volta che lo squalo mangia Fish1 o Fish3 o Fish5 guadagna 5 punti
Se mangia Octopus guadagna 10 punti
Se invece mangia la stella marina guadagna 20 punti
Ogni volta che lo squalo toccherà il granchio (crab) perderà una vita
Chiaramente si possono aggiungere tanti altri pesci!
Procedimento
Per prima cosa ho scelto lo sfondo dell’acquario che è presente in Scratch e ho aggiunto i pesci e lo squalo. Ho fatto in modo di far apparire le istruzioni del gioco per spiegare al giocatore come funziona.
Quindi ho creato il seguente sprite:
Quando si preme lo spazio verrà mandato il messaggio di inizio gioco che farà partire il tutto. Di seguito lo script associato allo sprite sopra:
Ho poi creato gli script per i pesci facendoli muovere da una parte all’altra. Gli script per fish1, fish3 e fish5 sono uguali, ho solo fatto variare le coordinate di partenza.
Dopo ho creato lo script per il polpo (octopus), facendolo muovere solo lungo l’asse delle y e facendogli cambiare costume.
Poi ho creato lo script per la stella marina, facendola scomparire per 12 secondi dopo che viene mangiato dallo squalo.
Ci rimane adesso lo script per lo squalo che si muoverà grazie all’uso delle frecce direzionali. Ho fatto in modo che ogni 0.1 secondi cambiasse costume spalancando la bocca per mangiare i pesciolini. Le vite diminuiscono ogni volta che tocca il granchio (crab) e infine passa al costume shark-c che lo rappresenta sfinito!!
Infine ho inserito i due script game over e vittoria!
Chiaramente, questa è solo una base di partenza, potete personalizzarlo come meglio credete.
Per chi volesse scaricare il file completo di Scratch, può cliccare sotto:
Commenti recenti