Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] Problema matrici

  1. #1

    Problema matrici

    Sto realizzando un programma in visual c++ con le matrici....
    Ho utilizzato la seguente funzione per il calcolo del determinante



    void determinante()
    {

    float matrice[10][10];
    int rig,col;
    int i,j;

    system("CLS");

    do{
    cout<<"Inserisci il numero di righe della matrice: "<<endl;
    cin>>rig;
    }while(rig<=0);

    do{
    cout<<"\nInserisci il numero di colonne della matrice: "<<endl;
    cin>>col;
    }while(col<=0);

    for(i=1;i<=rig;i++){
    for(j=1;j<=col;j++){
    cout<<"Inserire l'elemento ["<<i<<"]["<<j<<"]"<<endl;
    cin>>matrice[i][j];
    }
    }
    cout<<"\nLa matrice inserita e':\n\n"<<endl;
    for(i=1;i<=rig;i++){
    cout<<"\n";
    for(j=1;j<=col;j++){
    cout<<matrice[i][j]<<" ";
    }
    }

    cout<<"\n\n";
    system("pause");
    system("CLS");
    i=0;
    j=0;
    float det,q,w,e,r,t,u,o,p,d,f,g,z;

    if (rig==col)
    {
    switch (rig)
    {
    case 1:
    //matrice 1 x 1
    system("CLS");
    cout << " Il determinante della matrice e': ";
    cout << matrice[i][j];
    break;
    case 2: //matrice 2 x 2
    det=((matrice[0][0]*matrice[1][1])-(matrice[1][0]*matrice[0][1]));
    system("CLS");
    cout << " Il determinante della matrice e': ";
    cout << det;
    break;
    case 3: //matrice 3 x 3
    q=(matrice[0][0]*matrice[1][1]*matrice[2][2])+(matrice[0][1]*matrice[1][2]*matrice[2][0])+(matrice[0][2]*matrice[1][0]*matrice[2][1]);
    w=(matrice[0][2]*matrice[1][1]*matrice[2][0])+(matrice[0][0]*matrice[1][2]*matrice[2][1])+(matrice[0][1]*matrice[1][0]*matrice[2][2]);
    det=q-w;
    system("CLS");
    cout << " Il determinante della matrice e': ";
    cout << det;
    break;
    case 4: //matrice 4 x 4
    q= ( matrice[1][1] * (( matrice[2][2] * matrice[3][3]) - ( matrice[3][2] * matrice[2][3] )));
    w= ( matrice[1][2] * ((matrice[2][1] * matrice[3][3]) - (matrice[3][1] * matrice[2][3])));
    e= ( matrice[1][3] * ((matrice[2][1] * matrice[3][2]) - (matrice[3][1] * matrice[2][2])));
    r= ( matrice[1][0] * ((matrice[2][2] * matrice[3][3]) - (matrice[3][2] * matrice[2][3])));
    t= ( matrice[1][2] * ((matrice[2][0] * matrice[3][3]) - (matrice[3][0] * matrice[2][3])));
    u= ( matrice[1][3] * ((matrice[2][0] * matrice[3][2]) - (matrice[3][0] * matrice[2][2])));
    o= ( matrice[1][0] * ((matrice[2][1] * matrice[3][3]) - (matrice[3][1] * matrice[2][3])));
    p= ( matrice[1][1] * ((matrice[2][0] * matrice[3][3]) - (matrice[3][0] * matrice[2][3])));
    d= ( matrice[1][3] * ((matrice[2][0] * matrice[3][1]) - (matrice[3][0] * matrice[2][1])));
    f= ( matrice[1][0] * ((matrice[2][1] * matrice[3][2]) - (matrice[3][1] * matrice[2][2])));
    g= ( matrice[1][1] * ((matrice[2][0] * matrice[3][2]) - (matrice[3][0] * matrice[2][2])));
    z= ( matrice[1][2] * ((matrice[2][0] * matrice[3][1]) - (matrice[3][0] * matrice[2][1])));
    det=((matrice[0][0] * (q-w+e))-(matrice[0][1] * (r-t+u)) + (matrice[0][2] * (o-p+d)) - (matrice[0][3] * (f-g+z)));
    system("CLS");
    cout << " Il determinante della matrice e': ";
    cout << det;
    break;
    default:
    cout<< "ERRORE: Massimo 4 righe e 4 colonne\n";
    }
    }
    else //le righe sono diverse dalla colonne
    {
    cout<<" ERRORE: la matrice deve essere quadrata\n";
    }
    if (((rig>=5)||(rig<=0))&&((rig>=5)||(rig<=0))) {
    cout<<" ERRORE: il valore massimo sopportato e' 4 x 4\n";
    }
    cout<<"\n\n";
    system("pause");
    system("CLS");
    }


    Il risultato però è errato...
    Se per esempio inserisco una matrice 2 X 2
    1 2
    2 1

    Come risultato ottengo -1.15292e+016


    Ki è in grado d aiutarmi....grazie

  2. #2
    Utente di HTML.it L'avatar di br0tz
    Registrato dal
    Jun 2003
    Messaggi
    27
    scusa, non ho letto bene tutto, pero' mi sembra che nella parte di input usi indici (i,j) che partono da 1.. mentre nel calcolo del determinante assumi che partano da 0...

    sbaglio ?
    -------------
    Slackware 9.1

  3. #3
    Bè in effetti hai ragione ora provo a modificarlo!!! grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    Ricorda che il linguaggio va sempre indicato nel titolo (l'ho aggiunto io) e che il codice va postato all'interno dei tag [ CODE ] per evitare che, come nel tuo caso, il tutto risulti un miscuglio semi-illeggibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.