C질문 있습니다. Circular Queue.c의 Enqueue의 pq-PER의 값을 Hamburgersim.c에서 쓰고 싶을떄...
흰꽃
////////////// Circular Queue.c//////////////////////////////////////////////
#include stdio.h
#include stdlib.h
#include CircularQueue.h
void QueueInit(Queue * pq)
{
pq-front = 0;
pq-rear = 0;
}
void ERInit(Queue * pq)
{
pq-ER =0;
pq-NER =0;
}
int QIsEmpty(Queue * pq)
{
if(pq-front == pq-rear)
return TRUE;
else
return FALSE;
}
int NextPosIdx(int pos)
{
if(pos == QUE_LEN-1)
return 0;
else
return pos+1;
}
void Enqueue(Queue * pq, Data data)
{
if(NextPosIdx(pq-rear) == pq-front)
{
printf(Queue Memory Error!1\n);
pq - NER ++;
pq-PER = (pq-ER) / ((pq-NER)+(pq-ER)) * 100;
printf(ER = %f\n, pq-ER);//주문 받은 손님수
printf(NER = %f\n, pq-NER);//주문 받지못한 손님수
printf(PER = %f%%\n\n, pq-PER );//%로 계산 //이것을//
//exit(-1);
}
pq-rear = NextPosIdx(pq-rear);
pq-queArr[pq-rear] = data;
pq - ER ++;
pq-PER = (pq-ER) / ((pq-NER)+(pq-ER)) * 100;
printf(ER = %f\n, pq-ER);//주문 받은 손님수
printf(NER = %f\n, pq-NER);//주문 받지못한 손님수
printf(PER = %f%%\n\n, pq-PER );//%로 계산
}
Data Dequeue(Queue * pq)
{
if(QIsEmpty(pq))
{
//printf(Queue Memory Error!2\n);
//exit(-1);
}
pq-front = NextPosIdx(pq-front);
return pq-queArr[pq-front];
}
Data QPeek(Queue * pq)
{
if(QIsEmpty(pq))
{
printf(Queue Memory Error!3\n);
//exit(-1);
}
return pq-queArr[NextPosIdx(pq-front)];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////Hamburgersim.c//////////////////////////////////////////////
#include stdio.h
#include stdlib.h
#include time.h
#include CircularQueue.h
#defineCUS_COME_TERM15// 고객의 주문 간격: 초 단위
#define CHE_BUR0// 치즈버거 상수
#define BUL_BUR1// 불고기버거 상수
#define DUB_BUR2// 더블버거 상수
#define CHE_TERM12// 치즈버거 제작 시간: 초 단위
#define BUL_TERM15// 불고기버거 제작 시간: 초 단위
#define DUB_TERM24// 더블버거 제작 시간: 초 단위
int main(void)
{
int makeProc=0;// 햄버거 제작 진행상황
int cheOrder=0, bulOrder=0, dubOrder=0;
int sec;
int count;
int cout;
Queue que;
QueueInit(&que);
ERInit(&que);//수정
srand(time(NULL));
cout=1;
//for(count=0; count1000; count++)
//{
cheOrder=0;
bulOrder=0;
dubOrder=0;
cheOrder=0;
bulOrder=0;
dubOrder=0;
sec=0;
makeProc=0;
// 아래 for문의 1회 회전은 1초의 시간 흐름을 의미함
for(sec=0; sec3600; sec++)
{
if(sec % CUS_COME_TERM == 0)
{
switch(rand() % 3)
{
case CHE_BUR:
Enqueue(&que, CHE_TERM);
cheOrder += 1;
break;
case BUL_BUR:
Enqueue(&que, BUL_TERM);
bulOrder += 1;
break;
case DUB_BUR:
Enqueue(&que, DUB_TERM);
dubOrder += 1;
break;
}
}
if(makeProc=0 && !QIsEmpty(&que))
makeProc = Dequeue(&que);
makeProc--;
}
prinbsp;printf(Simulation Report! \n, QUE_LEN);
printf( - Cheese burger: %d \n, cheOrder);
printf( - Bulgogi burger: %d \n, bulOrder);
printf( - Double burger: %d \n, dubOrder);
printf( - Waiting room size: %d \n, QUE_LEN);
printf(cout %d \n, cout);//수정
cout++;
printf(%f%%\n,pq-PER);//이곳으로...//
//}//수정
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////CircularQueue.h////////////////////////////////////////
#ifndef __C_QUEUE_H__
#define __C_QUEUE_H__
#define TRUE1
#define FALSE0
#define QUE_LEN30
typedef int Data;
typedef struct _cQueue
{
int front;
int rear;
float ER;//주문 못받은 손님수
float NER;//주문 받은 손님수
float PER;//확률 계산
Data queArr[QUE_LEN];
} CQueue;
typedef CQueue Queue;
void QueueInit(Queue * pq);
void ERInit(Queue * pq);//수정
int QIsEmpty(Queue * pq);
void Enqueue(Queue * pq, Data data);
Data Dequeue(Queue * pq);
Data QPeek(Queue * pq);
#endif
///////////////////////////////////////////////////////////////////////////////////
Circular Queue.c의 Enqueue의 pq-PER의 값을 Hamburgersim.c에서 변수를 받아 쓰고 싶은데
어떻게 해야 Circular Queue.c의 pq-PER변수를 Hamburgersim.c에서 받을 수 있나요??
-
햇님
감사합니다.
-
해지개
pq-PER 이걸 que.PER로 변경하셔야 접근이 가능하고요
계산식은 완성하셔야 할거같습니다
무슨말이냐면, enqueue에서 매번 계산했던 PER을 전체 enqueue상황을 마치고 맨 마지막에 한번만 계산하고자 하신거 같으니 적절한 계산값을 수행하셔야하고
main()문에서 queue structure에 접근하시려고 할 경우엔 Queue que;에 영향을 받으므로
- 가아닌 .으로 해야 각 변수들에 접근이 가능합니다~