View Full Version : Quadrato magico (c)
matteo016
03-04-2013, 16:17
Salve, avrei cortesemente bisogno di un aiuto.
mi potreste risolvere questo problema in C? (non C++, solo C)
Data una matrice 3x3, verifica che sia un quadrato magico.
Grazie anticipatamente per l'aiuto e scusate il disturbo.
Hieicker
03-04-2013, 16:21
Hai provato a farlo :)? Hai del codice che hai scritto tu che possiamo vedere? O è proprio una richiesta "fatelo voi per me"?
matteo016
03-04-2013, 16:29
Il problema è che il nostro professore pretende che facciamo gli esercizi senza spiegare, e quindi io non ho la minima idea su come fare, per esempio ho l'algoritmo per caricare la matrice e trovare le diagonali, ma non penso sia utile trovare ogni colonna,ogni riga e tutte le diagonali per verificarlo.
Ci ha detto solamente di costruire un vettore S e un vettore C, ma non riesco a capire come usarli. Grazie ancora e scusa per il disturbo
Il problema è che il nostro professore pretende che facciamo gli esercizi senza spiegare, e quindi io non ho la minima idea su come fare, per esempio ho l'algoritmo per caricare la matrice e trovare le diagonali, ma non penso sia utile trovare ogni colonna,ogni riga e tutte le diagonali per verificarlo.
Ci ha detto solamente di costruire un vettore S e un vettore C, ma non riesco a capire come usarli. Grazie ancora e scusa per il disturbo
provaci e dove ti incarti potremmo darti una mano ma non risolviamo i compiti in toto
matteo016
03-04-2013, 16:40
Neanche una mano su come impostarlo? principalmente è questo il problema?
Neanche una mano su come impostarlo? principalmente è questo il problema?
tu come lo imposteresti?
e se non riesci a rispondere a quella domanda
cosa vuol dire quadrato magico? --> come posso verificare che sia / non sia un quadrato magico?
matteo016
03-04-2013, 18:35
tu come lo imposteresti?
e se non riesci a rispondere a quella domanda
cosa vuol dire quadrato magico? --> come posso verificare che sia / non sia un quadrato magico?
Allora, un quadrato magico è una matrice speciale, dove la somma dei prodotti nelle colonne, nelle righe e nelle diagonali è uguale.
Posso appunto verificare se lo sia se questa condizione è vera. Giusto?
matteo016
03-04-2013, 20:54
giusto, devi calcolare i prodotti delle righe (3), delle colonne (3) e delle diagonali (2). metti i risultati di ogni calcolo in un vettore. e poi verifichi che il vettore contiene tutti elementi uguali.
Avevo provato a farlo, funziona ma c'è un metodo più veloce?
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,n,rig=0; //k per le righe
int numero[10][10];
int sommadiagonale1=0, sommadiagonale2=0;
int primasomma,somma_riga=0,somma_colonna=0;
printf(" PROGRAMMA CHE DATA UNA MATRICE IN INPUT VERIFICHI SE E UN QUADRATO MAGICO \n\n");
while(rig<=0){
printf(" inserisci il grado dellamatrice quadrata (MAX 10)--> ");
scanf("%d", &rig);
}
// ********** INSERIMENTO TERMINI ****************
for(i=1;i<=rig;i++){
for(n=1;n<=rig;n++){
printf(" inserisci il numero di posizione-> riga %d colonna %d \n", i,n);
scanf("%d", &numero[i][n]);
}
}
// ********** STAMPA A VIDEO DELLA MATRICE ********
printf("\n\n stampa della matrice\n\n");
for(i=1;i<=rig;i++){
for(n=1;n<=rig;n++){
printf(" %d ", numero[i][n]);
}
printf("\n\n");
}
// CALCOLO SOMMA DIAGONALE PRINCIPALE 1********
for(i=1;i<=rig;i++){
for(n=1;n<=rig;n++){
if(i==n){ sommadiagonale1=sommadiagonale1+numero[i][n]; }
}
}
// ***** CALCOLO SOMMA DIAGONALE SECONDARIA 2
i=1;
for(n=rig;n>0;n--){
sommadiagonale2=sommadiagonale2+numero[i][n];
i++;
}
// ***** definisco la variabile PRIMA SOMMA che è la somma della prima riga.
for (n=1;n<=rig;n++){
somma_riga=somma_riga+numero[1][n]; // sommo gli elementi della prima riga
}
primasomma=somma_riga;
printf("prima somma = %d \n\n",primasomma);
// ****** CALCOLO SOMME DELLE RIGHE E VERIFICA SE RIGA SCANSIONATA è UGUALE ALLA RIGA[1]
for(n=1;n<=rig;n++){
somma_riga=0;
for(i=1;i<=rig;i++){
somma_riga=somma_riga+numero[n][i]; // somma tot RIGA il PRIMO termine decide 1° riga..2°riga
}
if(somma_riga!=primasomma) {break;}
}
// ****** CALCOLO SOMME DELLE COLONNE E VERIFICHA SE SONO UGUALI
for(i=1;i<=rig;i++){
somma_colonna=0;
for(n=1;n<=rig;n++){
somma_colonna=somma_colonna+numero[n][i]; // somma tot COLONNA il PRIMO termine decide 1° COLONNA..2°COLONNA
}
if(somma_colonna!=primasomma){ break; }
}
printf("prima somma = %d\n", primasomma);
printf("somma_riga = %d\n", somma_riga);
printf("somma_colonna = %d\n", somma_colonna);
printf("sommadiagonale1 = %d\n", sommadiagonale1);
if(primasomma==somma_riga && primasomma==somma_colonna && primasomma==sommadiagonale1 && primasomma==sommadiagonale2){
printf("\n\n il quadrato inserito e' magico \n\n"); }
else { printf("\n\n il quadrato inserito non e magico \n\n"); }
system("pause");
return 0;
}
Più veloce praticamente alla prima differenza esci
clockover
04-04-2013, 18:08
Più veloce ancora ogni riga (o colonna o diagonale) deve essere uguale a questo valore (da wikipedia): 1/2 * n * (n^2 + 1)basta che solo una sia diversa allora non è magico
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.