#include <iostream>
#include <cstdlib>
using namespace std;
void wyswietl (int** t, const unsigned n)
{
for (unsigned i = 0; i < n; i++)
{
cout << endl;
for (unsigned j = 0; j < n; j++)
{
cout << t[i][j] << '\t';
}
}
cout << endl;
}
void wypelnij (int** t, const unsigned n)
{
int cyfra = 0;
for (unsigned i = 0; i < n; i++)
{
cout << "Podaj cyfre dla " << i+1 <<" wiersza: " << '\t';
cin >> cyfra;
for (unsigned j = 0; j < n; j++)
{
t[i][j] = cyfra;
}
}
}
void pamiec_del (int** t, const unsigned n)
{
for (unsigned i = 0; i < n; i++)
{
delete [] t[i];
}
}
void utworz_pamiec (int** t, const unsigned n)
{
//t = new int* [n];
for (unsigned i = 0; i < n; i++)
{
t[i] = new int [n];
}
}
void zerowanie (int** tab, const unsigned n)
{
for (unsigned i = 0; i < n; i++)
{
for ( unsigned j = 0; j < n; j++)
{
tab[i][j] = 0;
}
}
}
void mnozenie (int** A, int** B, const unsigned n, int** tab_wynik)
{
for (int i =0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < n; k++)
{
tab_wynik[i][j] = (A[i][k] * B[k][j]) + tab_wynik[i][j];
}
}
}
}
int main()
{
unsigned n = 0;
cout << "Podaj rozmiar tablicy: " << endl;
cin >> n;
int** tab1 = new int * [n];
int** tab2 = new int * [n];
int** tab_wynik = new int * [n];
utworz_pamiec(tab_wynik, n);
utworz_pamiec (tab1, n);
cout << "Wypelnianie pierwszej macierzy: " << endl;
wypelnij(tab1, n);
wyswietl (tab1, n);
cout << "Wypelnianie drugiej macierzy: " << endl;
wypelnij(tab2, n);
wyswietl (tab2, n);
zerowanie (tab_wynik, n);
cout << "Test wyzerowanej macierzy wynikowej: " << endl;
wyswietl (tab_wynik, n);
mnozenie (tab1, tab2, n, tab_wynik);
cout << "Macierz wynikowa mnozenia: " << endl;
wyswietl (tab_wynik, n);
pamiec_del(tab1, n);
pamiec_del(tab2, n);
pamiec_del(tab_wynik, n);
cout << endl;
tab1 = nullptr;
tab2 = nullptr;
tab_wynik = nullptr;
return 0;
}
Jak "nie dziala"?
83 linia, program w tym miejscu nie przechodzi na 84, tylko wyrzuca returna.
https://drive.google.com/file/d/16R_7EsRQcT44uyUcU2GxIS6vFXnl5pjS/view?usp=sharing
zdjęcie konsoli po przerwaniu programu
Nigdzie nie wywołujesz utworz_pamiec
dla drugiej tablicy. Ale przede wszystkim nie rób tego co robisz, to nieczytelne, błędogenne i zła praktyka.
https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/
właśnie pisałem, że przerabiając kod tyle razy dla różnych wariantów umknęło mi, że nie użyłem dla jednej tablicy tej funkcji ;p Dzięki za pomoc :)
jeśli chodzi o zwalnianie pamięci, to tak nam podali na studiach, na razie robię tak jak wymagają bo jestem totalnym początkującym. Domyślam się, że rozszerzą nam potem o elementy które podrzuciłeś, jak nie to sam będę szukać tego. — PaawllooPL dziś, 19:47
Myślałem, ze szkoła średnia. Jaka to uczelnia?
Fikcją jest, ze jest to kod w C++. To jest C ze strumieniami.
Zabetonowanie nieznajomości języka C++, a szkoda, bo ma nawet w podstawowym zakresie, wiele środków aby to robić bezpieczniej.