Wyskakuje mi że program przestał działać i na konsoli wyswietla sie process returned 255 (0xFF) z czym to moze byc zwiazane?
0
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)