Concetti Chiave

  • La matrice quadrata di ordine N viene riempita con numeri interi secondo cornici concentriche, assegnando a ciascuna cella il valore della cornice corrispondente.
  • Ogni layer rappresenta una cornice e il ciclo su layer va da 0 fino a (N+1)/2, assegnando a ogni cornice un valore incrementale.
  • I cicli annidati all'interno del ciclo layer coprono le celle della cornice, impostando il valore del layer + 1 per le celle pertinenti.
  • Dopo il riempimento, la matrice viene stampata riga per riga, visualizzando i numeri contenuti in ciascuna cella.
  • Il codice è implementato in C, utilizzando una funzione che gestisce sia il riempimento che la stampa della matrice.

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 viene riempita la matrice quadrata di ordine N secondo le cornici concentriche?
  2. La matrice viene riempita con valori che rappresentano il numero della cornice, partendo dall'esterno verso l'interno. Ogni cornice ha un valore che corrisponde al suo livello, assegnato tramite un ciclo che va da 0 a (N + 1) / 2.

  3. Qual è la logica dietro la copertura delle cornici nella matrice?
  4. Per ogni cornice, i cicli annidati assegnano il valore della cornice a tutte le celle che appartengono a quella cornice, coprendo l'intervallo di righe e colonne da "layer" a "N - layer - 1".

  5. Come viene stampata la matrice una volta riempita?
  6. Dopo aver riempito la matrice, viene stampata riga per riga utilizzando un ciclo che itera su tutte le righe e colonne, mostrando i valori contenuti in ciascuna cella.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community