comment ¶
시간ì�´ 무한히 지나면 10대ì�˜ 버스가 ëª°ë ¤ê°€ëŠ” 현ìƒ�ì�´ 발견ë�œë‹¤-_-
ì›�래 ì�´ëŸ°ê±´ì§€ 아니면 버그ì�¸ì§€ëŠ” ëª¨ë¥´ê² ë”°;
ì›�래 ì�´ëŸ°ê±´ì§€ 아니면 버그ì�¸ì§€ëŠ” ëª¨ë¥´ê² ë”°;
STLì�„ ì�´ìš©í•˜ê³ 함수별로 나누는 ë¦¬íŒ©í† ë§�ì�´ 필요하다 -ã……-
태훈아 너무 빨리 짜는거 ì•„ëƒ� ã…‹ã…‹ ë‹´ì—�는 ì–´ë–¤ ìˆ™ì œë¥¼ 내야 í• ì§€ ã…Žã…Ž - ìƒ�협
- ㅇㅅㅇ;;;; 아잉;;
main.cpp ¶
#include <iostream>
#include <fstream>
#include <vector>
#include <windows.h> //sleep
#include <string>
#include <conio.h>
const int BusStationNo = 10; // 버스 ì •ë¥˜ìž¥ì�˜ 개수
const int BusNo = 10; // 버스� 대수
const long timerate = 1*60; // ì‹œë®¬ë ˆì�´í„° í• ë•Œ 한번 ì‹¤í–‰í• ë•Œë§ˆë‹¤ 지나가는 시간
#include "class.h"
#include "function.h"
using namespace std;
void gotoxy(int x, int y);
int main()
{
BusType bus[BusNo]; //버스
int MinuteOfInterval=12*60; //버스 배차 간격 sec
long waitingPeopleInBusStation[BusStationNo] = {0,0,}; //ê°� ì •ë¥˜ìž¥ì—�서 기다리는 사람수
int IncreasePerMinute_People = 4; //버스 ì •ë¥˜ìž¥ì—� 사람들ì�´ 1분당 ì¦�가하는 ì •ë�„
int ridingSecond = 2; //1사람� 버스� 타는� 걸리는 시간(초)
int LastMovingBusIndex=-1; //마지막 움��기 시작한 버스� ��스
int LastMovingBusStartTime= -1 * MinuteOfInterval;
int i,j; //iterator
long Now=0;
while(1)
{
Now += timerate;
//버스 ì •ë¥˜ìž¥ ì •ë³´ 화면ì—� 표시하기
cout << endl << " ";
for(i=0,j=0;i<=bus->BusLanelength();++i) {
if(bus->BusStationPos(j)==i) {
gotoxy(i+j+2,1);
waitingPeopleInBusStation[j]+= timerate * (IncreasePerMinute_People/60.0);
cout << waitingPeopleInBusStation[j] ;
gotoxy(i+j+2,2);
cout << "*";
j++;
}
if(i<bus->BusLanelength()) cout << "-";
}
gotoxy(1,BusNo+3);
for(i=0;i<=bus->BusLanelength()+BusStationNo;++i ) cout<< "-";
cout << endl;
//버스 ìš´í–‰ 시작하기, 배차간격 ê³ ë ¤
if(bus[LastMovingBusIndex+1].ismove()==false && LastMovingBusIndex+1 <= BusNo
&& Now - LastMovingBusStartTime >= MinuteOfInterval) {
bus[LastMovingBusIndex+1].start();
LastMovingBusStartTime=Now;
LastMovingBusIndex++;
}
//버스 위치 표시하기
for(i=0;i<BusNo;++i) {
if(bus[i].isstation() != -1 ){ //버스 ì •ë¥˜ìž¥ì�¼ê²½ìš°
int withdraw = zrnd(0,bus[i].getPassengers()); // 내리는 사람� 숫�
int cangetno = bus[i].getBusCapacity() - bus[i].getPassengers(); //버스� 태울수 있는 사람� 숫�
long& stationno = waitingPeopleInBusStation[bus[i].isstation()]; //버스 ì •ë¥˜ìž¥ì—� 있는 사람ì�˜ 숫ìž�
int ride_no =0;
//버스�서 내리기
bus[i].getPassengers(-1 * withdraw);
cangetno += withdraw;
//버스� 타기
if(stationno < cangetno){ // 태울수 있는 사람� 숫�가 � 많� 경우
ride_no=stationno;
while(timerate - ride_no * ridingSecond < 0)
ride_no--;
bus[i].getPassengers(ride_no);
waitingPeopleInBusStation[bus[i].isstation()]=stationno-ride_no;
} else { //탈수있는 사람수보다 ì •ë¥˜ìž¥ì—� 사람ì�´ ë�” ë§Žì�„ 경우
ride_no=cangetno;
while(timerate - ride_no * ridingSecond < 0)
ride_no--;
bus[i].getPassengers(ride_no);
stationno -= ride_no;
}
gotoxy(bus[i].getBusPos()+1,1);
cout << stationno << " ";
bus[i].movebus(timerate - ride_no * ridingSecond);
} else{ //버스 ì •ë¥˜ìž¥ì�´ ì•„ë‹�경우
bus[i].movebus();
}
gotoxy(bus[i].getBusPos()+1,i+3);
cout << i;
gotoxy(bus[i].getBusPos()+1,BusNo+4);
cout << i << endl;
}
//버스 위치 숫ìž� ì¶œë ¥
for(i=0;i<BusNo;++i)
cout << i << ":" << bus[i].getBusPos() << "," << bus[i].isstation() << ", 승�수:" << bus[i].getPassengers() <<endl;
cout << Now;
//Sleep(100);
//ESC누르면 탈출
//if(getch()==27) break;
system("cls");
}
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = {x - 1, y - 1};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
class.h ¶
class BusType
{
public:
int BusLanelength() { return busStation[BusStationNo-1]; } // 버스 ë…¸ì„ ì�˜ ì´� 길ì�´ë¥¼ 알아 냄
int BusStationPos(int i) { return busStation[i]; } // 버스 ì •ë¥˜ìž¥ì�˜ 위치 반환
int getBusPos() { return buspos; } // 버스� 현재 위치
int pastTime(int sec) { return CurrentMinute += sec; }
void start() { movingbus=true;} // 버스를 움ì§�ì�´ê²Œ 한다. 첫 ì¶œë°œí• ë•Œ!
double movebus(double sec = timerate) { // 버스를 secì´ˆ ë�™ì•ˆ 버스를 움ì§�ì�´ê³ , 현재위치 반환
if (!ismove()) return -1; //운행중ì�´ì§€ 않ì�„ 떄ì—�는 움ì§�ì�´ì§€ 않는다.
buspos += (sec/3600.0)*KilloPerHour_Bus; //위치를 ì�´ë�™ì‹œí‚¤ê³
//버스가 ëª¨ë“ ë…¸ì„ ì�„ 다ë�Œì•˜ì�„ 경우 처ì�Œìœ¼ë¡œ ì�´ë�™ì‹œí‚¨ë‹¤.
while(buspos > BusLanelength() + BusStationNo+1) buspos -= BusLanelength() + BusStationNo +1;
pastTime(sec); //시간 지연시키기
return buspos;
}
int isstation(){ //현재 버스가 있는 위치가 버스 ì •ë¥˜ìž¥ì�´ë©´ TRUE
int i=0;
while(getBusPos() != busStation[i]+i+1 && i<= BusStationNo-1){
i++;
}
if(BusStationNo-1 < i) return -1; //ë²„ìŠ¤ì •ë¥˜ìž¥ì�´ ì•„ë‹�경우
return i;
}
bool ismove() { return movingbus; } // 현재 운행중�가?
BusType()
{
KilloPerHour_Bus = 50.0; //버스� �� Km/h
MeterPerMinute_Bus = KilloPerHour_Bus * ( 1000.0 / 60.0 ); //버스� �� m/m
BusCapacity = 50; //버스 한대� 탈 수 있는 최대 사람수
busStation[0]=4; //시작 ì§€ì �부터 ê°� 버스 ì •ë¥˜ìž¥ 까지ì�˜ 길ì�´, 단위는 Km
busStation[1]=8;
busStation[2]=16;
busStation[3]=20;
busStation[4]=24;
busStation[5]=28;
busStation[6]=36;
busStation[7]=40;
busStation[8]=44;
busStation[9]=52;
CurrentMinute = 0; //현재 �르 시간 sec
buspos = 0;
movingbus=false; // 현재 운행중�가?
passengers=0;
}
int getBusCapacity() { return BusCapacity;}
int getPassengers(int n=0) { return passengers+=n; }
private:
double MeterPerMinute_Bus; //버스� �� m/m
double KilloPerHour_Bus; //버스� �� Km/h
int BusCapacity; //버스 한대� 탈 수 있는 최대 사람수
int busStation[BusStationNo]; //10ê°œì�˜ 버스 ì •ë¥˜ìž¥, 버스 ì •ë¥˜ìž¥ì�˜ 위치를 나타낸다
long CurrentMinute; //현재 �르 시간 sec
long DueMinute; //몇초 후ì�˜ ìƒ�황ì�„ 볼것ì�¸ì§€ ìž…ë ¥ 받는 ê°’
//Bus buses[BusNo]; //10 대� 버스들� 운행�다.
int passengers; //현재 버스ì—� íƒ€ê³ ìžˆëŠ” 승ê°�ì�˜ 숫ìž�
double buspos; // 버스� 현재 위치
bool movingbus; // 현재 운행중�가?
};
function.h ¶
#include <stdlib.h>
#include <time.h>
int zrnd(int start,int end)
{
int r;
srand(time(NULL));
r = rand()%(end-start+1) + start;
return r;
}










