|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2007
Messaggi: 81
|
Matrice Magica
Salve ragazzi e da poco che ho cominciato a studiare il C e il C++ e ora mi trovo davanti un problema che proprio non riesco a risolvere.
![]() ![]() In realtà devo sviluppare un programma che preda in input una matrice (da tastiera) e questa ci devo applicare l'algoritmo di Durer e quindi verificare che la matrice sia magica (si ricorda che una matrice A è definita magica se: è quadrata di ordine n contiene tutti i numeri da 1 ad n^2 la somma di ogni riga e di ogni colonna è pari ad uno stesso numero s il numero s è dato da : (n^3+n)/2 per la matrice di Durer vale anche che la somma della diagonale è uguale alla somma dell'antidiagonale) ![]() ![]() Vi progo potete aiutarmi nella realizzazione del programma!!! ![]() ![]() Grazie a tutti |
![]() |
![]() |
![]() |
#2 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Comincia a scrivere...
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jan 2007
Messaggi: 81
|
Io ho pensato di risolverlo cosi :
#include <iostream> #include <stdlib.h> using namespace std; int main(void) { int i, j; int controllo; int grandezza; i=j=0; bool verifica=false; cout<<"Inserire il numero di righe e colonne della matrice\n"; cin>>grandezza; int matrice[grandezza][grandezza]; int somme[grandezza+2]; for(i=0;i<grandezza+2;i++) somme[i]=0; grandezza; for(j=0;j<grandezza;j++) { for(i=0;i<grandezza;i++) { cout<<"\ninserire il contenuto della riga numero "<<i+1<<" colonna numero "<<j+1<<":"; cin>>matrice[j][i]; } } for(j=0;j<grandezza;j++) for(i=0;i<grandezza;i++) somme[j]+=matrice[j][i]; for(j=0,i=0;j<grandezza;j++,i++) { somme[grandezza]+=matrice[j][i];} for(j=0,i=grandezza-1;j<grandezza;j++,i--) somme[grandezza+1]+=matrice[j][i]; controllo=somme[0]; for(i=0;i<grandezza+2;i++) { if(somme[i]!=controllo) verifica=true; controllo=somme[i]; } if(!verifica) cout<<"\nLa matrice inserita e' un quadrato magico\n"; else cout<<"\nLa matrice inserita non e' un quadrato magico\n"; system("PAUSE"); return 0; } Che mi consiglieate????? Grazie |
![]() |
![]() |
![]() |
#4 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Innanzitutto, di usare il tag CODE.
Poi: Codice:
cin>>grandezza; int matrice[grandezza][grandezza]; Altrimenti, puoi inizializzare staticamente una matrice di grandezza fissa, e porre un limite alla dimensione massima della matrice in input. Codice:
for(j=0;j<grandezza;j++) { for(i=0;i<grandezza;i++) { cout<<"\ninserire il contenuto della riga numero "<<i+1<<" colonna numero "<<j+1<<":"; cin>>matrice[j][i]; } } for(j=0;j<grandezza;j++) for(i=0;i<grandezza;i++) somme[j]+=matrice[j][i]; for(j=0,i=0;j<grandezza;j++,i++) { somme[grandezza]+=matrice[j][i];} for(j=0,i=grandezza-1;j<grandezza;j++,i--) somme[grandezza+1]+=matrice[j][i]; controllo=somme[0]; for(i=0;i<grandezza+2;i++) { if(somme[i]!=controllo) verifica=true; controllo=somme[i]; } O crei un vettore ausiliario di istanze di ciascuna entrata, per cui istanze[k-1] contiene il numero di volte in cui k càpita nella matrice: se alla fine dell'input una delle entrate è 0 o è maggiore di 1, la matrice non è magica. Oppure, ogni volta che inserisci un input, controlli che sia tra 1 e n^2, e se compare già tra quelli inseriti (ti serve un indice ausiliario): se succede una di queste cose, la matrice non è magica. Inoltre, tu controlli che la somma sia sempre uguale: ma non controlli che sia anche giusta. Eppure lo sai, quanto deve valere...
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jan 2007
Messaggi: 81
|
Matrice Magica
Ops...Pensavo che quella soluzione era corretta.
Più o meno mi è chiara la tua idea ma siniceramente non so proprio come scirverlo in termine di codice. ![]() ![]() Non è che potresti scrivermi il codice.(ti ricordo che è da poco che comincio a scrivere del codice) ![]() Ti ringrazio mille volte. Ciao |
![]() |
![]() |
![]() |
#6 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
No.
Scrivere il codice, è una cosa che devi imparare a fare tu.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:56.