TESTO (esercizio dato dalla mia prof di programamzione):
Scrivete un programma che stampi un quadrato magico di dimensione n × n, con n dispari. Un quadrato magico è una disposizione dei numeri 1, 2, · · · , n2 tale che in ogni riga, in ogni colonna e nelle due diagonali la somma dei numeri sia la stessa.
Memorizzate il quadrato magico in un array bidimensionale. Iniziate mettendo il numero 1 al centro della prima riga. Mettete i rimanenti numeri nell’ordine muovendovi in alto di una riga e a destra di una colonna. Se una cella risulta essere già occupata da un altro numero, allora mettete il numero esattamente sotto al numero che lo precede.
Ogni volta che raggiungete un bordo, proseguite ripartendo dal lato opposto del quadrato. Ad
esempio, se avete messo un numero nella cella di riga 3 e colonna n − 1, allora il successivo andrà messo in riga 2 e colonna 0.
MIO IN C:
Scrivete un programma che stampi un quadrato magico di dimensione n × n, con n dispari. Un quadrato magico è una disposizione dei numeri 1, 2, · · · , n2 tale che in ogni riga, in ogni colonna e nelle due diagonali la somma dei numeri sia la stessa.
Memorizzate il quadrato magico in un array bidimensionale. Iniziate mettendo il numero 1 al centro della prima riga. Mettete i rimanenti numeri nell’ordine muovendovi in alto di una riga e a destra di una colonna. Se una cella risulta essere già occupata da un altro numero, allora mettete il numero esattamente sotto al numero che lo precede.
Ogni volta che raggiungete un bordo, proseguite ripartendo dal lato opposto del quadrato. Ad
esempio, se avete messo un numero nella cella di riga 3 e colonna n − 1, allora il successivo andrà messo in riga 2 e colonna 0.
MIO IN C:
Codice:
#include<stdio.h>
int main (void){
/* Dichiaro le variabili */
int n, riga, colonna, numero=2, i=0, j=0, z;
/* Richiesta inserimento numero e controllo disparità */
do{
printf("Inserisci un numero DISPARI per creare il quadrato magico: ");
scanf("%d", &n);
}while((n%2)==0);
/* Dichiaro la matrice NxN */
int matrice[n][n];
/* Inizializzo la matrice a 0 */
for (riga=0;riga<n;riga++){
for (colonna=0;colonna<n;colonna++){
matrice[riga][colonna]=0;
}
}
j=n/2;
/* Metto 1 al centro della prima riga */
matrice[i][j]=1;
/* Creo il quadrato magico */
for (z=0;z<(n*n)-1;z++){
i--; /* Decremento una riga */
j++; /* e incremento una colonna*/
if (i<0) /* Se la riga è inferiore a zero */
i=n-1; /* La setto a n-1 */
if (j>n-1) /* Se la colonna supera n-1 */
j=0; /* La setto a 0 */
if (matrice[i][j]==0) /* Controllo che numero è presente in posizione i j */
matrice[i][j]=numero; /* Se il numero che trovo è 0 gli assegno la variablie numero */
else{ /* Se il numero non è 0 */
i++; /* Incremento due volte la riga e controllo che non superi n-1*/
/* Altrimenti metto tutto a zero */
if (i>n-1)
i=0;
i++;
if (i>n-1)
i=0;
j--; /* Decremento una colonna e se è inferiore a zero la setto a n-1 */
if (j<0)
j=n-1;
if (matrice[i][j]!=0) /* Se il valore della matrice in posizione i j è diverso da 0 */
break; /* Blocco tutto e torno al for principale */
else /* Altrimenti associo la variabile numero */
matrice[i][j]=numero;
}
numero++; /* Incremento la variabile numero ad ogni cilco */
}
for (i=0;i<n;i++){ /* Stampo la matrice */
for (j=0;j<n;j++){
printf("%d\t", matrice[i][j]);
}
printf("\n");
}
return 0;
}