nikpez
Ominide
1 min. di lettura
Vota 4 / 5

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

  1. La piramide Azteca
  2. Dichiarazione della matrice
  3. Ciclo su layer
  4. Copertura della cornice
  5. Stampa della matrice
  6. Il codice

La piramide Azteca

Si vuole riempire una matrice quadrata di ordine N di numeri interi secondo cornici concentriche, scrivendo
all’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

Utilizziamo
int 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 valore
layer + 1
.

Copertura della cornice

All'interno del ciclo for per layer, i due cicli annidati assegnano
matrix[i][j] = layer + 1
a tutte le celle che appartengono alla cornice. L’intervallo di riga e colonna va da
layer
a
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

  1. Come si riempie una matrice quadrata con cornici concentriche?
  2. 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.

  3. Qual è la logica dietro il ciclo su layer per riempire la matrice?
  4. 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.

  5. Come viene stampata la matrice una volta riempita?
  6. 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.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community