C++ Tworzenie dynamicznej macierzy w metodzie
Ostatnio zmodyfikowano 2016-04-19 20:40
ghorrak Temat założony przez niniejszego użytkownika |
C++ Tworzenie dynamicznej macierzy w metodzie » 2016-04-19 19:34:45 Cześć! Mój program ma za zadanie rozwiązywać n równań liniowych z n niewiadomymi metodą iteracji Gaussa-Seidla, lecz nie w tym tkwi problem a w przypisywaniu wartości macierzy sczytanych z pliku do zmiennej tab2 (metoda macierze_odczyt, double **tabela i unsigned int n docelowo będzie private, w chwili obecnej jest public żeby łatwiej było mi znajdywać błędy) :), wewnątrz metody wartości wyświetlane są prawidłowo lecz poza nią już nie :) z góry dziękuję za pomoc ;) #ifndef MACIERZE_H #define MACIERZE_H
using namespace std;
class Macierze { public: unsigned int n; double ** tabela; ~Macierze(); Macierze(); Macierze( unsigned int n ); double wprowadz(); void wypelnianie_tab( Macierze tab1 ); void macierze_zapis( Macierze tab1 ); Macierze macierze_odczyt( Macierze tab1 ); void wyswietl_macierz( Macierze tab1 ); static const int INDEX_OUT_OF_BOUND_EXCEPTION; };
#endif
#include "Macierze.h" #include <iostream> #include <fstream> #include <string> #include <sstream>
using namespace std; const int Macierze::INDEX_OUT_OF_BOUND_EXCEPTION = 10;
Macierze::Macierze( unsigned int n ) { this->tabela = new double *[ n ]; this->n = n; for( int i = 0; i < n; ++i ) { tabela[ i ] = new double[ n ]; } } Macierze::Macierze() { } Macierze::~Macierze() { delete( tabela ); }
double Macierze::wprowadz() { double n; do { cin.clear(); cin.sync(); cin >> n; } while( cin.fail() ); return n; } void Macierze::wypelnianie_tab( Macierze tab1 ) { for( int i = 0; i < tab1.n; i++ ) { for( int j = 0; j < tab1.n; j++ ) { tab1.tabela[ i ][ j ] = wprowadz(); } } }
void Macierze::macierze_zapis( Macierze tab1 ) { cout << "Podaj jak chcesz zapisac macierz\n"; string nazwa; cin >> nazwa; ofstream plik( nazwa.c_str() ); if( plik.fail() ) cout << "nie udalo sie zapisac macierzy\n"; else { plik << n << " "; for( int i = 0; i < tab1.n; i++ ) { for( int j = 0; j < tab1.n; j++ ) plik << tab1.tabela[ i ][ j ] << " "; } } plik.close(); }
Macierze Macierze::macierze_odczyt( Macierze tab1 ) { cout << "Podaj nazwe pliku z ktorego chcesz odczytac macierz np macierz.txt\n"; ifstream plik( "macierzee.txt" ); if( plik.fail() ) cout << "nie udalo sie otworzyc pliku\n"; else { plik >> tab1.n; tab1.tabela = new double *[ tab1.n ]; for( int i = 0; i < tab1.n; i++ ) { tab1.tabela[ i ] = new double[ tab1.n ]; for( int j = 0; j < tab1.n; j++ ) { plik >> tab1.tabela[ i ][ j ]; } } } plik.close(); cout << " wartosc tab2 w pkt 1 1 : " << tab1.tabela[ 1 ][ 1 ] << endl; return tab1; }
void Macierze::wyswietl_macierz( Macierze tab1 ) { for( int i = 0; i < tab1.n; i++ ) { for( int j = 0; j < tab1.n; j++ ) cout << tab1.tabela[ i ][ j ] << " "; } cout << endl; }
#include "Macierze.h" #include <iostream> #include <Windows.h>
int main() { Macierze tab1( 3 ); Macierze tab2; tab2 = tab2.macierze_odczyt( tab2 ); cout << tab2.n << endl << tab2.tabela << endl; system( "pause" ); return 0; }
|
|
mateczek |
» 2016-04-19 20:40:17 void Macierze::wypelnianie_tab( Macierze tab1 ) { for( int i = 0; i < tab1.n; i++ ) { for( int j = 0; j < tab1.n; j++ ) { tab1.tabela[ i ][ j ] = wprowadz(); } } } |
|
« 1 » |