Loading:


    C++ transponowanie macierzy wyliczanie wyznacznika 3x3

    Program oblicza i wyświetla macierz transponowaną i oblicza wyznacznik macierzy, dane pobiera od użytkownika.



    Napisz Artyku³

    Listing


    #include <iostream>
    #include <math.h>

    using namespace std;


    float dopelnienie(float a11, float a22, float a12, float a21)                           //funkcja liczaca dopelnienia
    {                          
        return ( a11*a22 - a12*a21 );
        }

    int main()
    {
        float macierz[3][3];
        int i, j;
        cout <<"\nWpisz liczby: \n " << endl;
        for ( i=0; i<3; i++ )
        {
        for ( j=0; j<3; j++)
        {
        cout << "a" << i+1 << j+1 << " = ";  
        cin >> macierz[i][j];
        }
        }
        cout << "\nWypisana macierz: \n";
        for ( i=0; i<3; i++ )
        {
            cout << "\n\n";
            for ( j=0; j<3; j++ )
            cout << "      " << macierz [i][j];
            }
        cout << "\n\n";
       

        float trans[3][3];                                                                  //macierzy transponowana
        for ( i=0; i<3; i++)
        {
            for ( j=0; j<3; j++)
            trans[j][i] = macierz[i][j];
        }
        cout <<"\nMacierz transponowana (odwrotna): \n";
        for ( i=0; i<3; i++){
            cout <<"\n\n";
            for ( j=0; j<3; j++ )
            cout << "     " << trans[i][j];
        }

       
        float dop11, dop12, dop13, dop21, dop22, dop23, dop31, dop32, dop33;                    //dopelnienie algebraiczne
       
        dop11 = dopelnienie(macierz[1][1], macierz[2][2], macierz[1][2], macierz[2][1]);
        dop12 = (-1)*  dopelnienie(macierz[1][0], macierz[2][2], macierz[1][2], macierz[2][0]);
        dop13 = dopelnienie(macierz[1][0], macierz[2][1], macierz[1][1], macierz[2][0]);
     
       


        float det;                                                                             //obliczenie wyznacznika
        det = (macierz[0][0]*dop11) + (macierz[0][1]*dop12) + (macierz[0][2]*dop13);
       
        cout << "\n\nWyznacznik macierzy jest: ";
        cout << det << endl;

       
        if ( det == 0 )
        {                                                                       //sprawdzenie czy det=0
            cout << "\nMacierz jest osobliwa!\n\n";      
            system ("pause");
            return 0;
            }
        else{
           

        cout <<"\n\n Macierz transponowana (odwrotna): \n\n";                                      //macierz odwrotna
        for ( i=0; i<3; i++)
        {
            cout << "\n\n";
            for ( j=0; j<3; j++ )
            cout << "     " << (1/det)*trans[i][j];
        }
        }
           
        cout << "\n\n\n";  
        system("pause");
        return 0;
    }
     




    Dodano przez: igor
    Ranga: Administrator serwisu Punktów: 0
    Komentarze użytkowników
    trochę matematyki by się przydało..., musisz pomnożyć 1/detA przez transponowaną macierz dopełnień a nie jak u ciebie tylko przez transponowaną macierz...
    autor: Pelle | 65 | 2009-01-26 10:30:33


    macierz dopełnień transponujemy, i potem mnożymy 1/detA i tak jest
    autor: Igor | 67 | 2009-01-26 13:37:35


      • Tre¶æ komentarza
        Kod do komentarza (opcjonalnie)
        PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
        Autor
        Token
        token

         

         








    funkcje.net
    Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2025 v.1.5 | design: diviXdesign & rainbowcolors