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

Problem z zwracaniem dynamicznej tablicy dwuwymiraowej przez funkcję

Ostatnio zmodyfikowano 2016-03-05 19:44
Autor Wiadomość
Masmix
Temat założony przez niniejszego użytkownika
Problem z zwracaniem dynamicznej tablicy dwuwymiraowej przez funkcję
» 2016-03-05 18:42:51
Witam!

Tak jak już napisałem w temacie, mam problem ze zwróceniem tablicy dwuwymiarowej przez funkcję, tak aby można było gdzie indziej jej użyć. Napisałem w mainie tworzenie macierzy, a w funkcji "fun" jest wpisywanie do tej macierzy liczb. Więc moje pytanie brzmi, czy ktoś mógłby mi napisać jak mogę zwrócić tą macierz przez funkcję "fun" ? Z góry dzięki :)


C/C++
#include <iostream>
#include <cstdlib>
using namespace std;
int fun( double ** tablica, int MAX1, int MAX2, double dana );

int main()
{
    int MAX1, MAX2;
    double dana;
    cout << " Podaj ilosc wierszy " << endl;
    cin >> MAX1;
    double ** tablica = new double *[ MAX1 ]; // Tworzenie Tablicy dwuwymiarowej
    cout << " Podaj ilosc kolumn " << endl;
    cin >> MAX2;
    for( int i = 0; i < MAX1; i++ ) // Wpisywanie liczb do macierzy
    {
        tablica[ i ] = new double[ MAX2 ];
    }
    fun( tablica, MAX1, MAX2, dana );
}
int fun( double ** tablica, int MAX1, int MAX2, double dana )
{
    for( int i = 0; i < MAX1; i++ ) // Wpisywanie liczb do macierzy
    {
        tablica[ i ] = new double[ MAX2 ];
        for( int j = 0; j < MAX2; j++ )
        {
            cout << " Podaj dana dla Tablica[" << i << "][" << j << "]" << endl;
            cin >> dana;
            tablica[ i ][ j ] = dana;
            cout << " Dana dla Tablica[" << i << "][" << j << "] wynosi " << tablica[ i ][ j ] << endl << endl;
        }
    }
    cout << "Dane w macierzy: " << endl; //Wypisanie danych macierzy
    for( int i = 0; i < MAX1; i++ )
    {
        for( int j = 0; j < MAX2; j++ )
        {
            cout.width( 10 );
            cout << tablica[ i ][ j ] << " ";
        }
        cout << endl << endl;
    }
}
P-145586
mateczek
» 2016-03-05 18:53:40
wstaw kod w znaczniki


[cpp]
tutaj kod
[/cpp]
P-145587
Masmix
Temat założony przez niniejszego użytkownika
» 2016-03-05 18:55:39
C/C++
#include <iostream>
#include <cstdlib>
using namespace std;
int fun( double ** tablica, int MAX1, int MAX2, double dana );

int main()
{
    int MAX1, MAX2;
    double dana;
    cout << " Podaj ilosc wierszy " << endl;
    cin >> MAX1;
    double ** tablica = new double *[ MAX1 ]; // Tworzenie Tablicy dwuwymiarowej
    cout << " Podaj ilosc kolumn " << endl;
    cin >> MAX2;
    for( int i = 0; i < MAX1; i++ ) // Wpisywanie liczb do macierzy
    {
        tablica[ i ] = new double[ MAX2 ];
    }
    fun( tablica, MAX1, MAX2, dana );
}
int fun( double ** tablica, int MAX1, int MAX2, double dana )
{
    for( int i = 0; i < MAX1; i++ ) // Wpisywanie liczb do macierzy
    {
        tablica[ i ] = new double[ MAX2 ];
        for( int j = 0; j < MAX2; j++ )
        {
            cout << " Podaj dana dla Tablica[" << i << "][" << j << "]" << endl;
            cin >> dana;
            tablica[ i ][ j ] = dana;
            cout << " Dana dla Tablica[" << i << "][" << j << "] wynosi " << tablica[ i ][ j ] << endl << endl;
        }
    }
    cout << "Dane w macierzy: " << endl;
    for( int i = 0; i < MAX1; i++ )
    {
        for( int j = 0; j < MAX2; j++ )
        {
            cout.width( 10 );
            cout << tablica[ i ][ j ] << " ";
        }
        cout << endl << endl;
    }
}
P-145588
mateczek
» 2016-03-05 19:22:36
1. twój kod działa !!!
2. funkcja "fun" nic nie zwraca!!!
3. połowę tablicy tworzysz poza funkcją drugą połowę w main
4. w twoim kodzie nic z funkcji zwracać nie musisz masz przecież wskaźnik na tablicę w main!!!

4 masz wycieki pamięci bo nie zwolniłeś tablicy !!!!

5 zobacz ten kod bo prawdę mówiąc nie bardzo wiem co chcesz osiągnąć !!!

C/C++
#include <iostream>
#include <cstdlib>
using namespace std;
double ** fun( int wiersze, int kolumny );

int main()
{
    int wiersze, kolumny;
    cin >> wiersze >> kolumny;
   
    double ** tablica = fun( wiersze, kolumny );
   
    cout << "Dane w macierzy: " << endl;
    for( int i = 0; i < wiersze; i++ )
    {
        for( int j = 0; j < kolumny; j++ )
        {
            cout.width( 10 );
            cout << tablica[ i ][ j ] << " ";
        }
        cout << endl << endl;
    }
    // i tak trzeba zwolnić pamięć więc rozwiązanie z tworzeniem tablicy w funkcji przemyśl;
    for( int i = 0; i < wiersze; i++ ) {
        delete[] tablica[ i ];
       
    }
    delete[] tablica;
   
}






double ** fun( int wiersze, int kolumny ) {
    double ** tab = new double *[ wiersze ];
    int dana;
    for( int i = 0; i < wiersze; i++ ) {
       
        tab[ i ] = new double[ kolumny ];
        for( int j = 0; j < kolumny; j++ ) {
            cout << " Podaj dana dla Tablica[" << i << "][" << j << "]" << endl;
            cin >> dana;
            tab[ i ][ j ] = dana;
            cout << " Dana dla Tablica[" << i << "][" << j << "] wynosi " << tab[ i ][ j ] << endl << endl;
        }
    }
    return tab;
}
P-145590
Masmix
Temat założony przez niniejszego użytkownika
» 2016-03-05 19:44:22
Przyznaję rację, spieprzyłem. Kopiowałem kod na szybko i nie sprawdziłem dokładnie czy działa. Troszkę pogłówkowałem i problem sam się rozwiązał, także dzięki za poświęcony czas .
P-145592
« 1 »
  Strona 1 z 1