[전산] 프로그래밍 수치제어 포트란 소스
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

>
#define BUS_STOP 19
#define BUS_INTERVAL 300
#define BUS_DRIVE 180
#define HUMAN_ARRIVAL 30
#define BOARDING_TIME 6
const int numOfbus = 30;
enum {BUS_LEAVE,BUS_ARRIVE,HUMAN_ARRIVE}; //event type
struct EVENT_TYPE { long time;
int event_type,data;
EVENT_TYPE* next;
};
void insertq(long,int,int);
void deleteq(void);
void output(int*);
EVENT_TYPE *getq(void);
int rnd_arrival(int);
int waiting_men[BUS_STOP];
EVENT_TYPE *queue=NULL;
void main()
{
clrscr();
randomize();
int bus[numOfbus];
int again = 0;
int end_stop = 0;
insertq(0,BUS_LEAVE,0);
for(int i=1;i insertq(i*BUS_DRIVE+rnd_arrival(HUMAN_ARRIVAL),HUMAN_ARRIVE,i);
waiting_men[i] = 1;
}
for(;;) {
EVENT_TYPE *event = getq();
switch (event->event_type) {
case BUS_LEAVE:
if(event->data == 0) {
again++;
insertq(again*BUS_INTERVAL,BUS_LEAVE,0);
}
insertq(event->time+rnd_arrival(BUS_DRIVE),BUS_ARRIVE,++event->data);
break;
case BUS_ARRIVE:
if (event->data == BUS_STOP+1){
bus[end_stop] = event->time;
end_stop++;
if(end_stop == numOfbus) output(bus);
}
else {
insertq(event->time+waiting_men[event->data]*BOARDING_TIME
,BUS_LEAVE,event->data);
waiting_men[event->data] = 0;
}
break;
case HUMAN_ARRIVE:
waiting_men[event->data]++;
insertq(event->time+rnd_arrival(HUMAN_ARRIVAL),HUMAN_ARRIVE,event->da
ta);
break;
}
deleteq();
}
}
//delete queue..
void deleteq()
{
EVENT_TYPE* node = queue;
queue = queue->next;
free (node);
return;
}
//current event queue..
EVENT_TYPE *getq()
{
EVENT_TYPE* get;
get = queue;
return get;
}
//insert event-queue
void insertq(long time,int type,int data)
{
EVENT_TYPE* new_event;
EVENT_TYPE* x=NULL;
new_event =(EVENT_TYPE*)malloc(sizeof(EVENT_TYPE));
//Memory full check
#define FULL(queue) (!(queue))
if (FULL(new_event)) {
cout<<"full";
getch();
exit(1);
}
new_event->time = time;
new_event->event_type = type;
new_event->data = data;
new_event->next = NULL;
x = queue;
for(;;) {
if (x==NULL) {
queue = new_event;
return;
}
else if(x->next == NULL) {
x->next = new_event;
return;
}
else if(x->time <= time && x->next->time > time) {
new_event->next = x->next;
x->next = new_event;
return;
}
x = x->next;
}
}
//random time
int rnd_arrival(int t)
{
double temp;
temp = 1.0 - (double)(rand()%1000)/1000.0;
return ( -((double)t*log(temp)));
}
//output
void output(int* bus)
{
int r = 0;
cout<<"First arrival time(second) : "< for(r=1;r cout<<"Interval between Bus "< <<" & Bus "< < < }
cout<<"Press any key : Graphic Mode !"
< getch();
//graphic mode..
int gd = DETECT,gm;
int color,temp;
char buffer[6];
initgraph(&gd,&gm,"");
temp = bus[0];
sprintf(buffer,"%d",bus[0]);
outtextxy(0,getmaxy()-95,buffer);
outtextxy(0,getmaxy()-50,"Interval 100 second --> ");
line(200,getmaxy()-80,200,getmaxy()-20);
line(205,getmaxy()-80,205,getmaxy()-20);
for(r=0;r color = r%10;
if(color == 0) color = 5;
setcolor(color);
line((bus[r]-temp)/20+10,10,(bus[r]-temp)/20+10,getmaxy()-100);
}
getch();
exit(1);
}

키워드

  • 가격2,300
  • 페이지수13페이지
  • 등록일2002.09.22
  • 저작시기2002.09
  • 파일형식한글(hwp)
  • 자료번호#203774
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니