Request Cần người pro C giúp bài tập môn Nguyên Lý Hệ Điều Hành

sato002

Hero
Joined
Nov 22, 2014
Messages
613
Reactions
303
MR
0.002
Tình hình e đang bắt nộp gấp quá . Pro nào đi qua giúp em chỉnh sửa 1 chút . E xin hậu tạ 1 card DT 50k . thank
Em đang làm bài tập về lập lịch Priority PreEmptive :

#include<stdio.h>
#include<stdlib.h>
typedef struct process
{
int id,at,bt,st,ft,pr;
float wt,tat;
}process;

process p[10],p1[10],temp;

int accept(int ch);
void sort(int n);
void gantt(int n);
void turnwait(int n);
void display(int n);

int main()
{
int i,n,ts,ch,j,x;
p[0].tat=0;
p[0].wt=0;
n=accept(ch);
sort(n);
gantt(n);
turnwait(n);
display(n);
return 0;
}


int accept(int ch) //Ham nhap cho nguoi su dung
{
int i,n;
printf("\nNhap so tien trinh: ");
scanf("%d",&n);
if(n==0)
{
printf("\nKhong co tien trinh thuc hien");
exit(1);
}
for(i=1;i<=n;i++)
{
do{
printf("\nNhap thoi gian xuat hien tien trinh P%d: ",i);
scanf("%d",&p.at);
p.id=i;
}while(p.at<0 || p.at!=p.at);
}
for(i=1;i<=n;i++)
{
do{
printf("\nThoi gian thuc hien cua tien trinh P%d: ",i);
scanf("%d",&p.bt);
}while(p.bt<0||p.bt==0);
}
for(i=1;i<=n;i++)
{
do{
printf("\nNhap tien trinh duoc uu tien%d: ",i);
scanf("%d",&p.pr);
}while(p.pr<0);
}
printf("\ndau vao cap phat:\n");
printf("==============================================================");
printf("\nTien trinh\tAT\tBT\tPR");
for(i=1;i<=n;i++)
printf("\nP%d\t%d\t%d\t%d",p.id,p.at,p.bt,p.pr);
printf("\n============================================================");
for(i=1;i<=n;i++) // sao chep lai(dummy area)
p1=p;
return n;
}

void sort(int n)
{
int i,j;
for(i=2;i<=n;i++)
for(j=1;j<=i;j++)
if(p[j].at>p.at)
{
temp=p;
p=p[j];
p[j]=temp;
}
else if(p[j].at==p.at) //neu ca 2 thoi gian den la bang nhau thi thuc hien theo FCFS
if(p[j].bt>p.bt)
{
temp=p;
p=p[j];
p[j]=temp;
}
}

/* Bieu do gantt */

void gantt(int n)
{
int i,j,min,nextval,limit,ts,m=1;
limit=0;
nextval=p[1].at;
printf("\nTien trinh bat dau tu: ");
scanf("%d",&ts);
for(i=1;i<=n;i++)
limit=limit+p.bt;
limit=limit+p[1].at;
if(p1[1].bt<ts)
nextval=nextval+p1[1].bt;
else
nextval=nextval+ts;
printf("gian do gantt la :\n\n");
printf("%d->P%d->%d",p1[1].at,p1[1].id,nextval);
if(p1[m].bt<ts)
p1[m].bt=0;
else
p1[m].bt=p1[m].bt-ts;
do
{
if(p1[m].bt<=0)
{
min=9999;
for(i=1;(p1.at)<=nextval,i<=n;i++)
if(p1.pr<min && p1.bt>0)
{
min=p1.pr;
m=i;
}
}
i=1;
while(i<=n)
{
if((p1.at)<=nextval)
if((p1.pr<p1[m].pr) && (p1[m].bt>0) && (p1.bt>0))
m=i;
i++;
}
if(p1[m].bt<ts)
nextval=nextval+p1[m].bt;
else
nextval=nextval+ts;
printf("->P%d->%d",p1[m].id,nextval);
if(p1[m].bt<ts)
p1[m].bt=0;
else
p1[m].bt=p1[m].bt-ts;
if(p1[m].bt==0)
p[m].ft=nextval;

}while(nextval<limit);
}

/* ham tinh thoi gian xu ly va thoi gian doi */
void turnwait(int n)
{
int i;
for(i=1;i<=n;i++)
{
p.tat=p.ft-p.at;
p.wt=p.tat-p.bt;
p[0].tat=p[0].tat+p.tat;
p[0].wt=p[0].wt+p.wt;
}
p[0].tat=p[0].tat/n;
p[0].wt=p[0].wt/n;
}
void display(int n)
{
int i;
printf("\n\n-------------------TABLE----------------------------------\n");
printf("\nTien trinh\tAT\tBT\tFT\tTAT\t\tWT");
for(i=1;i<=n;i++)
printf("\nP%d\t%d\t%d\t%d\t%f\t%f",p.id,p.at,p.bt,p.ft,p.tat,p.wt);
printf("\n\n-----------------------------------------------------------");
printf("\nthoi gian xu li trung binh: %f",p[0].tat);
printf("\nthoi gian doi trung binh: %f",p[0].wt);
}

Đây là code . Mà có 1 yêu cầu là nhập dữ liệu số PriO ( số ưu tiên của từng tiến trình ) . Yêu cầu của ông giáo là nhập mấy số này không được trùng nhau + phải là 1 dãy số ( ví dụ có 5 tiến trình thì là 1-5-4-3-2 ) kiểu như vậy . Pro nào sửa giúp em phần nhập dữ liệu này với . E cần gấp quá . Thanks
 

Announcements

Today's birthdays

Forum statistics

Threads
418,517
Messages
7,072,714
Members
170,620
Latest member
bongdawapones

Most viewed of week

Most viewed of week

Back
Top Bottom