Tablice Dynamiczne

0

Mam problem z funkcja suma_tablic. Próbuje dodać tam tablicę dynamiczną, niestety za każdym razem podkreśla mi n i m w tablicy suma informując, że mam jakiś błąd.

float ** stworz_tablice(int &n, int&m)
{
    cout << "Podaj wartosc n(liczba wierszy): " << endl;
    cin >> n;
    cout << "Podaj wartosc m(liczba kolumn):" << endl; 
    cin >> m;
    float **tab = new float*[n];
    for (int i = 0; i < n; i++)
    {
        tab[i] = new float[m];      
    }
    return tab;
}

void wypelnij_tablice(float ** tab, int n, int m)
{
    srand(unsigned(time(0)));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            tab[i][j] = rand() % 10;
        }
    }
}

void wyswietl_tablice(float ** tab, int n, int m, string nazwa)
{
    cout << endl << nazwa;
    for (int i = 0; i < n; i++)
    {
        cout << endl;
        for (int j = 0; j < m; j++)
        {
            cout << tab[i][j] << " ";
        }
    }
}

float** usun_tablice(float ** tab, int n, int m)
{
    for (int i = 0; i < n; i++)
        delete[] tab[i];
    delete[] tab;
    tab = 0;
    return tab;
}

void suma_tablic(float **tab, float ** tabb, int n, int m, string nazwa)
{
    float suma[n][m];
    cout << endl << nazwa;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            suma[i][j] = tab[i][j] + tabb[i][j];
            cout << suma[i][j] << " ";
        }
    }
    cout << endl;

}

int main()
{
menu:
    int wybor = 0;
    cout << "Wybierz co chcesz obliczyc:" << endl;
    cout << "1. Zadanie 3 - Wszystkie Podpunkty" << endl;
    cout << "2. Exit" << endl;
    cin >> wybor;
    switch (wybor)
    {
    case 1:
    {
              system("cls");
              int n1, m1, n2, m2;
              float **tab1, **tab2;
              cout << "Wybrales punkt 4 - Zadanie 3." << endl;
              tab1 = stworz_tablice(n1, m1);
              wypelnij_tablice(tab1, n1, m1);
              wyswietl_tablice(tab1, n1, m1, "Tablica 1");
              cout << "\n\n\nN1 = " << n1;
              cout << endl << endl;
              tab2 = stworz_tablice(n2, m2);
              wypelnij_tablice(tab2, n2, m2);
              wyswietl_tablice(tab2, n2, m2, "Tablica 2");
              cout << "\n\n\nN2 = " << n2;
              cout << endl << endl;
              suma_tablic(tab1, tab2, n1, m1, "Suma macierzy:");

              tab1 = usun_tablice(tab1, n1, m1);
              tab2 = usun_tablice(tab2, n2, m2);

              goto menu1;
    }
    case 2:
    {
              return 0;
    }
    }

menu1:
    int taknie = 0;
    cout << "Chcesz przejsc do menu glownego?" << endl;
    cout << "1 - Tak" << endl;
    cout << "2 - Nie" << endl;
    cin >> taknie;
    switch (taknie)
    {
    case 1:
    {
              system("cls");
              goto menu;
    }
    case 2:
    {
              return 0;
    }
    default:
    {
               system("cls");
               goto menu1;
    }
    }
    system("pause");
}
1

Jeśli to jaki​ś błąd to musisz zastosować którąś poprawkę.

1

W ten sposób nie tworzy się tablicy dwuwymiarowej o dynamicznym przydziale pamięci. Musisz ręcznie zaalokować pamięć. W ten sposób można tworzyć tablicę jedynie, jeśli rozmiar tablicy jest znany podczas kompilacji.

PS. Brawa za goto ;'D

0
pasasap napisał(a):

W ten sposób nie tworzy się tablicy dwuwymiarowej o dynamicznym przydziale pamięci. Musisz ręcznie zaalokować pamięć. W ten sposób można tworzyć tablicę jedynie, jeśli rozmiar tablicy jest znany podczas kompilacji.

PS. Brawa za goto ;'D

W sumie nie zwróciłem na to uwagi przy pisaniu. Szczerze mówiąc całej dokumentacji od wykładowcy nie czytałem. Jeśli faktycznie tak jest jak piszesz to wszystko już jest dla mnie jasne. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0