Array multidimensionali in C
Ciao a tutti, futuri programmatori! Oggi ci imbarcheremo in un viaggio entusiasmante alla scoperta del mondo degli array multidimensionali in C. Non preoccupatevi se siete nuovi al programming - sarò il vostro guida amichevole, e affronteremo questo argomento passo dopo passo. Alla fine di questo tutorial, sarete esperti nella gestione di queste potenti strutture dati!
Array multidimensionali in C
Iniziamo con le basi. Immagina di avere una serie di scatole, e all'interno di ogni scatola, ci sono altre scatole. Questo è essenzialmente ciò che è un array multidimensionale - un modo per organizzare i dati in più livelli o dimensioni.
In C, possiamo creare array con più di una dimensione. I tipi più comuni sono 2D (due-dimensionali) e 3D (tre-dimensionali), ma teoricamente, puoi avere tante dimensioni quante ne permette la memoria del tuo computer!
Ecco un modo semplice per dichiarare un array 2D:
int matrix[3][4];
Questo crea un array 2D chiamato matrix
con 3 righe e 4 colonne. Pensalo come una griglia o una tabella con 3 righe e 4 colonne.
Array bidimensionale in C
Approfondiamo gli array 2D con un esempio pratico. Immagina di creare una board gioco semplice per il tris:
#include <stdio.h>
int main() {
char board[3][3] = {
{'_', '_', '_'},
{'_', '_', '_'},
{'_', '_', '_'}
};
// Stampa la board
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
return 0;
}
In questo esempio, creiamo una board 3x3 per il tris. Ogni cella è inizializzata con un trattino basso '_' per rappresentare uno spazio vuoto. Poi utilizziamo cicli annidati per stampare la board.
Il ciclo esterno for(int i = 0; i < 3; i++)
itera attraverso ogni riga, mentre il ciclo interno for(int j = 0; j < 3; j++)
itera attraverso ogni colonna in quella riga.
Array tridimensionale in C
Ora, passiamo al livello successivo e esploriamo gli array 3D. Immagina di progettare un mondo di gioco 3D semplice:
#include <stdio.h>
int main() {
int gameWorld[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
};
// Stampa il mondo di gioco
for(int i = 0; i < 2; i++) {
printf("Livello %d:\n", i+1);
for(int j = 0; j < 3; j++) {
for(int k = 0; k < 4; k++) {
printf("%2d ", gameWorld[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
Qui, creiamo un array 3D gameWorld
con 2 livelli, ogni livello con 3 righe e 4 colonne. Puoi pensare a questo come due griglie 2D sovrapposte.
Utilizziamo tre cicli annidati per stampare questo mondo 3D. Il ciclo più esterno itera attraverso ogni livello, il ciclo intermedio attraverso ogni riga in un livello, e il ciclo più interno attraverso ogni colonna in una riga.
Somma delle righe di un array multidimensionale
Ora, proviamo qualcosa di più pratico. Calcoliamo la somma di ogni riga in un array 2D:
#include <stdio.h>
int main() {
int grades[3][4] = {
{85, 92, 78, 88},
{91, 87, 93, 89},
{76, 82, 95, 90}
};
printf("Studente Matematica Scienza Inglese Storia Totale\n");
printf("------------------------------------------------------\n");
for(int i = 0; i < 3; i++) {
int sum = 0;
printf("%9d", i+1);
for(int j = 0; j < 4; j++) {
printf("%9d", grades[i][j]);
sum += grades[i][j];
}
printf("%9d\n", sum);
}
return 0;
}
In questo esempio, abbiamo un array 2D grades
che rappresenta i voti di 3 studenti in 4 materie. Calcoliamo la somma dei voti per ogni studente (riga) e li stampiamo insieme ai voti individuali.
Moltiplicazione di matrici
Per il nostro atto finale, eseguiamo la moltiplicazione di matrici - un'operazione comune in molte applicazioni scientifiche e ingegneristiche:
#include <stdio.h>
int main() {
int matA[2][3] = {{1, 2, 3}, {4, 5, 6}};
int matB[3][2] = {{7, 8}, {9, 10}, {11, 12}};
int result[2][2] = {{0, 0}, {0, 0}};
// Eseguire la moltiplicazione di matrici
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
for(int k = 0; k < 3; k++) {
result[i][j] += matA[i][k] * matB[k][j];
}
}
}
// Stampa il risultato
printf("Risultato della moltiplicazione di matrici:\n");
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
Qui, moltiplichiamo due matrici matA
(2x3) e matB
(3x2) per ottenere una matrice result
(2x2). I tre cicli annidati eseguono la moltiplicazione: i primi due cicli iterano attraverso ogni elemento della matrice di risultato, mentre il ciclo più interno calcola il valore per quell'elemento.
Eccoci! Abbiamo coperto le basi degli array multidimensionali in C, da 2D a 3D, e abbiamo affrontato alcune applicazioni pratiche. Ricorda, la pratica fa perfezione, quindi non esitare a sperimentare con questi concetti da solo. Buon coding!
Credits: Image by storyset