Loading:

Książka Zend Framework 3. Poradnik Programisty.

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;
}
 


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=1567

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
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-17 v.1.5 | design: diviXdesign & rainbowcolors