U E D R , A S I H C RSS

Bus Simulation/상협

~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();
}


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:39
Processing time 0.0117 sec