//--------------------------------------------------------------------------- #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) { // * * * Определение данных * * * // Лояльность - отношение покупателей к аналогичному товару (газете) при // отсутствии любимого товара double Loyalty[3][2]; // Известия -> Правда, Известия -> SPID-инфо Loyalty[0][0]=pricelist->Cells[5][1].ToDouble(); Loyalty[0][1]=pricelist->Cells[6][1].ToDouble(); // Правда -> Извсетия, Правда -> SPID-инфо Loyalty[1][0]=pricelist->Cells[4][2].ToDouble(); Loyalty[1][1]=pricelist->Cells[6][2].ToDouble(); // SPID-инфо -> Известия, SPID-инфо -> Правда Loyalty[2][0]=pricelist->Cells[4][3].ToDouble(); Loyalty[2][1]=pricelist->Cells[5][3].ToDouble(); int DemandAmount[99], // Спрос - количество штук DemandCount=0; double DemandDays[9][99]; // Спрос - частота спроса в днях double Price[9][3]; // Цены на газеты (покупка, продажа, сдача) // Цены на газеты for(int I=0;I<=2;I++) { for(int J=0;J<=2;J++) { Price[I][J]=pricelist->Cells[J+1][I+1].ToDouble(); } } // Спрос на газеты DemandCount=demandlist->ColCount-1; for(int I=0;ICells[I+1][0].ToInt(); // Частота спроса на газеты for(int J=0;J<=2;J++) for(int I=0;ICells[I+1][J+1].ToInt(); // * * * Расчеты * * * // Определение периодов double T[3]; for(int I=0;I<3;I++) T[I]=0; for(int I=0;I=MaxDemand) MaxDemand=DemandAmount[I]; // Данные для расчета выгоды double BuyAmount[3], // Количество купленных товаров RemainAmount[3], // Количество оставшихся товаров DissatifactionAmount[3],// Количество неудовлтеворенных покупателей CrossDemandAmount[3], // Количество купленных товаров в следствии // перекрестного спроса Money[3]; for(int I=0;I<3;I++) { BuyAmount[I]=0; RemainAmount[I]=0; DissatifactionAmount[I]=0; CrossDemandAmount[I]=0; Money[I]=0; } double tempMoney=0, BestMoney=0; // Перебор int N[3]; for(N[0]=0;N[0]<=MaxDemand;N[0]++) { for(N[1]=0;N[1]<=MaxDemand;N[1]++) { for(N[2]=0;N[2]<=MaxDemand;N[2]++) { // Для газеты for(int J=0;J<3;J++) for(int I=0;I=N[J]) { BuyAmount[J]=BuyAmount[J]+N[J]*DemandDays[J][I]; DissatifactionAmount[J]=DissatifactionAmount[J]+ (DemandAmount[I]-N[J])*DemandDays[J][I]; } else { BuyAmount[J]=BuyAmount[J]+DemandAmount[I]*DemandDays[J][I]; RemainAmount[J]=RemainAmount[J]+(N[J]-DemandAmount[I])*DemandDays[J][I]; } // Проверка перекрестного спроса DissatifactionAmount[0]=DissatifactionAmount[0]*(Loyalty[0][0]/2)+ DissatifactionAmount[0]*(Loyalty[0][1]/2); DissatifactionAmount[1]=DissatifactionAmount[1]*(Loyalty[1][0]/2)+ DissatifactionAmount[1]*(Loyalty[1][1]/2); DissatifactionAmount[2]=DissatifactionAmount[2]*(Loyalty[2][0]/2)+ DissatifactionAmount[2]*(Loyalty[2][1]/2); // Для газет int a, b; for(int J=0;J<3;J++) { switch(J) { case 0: a=1; b=2; break; case 1: a=0; b=2; break; case 2: a=0; b=1; break; } // Есть спрос любителей других газет if(DissatifactionAmount[a]!=0 & DissatifactionAmount[b]!=0) if(DissatifactionAmount[a]+DissatifactionAmount[b]<=RemainAmount[J]) { CrossDemandAmount[J]=DissatifactionAmount[a]+DissatifactionAmount[b]; RemainAmount[J]=RemainAmount[J]-CrossDemandAmount[J]; } else { CrossDemandAmount[J]=RemainAmount[J]; RemainAmount[J]=0; } // Есть спрос любителей только одной из других газет if(DissatifactionAmount[a]==0 & DissatifactionAmount[b]!=0) if(DissatifactionAmount[b]<=RemainAmount[J]) { CrossDemandAmount[J]=DissatifactionAmount[b]; RemainAmount[J]=RemainAmount[J]-DissatifactionAmount[b]; } else { CrossDemandAmount[J]=RemainAmount[J]; RemainAmount[J]=0; } if(DissatifactionAmount[b]==0 & DissatifactionAmount[a]!=0) if(DissatifactionAmount[a]<=RemainAmount[J]) { CrossDemandAmount[J]=DissatifactionAmount[a]; RemainAmount[J]=RemainAmount[J]-DissatifactionAmount[a]; } else { CrossDemandAmount[J]=RemainAmount[J]; RemainAmount[J]=0; } } for(int I=0;I<3;I++) Money[I]= - N[I]*Price[I][0]+ // Запас + (BuyAmount[I]+CrossDemandAmount[I])*Price[I][1]/100+// Продано + RemainAmount[I]*Price[I][2]/100; // Сдано tempMoney=Money[0]+Money[1]+Money[2]; if (tempMoney>BestMoney) { for(int I=0;I<3;I++) { resultlist->Cells[I+1][1]=FloatToStr( N[I] ); resultlist->Cells[I+1][2]=FloatToStr( Money[I] ); } resultlist->Cells[4][2]=FloatToStr( tempMoney ); BestMoney=tempMoney; } // Очистка for(int I=0;I<3;I++) { BuyAmount[I]=0; RemainAmount[I]=0; DissatifactionAmount[I]=0; CrossDemandAmount[I]=0; } } // N[2] } // N[1] } // N[0] } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { // Заполнение таблицы цен pricelist->Cells[1][0]="Закупка"; pricelist->Cells[2][0]="Продажа"; pricelist->Cells[3][0]="Сдача"; pricelist->Cells[4][0]="-> Известия"; pricelist->Cells[5][0]="-> Правда"; pricelist->Cells[6][0]="-> SPID-инфо"; pricelist->Cells[0][1]="Известия"; pricelist->Cells[0][2]="Правда"; pricelist->Cells[0][3]="SPID-инфо"; pricelist->Cells[1][1]="0,6"; pricelist->Cells[2][1]="1,0"; pricelist->Cells[3][1]="0,3"; pricelist->Cells[1][2]="0,7"; pricelist->Cells[2][2]="1,2"; pricelist->Cells[3][2]="0,3"; pricelist->Cells[1][3]="1,0"; pricelist->Cells[2][3]="2,0"; pricelist->Cells[3][3]="0,4"; // Вероятнсоть того, что покупатель в отсутствии любимой газеты купит "Известия" pricelist->Cells[4][1]=""; pricelist->Cells[4][2]="0,6"; pricelist->Cells[4][3]="0,3"; // Вероятнсоть того, что покупатель в отсутствии любимой газеты купит "Правду" pricelist->Cells[5][1]="0,4"; pricelist->Cells[5][2]=""; pricelist->Cells[5][3]="0,5"; // Вероятнсоть того, что покупатель в отсутствии любимой газеты купит "SPID-инфо" pricelist->Cells[6][1]="0,0"; pricelist->Cells[6][2]="0,1"; pricelist->Cells[6][3]=""; // Заполнение таблицы спроса demandlist->ColWidths[0]=64; demandlist->Cells[0][0]="Спрос"; demandlist->Cells[0][1]="Известия"; demandlist->Cells[0][2]="Правда"; demandlist->Cells[0][3]="SPID-инфо"; demandlist->Cells[1][0]="0"; demandlist->Cells[2][0]="10"; demandlist->Cells[3][0]="20"; demandlist->Cells[4][0]="30"; demandlist->Cells[5][0]="40"; demandlist->Cells[6][0]="50"; demandlist->Cells[1][1]="3"; demandlist->Cells[2][1]="17"; demandlist->Cells[3][1]="37"; demandlist->Cells[4][1]="29"; demandlist->Cells[5][1]="12"; demandlist->Cells[6][1]="2"; demandlist->Cells[1][2]="4"; demandlist->Cells[2][2]="24"; demandlist->Cells[3][2]="33"; demandlist->Cells[4][2]="20"; demandlist->Cells[5][2]="12"; demandlist->Cells[6][2]="7"; demandlist->Cells[1][3]="6"; demandlist->Cells[2][3]="12"; demandlist->Cells[3][3]="43"; demandlist->Cells[4][3]="27"; demandlist->Cells[5][3]="10"; demandlist->Cells[6][3]="2"; // Заполнение таблицы результатов resultlist->Cells[1][0]="Известия"; resultlist->Cells[2][0]="Правда"; resultlist->Cells[3][0]="SPID-инфо"; resultlist->Cells[4][0]="Итого"; resultlist->Cells[0][1]="Запас"; resultlist->Cells[0][2]="Прибыль"; } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { // "Добавление" пунтка спроса на газеты if(demandlist->ColCount<100) demandlist->ColCount++; } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton2Click(TObject *Sender) { // "Удаление" пункта спроса на газеты if(demandlist->ColCount>3) demandlist->ColCount--; } //---------------------------------------------------------------------------