//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { float P=StrToFloat(slu4ij->Text)/100; //lojalnost' k drugim pokupkam if(P<0 | P>1) { MessageBox(Handle, "Неверное значение для\n" "лояльности покупателей!\n\n" "введите значение [0;100]", " Информация", MB_OK | MB_ICONERROR); return; } //opredelenie osnovnihh peremennih dlz 1oj zageti int spros_shtuk1[6]; float spros_dnej1[6]; float Pok1; float Prod1; float Muk1; //opredelenie osnovnihh peremennih dlz 2oj zageti int spros_shtuk2[6]; float spros_dnej2[6]; float Pok2; float Prod2; float Muk2; //opredelenie osnovnihh peremennih dlz 3oj zageti int spros_shtuk3[6]; float spros_dnej3[6]; float Pok3; float Prod3; float Muk3; //ceni na gazetu 1 Pok1=pok1->Text.ToDouble(); Prod1=prod1->Text.ToDouble(); Muk1=muk1->Text.ToDouble(); //ceni na gazetu 2 Pok2=pok2->Text.ToDouble(); Prod2=prod2->Text.ToDouble(); Muk2=muk2->Text.ToDouble(); //ceni na gazetu 3 Pok3=pok3->Text.ToDouble(); Prod3=prod3->Text.ToDouble(); Muk3=muk3->Text.ToDouble(); //vvrdenie sprosa na gazetu 1 spros_shtuk1[0]=shtuk1_1->Text.ToInt(); spros_shtuk1[1]=shtuk1_2->Text.ToInt(); spros_shtuk1[2]=shtuk1_3->Text.ToInt(); spros_shtuk1[3]=shtuk1_4->Text.ToInt(); spros_shtuk1[4]=shtuk1_5->Text.ToInt(); spros_shtuk1[5]=shtuk1_6->Text.ToInt(); //vvrdenie sprosa na gazetu 2 spros_shtuk2[0]=shtuk2_1->Text.ToInt(); spros_shtuk2[1]=shtuk2_2->Text.ToInt(); spros_shtuk2[2]=shtuk2_3->Text.ToInt(); spros_shtuk2[3]=shtuk2_4->Text.ToInt(); spros_shtuk2[4]=shtuk2_5->Text.ToInt(); spros_shtuk2[5]=shtuk2_6->Text.ToInt(); //vvrdenie sprosa na gazetu 3 spros_shtuk3[0]=shtuk3_1->Text.ToInt(); spros_shtuk3[1]=shtuk3_2->Text.ToInt(); spros_shtuk3[2]=shtuk3_3->Text.ToInt(); spros_shtuk3[3]=shtuk3_4->Text.ToInt(); spros_shtuk3[4]=shtuk3_5->Text.ToInt(); spros_shtuk3[5]=shtuk3_6->Text.ToInt(); //vvedenie 4astoti sprosa na gazetu 1 spros_dnej1[0]=dnej1_1->Text.ToInt(); spros_dnej1[1]=dnej1_2->Text.ToInt(); spros_dnej1[2]=dnej1_3->Text.ToInt(); spros_dnej1[3]=dnej1_4->Text.ToInt(); spros_dnej1[4]=dnej1_5->Text.ToInt(); spros_dnej1[5]=dnej1_6->Text.ToInt(); //vvedenie 4astoti sprosa na gazetu 2 spros_dnej2[0]=dnej2_1->Text.ToInt(); spros_dnej2[1]=dnej2_2->Text.ToInt(); spros_dnej2[2]=dnej2_3->Text.ToInt(); spros_dnej2[3]=dnej2_4->Text.ToInt(); spros_dnej2[4]=dnej2_5->Text.ToInt(); spros_dnej2[5]=dnej2_6->Text.ToInt(); //vvedenie 4astoti sprosa na gazetu 3 spros_dnej3[0]=dnej3_1->Text.ToInt(); spros_dnej3[1]=dnej3_2->Text.ToInt(); spros_dnej3[2]=dnej3_3->Text.ToInt(); spros_dnej3[3]=dnej3_4->Text.ToInt(); spros_dnej3[4]=dnej3_5->Text.ToInt(); spros_dnej3[5]=dnej3_6->Text.ToInt(); float T1=0; float T2=0; float T3=0; //periodi. normalizuem for (int i=0;i<=5;i++) { T1=T1+spros_dnej1[i]; T2=T2+spros_dnej2[i]; T3=T3+spros_dnej3[i]; } for (int i=0;i<=5;i++) { spros_dnej1[i]=spros_dnej1[i]*(100/T1); spros_dnej2[i]=spros_dnej2[i]*(100/T2); spros_dnej3[i]=spros_dnej3[i]*(100/T3); } //najdem max spros int max[3]; max[0]=0; max[1]=0; max[2]=0; max[3]=0; for (int i=0;i<=5;i++) { if(spros_shtuk1[i]>=max[1]) { max[1]=spros_shtuk1[i]; } } for (int i=0;i<=5;i++) { if(spros_shtuk2[i]>=max[2]) { max[2]=spros_shtuk2[i]; } } for (int i=0;i<=5;i++) { if(spros_shtuk3[i]>=max[3]) { max[3]=spros_shtuk3[i]; } } for (int i=1;i<=3;i++) { if(max[i]>max[0]) { max[0]=max[i]; } } ProgressBar1->Max=max[0]; float N_kup1=0; //stolko kupili float N_zap1=0; //stolko neudobletvorili float N_ost1=0; //stolko ostalos float N_dob1=0; //stolko kupat v sledstv. perekrestnogo sprosa float N_kup2=0; float N_zap2=0; float N_ost2=0; float N_dob2=0; float N_kup3=0; float N_zap3=0; float N_ost3=0; float N_dob3=0; float tempMoney=0; float BestMoney=0; float Money1=0; float Money2=0; float Money3=0; //perebor for(int N1=0;N1<=max[0];N1++) { ProgressBar1->Position=N1; // =) for(int N2=0;N2<=max[0];N2++) { for(int N3=0;N3<=max[0];N3++) { for(int i=0;i<=5;i++) { if (spros_shtuk1[i]>=N1) { N_kup1=N_kup1+N1*spros_dnej1[i]; N_zap1=N_zap1+(spros_shtuk1[i]-N1)*spros_dnej1[i]; } else { N_kup1=N_kup1+spros_shtuk1[i]*spros_dnej1[i]; N_ost1=N_ost1+(N1-spros_shtuk1[i])*spros_dnej1[i]; } }; //u 2oj gazeti for(int i=0;i<=5;i++) { if (spros_shtuk2[i]>=N2) { N_kup2=N_kup2+N2*spros_dnej2[i]; N_zap2=N_zap2+(spros_shtuk2[i]-N2)*spros_dnej2[i]; } else { N_kup2=N_kup2+spros_shtuk2[i]*spros_dnej2[i]; N_ost2=N_ost2+(N2-spros_shtuk2[i])*spros_dnej2[i]; } }; //u 3ej gazeti for(int i=0;i<=5;i++) { if (spros_shtuk3[i]>=N3) { N_kup3=N_kup3+N3*spros_dnej3[i]; N_zap3=N_zap3+(spros_shtuk3[i]-N3)*spros_dnej3[i]; } else { N_kup3=N_kup3+spros_shtuk3[i]*spros_dnej3[i]; N_ost3=N_ost3+(N3-spros_shtuk3[i])*spros_dnej3[i]; } }; //Obrabotka perekresnogo sprosa. N_zap1=N_zap1*(P/2); //zapros ravnosilen dla 2 i 3 gazeti (delenie na 2) N_zap2=N_zap3*(P/2); N_zap3=N_zap3*(P/2); //dla 1oj gazeti if (N_zap2!=0 & N_zap3!=0 & (N_zap2+N_zap3)<=N_ost1) //esli est spros so storoni gazet, no on mal, po sravneniju s ostatkom { N_dob1=N_zap2+N_zap3; N_ost1=N_ost1-N_dob1; // pervoj ostalos menshe } if (N_zap2!=0 & N_zap3!=0 & (N_zap2+N_zap3)>N_ost1) //esli est spros so storoni gazet, no on bolshoj, po sravneniju s ostatkom1 { N_dob1=N_ost1; N_ost1=0; // pervuju skupili } if (N_zap2==0 & N_zap3!=0 & N_zap3<=N_ost1) //u odnoj spros est, i on mal, a u dr. ego net { N_dob1=N_zap3; N_ost1=N_ost1-N_zap3; } if (N_zap2==0 & N_zap3!=0 & N_zap3>N_ost1) //u odnoj spros est, i on bolshoj, a u dr. ego net { N_dob1=N_ost1; N_ost1=0; } if (N_zap3==0 & N_zap2!=0 & N_zap2<=N_ost1) //i na oborot { N_dob1=N_zap2; N_ost1=N_ost1-N_zap2; } if (N_zap3==0 & N_zap2!=0 & N_zap2>N_ost1) //i na oborot { N_dob1=N_ost1; N_ost1=0; } //dla 2oj gazeti if (N_zap1!=0 & N_zap3!=0 & (N_zap1+N_zap3)<=N_ost2) //esli est spros so storoni gazet, no on mal, po sravneniju s ostatkom { N_dob2=N_zap1+N_zap3; N_ost2=N_ost2-N_dob2; // pervoj ostalos menshe } if (N_zap1!=0 & N_zap3!=0 & (N_zap1+N_zap3)>N_ost2) //esli est spros so storoni gazet, no on bolshoj, po sravneniju s ostatkom1 { N_dob2=N_ost2; N_ost2=0; // pervuju skupili } if (N_zap1==0 & N_zap3!=0 & N_zap3<=N_ost2) //u odnoj spros est, i on mal, a u dr. ego net { N_dob2=N_zap3; N_ost2=N_ost2-N_zap3; } if (N_zap1==0 & N_zap3!=0 & N_zap3>N_ost2) //u odnoj spros est, i on bolshoj, a u dr. ego net { N_dob2=N_ost2; N_ost2=0; } if (N_zap3==0 & N_zap1!=0 & N_zap1<=N_ost2) //i na oborot { N_dob2=N_zap1; N_ost2=N_ost2-N_zap1; } if (N_zap3==0 & N_zap1!=0 & N_zap1>N_ost2) //i na oborot { N_dob2=N_ost2; N_ost2=0; } //dla 3oj gazeti if (N_zap2!=0 & N_zap1!=0 & (N_zap2+N_zap1)<=N_ost3) //esli est spros so storoni gazet, no on mal, po sravneniju s ostatkom { N_dob3=N_zap2+N_zap1; N_ost3=N_ost3-N_dob3; // pervoj ostalos menshe } if (N_zap2!=0 & N_zap1!=0 & (N_zap2+N_zap1)>N_ost3) //esli est spros so storoni gazet, no on bolshoj, po sravneniju s ostatkom1 { N_dob3=N_ost3; N_ost3=0; // pervuju skupili } if (N_zap2==0 & N_zap1!=0 & N_zap1<=N_ost3) //u odnoj spros est, i on mal, a u dr. ego net { N_dob3=N_zap1; N_ost3=N_ost3-N_zap1; } if (N_zap2==0 & N_zap1!=0 & N_zap1>N_ost3) //u odnoj spros est, i on bolshoj, a u dr. ego net { N_dob3=N_ost3; N_ost3=0; } if (N_zap1==0 & N_zap2!=0 & N_zap2<=N_ost3) //i na oborot { N_dob3=N_zap2; N_ost3=N_ost3-N_zap2; } if (N_zap1==0 & N_zap2!=0 & N_zap2>N_ost3) //i na oborot { N_dob3=N_ost3; N_ost3=0; } Money1=-N1*Pok1+((N_kup1+N_dob1)*Prod1+N_ost1*Muk1)/100; Money2=-N2*Pok2+((N_kup2+N_dob2)*Prod2+N_ost2*Muk2)/100; Money3=-N3*Pok3+((N_kup3+N_dob3)*Prod3+N_ost3*Muk3)/100; tempMoney=Money1+Money2+Money3; if (tempMoney>=BestMoney) { NCount1->Text=IntToStr(N1); NCount2->Text=IntToStr(N2); NCount3->Text=IntToStr(N3); MPD1->Text=FloatToStr(Money1); MPD2->Text=FloatToStr(Money2); MPD3->Text=FloatToStr(Money3); BestMoney=tempMoney; total->Text=FloatToStr(BestMoney); } N_kup1=0; //stolko kupili N_zap1=0; //stolko neudobletvorili N_ost1=0; //stolko ostalos N_dob1=0; //stolko kupat v sledstv. perekrestnogo sprosa N_kup2=0; N_zap2=0; N_ost2=0; N_dob2=0; N_kup3=0; N_zap3=0; N_ost3=0; N_dob3=0; } //po N3 }//po N2 } //po N1 } //---------------------------------------------------------------------------