Program do odwracania macierzy
Ostatnio zmodyfikowano 2015-03-24 20:05
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: #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. |
|
pekfos |
» 2015-03-24 19:50:38 Po co..? A = new double *[ n ]; for( int i = 0; i < n; i++ ) { A[ i ] = new double[ n ]; }
|
for( int j = n; j < 2 * n; j++ ) { A[ i ][ j ] = 0; }
|
Poza zakresem. |
|
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 :). |
|
« 1 » |