Добавил:
lublyanka
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая вариант 38 / ConsoleApplication1 / IterationCircleMoment
.cpp#include "stdafx.h"
#include "IterationCircleMoment.h"
#include "Aircraft.h"
#include <math.h> /* round, floor, ceil, trunc */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
#include <algorithm> // std::sort
namespace OEMInf
{
IterationCircleMoment::IterationCircleMoment(int middleNewBidArrivingTimeOut, int variationNewBidArrivingTimeOut, int middleNewBidArrivingTimeIn, int variationNewBidArrivingTimeIn)
{
currentTime = 0;
previousTime = 0;
bidTimeIn = 0;
bidTimeOut = 0;
releaseTime = 0;
timeOut = 0;
loadTime = 0;
maxCircle = 0;
maxTailIn = 0;
maxTailOut = 0;
all = 0;
counterOfCancelledBids = 0;
counterOfServedBidsOut = 0;
counterOfServedBidsIn = 0;
//aircraftInBuffer = null;
//aircraftOutBuffer = null;
isRunwayLoad = false;
this->middleNewBidArrivingTimeOut = middleNewBidArrivingTimeOut;
this->middleNewBidArrivingTimeIn = middleNewBidArrivingTimeIn;
this->variationNewBidArrivingTimeOut = variationNewBidArrivingTimeOut;
this->variationNewBidArrivingTimeIn = variationNewBidArrivingTimeIn;
}
int IterationCircleMoment::makeRandomTime(int middle, int variation)
{
int min = middle - variation;
int second = middle + variation - min;
float r = (static_cast<float>(rand()) / std::numeric_limits<short>::max());
float doubleTime = r * second + min;
int intTime = ceil(doubleTime);
return intTime;
}
bool CompareAircrafts(Aircraft *aircraft1, Aircraft *aircraft2)
{
return aircraft1->time > aircraft2->time;
}
void IterationCircleMoment::bidTimeProcedure(IterationCircleMoment *iteration)
{
if (iteration->bidTimeIn >= iteration->bidTimeOut)
{ //время взлетать
iteration->currentTime = iteration->bidTimeOut;
iteration->isRunwayLoad = true;
counterOfServedBidsOut++;
iteration->releaseTime = iteration->currentTime + 2;
if ((iteration->maxTailOut < aircraftOutBuffer.size()))
{
iteration->maxTailOut = aircraftOutBuffer.size();
}
iteration->aircraftOutBuffer.erase(iteration->aircraftOutBuffer.begin());
Aircraft *out = new Aircraft(makeRandomTime(iteration->middleNewBidArrivingTimeOut, iteration->variationNewBidArrivingTimeOut) + iteration->currentTime);
iteration->aircraftOutBuffer.push_back(out);
iteration->all++;
//тут надо отсортировать массив исходящих
std::sort(aircraftOutBuffer.begin(), aircraftOutBuffer.end(), CompareAircrafts);
}
else
{
//время садиться
iteration->currentTime = iteration->bidTimeIn;
iteration->isRunwayLoad = true;
counterOfServedBidsIn++;
iteration->releaseTime = iteration->currentTime + 2;
if ((iteration->maxTailIn < aircraftInBuffer.size()))
{
iteration->maxTailIn = aircraftInBuffer.size();
}
iteration->aircraftInBuffer.erase(iteration->aircraftInBuffer.begin());
Aircraft *in_Renamed = new Aircraft(makeRandomTime(iteration->middleNewBidArrivingTimeIn, iteration->variationNewBidArrivingTimeIn) + iteration->currentTime, 0);
iteration->aircraftInBuffer.push_back(in_Renamed);
iteration->all++;
//тут надо отсортировать массив входящих
std::sort(aircraftInBuffer.begin(), aircraftInBuffer.end(), CompareAircrafts);
}
iteration->previousTime = iteration->currentTime;
iteration->timeOut = iteration->currentTime;
}
void IterationCircleMoment::releaseTimeProcedure(IterationCircleMoment *iteration)
{
if (iteration->bidTimeOut < iteration->releaseTime || iteration->bidTimeIn < iteration->releaseTime)
{
if (iteration->bidTimeIn >= iteration->bidTimeOut)
{
iteration->currentTime = iteration->bidTimeOut;
iteration->loadTime = iteration->loadTime + iteration->currentTime - iteration->previousTime;
aircraftOutBuffer[0]->time++;
if ((iteration->maxTailOut < aircraftOutBuffer.size()))
{
iteration->maxTailOut = aircraftOutBuffer.size();
}
}
else
{
iteration->currentTime = iteration->bidTimeIn;
iteration->loadTime = iteration->loadTime + iteration->currentTime - iteration->previousTime;
if (iteration->aircraftInBuffer[0]->circle == 5)
{
counterOfCancelledBids++;
}
else
{
aircraftInBuffer[0]->circle++;
if ((iteration->maxCircle < aircraftInBuffer[0]->circle))
{
iteration->maxCircle = aircraftInBuffer[0]->circle;
}
if ((iteration->maxTailIn < aircraftInBuffer.size()))
{
iteration->maxTailIn = aircraftInBuffer.size();
}
aircraftInBuffer[0]->time = aircraftInBuffer[0]->time + 4;
}
}
}
else
{
iteration->currentTime = iteration->releaseTime;
iteration->loadTime = iteration->loadTime + iteration->currentTime - iteration->previousTime;
iteration->isRunwayLoad = false;
}
iteration->previousTime = iteration->currentTime;
iteration->timeOut = iteration->currentTime;
}
void IterationCircleMoment::main(int argc, _TCHAR* argv[])
{
srand(time(NULL));
IterationCircleMoment *iteration = new IterationCircleMoment(10, 2, 10, 5);
do
{
if (iteration->timeOut == 0)
{
Aircraft *in_Renamed = new Aircraft(makeRandomTime(iteration->middleNewBidArrivingTimeIn, iteration->variationNewBidArrivingTimeIn), 0);
Aircraft *out = new Aircraft(makeRandomTime(iteration->middleNewBidArrivingTimeOut, iteration->variationNewBidArrivingTimeOut));
iteration->aircraftInBuffer.push_back(in_Renamed);
iteration->aircraftOutBuffer.push_back(out);
iteration->releaseTime = std::numeric_limits<int>::max();
}
if (!iteration->aircraftOutBuffer.empty())
{
iteration->bidTimeOut = iteration->aircraftOutBuffer[0]->time;
}
else
{
iteration->bidTimeOut = std::numeric_limits<int>::max();
}
if (!iteration->aircraftInBuffer.empty())
{
iteration->bidTimeIn = iteration->aircraftInBuffer[0]->time;
}
else
{
iteration->bidTimeIn = std::numeric_limits<int>::max();
}
if (!iteration->isRunwayLoad)
{
iteration->bidTimeProcedure(iteration);
}
else
{
iteration->releaseTimeProcedure(iteration);
}
} while (iteration->timeOut < iteration->DEFAULT_ITERATION_TIME);
std::wcout << iteration->counterOfServedBidsIn << std::wstring(L" BidsIn") << std::endl;
std::wcout << iteration->counterOfServedBidsOut << std::wstring(L" BidsOut") << std::endl;
std::wcout << iteration->counterOfCancelledBids << std::wstring(L" CancelllBids") << std::endl;
std::wcout << iteration->maxCircle << std::endl;
std::wcout << iteration->maxTailIn << std::endl;
std::wcout << iteration->maxTailOut << std::endl;
std::wcout << iteration->currentTime << std::wstring(L" currentTime") << std::endl;
//System.out.println(iteration.all);
std::wcout << iteration->loadTime << std::wstring(L" loadTime") << std::endl;
float K = static_cast<float>(iteration->loadTime) / 1440.0;
std::wcout << K << std::endl;
int str;
std::wcin >> str;
}
}
Соседние файлы в папке ConsoleApplication1