Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program do odwracania macierzy

Ostatnio zmodyfikowano 2015-03-24 20:05
Autor Wiadomość
MaciejMarnik1
Temat założony przez niniejszego użytkownika
Program do odwracania macierzy
» 2015-03-24 19:39:47
Witam. Napisałem program do odwracania macierzy, który wygląda u mnie następująco:
C/C++
#include <iostream>
#include <fstream>

using namespace std;

void wczytaj( istream & in, double **& A, int & n )
{
    in >> n;
    in >> n;
    A = new double *[ n ];
    for( int i = 0; i < n; i++ )
    {
        A[ i ] = new double[ n ];
    }
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < n; j++ )
        {
            in >> A[ i ][ j ];
        }
    }
}

void odwracanie( double **& A, int & n )
{
    for( int i = 0; i < n; i++ )
    {
        for( int j = n; j < 2 * n; j++ )
        {
            A[ i ][ j ] = 0;
        }
    }
    for( int i = 0; i < n; i++ )
    {
        A[ i ][ n + i ] = 1;
    }
    for( int s = 0; s < n; s++ )
    {
        double c;
        c = A[ s ][ s ];
        A[ s ][ s ] = A[ s ][ s ] - 1;
        for( int j = s; j < 2 * n; j++ )
        {
            double d;
            d = A[ s ][ j ] / c;
            for( int i = 0; i < n; i++ )
            {
                A[ i ][ j ] = A[ i ][ j ] - d * A[ i ][ s ];
            }
        }
    }
   
}

void drukuj( ostream & out, double ** A, int n )
{
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < 2 * n; j++ )
        {
            out << A[ i ][ j ] << " ";
        }
        out << endl;
    }
}

int main()
{
    double ** A;
    int n;
    ifstream plik;
    plik.open( "macierz.txt" );
    wczytaj( plik, A, n );
    plik.close();
    odwracanie( A, n );
    drukuj( cout, A, 3 );
    system( "pause" );
    return 0;
}
W pliku tekstowym zapisane mam to tak:
3 3
2 5 3
3 2 4
2 3 4
Pisząc program posiłkowałem się tym algorytmem:
http://iv.pl/images/14352144693129602626.png
Jak więc widać, program powinien czytać macierz z pliku tekstowego i podawać nam wynik macierzy po przekształceniach. Zamiast tego jednak występują jakieś błędy z dostępem do pamięci, ponieważ po uruchomieniu programu wyświetlają się tylko błędy #IND zamiast poprawnej macierzy, czasem nawet program się nie uruchamia i wyskakuje jedynie błąd.
Czy pomożecie mi znaleźć ten fragment kodu, który napisałem źle?
Z góry dziękuję za pomoc.
P-129076
pekfos
» 2015-03-24 19:50:38
C/C++
in >> n;
in >> n;
Po co..?

C/C++
A = new double *[ n ];
for( int i = 0; i < n; i++ )
{
    A[ i ] = new double[ n ];
}
C/C++
for( int j = n; j < 2 * n; j++ )
{
    A[ i ][ j ] = 0;
}
Poza zakresem.
P-129078
MaciejMarnik1
Temat założony przez niniejszego użytkownika
» 2015-03-24 20:05:34
Dzięki za pomoc, poradziłem sobie dzięki tym radom :).
P-129084
« 1 »
  Strona 1 z 1