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