스케줄링 알고리즘 질문입니다.
슬아라
질문 제목 : 스케줄링 알고리즘 질문입니다.밑에 소스 코드입니다. 거의 다했는데 계속 오류가 뜨네요 문법적으로는 오류가 없는거 같은데 머가 잘못된 거죠?
고수 님들의 조언 부탁드립니다.질문 내용 :
#includestdio.h
#includestdlib.h
struct process{
char name[10]; // process name
int arrival_time; // process arrival time
int burst_time; // burst time
int run;
int processno; // 입력받은 프로세스에 따른 번호 할당
int turnaround; // turnaround time
int waiting; // 대기시간
};
int total=0;
struct process temp; //프로세스를 고체하기 위하여 필요한 임시공간
struct process* proc=(struct process*)malloc(sizeof(struct process)*5);
struct process* queue=(struct process*)malloc(sizeof(struct process)*5);
void func_print(){
int* gantt=(int*)malloc(sizeof(int)*total);
int i=0, turnaround=0;
for (i=0,turnaround=0; i5; i++){
turnaround+=queue[i].turnaround;
}// 반환시간
printf(\n1. print gantt chart\n);
for (i=0; itotal; i++){
printf (%d,gantt[i]);
}//draw gantt chart!
printf(\n 2. average turnaround time \n); //turnaround time
printf(\n);
}//function print
void fcfs(){//fcfs
int* gantt=(int*)malloc(sizeof(int)*total);
int a, i=0;
for (a=0; a5; a++){
while ( queue[a].burst_time 0 ){
gantt[i]=queue[a].processno;
queue[a].burst_time--;
i++;
queue[a].turnaround = i-queue[a].arrival_time;
queue[a].waiting = queue[a].turnaround - queue[a].run;
}
}
func_print(queue,gantt);
printf(--------------turn_around time---------------\n);
printf(|%s %s %s %s %s \tave |\n, queue[0].name, queue[1].name,
queue[2].name, queue[3].name, queue[4].name);
printf(|%d %d %d %d %d %f|\n, queue[0].turnaround, queue[1].turnaround,
queue[2].turnaround, queue[3].turnaround, queue[4].turnaround, (float)queue[a].turnaround/5);
printf(-----------------------------------------------\n);
}
void np_sjf(){//sjf
int* gantt=(int*)malloc(sizeof(int)*total);
int b, i=0, a=0;
while (a5){
while ( queue[a].burst_time 0 ){
gantt[i]=queue[a].processno;
queue[a].burst_time--;
i++;
queue[a].turnaround = i-queue[a].arrival_time;
queue[a].waiting = queue[a].turnaround - queue[a].run;
}
a++;
for (b=a+1; b5; b++)
if (queue[b].arrival_time = i && queue[a].burst_time queue[b].burst_time){
temp=queue[b];
queue[b]=queue[a];
queue[a]=temp;
}
}
func_print(queue,gantt);
printf(--------------turn_around time---------------\n);
printf(|%s %s %s %s %s \tave |\n, queue[0].name, queue[1].name,
queue[2].name, queue[3].name, queue[4].name);
printf(|%d %d %d %d %d %f|\n, queue[0].turnaround, queue[1].turnaround,
queue[2].turnaround, queue[3].turnaround, queue[4].turnaround, (float)queue[a].turnaround/5);
printf(-----------------------------------------------\n);
}
void p_sjf(){//srt
int* gantt=(int*)malloc(sizeof(int)*total);
int b, i=0, a=0;
while (a5){
while ( queue[a].burst_time 0 ){
for (b=a+1; b5; b++)
if (queue[b].arrival_time = i && queue[a].burst_time queue[b].burst_time){
temp=queue[b];
queue[b]=queue[a];
queue[a]=temp;
} // 현재 도착한 프로세스중 실행시간이 짧을경우 실행되고 있는 프로세스와 교체
gantt[i]=queue[a].processno;
queue[a].burst_time--;
i++;
queue[a].turnaround = i-queue[a].arrival_time;
queue[a].waiting = queue[a].turnaround - queue[a].run;
}
a++;
}
func_print(queue,gantt);
printf(--------------turn_around time---------------\n);
printf(|%s %s %s %s %s \tave |\n, queue[0].name, queue[1].name,
queue[2].name, queue[3].name, queue[4].name);
printf(|%d %d %d %d %d %f|\n, queue[0].turnaround, queue[1].turnaround,
queue[2].turnaround, queue[3].turnaround, queue[4].turnaround, (float)queue[a].turnaround/5);
printf(-----------------------------------------------\n);
}
void rr_1(id rr_1(){//rr
int* gantt=(int*)malloc(sizeof(int)*total);
int b, a, i=0;
int next=0;
while (itotal){
a = next%5;
if ( queue[a].arrival_time = i){
for (b=0; b1 && queue[a].burst_time0; b++){
gantt[i]=queue[a].processno;
queue[a].burst_time--;
i++;
queue[a].turnaround = i-queue[a].arrival_time;
queue[a].waiting = queue[a].turnaround - queue[a].run;
}
}
next++;
}
func_print(queue,gantt);
printf(--------------turn_around time---------------\n);
printf(|%s %s %s %s %s \tave |\n, queue[0].name, queue[1].name,
queue[2].name, queue[3].name, queue[4].name);
printf(|%d %d %d %d %d %f|\n, queue[0].turnaround, queue[1].turnaround,
queue[2].turnaround, queue[3].turnaround, queue[4].turnaround, (float)queue[a].turnaround/5);
printf(-----------------------------------------------\n);
}
void rr_4(){//rr
int* gantt=(int*)malloc(sizeof(int)*total);
int b, a, i=0;
int next=0;
while (itotal){
a = next%5;
if ( queue[a].arrival_time = i){
for (b=0; b4 && queue[a].burst_time0; b++){
gantt[i]=queue[a].processno;
queue[a].burst_time--;
i++;
queue[a].turnaround = i-queue[a].arrival_time;
queue[a].waiting = queue[a].turnaround - queue[a].run;
}
}
next++;
}
func_print(queue,gantt);
printf(--------------turn_around time---------------\n);
printf(|%s %s %s %s %s \tave |\n, queue[0].name, queue[1].name,
queue[2].name, queue[3].name, queue[4].name);
printf(|%d %d %d %d %d %f|\n, queue[0].turnaround, queue[1].turnaround,
queue[2].turnaround, queue[3].turnaround, queue[4].turnaround, (float)queue[a].turnaround/5);
printf(-----------------------------------------------\n);
}
void func_swap(){//도착 시간 순서대로 정렬함 bubble sorting
int i, j;
for (i=0; i4; i++)
for (j=i+1; j5; j++)
if (queue[i].arrival_time queue[j].arrival_time){
temp = queue[i];
queue[i] = queue[j];
queue[j] = temp;
}
}
void main(){
int i;
printf(please input process status\n);
for (i=0; i5; i++){
proc[i].processno=i+1;
printf( %d 번째 프로세스 정보 입력 \n,proc[i].processno);
printf(process name : );scanf(%s, &proc[i].name);
printf(process arrival time : );scanf(%d, &proc[i].arrival_time);
printf(process burst time : );scanf(%d, &proc[i].burst_time);
proc[i].run = proc[i].burst_time;
}
printf(----------------process stats-----------------\n);
printf(|\tname\tarrival time\tburst time\t|\n);
for(i =0 ; i5 ; i++){
printf(|\t %s\t %d\t\t %d \t|\n, proc[i].name, proc[i].arrival_time, proc[i].burst_time);
}
printf(------------------------------------------------\n);
printf(\n 다음이 프로세스 넘버와 프로세스 이름입니다.\n);
printf( 간트차트는 프로세스 넘버가 출력됩니다.\n);
for (i=0; i5; i++)
printf( %d : %s ,proc[i].processno, proc[i].name);
for (i=0; i5; i++)
total+=proc[i].burst_time;
printf(\n************** fcfs scheduling **************\n);//fcfs 스케쥴링
for (i=0; i5; i++)
queue[i]=proc[i];
func_swap(queue);
fcfs(queue);
printf(\n********* non preemtive sjf scheduling********\n); //비선점 sjf 스케쥴링
for (i=0; i5; i++)
queue[i]=proc[i];
func_swap(queue);
np_sjf(queue);
printf(\n********** preemtive sjf scheduling **********\n); //선점 sjf 스케쥴링
for (i=0; i5; i++)
queue[i]=proc[i];
func_swap(queue);
p_sjf(queue);
printf(\n***** round-robin scheduling(q time = 1) *****\n); //rr 스케쥴링(q=1)
for (i=0; i5; i++)
queue[i]=proc[i];
func_swap(queue);
rr_1(queue);
printf(\n***** round-robin scheduling(q time = 4) *****\n); //rr 스케쥴링(q=4)
for (i=0; i5; i++)
queue[i]=proc[i];
func_swap(queue);
rr_4(queue);
system(pause);
}
-
라일락
scanf에서 %s를 사용할때 주소를 넘겨줘야 되는데,
배열의 이름은 그 자체로 주소가 됩니다.
따라서 &를 넣지 않아야 됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676182 | 숫자 순서대로 배열하는법 | 권뉴 | 2024-11-24 |
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |