//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Mexico.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CSPIN" #pragma resource "*.dfm" TForm1 *Form1; const KolReisMax=15; //кол-во рейсов //const q=60; //минут в часе :) int TW[KolReisMax][KolReisMax]; //Таблица номер 3. unsigned WaitMin; //заведомо очень большое число ;) int IndOptim[KolReisMax]; //оптимальный вариант int KolReis; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { int i; char abr ='a'; for (i=0;i< GridMA->ColCount; i++) { GridMA->Cells[i][0] = IntToStr(i+1); GridMA->Cells[i][1] = " "; char ab=abr+i; GridAM->Cells[i][0] = ab; GridAM->Cells[i][1] = " "; } GridRez->Cells[0][0]="Отпр"; GridRez->Cells[1][0]="Возвр"; LoadClick(NULL); } //--------------------------------------------------------------------------- void __fastcall TForm1::BtnStartClick(TObject *Sender) { WaitMin=1440*KolReisMax; KolReis=EditKol->Text.ToInt(); clear(); int OtM[KolReisMax]; int OtA[KolReisMax]; try { for (int i=0;iCells[i][1]==" "||GridAM->Cells[i][1]==" ") {error();return;} OtM[i]=StrToFloat(GridMA->Cells[i][1])*60; OtA[i]=StrToFloat(GridAM->Cells[i][1])*60; } } catch (...) { error(); return; } int TimeP=360; //время поездки //-----------первая таблица--------------- int TablAM[KolReisMax][KolReisMax]; int IndFirstJ=-1; //индекс начала записи в таблицу for (int i=0;i=KolReis) TimeMex=1440+OtM[j-KolReis]; else TimeMex=OtM[j]; int TimeWait; TimeWait=TimeMex-TimeAkk; if (j==IndFirstJ) f=1; if (n=240&&TimeWait<=1440||f)) { TablAM[i][n]=TimeWait; if (f==0) {f=1;IndFirstJ=j;} if (TimeWait<240) TablAM[i][n]=0; //cout << TablAM[i][n]<< " "; n++; } } } //-------- вторая таблица ------------------ int TablMA[KolReisMax][KolReisMax]; for (int i=0;i=KolReis) TimeAkk=1440+OtM[j-KolReis]+TimeP; else TimeAkk=OtM[j]+TimeP; int TimeMex=1440+OtA[i]; int TimeWait; TimeWait=TimeMex-TimeAkk; if (TimeWait>=240) TablMA[i][j-IndFirstJ]=TimeWait; else TablMA[i][j-IndFirstJ]=0; } } //--------третья таблица,как наименьшее из 1-й и 2-й и !=0--------------------- char abr ='a'; for (int i=0;iCells[i+1][j+1]=TW[i][j]; GridTW->Cells[i+1][0]=i+1; char ab=abr+IndFirstJ+i; if (ab>'a'+KolReis-1) ab-=KolReis; GridTW->Cells[0][i+1]=ab; } } //------- int index[KolReisMax]; for (int i=0;i'a'+KolReis-1) First[i]-=KolReis; Second[i]='1'+i; } else { First[i]='1'+i; Second[i]='a'+IndFirstJ+j; if (Second[i]>'a'+KolReis-1) Second[i]-=KolReis; } if (First[i]>='a') GridRez->Cells[0][i+1]=First[i]; else GridRez->Cells[0][i+1]=StrToInt(i+1); if (Second[i]>='a') GridRez->Cells[1][i+1]=Second[i]; else GridRez->Cells[1][i+1]=StrToInt(i+1); } LabeledEdit->Text=IntToStr(WaitMin)+"="+FloatToStr(WaitMin/60)+" часа(ов)"; } //-------------функция выбора наименьшего--------------------- void __fastcall TForm1::search(int k,int *index) { int i,c; //c=левая переменная unsigned Wait=0; //конкретное ожидание int ax[KolReisMax]; //временный массив if(k==1) //k - кол-во перестановок { for (i=0;iWait) //выбор меньшего { WaitMin=Wait; for (i=0;iText=5; float OtM[5]={6,7.5,11.5,19.00,24.5}; float OtA[5]={5.5,9.00,15.00,18.5,24}; for (int i=0;i<5;i++) { GridMA->Cells[i][1]=OtM[i]; GridAM->Cells[i][1]=OtA[i]; } } //--------------------------------------------------------------------------- void __fastcall TForm1::ResetClick(TObject *Sender) { FormCreate(NULL); } //--------------------------------------------------------------------------- void __fastcall TForm1::clear() { for(int i=0;iCells[0][i+1]=" "; GridRez->Cells[1][i+1]=" "; } for(int j=0;jCells[i][j]=" "; } } //------------------------------------------------------------- void __fastcall TForm1::error() { MessageBox(Handle, "Введено некорректное расписание ", " Недоступная операция", MB_OK | MB_ICONERROR); } //--------------------------------------------------------------