Testo dell'esercizio
Verificare se una matrice quadrata A (RxR) con R >0 è un quadrato magico, cioè se la somma degli elementi della diagonale principale, la somma deglie elementi della diagonale secondaria e la somma degli elementi di ciascuna riga e di ciascuna colonna sono uguali.
Es di quadrato magico.
8 1 6
3 5 7
4 9 2
Usare una matrice globale.
Acquisisci: funzione che carica la matrice dato R.
Verifica: dato R, funzione che verifica se la matrice e' un quadrato magico, ritorna 1 se vero, 0 se falso.
mostra soluzione
/*
CLAUDIO CARIDNALE 3AI
Verificare se una matrice quadrata A (RxR) con R >0 è un quadrato magico, cioè se la somma degli elementi della diagonale principale, la somma deglie elementi della diagonale secondaria e la somma degli elementi di ciascuna riga e di ciascuna colonna sono uguali.
Es di quadrato magico.
8 1 6
3 5 7
4 9 2
Usare una matrice globale.
Acquisisci: funzione che carica la matrice dato R.
Verifica: dato R, funzione che verifica se la matrice e' un quadrato magico, ritorna 1 se vero, 0 se falso.
*/
#include<stdio.h>
#define MAX 1000
void acquisisci(void);
int verifica(void);
int mat[MAX][MAX];
int r;
int main(){
//funzioni
//acquisizione
acquisisci();
//verifica
if(verifica())
printf("la matrice e` un quadrato magico\n");
else
printf("la matrice non e` un quadrato magico\n");
}
void acquisisci(void){
//dichiarazioni
int i,j;
//acquisizione di r
do{
printf("inserire r : ");
scanf("%d",&r);
}while(r<1 || r>=MAX);
//acquisizione dati
for(i=0;i<r;i++)
for(j=0;j<r;j++){
printf("inserire il valore alla riga %d ed alla colonna %d : ",i+1,j+1);
scanf("%d",&mat[i][j]);
}
}
int verifica(void){
//dichiarazioni
int i,j,sommap=0,sommas=0,sommar[MAX],sommac[MAX];
//inizializzaizoni
//inizializzaizone vettore somma righe
for(i=0;i<r;i++)
sommar[i] = 0;
//inizializzaizone vettore somma colonne
for(i=0;i<r;i++)
sommac[i] = 0;
//somme
//somma diagonale princiaple
for(i=0;i<r;i++)
sommap += mat[i][i];
//somma diagonale secondaria
for(i=0,j=r-1;i<r;i++,j--)
sommas += mat[i][j];
//somma righe
for(i=0;i<r;i++)
for(j=0;j<r;j++)
sommar[i] += mat[i][j];
//somma colonne
for(j=0;j<r;j++)
for(i=0;i<r;i++)
sommac[j] += mat[i][j];
//verifica
if(sommap == sommas){
//verifica somma righe
for(i=0;i<r;i++)
if(sommap != sommar[i])
return 0;
//verifica somma colonne
for(i=0;i<r;i++)
if(sommap != sommac[i])
return 0;
return 1;
}else
return 0;
}
Testi Consigliati:
Il linguaggio C. Principi di programmazione e manuale di riferimento. Ediz. MyLab. Con Contenuto digitale per download e accesso on line
C guida alla programmazione: Conoscere lo standard C11 dalle basi del linguaggio alle direttive del preprocessore (Programmare con C Vol. 1)
Programmazione in C
torna