큐를 이용한 시뮬레이션 코드 짜는중인데 원하는 값을 못뽑아내겠어요..ㅜ
원술
질문 제목 : c언어 과제중인데 원하는 값을 못뽑아내겠어요..ㅜprintf(소비자에게 판매한 제품수 = %d\n, sold);
printf(유통기한이 지나 폐기한 제품수 = %d\n, trash);
이 값을 아웃풋으로 뽑아내고 싶은데 어떤걸 해야할지 모르겠네요..질문 내용 :지금까지 짠 전체 코드입니다.
/* simulation.c */
#include stdlib.h
#include stdio.h
#include math.h
#define true 1
#define false 0
#define max_queue_size 100
typedef struct {
int id;
int arrival_time;
int service_time;
int limit_time;
int move_time;
} element;
typedef struct {
element queue[max_queue_size];
int front, rear;
} queuetype;
queuetype queue;
// 초기화 함수
void init(queuetype *q)
{
q-front = q-rear = 0;
}
// 공백 상태 검출 함수
int is_empty(queuetype *q)
{
return (q-front == q-rear);
}
// 포화 상태 검출 함수
int is_full(queuetype *q)
{
return ((q-rear+1)%max_queue_size == q-front);
}
// 삽입 함수
void enqueue(queuetype *q, element item)
{
if( is_full(q) ) {
fprintf(stderr,큐가 포화상태입니다.\n);
return;
}
q-rear = (q-rear+1) % max_queue_size;
q-queue[q-rear] = item;
}
// 삭제 함수
element dequeue(queuetype *q)
{
if( is_empty(q) ) {
fprintf(stderr, 큐가 공백상태입니다.\n);
exit(1);
}
q-front = (q-front+1) % max_queue_size;
return q-queue[q-front];
}
// [0..1] 사이의 난수 생성 함수
double random()
{
return rand()/(double)rand_max;
}
// 시뮬레이션에 필요한 여러가지 상태 변수
int duration=30; // 시물레이션 시간
double arrival_prob=0.5; // 하나의 시간 단위에 도착하는 평균 제품의 수
int max_stay_time=10;// 하나의 제품에 대한 최대 판매 대기시간
int move_time=3; // 제조업체-유통업체 이동 시간
int clock; // 현재날짜
// 시뮬레이션의 결과
int products;// 전체제품수
int served_products;// 제품수 (유통이 완료된 제품)=(dequeue 된 제품)
int waited_time;// 판매 대기시간 (유통이 완료된 제품)=(dequeue 된 제품)
int limit_time; // 유통기한 (유통이 완료된 제품)=(dequeue 된 제품)
int sold; // 판매된 제품 (유통이 완료된 제품)=(dequeue 된 제품)
int trash; // 폐기한 제품 (유통이 완료된 제품)=(dequeue 된 제품)
int move; // 제조업체-유통업체 이동 시간 (유통이 완료된 제품)=(dequeue 된 제품)
int lead_time; // 총 유통소요시간 (유통이 완료된 제품)=(dequeue 된 제품)
// 랜덤 숫자를 생성하여 고객이 도착했는지 도착하지 않았는지를 판단
int is_product_arrived()
{
if( random() arrival_prob )
return true;
else return false;
}
// 새로 도착한 고객을 큐에 삽입
void insert_product(int arrival_time)
{
element product;
product.id = products++;
product.arrival_time = arrival_time; // 제품 도착날짜
product.service_time = (int)(max_stay_time * random()) + 1; // 대기시간(랜덤)
product.limit_time = (int)(max_stay_time * random()) + 5; // 유통기한(랜덤)
product.move_time = (int)(move_time * random()); // 제조업체-유통업체 이동시간(랜덤)
enqueue(&queue, product);
printf([제품 %d] 이 %d일에 제조업체로부터 %d일만에 유통업체로 들어왔습니다.\n제품의 유통기한은 %d일 입니다. \n,
product.id, product.arrival_time, product.move_time, product.limit_time);
}
// 큐에서 기다리는 고객을 꺼내어 고객의 서비스 시간을 반환한다.
int remove_product()
{
element product;
int service_time=0;
if (is_empty(&queue)) return 0;
product = dequeue(&queue);
service_time = product.service_time-1;
served_products++;
waited_time += clock - product.arrival_time;
limit_time += product.limit_time;
move += product.move_time;
lead_sp;lead_time += clock - product.arrival_time + product.move_time;
sold = product. limit_time - (clock - product.arrival_time + product.move_time); ///////////////////-------------몰라--------------
trash = served_products - ((clock - product.arrival_time + product.move_time) - product. limit_time);//유통이 완료된 제품수 - sold...
printf(\n[제품 %d] 이 %d일에 유통이 완료되었습니다.\n판매대기시간은 %d일, 총 유통소요시간은 %d일, 남은유통기한 %d일 입니다. \n,
product.id, clock, clock - product.arrival_time, clock - product.arrival_time + product.move_time, product. limit_time - (clock - product.arrival_time) - product.move_time);
// 총 유통소요시간 : 판매대기시간 + 제조업체-유통업체 이동시간
// 남은 유통기한 : 유통기한 - 총 유통소요시간
if(product. limit_time - (clock - product.arrival_time + product.move_time)0)//유통기한 - 총 유통 소요시간
{
printf(\n------------[제품 %d] 을 폐기하였습니다.------------\n, product.id);
}
if(product. limit_time - (clock - product.arrival_time + product.move_time)=0)
{
printf(\n------------[제품 %d] 을 판매하였습니다.------------\n, product.id);
}
return service_time;
}
// 통계치를 출력한다.
print_stat()
{
printf(유통이 완료된 제품수 = %d\n, served_products );
printf(유통이 완료된 제품의 총 판매대기 시간 = %d일\n, waited_time);
printf(유통이 완료된 제품의 총 유통기한 = %d일\n,limit_time);
printf(유통이 완료된 제품 하나당 평균 판매 대기 시간 = %f일\n, (double)waited_time/served_products);
printf(유통이 완료된 제품 하나당 평균 유통기한 = %f일\n, (double)limit_time/served_products);
printf(유통이 완료된 제품 하나당 제조업체-유통업체 이동시간 = %d일\n, move);
printf(유통이 완료된 제품의 총 유통소요시간 = %d일\n, lead_time);
printf(유통이 끝나지않은 제품수 = %d\n, products-served_products);
printf(소비자에게 판매한 제품수 = %d\n, sold);
printf(유통기한이 지나 폐기한 제품수 = %d\n, trash);
}
// 시뮬레이션 프로그램
void main()
{
int service_time=0;
clock=0;
while(clock duration){
clock++;
printf(\n현재날짜=6월 %d일\n\n,clock);
if (is_product_arrived()) {
insert_product(clock);
}
if (service_time 0)
service_time--;
else {
service_time = remove_product();
}
}
print_stat();
}printf(소비자에게 판매한 제품수 = %d\n, sold);
printf(유통기한이 지나 폐기한 제품수 = %d\n, trash);
이 값을 아웃풋으로 뽑아내고 싶은데 어떤걸 해야할지 모르겠네요..
첨부파일 메모장에 소스코드 넣었습니다.
-
클
몬테카를로 시뮬레이션이 뭔지는 모르겠어요ㅜ
c++프로그램을 이용했습니다.
c++ Q&A 게시판에 올려야 대나요.. -
스위트초코
제가 시나리오짜고 시뮬레이션한거라 문제는 없어요ㅜ
아웃풋에 유통이 완료된 제품수가 7개이 나오는데 이걸 판매된 제품수(3개)랑 폐기된 제품수(4개) 따로 뽑아내고 싶어서 질문 드렸습니다. -
재찬
몬테카를로 시뮬레이션을 구현하려는 것 아닌가요?
상황은 딱 큐잉(queuing) 문제 같은데 말이죠.
소스말고 문제를 좀 봤으면 합니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |
2691650 | 반복문 | 돋가이 | 2025-04-15 |