problem plecakowy- programowanie dynamiczne

0

Wyskakuje mi że program przestał działać i na konsoli wyswietla sie process returned 255 (0xFF) z czym to moze byc zwiazane?

0

masz błąd w linii 10 oraz 27.

0

Program się uruchamia, ale po wyświetleniu wyników pojawia się komunikat że przestaje działać może komuś uda się rozwiązać problem

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;
struct rzecz // struktura reprezentuje typ rzeczy
{
    // pola struktury
    int waga;
    int wartosc;
        // okreœla, czy w³o¿ono rzecz (1) czy nie (0)
};
rzecz *rzeczy; //rzeczy
int liczbaTypow, // liczba typow rzeczy, które wlozy sie do plecaka
    pojemnoscPlecaka, // maksymalna ³adownoœæ plecaka
    *pojemnosci, // tablica do programowania dynamicznego, na kolejne pojemnoœci od 0 do pojemnoscPlecaka - bêdzie przechowywaæ maksymalne wartoœci rzeczy w plecaku dla ka¿dej z nich
    *coWlozono, // tablica okreœlaj¹ca, co w³o¿ono do plecaka, by uzyskaæ odpowiedni¹ pojemnoœæ
    *liczbaSztuk; // do zliczania liczby sztuk okreœlonego typu rzeczy w plecaku

void wczytajDane() // funkcja wczytuje wejœcie i alokuje pamiêæ na tablice
{

    cout<<"Podaj liczbe typow przedmiotow:"<<endl;
    cin>>liczbaTypow; // wczytanie liczby rzeczy
    cout<<"\nPodaj ladownosc plecaka: "<<endl;
    cin>>pojemnoscPlecaka; // wczytanie ³adownoœci plecaka
    rzeczy=new rzecz[liczbaTypow+1];
    pojemnosci=new int [pojemnoscPlecaka+1];
    coWlozono=new int [pojemnoscPlecaka+1];
    liczbaSztuk=new int [liczbaTypow+1];
    for (int i=1;i<=liczbaTypow;i++) // dla ka¿dej rzeczy
    {
        cout<<"Przedmiot nr : "<<i<<endl;
        cout<<"Podaj wartosc: ";
        cin>>rzeczy[i].wartosc; // wczytanie jej wartoœci
        cout<<"Podaj mase: ";
        cin>>rzeczy[i].waga; // i masy
    }
}

void pakujPlecak() // funkcja znajduje najlepsze upakowania dla mo¿liwych pojemnoœci, za pomoc¹ programowania dynamicznego
{
    pojemnosci[0]=0; // plecak pusty ma wartoϾ 0
    for (int i=1;i<=pojemnoscPlecaka;i++) // dla ka¿dej wiêkszej pojemnoœci
    {
        pojemnosci[i]=0; // na pocz¹tku zak³ada siê, ¿e plecak jest pusty, poniewa¿ szuka siê maksimum
        for (int j=1;j<=liczbaTypow;j++) // dla kolejnych rzeczy
            if ((i>=rzeczy[j].waga) && (pojemnosci[i]<pojemnosci[i-rzeczy[j].waga]+rzeczy[j].wartosc)) // jeœli rzecz mieœci siê w plecaku i jej obecnoœæ zwiêksza jego wartoœæ dla bie¿¹cej pojemnoœci
            {
                pojemnosci[i]=pojemnosci[i-rzeczy[j].waga]+rzeczy[j].wartosc; // przypisuje siê tê ³¹czn¹ wartoœæ plecaka
                coWlozono[i]=j; // zapisuje siê, jak¹ rzecz do³o¿ono (do odtwarzania zawartoœci)
            }
        if (pojemnosci[i]==0) // jeœli nie znaleziono maksymalnej wartoœci - nadal jest 0
        {
            pojemnosci[i]=pojemnosci[i-1]; // przepisuje siê wartoœæ dla poprzedniej pojemnoœci
            coWlozono[i]=0; // 0 - nie w³o¿ono nic nowego
        }
    }
}

void podliczInwentarz() // funkcja odtwarza z tablic zawartoϾ plecaka, podlicza rzeczy
{
    int i; // licznik, indeks
    for (i=1;i<=liczbaTypow;i++) // dla ka¿dego typu
        liczbaSztuk[i]=0; // zerowanie liczby sztuk w plecaku
    i=pojemnoscPlecaka; // zaczyna siê pêtlê od pojemnoœci plecaka
    while (i>0) // dopóki nie opró¿ni siê plecaka (bo siê w³aœciwie wyjmuje kolejne rzeczy)
        if (coWlozono[i]==0) // jeœli dla tej pojemnoœci niczego w³o¿ono (przepisano wartoœæ mniejszej o 1)
            i--; // zmniejsza siê j¹
        else // w przeciwnym wypadku
        {
            liczbaSztuk[coWlozono[i]]++; // zwiêksza siê liczbê sztuk rzeczy, któr¹ w³o¿ono
            i-=rzeczy[coWlozono[i]].waga; // zmniejsza siê pojemnoœæ o wagê tej rzeczy - wyjmuje siê j¹
        }
}

void wyswietlZawartosc() // funkcja wyœwietla maksymaln¹ wartoœæ plecaka, nr rzeczy i liczby ich sztuk
{
    int i; // licznik, indeks
    cout<<"Wartosc najlepszego wyboru: "<<pojemnosci[pojemnoscPlecaka]<<endl; // wyœwietlenie wyniku
    cout<<"Nr rzeczy - liczba egzemplarzy:"<<endl;
    for (i=1;i<=liczbaTypow;i++) // dla ka¿dej rzeczy
        if (liczbaSztuk[i]>0) // jeœli wyst¹pi³a w plecaku
            cout<<i<<"----------"<<liczbaSztuk[i]<<endl; // wyœwietlenie jej nr i liczby wyst¹pieñ
}

void zwolnijPamiec() // funkcja uwalnia przydzielon¹ pamiêæ
{
    for (int i=0;i<liczbaTypow;i++) // zwolnienie pamiêci
    {

    delete [] rzeczy; // zwolnienie tablic
    delete []pojemnosci;
    delete []liczbaSztuk;
    delete []coWlozono;

    }

}
int main() // g³ówna funkcja
{

    wczytajDane();// kolejne funkcje
    pakujPlecak();
    podliczInwentarz();
    wyswietlZawartosc();
    zwolnijPamiec();
    return 0;
}
0
    for (int i=0;i<liczbaTypow;i++) // zwolnienie pamiêci
    {

    delete [] rzeczy; // zwolnienie tablic
        delete []pojemnosci;
    delete []liczbaSztuk;
        delete []coWlozono;

    }

Wystarczy to raz wywołać, usuń pętlę.
(btw - polskie nazwy identyfikatorów są złe)

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