Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QCoreApplication>
- #include <iostream>
- using namespace std;
- /*
- *
- * http://www.youmath.it/lezioni/algebra-lineare/matrici-e-vettori/767-calcolo-del-determinante.html
- *
- */
- #define colonne 3
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- int matrix[colonne][colonne];
- //chiedo all'utente di inserirmi i valori della matrice
- for(int I(0);I<colonne; I++){
- for(int H(0); H<colonne; H++){
- cout<<"matrix["<<I<<"]["<<H<<"] = ";
- cin>>matrix[I][H];
- cout<<endl;
- }
- }
- //inizializzo la diagonale e l'antidiagonale
- int diagonale(0);
- int antidiagonale(0);
- //appoggio mi serve per moltiplicare tra di loro i membri di una diagonale
- //lo sommo a "diagonale" che sarà la somma di tutti i prodotti delle diagonali
- // e poi lo reimposto a 1 per l'iterazione successiva.
- int appoggio = 1;
- for(int H(0); H<colonne; H++){
- appoggio = 1;
- /*
- * Questo for serve per prendere gli elementi della diagonale maggiore
- * e moltiplicarli tra di loro.
- * la H serve per spostarmi di diagonale poichè le diagonali parallele
- * si differenziano con l'indice della colonna aumentato di n
- *
- * il % lo utilizzo per resettare a 0 la colonna quando la somma di
- * I+H raggiunge l'indice piu alto della colonna
- * per esempio se ho una matrice 3x3 il limite massimo è 2
- * quindi quando H+I arrivano a 3 a me servirebbe in realtà 0
- * quindi -> 3%3 = 0 4%3 = 1
- *
- *
- * questo perchè la regola di sarrus dice che bisogna riproporre le prime
- * colonne della matrice accanto alle ultime per poter ottenere n diagonali
- * complete dove n è le dimensioni della riga e della colonna ( una 3x3 avrà
- * 3 diagonali e cosi via)
- *
- */
- for(int I(0);I<colonne; I++){
- appoggio = appoggio *matrix[I][(I+H)%colonne];
- }
- diagonale += appoggio;
- }
- cout<<diagonale<<endl;
- //anti
- for(int t(0); t<colonne;t++){
- appoggio = 1;
- /*
- * l'antidiagonale a differenza della diagonale
- * ha l'indice di colonna e di riga inversamente
- * proporzionali
- * all'aumentare di uno diminuisce l'altro
- * quindi utilizzo un for con due variabili
- * una che aumenta fino al limite massimo
- * e una che dal limite massimo decrementa fino a 0
- *
- *
- * e con lo stesso principio di prima mi avvalgo di un ulteriore
- * for a monte per farmi traslare da una diagonale all'altra. (t)
- *
- */
- for(int I(colonne-1), H(0); I>=0; I--,H++){
- appoggio = appoggio * matrix[I][(H+t)%colonne];
- }
- antidiagonale += appoggio;
- }
- cout<<"anti = "<<antidiagonale<<endl;
- cout<< "determinante = "<<diagonale-antidiagonale<<endl;
- return a.exec();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement