Witam, w moim programie jest wszystko w porządku, choć nie działa on wg wytycznej, chciałbym by mi ktoś powiedział jak mogę go niewielkimi zmianami przerobić tak, by działał. Na _out powinno być kolejno
48 x 12 = 576
48 x 32 = 1536
52 x 48 = 2496
92 x 32 = 2944
92 x 42 = 3864
136 x 32 = 4352.
Program ten ma policzyć optymalne pole powierzchni, co jest moim głównym zadaniem, a pobocznym-postać najbardziej zbliżona kwadratowi. Zmiany chciałbym wprowadzić w funckji calculate. Już w abs nie chcę się bawić. Kosmetyka... Głównie chodzi o if z linii 82.
Pozdrawiam.
Plik _in zawiera:
6 - ilość danych do obliczeń
1 dane
15
22
29
36
43
#include <fstream>
//#include <cstdio>
//#include <iostream>
using namespace std;
class Containers
{
public:
long long int t[100], t_stack[100],size,count;
//int l_con,w_con,l_place[100000],w_place[100000],l_breaks,w_breaks,min_substr[100000],result_width[100],result_lenght[100],result_field[100];
int l_con,w_con,l_place,w_place,l_breaks,w_breaks,min_substr,result_width[100],result_lenght[100],result_field[100];
Containers()
{
count=0; //zerowanie licznika
l_con=40; //dlugosc kontenera - lenght
w_con=8; //szerpkosc kontenera - width
size=0; //zerowanie rozmiaru tablicy danych wczytywane z pliku
l_breaks=2; // odstep pomiedzy wierszami
w_breaks=4; // odstep pomiedzy kolumnami
for(int i=0; i<100; i++) // zerowanie tablic
{
t[i]=0; // zerowanie tablic
t_stack[i]=0;
//l_place[i]=0;
//w_place[i]=0;
//min_substr[i]=0;
result_width[i]=0;
result_lenght[i]=0;
result_field[i]=0; //koniec zerowania
}
}
void addnew(int x) //dodawanie wartosci do tablicy w klasie
{
t[count]=x; // zwykly licznik
count++;
}
void calc_stacks() // policz ilosc stosow - dzielenie ilosci kontenerow /5 i %5.
{
for (int i = 0; i < size; i++)
{
int wynik=t[i]/5,rest=t[i]%5; //zwracanie wyniku do tablicy
t_stack[i]=wynik;
if(rest>0) //jesli reszta wieksza od 0,
{
t_stack[i]++; //to zwieksz stos o 1.
}
}
}
void calculate() //liczenie ilosci wierszy, kolumn i pola
{
//int k,tmp2,n=0,tmp3=900000000;
int k,tmp2,tmp3=900000000;
for(int i=0; i<size; i++)
{
for(int j=1; j<=t_stack[i]; j++)
{
k=t_stack[i]/j;
//cout<<"i="<<i<<"\tj="<<j<<"\tt_stos[i]="<<t_stos[i]<<"\tk="<<k<<endl;
tmp2=t_stack[i]%j;
if(tmp2!=0) k++;
l_place=(l_con*k)+(w_breaks*(k+1));
w_place=(w_con*j)+(l_breaks*(j+1));
//cout<<"l_place[n]="<<l_place[n]<<"\tw_place[n]="<<w_place[n]<<endl;
if(l_place>w_place)
{
min_substr=l_place-w_place;
// cout<<"if wyniki1[n]="<<wyniki1[n]<<"\tl_place[n]="<<l_place[n]<<"\tw_place[n]"<<w_place[n]<<endl;
}
else
{
min_substr=w_place-l_place;
//cout<<"else wyniki1[n]="<<wyniki1[n]<<"\tl_place[n]="<<l_place[n]<<"\tw_place[n]"<<w_place[n]<<endl;
}
if(min_substr<=tmp3)
{
tmp3=min_substr;
result_width[i]=w_place;
result_lenght[i]=l_place;
//cout<<"l_place[n]="<<l_place[n]<<"\tw_place[n]"<<w_place[n]<<endl;
}
//n++;
}
result_field[i]=result_width[i]*result_lenght[i];
//cout<<"w3="<<wynik3[i]<<"\tw1="<<wynik1[i]<<"\tw2="<<wynik2[i]<<endl;
tmp3=900000000;
//n=0;
}
}
~Containers();
};
Containers *containers = new Containers(); // nowy obiekt klasy containers
void load();
void save();
int main()
{
load();
containers->calc_stacks();
containers->calculate();
save();
return 0;
}
void load() //wczytywanie danych, wg zadania
{
int a=0,b=0;
FILE *f;
f=fopen ("_in.txt","r");
fscanf(f,"%d",&a);
containers->size=a; //pobiera ilosc przypadkow wg przykladu napisanym w zadaniu: 6
for(int i=0; i<a; i++)
{
fscanf(f,"%d",&b);
containers->addnew(b); //nowy obiekt w klasie ----------------------
}
fclose(f);
}
void save() //zapis do pliku wyniku w postaci x * y = z gdzie x>y
{
FILE *f;
f=fopen("_out.txt","w");
for(int i=0; i<containers->size; i++) //petla zapisujaca
{
if(containers->result_width[i]>containers->result_lenght[i])
fprintf(f,"%d x % d = %d\n",containers->result_width[i],containers->result_lenght[i],containers->result_field[i]);
else
fprintf(f,"%d x % d = %d\n",containers->result_lenght[i],containers->result_width[i],containers->result_field[i]);
}
fclose(f);
}
dodanie znaczników <code> - fp