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

Problem plecakowy - program przestał działać

Ostatnio zmodyfikowano 2018-04-09 10:43
Autor Wiadomość
robertos18
Temat założony przez niniejszego użytkownika
Problem plecakowy - program przestał działać
» 2018-04-06 17:31:07
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?

C/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; // Wartosc najlepszej opcji pakunku.
   
}
P-170491
pekfos
» 2018-04-06 21:18:10
Co twoim zdaniem robi funkcja UtworzTablice() i dlaczego odpowiedź brzmi "nic"?
P-170500
michal11
» 2018-04-06 21:58:41
Jak to nic? Cieknie.
P-170501
robertos18
Temat założony przez niniejszego użytkownika
» 2018-04-07 11:40:37
Jak przekazac tablice z funkcji do main'a? Mam z tym problem ;/
P-170502
garlonicon
» 2018-04-07 11:47:06
A nie lepiej w drugą stronę? Spróbuj przekazać tablicę z maina do funkcji.
P-170503
pekfos
» 2018-04-07 11:50:16
Zwróć. Funkcje są po to, by nie kopiować kodu. Ty utworzyłeś funkcję i nakopiowałeś w środku kodu - kompletnie bez sensu i zastanowienia. Zamiast się teraz głowić jak zwrócić z jednej funkcji wszystkie możliwe tablice i robić z tego kodu jeszcze większy bałagan, zrób funkcję, która tworzy jedną tablicę. Sposób tworzenia tablicy się przecież nie zmienia.
P-170504
robertos18
Temat założony przez niniejszego użytkownika
» 2018-04-07 11:50:47
a mógłbyś napisać mi jeden przykład z mojego kodu? bo nie za bardzo wiem jak się za to zabrac
P-170505
darko202
» 2018-04-09 10:43:07
1.
nie chce mi się sprawdzać, ale może to wyglądać jak na
https://4programmers.net/Forum​/C_i_C++​/171071-c++_przekazanie_tablicy_dynamicznej_do_funkcji
C/C++
#include <iostream>

using namespace std;

void funkcja( int * tab, int n )
{
    for( int i = 0; i < n; i++ )
         cout << tab[ i ];
   
    return;
}

int main()
{
    int n, * tablica;
    cin >> n;
    tablica = new int[ n ];
    for( int i = 0; i < n; i++ )
         tablica[ i ] = i + 5;
   
    funkcja( tablica, n );
    system( "Pause" );
    return 0;
}


2.
poszukaj na google "tablica dynamiczna zwracana z funkcji c++"
jest bardzo dużo linków  z tym problemem
https://www.google.pl/search​?biw=1280&bih=878​&ei=BSfLWu74H6HR6AT9sKGYCA​&q=tablica+dynamiczna+zwracana​+z+funkcji+c%2B%2B​&oq=tablica+dynamiczna+zwracan​a+z+funkcji+c%2B%2B​&gs_l=psy-ab.3...390719.402755.0.403730.27.27.0.0.0.0.113.1586.26j1.27.0....0...1c.1.64.psy-ab..0.3.274...0i13k1.0.RzxgYLjhRgQ
P-170581
« 1 »
  Strona 1 z 1