Concetti Chiave
- La matrice quadrata di ordine N viene riempita di numeri interi secondo cornici concentriche, con ogni cornice contenente il suo numero identificativo.
- Ogni layer rappresenta una cornice della matrice e ad ogni layer viene assegnato un valore che è layer + 1.
- Il riempimento delle cornici avviene attraverso cicli annidati che assegnano il valore layer + 1 alle celle della cornice.
- La matrice viene stampata riga per riga dopo essere stata riempita, mostrando la disposizione numerica delle cornici.
- Il codice include una funzione che riempie e stampa la matrice, con una chiamata nel main che richiede l'input dell'utente per la dimensione N.
Indice
La piramide Azteca
Si vuole riempire una matrice quadrata di ordine N di numeri interi secondo cornici concentriche, scrivendoall’interno delle celle che appartengono alla stessa cornice il valore n della cornice di appartenenza. Si
visualizzi poi la matrice realizzata.
Esempio: N=10
1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 3 2 1
1 2 3 4 4 4 4 3 2 1
1 2 3 4 5 5 4 3 2 1
1 2 3 4 5 5 4 3 2 1
1 2 3 4 4 4 4 3 2 1
1 2 3 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1 1
Dichiarazione della matrice
Utilizziamoint matrix[N][N]
Ciclo su layer
Ogni layer (strato o livello) corrisponde a una “cornice” della matrice. L'indice layer va da 0 fino a [math]\frac{N+1}{2} (arrotondato in giù). A ogni layer assegniamo il valorelayer + 1.
Copertura della cornice
All'interno del ciclo for per layer, i due cicli annidati assegnanomatrix[i][j] = layer + 1a tutte le celle che appartengono alla cornice. L’intervallo di riga e colonna va da
layera
N - layer - 1.
Stampa della matrice
Aalla fine, stampiamo riga per riga.
Il codice
#include <stdio.h>void riempiCornici(int N) {
// Dichiarazione della matrice
int matrix[N][N];// Riempimento secondo le cornici
for (int layer = 0; layer < (N + 1) / 2; layer++) {
for (int i = layer; i < N - layer; i++) {
for (int j = layer; j < N - layer; j++) {
matrix[ i ][j] = layer + 1;
}
}
}// Stampa della matrice
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", matrix[ i ][j]);
}
printf("\n");
}
}int main() {
int N;
printf("Inserisci la dimensione della matrice (N): ");
scanf("%d", &N);// Chiamata della funzione
riempiCornici(N);return 0;
}
Domande da interrogazione
- Come si riempie una matrice quadrata con cornici concentriche?
- Qual è la logica dietro il ciclo su layer per riempire la matrice?
- Come viene stampata la matrice una volta riempita?
La matrice quadrata di ordine N viene riempita con numeri interi secondo cornici concentriche, assegnando a ciascuna cella il valore corrispondente al numero della cornice di appartenenza.
Ogni layer corrisponde a una cornice della matrice, e l'indice layer va da 0 fino a (N+1)/2. A ogni layer viene assegnato il valore layer + 1, e i cicli annidati riempiono le celle della cornice con questo valore.
Dopo aver riempito la matrice, viene stampata riga per riga utilizzando un ciclo for che attraversa tutte le righe e colonne, visualizzando i valori delle celle.