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