~cpp //BusSimulation.h /* 하 Meter minute . Km Hour, Minute .*/ class Bus { private: int m_people; // double m_velocity; // K/m long m_Minute; // 흘 int m_currentDistance; // 한 Meter int m_totalSectionLength; // 행 km public: Bus(); void SetVelocity(double v) {m_velocity=v;}; // 한. void SetMinute(int m) {m_Minute=m;}; // 한 흐 void IncreasePassenger(int n) {m_people+=n;}; // 킨. void IncreaseMinute(int t) ; // 킨. long GetMinute() {return m_Minute;}; //() 한. int GetDistance() {return m_currentDistance;}; //() 한. int GetPeopleNumber() {return m_people;}; // 한. void IncreaseDistance(double n) {m_currentDistance+=n;}; // 킨. }; Bus::Bus() { m_people=0; m_velocity=0; // K/m m_Minute=0; m_currentDistance=0; m_totalSectionLength = 52; // 행 52km } void Bus::IncreaseMinute(int t) //한 .. 하 트 한 향 { //한 트 키 해 해하 . m_Minute+=t; // 할 IncreaseDistance(t*((m_velocity*1000)/60)); // 할 if(m_currentDistance>=m_totalSectionLength*1000) // 하 황 { // 트 할 표해 한. // 55km 50km 5km. // 해 . m_currentDistance= m_currentDistance%(m_totalSectionLength*1000); m_people=0; // . } } class BusSimulation { private: double m_MeterPerMinute_Bus; // m/m double m_KilloPerHour_Bus; // Km/h int m_IncreasePerMinute_People; // 1 하 int m_MinuteOfInterval; // int m_ridingSecond; //1 () int m_BusCapacity; // 한 탈 Bus m_buses[10]; //10 행. int m_busStation[10]; // 10 long m_CurrentMinute; // 흐 long m_DueMinute; // 황 long m_waitingPeopleInBusStation[10]; // public: BusSimulation(); // 화 해 void Process(); // void PrintResult(); // void IncreaseTime(); //1 흘 void CheckBusStation(); // 했 크 void StationStopProcess(Bus &CheckedBus, int Station); // 했 //할 할 하 함 }; //BusSimulation.cpp #include <iostream> using namespace std; #include "BusSimulation.h" /* 3/1 함*/ BusSimulation::BusSimulation() { m_KilloPerHour_Bus = 24; // 24km/h m_MeterPerMinute_Bus = (m_KilloPerHour_Bus*1000)/60; // m/m m_IncreasePerMinute_People = 5; // m_MinuteOfInterval = 15; // 15 m_CurrentMinute = 0; //0 m_ridingSecond = 1; m_BusCapacity = 100; for(int i=0;i<10;i++) { m_waitingPeopleInBusStation[i] = 0; } for(i=0;i<10;i++) m_buses[i].SetVelocity(m_KilloPerHour_Bus); m_busStation[0]=4; // , Km m_busStation[1]=8; m_busStation[2]=16; m_busStation[3]=20; m_busStation[4]=28; m_busStation[5]=24; m_busStation[6]=36; m_busStation[7]=40; m_busStation[8]=44; m_busStation[9]=52; } void BusSimulation::Process() // 트 하 { m_buses[0].SetMinute(1); // 0 하 . while(m_CurrentMinute!=m_DueMinute) // 한 킨. IncreaseTime(); } void BusSimulation::PrintResult() // { cout<<"Bus Simulation\n"; cout<<" 함 ? !\n"; cout<<" : "<<m_KilloPerHour_Bus<<"K/m\t" <<" : "<<m_IncreasePerMinute_People<<"\n"; cout<<" 황 ? \n"; cout<<" : "; int hour; cin>>hour; cout<<" : "; int minute; cin>>minute; m_DueMinute = hour*60 + minute; Process(); cout<<" . \n"; for(int i=0;i<10;i++) { cout<<i+1<<" ( ) : "<<m_buses[i].GetDistance() <<"Meter\t"<<" : "<<m_buses[i].GetPeopleNumber()<<"\n"; } } void BusSimulation::IncreaseTime() // 트 하 하 트 { //키 트 할 . 트 //하 해 . m_CurrentMinute++; // 할 . for(int i=0;i<10;i++) //0~9 ... { if(m_buses[i].GetMinute()!=0) // 한 0 .. m_buses[i].IncreaseMinute(1); // 한 , 킴 if(i!=0 && m_buses[i-1].GetMinute()==m_MinuteOfInterval) // 15 m_buses[i].IncreaseMinute(1); // 한 1 . //했 } for(int j=0;j<10;j++) m_waitingPeopleInBusStation[j] += 1; // 킨. CheckBusStation(); // 했 크한 } void BusSimulation::CheckBusStation() { for(int i=0;i<10;i++) //0~9 { for(int j=0;j<10;j++) //0~9 if(m_buses[i].GetDistance()==(m_busStation[j]*1000)) //하 StationStopProcess(m_buses[i],j); //할 할 하 트 //키 호한 } } void BusSimulation::StationStopProcess(Bus &CheckedBus, int Station) { int decreaseNumber = int(CheckedBus.GetPeopleNumber()/4); CheckedBus.IncreasePassenger(-(decreaseNumber)); int peopleCount = m_waitingPeopleInBusStation[Station]; int sum = peopleCount+CheckedBus.GetPeopleNumber(); int real_passenger=0; if(sum>=m_BusCapacity) { real_passenger = m_BusCapacity-CheckedBus.GetPeopleNumber(); m_waitingPeopleInBusStation[Station]-=real_passenger; } else { real_passenger = m_waitingPeopleInBusStation[Station]; m_waitingPeopleInBusStation[Station] = 0; } CheckedBus.IncreasePassenger(real_passenger); int consumptionTime = real_passenger*((m_ridingSecond)/60); for(int k=0;k<10;k++) { if(m_buses[k].GetMinute()!=0) m_buses[k].IncreaseMinute(consumptionTime); } } void main() { BusSimulation ex; ex.PrintResult(); }