Pomoże mi ktoś przerobić mój programik? W tym momencie mam pakowanie do jednego plecaka, a chciałabym aby pakował do tych "plecaków" co są w wektorze magazyn.
Myślę już kilka godzin i nie mam pojęcia, jak to zrobić :(
main.cpp
#include <cstdlib>
#include <iostream>
#include <vector>
#include <cstdio>
#include <fstream>
#include <cctype>
#include <string>
#define iter(a) for(int i = 0 ; i< a ; i++) //coby duzo nie pisac robimy skrocony zapis petli for
using namespace std;
/********* K L A S Y *********/
/* deklaracja klasy Pret zawierajacej zmienne ilosc, dlugosc i kolor */
class Pret
{
public: //** :P
int ilosc; //** ilosc pretow danego typu
int dlugosc; //** dlugosc preta
char kolor; //** kolor pretu
Pret(char kolor, int dlugosc, int ilosc){};
Pret(){};
~Pret(); //** destruktor
};
/* Deklaracja Metod */
int PoliczLinie() /* FUNKCJA LICZACA LINIE W PLIKU */
{
/* Zmienne funkcyjne */
ifstream _plik("order2.txt");
std::string line; //** zczytywana linia
int linie = 0; //** ilosc linii w pliku
std::vector<string> v; //* wektor pomocniczy
/* ***************** */
while(getline(_plik, line))
v.push_back(line);
for(int i = 0; i < v.size() - 1; i++)
linie++;
return linie;
}
int PoliczLinieOut() /* FUNKCJA LICZACA LINIE W PLIKU */
{
/* Zmienne funkcyjne */
ifstream _plik("out2.txt");
std::string line; //** zczytywana linia
int linie = 0; //** ilosc linii w pliku
std::vector<string> v; //* wektor pomocniczy
/* ***************** */
while(getline(_plik, line))
v.push_back(line);
for(int i = 0; i < v.size() - 1; i++)
linie++;
return linie;
}
int compare (const void * a, const void * b)
{
return ( *(int*)b - *(int*)a ); //funkcja aby posortowac malejaco
}
int sumaW(vector<int>&);
/* ***************************** */
/* PROGRAM GŁOWNY CZYLI WSZYSTKO NA CHAMA */
int main()
{
/* Zmienne pomocnicze */
ifstream plikIn("order2.txt"); //** plik Zamowienia
ifstream plikOut("out.txt"); //** plik Magazynu
char Kolor;
int Dlugosc;
int Ilosc;
/* ********************************* */
/* Zmienne pretow z zamowienia i magazynu */
Pret* magazyn = new Pret(); //** deklaracja magazynu
Pret* zamowienie = new Pret(); //** deklaracja zamowienia
/* ************************************** */
/* WYKONYWANIE */
int iloscLinii = 0, iloscLiniiOut = 0;
iloscLinii = PoliczLinie(); // liczenie linii w pliku order2.txt
iloscLiniiOut = PoliczLinieOut(); // liczenie linii w pliku out2.txt
//cout << iloscLinii << endl;
//* Zrzucanie danych z pliku do wektora Magazynu i Zamowienia *//
int pom = 0;
int temp = 0;
//int * prety = new int;
std::vector<int> prety;
std::vector<int> pretyMagazyn;
int sumaIlosc = 0;
for (int i = 0; i < iloscLinii; i++) /* Zamowienie */
{
plikIn >> zamowienie->kolor >> zamowienie->dlugosc >> zamowienie->ilosc;
Kolor = zamowienie->kolor;
Dlugosc = zamowienie->dlugosc;
Ilosc = zamowienie->ilosc;
//cout << "Ilosc: " << Ilosc << endl;
//cout << zamowienie->kolor << " " << zamowienie->dlugosc << "" << zamowienie->ilosc << endl;
for(int j = 0; j < Ilosc; j++)
{
//cout << "POMOCNIK: " << pom << endl;
//prety[pom] = Dlugosc;
prety.push_back(Dlugosc);
//cout << "Dlugosc: " << prety[pom] << endl;
pom += 1;
//sumaIlosc += Ilosc;
}
}
for (int i = 0; i < iloscLiniiOut; i++) /* Zapelnienie magazynu */
{
plikOut >> magazyn->kolor >> magazyn->dlugosc >> magazyn->ilosc;
Kolor = magazyn->kolor;
Dlugosc = magazyn->dlugosc;
Ilosc = magazyn->ilosc;
//cout << "Ilosc: " << Ilosc << endl;
//cout << magazyn->kolor << " " << magazyn->dlugosc << "" << magazyn->ilosc << endl;
for(int j = 0; j < Ilosc; j++)
{
//cout << "POMOCNIK: " << temp << endl;
//pretyMagazyn[temp] = Dlugosc;
pretyMagazyn.push_back(Dlugosc);
cout << "Dlugosc: " << pretyMagazyn[temp] << endl;
temp += 1;
//sumaIlosc += Ilosc;
}
}
int k,suma;
suma = 0;
k = prety.size();
/*int * przedmioty = new int[k];
iter(k)
{
cin>>przedmioty[i];
}*/
int waga;
cout << "Podaj dlugosc podstawowa preta: ";
cin >> waga;
if(waga <= 0)
{
cout<<"blad danych...";
cin.ignore();
getchar();
exit(0);
}
vector<int> mozliwosc, optymalny; //mozliwosc przechowuje kazda brana pod uwage mozliwosc
//optymalny przechowuje najwieksza mozliwosc mniejsza od szukanej
sort(prety.begin(), prety.end());
for(int j = k-1 ; j>= 0; j-- )
{
mozliwosc.clear();
suma = 0;
for(int i = j; i >= 0; i--)
{
if(prety[i] == waga)
{
mozliwosc.push_back(prety[i]);
}
if(prety[i] > waga) continue;
if(suma + prety[i] > waga)
continue;
suma += prety[i];
mozliwosc.push_back(prety[i]);
}
if(suma == waga)
break;
if(sumaW(optymalny) < sumaW(mozliwosc))
{
optymalny.clear();
iter(mozliwosc.size())
optymalny.push_back(mozliwosc[i]); //kopiowanie wektora
}
}
if(suma != waga)
{
cout<<"Nie ma mozliwosci takiego spakowania elementow "<<endl;
cout<<"Aby zapakowane elementy mialy najwieksza mase naleze spakowac elementy: ";
iter(optymalny.size())
cout<<optymalny[i]<<" ";
} else
{
cout<<"Istnieje taka mozliwosc, nalezy spakowac elementy o masach: ";
iter(mozliwosc.size())
{
cout<<mozliwosc[i]<<" ";
}
}
cin.ignore();
system ("pause");
return 0;
}
int sumaW(vector<int>& v)
{
int suma = 0;
iter(v.size())
{
suma+=v[i];
}
return suma;
system("pause");
}
order2.txt
C 1 2
C 3 6
C 6 7
C 8 9
C 10 2
C 16 5
C 19 1
out2.txt
C 10 100
C 15 111
C 12 100
C 20 120
C 7 110
C 17 60
C 5 300