<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=BusSimulation%2F%EC%83%81%ED%98%91</id>
	<title>BusSimulation/상협 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=BusSimulation%2F%EC%83%81%ED%98%91"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=BusSimulation/%EC%83%81%ED%98%91&amp;action=history"/>
	<updated>2026-05-14T23:50:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=BusSimulation/%EC%83%81%ED%98%91&amp;diff=29403&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:22, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=BusSimulation/%EC%83%81%ED%98%91&amp;diff=29403&amp;oldid=prev"/>
		<updated>2021-02-07T05:22:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; //BusSimulation.h&lt;br /&gt;
 /* 계산하는 모든 단위는 Meter 와 minute 이다.&lt;br /&gt;
 단지 입력을 받을때는 Km 와 Hour, Minute 등으로 받는다.*/&lt;br /&gt;
 &lt;br /&gt;
 class Bus {&lt;br /&gt;
 private:&lt;br /&gt;
 	int m_people; //버스안에 있는 사람의 수&lt;br /&gt;
 	double m_velocity; //버스의 속도 K/m&lt;br /&gt;
 	long m_Minute; //출발후 부터 흘러간 시간&lt;br /&gt;
 	int m_currentDistance; //버스가 출발한 곳으로부터 몇 Meter 갔는지 거리 &lt;br /&gt;
 	int m_totalSectionLength; //버스가 운행되는 총 구간 km&lt;br /&gt;
 public:&lt;br /&gt;
 	Bus();&lt;br /&gt;
 	void SetVelocity(double v) {m_velocity=v;}; //버스의 속도를 지정한다.&lt;br /&gt;
 	void SetMinute(int m) {m_Minute=m;};  //버스의 출발한 후부터 흐른 시간을 지정&lt;br /&gt;
 	void IncreasePassenger(int n) {m_people+=n;}; //승객수를 증가 시킨다.&lt;br /&gt;
 	void IncreaseMinute(int t) ;  //시간을 증가 시킨다.&lt;br /&gt;
 	long GetMinute() {return m_Minute;};  //시간(분) 값을 리턴한다.&lt;br /&gt;
 	int GetDistance() {return m_currentDistance;}; //거리(미터)값을 리턴한다.&lt;br /&gt;
 	int GetPeopleNumber() {return m_people;}; //사람수를 리턴한다.&lt;br /&gt;
 	void IncreaseDistance(double n) {m_currentDistance+=n;}; //출발점으로 부터의 거리를 증가시킨다.&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Bus::Bus()&lt;br /&gt;
 {&lt;br /&gt;
 	m_people=0;&lt;br /&gt;
 	m_velocity=0; //  K/m&lt;br /&gt;
 	m_Minute=0;&lt;br /&gt;
 	m_currentDistance=0;&lt;br /&gt;
 	m_totalSectionLength = 52;  //버스가 운행되는 총 구간의 거리 52km&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void Bus::IncreaseMinute(int t) //중요한 부분.. 시간이 증가하는 이벤트는 다른 데이터에 어떠한 영향을 끼치고 또다른 &lt;br /&gt;
 {                            //어떠한 이벤트를 발생시키는지 생각해보면 이해하기 좋음.&lt;br /&gt;
 	m_Minute+=t;  // 시간이 증가 할것이고&lt;br /&gt;
 	IncreaseDistance(t*((m_velocity*1000)/60));  //그때 버스의 거리도 증가할 것이다&lt;br /&gt;
 	if(m_currentDistance&amp;amp;gt;=m_totalSectionLength*1000)  //시간이 증가하는 상황중에서 버스 노선의 총 거리 이상을&lt;br /&gt;
 	{                                           //가는 이벤트가 발생할 경우 어떻게 표시해줄지 생각한다.&lt;br /&gt;
                                                     //총 간거리가 55km이고 총 노선거리가 50km면 결국 5km간것임.변위&lt;br /&gt;
                                                     //라고 생각해도 됨.&lt;br /&gt;
 		m_currentDistance= m_currentDistance%(m_totalSectionLength*1000);&lt;br /&gt;
 		m_people=0; //종점에서 사람은 다 내림.&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class BusSimulation {&lt;br /&gt;
 private:&lt;br /&gt;
 	double m_MeterPerMinute_Bus; //버스의 속도 m/m&lt;br /&gt;
 	double m_KilloPerHour_Bus; //버스의 속도 Km/h&lt;br /&gt;
 	int m_IncreasePerMinute_People; //버스 정류장에 사람들이 1분당 증가하는 정도&lt;br /&gt;
 	int m_MinuteOfInterval; //버스 배차 간격&lt;br /&gt;
 	int m_ridingSecond; //1사람이 버스에 타는데 걸리는 시간(초) &lt;br /&gt;
 	int m_BusCapacity; //버스 한대에 탈 수 있는 최대 사람수 &lt;br /&gt;
 	Bus m_buses[10]; //10 대의 버스들이 운행된다. &lt;br /&gt;
 	int m_busStation[10]; // 10개의 버스 정류장 &lt;br /&gt;
 	long m_CurrentMinute; //현재 흐르 시간 &lt;br /&gt;
 	long m_DueMinute; //몇초 후의 상황을 볼것인지 입력 받는 값&lt;br /&gt;
 	long m_waitingPeopleInBusStation[10]; //각 정류장에서 기다리는 사람수 &lt;br /&gt;
 public:&lt;br /&gt;
 	BusSimulation(); //각 값들을 초기화 해줌 &lt;br /&gt;
 	void Process(); //계산 과정 &lt;br /&gt;
 	void PrintResult(); //결과 출력&lt;br /&gt;
 	void IncreaseTime(); //1초 만큼 시간이 흘러감 &lt;br /&gt;
 	void CheckBusStation(); //각 버스 정류장에 버스가 도착했는지 체크&lt;br /&gt;
 	void StationStopProcess(Bus &amp;amp;amp;CheckedBus, int Station); //버스 정류장 버스가 도착했을 경우 &lt;br /&gt;
 														//이루어져야할 할일들을 처리하는 함수&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //BusSimulation.cpp&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 #include &amp;quot;BusSimulation.h&amp;quot;&lt;br /&gt;
 /* 다음 정거장에서 총 승객의 3/1 이 내린다고 가정함*/&lt;br /&gt;
 BusSimulation::BusSimulation()&lt;br /&gt;
 {&lt;br /&gt;
 	m_KilloPerHour_Bus = 24;  //버스 속도 24km/h&lt;br /&gt;
 	m_MeterPerMinute_Bus = (m_KilloPerHour_Bus*1000)/60; //버스의 분당 속도 m/m&lt;br /&gt;
 	m_IncreasePerMinute_People = 5;  //버스 정류장에 사람의증가 속도&lt;br /&gt;
 	m_MinuteOfInterval = 15; //배차 간격 15분&lt;br /&gt;
 	m_CurrentMinute = 0; //0초부터 시작 &lt;br /&gt;
 	m_ridingSecond = 1;  &lt;br /&gt;
 	m_BusCapacity = 100;&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;10;i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		m_waitingPeopleInBusStation[i] = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 	for(i=0;i&amp;amp;lt;10;i++)&lt;br /&gt;
 		m_buses[i].SetVelocity(m_KilloPerHour_Bus);	&lt;br /&gt;
 	m_busStation[0]=4;  //시작 지점부터 각 버스 정류장 까지의 길이, 단위는 Km&lt;br /&gt;
 	m_busStation[1]=8;&lt;br /&gt;
 	m_busStation[2]=16;&lt;br /&gt;
 	m_busStation[3]=20;&lt;br /&gt;
 	m_busStation[4]=28;&lt;br /&gt;
 	m_busStation[5]=24;&lt;br /&gt;
 	m_busStation[6]=36;&lt;br /&gt;
 	m_busStation[7]=40;&lt;br /&gt;
 	m_busStation[8]=44;&lt;br /&gt;
 	m_busStation[9]=52;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void BusSimulation::Process()  //모든 이벤트들이 처음으로 시작하게 만드는 메소드&lt;br /&gt;
 {&lt;br /&gt;
 	m_buses[0].SetMinute(1); //우선 0번 버스가 출발하게 만든다.&lt;br /&gt;
 	while(m_CurrentMinute!=m_DueMinute) //사용자가 입력한 목적 시간 전까지 시간을 증가 시킨다.&lt;br /&gt;
 		IncreaseTime();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void BusSimulation::PrintResult() //결과 출력&lt;br /&gt;
 {&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Bus Simulation\n&amp;quot;;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;버스는 왜 함께 몰려 다닐까? 그 이유를 찾자!\n&amp;quot;;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;버스의 속도: &amp;quot;&amp;amp;lt;&amp;amp;lt;m_KilloPerHour_Bus&amp;amp;lt;&amp;amp;lt;&amp;quot;K/m\t&amp;quot;&lt;br /&gt;
 		&amp;amp;lt;&amp;amp;lt;&amp;quot;버스 정류장에 사람이 늘어나는 속도 : &amp;quot;&amp;amp;lt;&amp;amp;lt;m_IncreasePerMinute_People&amp;amp;lt;&amp;amp;lt;&amp;quot;\n&amp;quot;;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;몇시간 후의 상황을 보시겠습니까? \n&amp;quot;;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;시간 : &amp;quot;;&lt;br /&gt;
 	int hour;&lt;br /&gt;
 	cin&amp;amp;gt;&amp;amp;gt;hour;&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;분 : &amp;quot;;&lt;br /&gt;
 	int minute;&lt;br /&gt;
 	cin&amp;amp;gt;&amp;amp;gt;minute;&lt;br /&gt;
 	m_DueMinute = hour*60 + minute;&lt;br /&gt;
 	Process();&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;결과 입니다. \n&amp;quot;;&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;10;i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;i+1&amp;amp;lt;&amp;amp;lt;&amp;quot;번 버스 현재 위치(출발점으로 부터) : &amp;quot;&amp;amp;lt;&amp;amp;lt;m_buses[i].GetDistance()&lt;br /&gt;
 			&amp;amp;lt;&amp;amp;lt;&amp;quot;Meter\t&amp;quot;&amp;amp;lt;&amp;amp;lt;&amp;quot;승객 수 : &amp;quot;&amp;amp;lt;&amp;amp;lt;m_buses[i].GetPeopleNumber()&amp;amp;lt;&amp;amp;lt;&amp;quot;\n&amp;quot;;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void BusSimulation::IncreaseTime() //모든 이벤트들은 시간이 증가하면서 발생하므로 이 메소드는 다른 모든 이벤트들을&lt;br /&gt;
 {                                  //발생시키는 발단이 되는 이벤트라고 생각할수 있다. 시간이 멈추면 어떤 이벤트도&lt;br /&gt;
                                    //발생하지 않는다는 것을 생각해보면 된다.&lt;br /&gt;
 	m_CurrentMinute++;     //먼저 시간이 증가할 것이다.&lt;br /&gt;
 	&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;10;i++) //0~9번 버스까지...&lt;br /&gt;
 	{&lt;br /&gt;
  		if(m_buses[i].GetMinute()!=0)  //현재  그 버스의 출발한 후 부터의 시간이 0분이 아니면.. 즉 버스가&lt;br /&gt;
 			m_buses[i].IncreaseMinute(1); //즉 그 버스가 출발한 경우라면, 그 버스의 시간을 증가시킴&lt;br /&gt;
 		if(i!=0 &amp;amp;amp;&amp;amp;amp; m_buses[i-1].GetMinute()==m_MinuteOfInterval) //앞차가 15분이 될때 뒷차 출발 &lt;br /&gt;
 			m_buses[i].IncreaseMinute(1); //뒷차의 출발한 후부터의 시간을 1로 만듬. 즉 이제부터 출발&lt;br /&gt;
                                                           //했다고 볼 수 있음&lt;br /&gt;
 	}&lt;br /&gt;
 	for(int j=0;j&amp;amp;lt;10;j++)&lt;br /&gt;
 		m_waitingPeopleInBusStation[j] += 1; //모든 정류장에서 기다리는 사람수를 증가 시킨다.&lt;br /&gt;
 	CheckBusStation(); //버스 정류장에 버스가 도착했는지 체크한다&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void BusSimulation::CheckBusStation()&lt;br /&gt;
 {&lt;br /&gt;
 	&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;10;i++)  //0~9번 버스가&lt;br /&gt;
 	{&lt;br /&gt;
 		for(int j=0;j&amp;amp;lt;10;j++) //0~9번 정류장에서&lt;br /&gt;
 			if(m_buses[i].GetDistance()==(m_busStation[j]*1000)) //정차하는지 본다&lt;br /&gt;
 				StationStopProcess(m_buses[i],j); //정차할경우 정차할때 발생하는 이벤트들을 발생&lt;br /&gt;
                                                                        //시키는 메소드를 호출한다&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void BusSimulation::StationStopProcess(Bus &amp;amp;amp;CheckedBus, int Station)&lt;br /&gt;
 {&lt;br /&gt;
 	int decreaseNumber = int(CheckedBus.GetPeopleNumber()/4);&lt;br /&gt;
 	CheckedBus.IncreasePassenger(-(decreaseNumber));&lt;br /&gt;
 	int peopleCount = m_waitingPeopleInBusStation[Station];&lt;br /&gt;
 	int sum = peopleCount+CheckedBus.GetPeopleNumber();&lt;br /&gt;
 	int real_passenger=0;&lt;br /&gt;
 	if(sum&amp;amp;gt;=m_BusCapacity)&lt;br /&gt;
 	{&lt;br /&gt;
 		real_passenger = m_BusCapacity-CheckedBus.GetPeopleNumber();&lt;br /&gt;
 		m_waitingPeopleInBusStation[Station]-=real_passenger;&lt;br /&gt;
 	}&lt;br /&gt;
 	else&lt;br /&gt;
 	{&lt;br /&gt;
 		real_passenger = m_waitingPeopleInBusStation[Station];&lt;br /&gt;
 		m_waitingPeopleInBusStation[Station] = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 	CheckedBus.IncreasePassenger(real_passenger);&lt;br /&gt;
 	int consumptionTime = real_passenger*((m_ridingSecond)/60);&lt;br /&gt;
 	for(int k=0;k&amp;amp;lt;10;k++)&lt;br /&gt;
 	{&lt;br /&gt;
 		if(m_buses[k].GetMinute()!=0)&lt;br /&gt;
 			m_buses[k].IncreaseMinute(consumptionTime);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void main()&lt;br /&gt;
 {&lt;br /&gt;
 	BusSimulation ex;&lt;br /&gt;
 	ex.PrintResult();&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
[[BusSimulation]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>