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

C++ Tworzenie dynamicznej macierzy w metodzie

Ostatnio zmodyfikowano 2016-04-19 20:40
Autor Wiadomość
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 ;)
C/C++
/////////////////////////////////////////Macierze.h/////////////////////////////////////////
#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 );
    //... i inne
   
   
    static const int INDEX_OUT_OF_BOUND_EXCEPTION;
};

#endif // MACIERZE_H

/////////////////////////////////Macierze.cpp///////////////////////

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

//... i inne

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";
    //string nazwa;
    //cin >> nazwa;
    //ifstream plik(nazwa.c_str());
    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;
}
//////////////////////////////////////////////////////////main.cpp//////////////////////////////////////
// Iteracja_gaussa.cpp : Defines the entry point for the console application.
//

#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;
}
P-147439
mateczek
» 2016-04-19 20:40:17
C/C++
void Macierze::wypelnianie_tab( Macierze tab1 ) // jak dla mnie takie coś nie ma senu
{
    for( int i = 0; i < tab1.n; i++ )
    {
        for( int j = 0; j < tab1.n; j++ )
        {
            tab1.tabela[ i ][ j ] = wprowadz(); // wypełniasz obiekt tymczasowy przekazany przez wartość :(
            //we wszystkich funkcjach to samo. nie kumam idei jeśli już przekazuj przez referencję
        }
    }
}
P-147443
« 1 »
  Strona 1 z 1