Witam. Napisałem program z funkcjami (dynamiczny) rozwiązujący problem plecakowy
Kiedy wpisuje dane i ma juz się wyswietlic tablica i wynik wywala mi program. Mógłby ktoś pomóc?
#include <iostream>
#include <string>
void PobierzDaneGlowne( int & ilosc, int & pojemnosc );
void UtworzTablice( int ilosc, int pojemnosc );
void PrzypiszWartoscidoTablic( int ilosc, int pojemnosc, int * m, int * c, int ** P, int ** Q );
void AlgorytmPlecakowy( int ilosc, int pojemnosc, int * m, int * c, int ** P, int ** Q );
void WypiszTabliceWynikow( int ilosc, int pojemnosc, int ** tab );
void WypiszWyniki( int ** P, int ** Q, int * m, int * c, int ilosc, int pojemnosc );
using namespace std;
int main()
{
int pojemnosc, ilosc;
int * m = new int[ ilosc ];
int * c = new int[ ilosc ];
int ** Q = new int *[ ilosc + 1 ];
int ** P = new int *[ ilosc + 1 ];
PobierzDaneGlowne( ilosc, pojemnosc );
UtworzTablice( ilosc, pojemnosc );
PrzypiszWartoscidoTablic( ilosc, pojemnosc, m, c, P, Q );
AlgorytmPlecakowy( ilosc, pojemnosc, m, c, P, Q );
WypiszTabliceWynikow( ilosc, pojemnosc, P );
WypiszTabliceWynikow( ilosc, pojemnosc, Q );
WypiszWyniki( P, Q, m, c, ilosc, pojemnosc );
return 0;
}
void PobierzDaneGlowne( int & ilosc, int & pojemnosc )
{
cout << "Podaj pojemnosc plecaka : ";
cin >> pojemnosc;
cout << "Podaj liczbe przedmiotow : ";
cin >> ilosc;
cout << endl;
}
void UtworzTablice( int ilosc, int pojemnosc )
{
int i;
int * m = new int[ ilosc ];
int * c = new int[ ilosc ];
int ** Q = new int *[ ilosc + 1 ];
for( i = 0; i <= ilosc; ++i )
Q[ i ] = new int[ pojemnosc + 1 ];
int ** P = new int *[ ilosc + 1 ];
for( i = 0; i <= ilosc; ++i )
P[ i ] = new int[ pojemnosc + 1 ];
}
void PrzypiszWartoscidoTablic( int ilosc, int pojemnosc, int * m, int * c, int ** P, int ** Q )
{
int i, j;
for( int i = 0; i < ilosc; ++i )
{
cout << "Podaj wage przedmiotu : ";
cin >> m[ i ];
cout << "Podaj wartosc przedmiotu : ";
cin >> c[ i ];
cout << endl;
};
for( i = 0; i <= ilosc; ++i ) {
P[ i ][ 0 ] = 0;
Q[ i ][ 0 ] = 0;
};
for( j = 0; j <= pojemnosc; ++j ) {
P[ 0 ][ j ] = 0;
Q[ 0 ][ j ] = 0;
};
}
void AlgorytmPlecakowy( int ilosc, int pojemnosc, int * m, int * c, int ** P, int ** Q )
{
int i, j;
for( i = 1; i <= ilosc; ++i ) {
for( j = 1; j <= pojemnosc; ++j ) {
if(( j >= m[ i - 1 ] ) &&( P[ i - 1 ][ j ] <( P[ i ][ j - m[ i - 1 ] ] + c[ i - 1 ] ) ) ) {
P[ i ][ j ] = P[ i ][ j - m[ i - 1 ] ] + c[ i - 1 ];
Q[ i ][ j ] = i;
}
else {
P[ i ][ j ] = P[ i - 1 ][ j ];
Q[ i ][ j ] = Q[ i - 1 ][ j ];
}
}
};
}
void WypiszTabliceWynikow( int ilosc, int pojemnosc, int ** tab )
{
int i, j;
cout << " Tablica : " << endl;
for( i = 1; i <= ilosc; ++i )
{
for( j = 1; j <= pojemnosc; ++j )
{
cout << tab[ i ][ j ] << " ";
};
cout << endl;
};
}
void WypiszWyniki( int ** P, int ** Q, int * m, int * c, int ilosc, int pojemnosc )
{
cout << endl;
cout << "MAX : " << P[ ilosc ][ pojemnosc ] << endl;
}