1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài tập lớn NLHĐH pptx

13 482 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 32,5 KB

Nội dung

Bài tập lớn NLHĐH#include #include #include #include #include #include #include #include int *tentt,*ten; //tentt: ten cac tt nhap vao, ten: danh sach ten tt xuat ra unsigned int *txh,*t

Trang 1

Bài tập lớn NLHĐH

#include<iostream.h>

#include<math.h>

#include<conio.h>

#include<graphics.h>

#include<stdlib.h>

#include<string.h>

#include<alloc.h>

#include<stdio.h>

int *tentt,*ten; //tentt: ten cac tt nhap vao, ten: danh sach ten tt xuat ra

unsigned int *txh,*tth,*moctg,*daxh; //txh,tth:thoi gian xh va th cau tien trinh daxh:danh dau tien trinh da xh trong hang doi

int n,m; //n:so tien trinh,m:so o duoc ve

//HAM NHAP DU LIEU

void nhapdl()

{

cout<<"So tien trinh: "; cin>>n;

tentt=(int*)malloc(n*sizeof (int));

txh=(unsigned int*)malloc(n*sizeof (int));

tth=(unsigned int*)malloc(n*sizeof (int));

daxh=(unsigned int*)malloc(n*sizeof (int));

gotoxy(35,4);

cout<<"TEN TIEN TRINH";

gotoxy(51,4);

cout<<"TG XUAT HIEN";

gotoxy(65,4);

cout<<"TG THUC HIEN";

for(int i=0;i<n;i++)

{

gotoxy(35,5+i);

cout<<" P "<<(i+1);

tentt[i]=i+1;

}

for(i=0;i<n;i++)

{

gotoxy(51,5+i);

cin>>txh[i];

gotoxy(65,5+i);

cin>>tth[i];

}

}

//HAM SAP XEP LAI TIEN TRINH THEO THOI GIAN XUAT HIEN void quick_sort(int l,int r)

{

int t,tg;

if(l<r)

{

Trang 2

int i=l,j=r;

while(i<=j)

{

while(txh[i]<t) i++;

while(txh[j]>t) j ;

if(i<=j)

{

tg=txh[i]; txh[i]=txh[j]; txh[j]=tg;

tg=tentt[i]; tentt[i]=tentt[j];tentt[j]=tg;

tg=tth[i]; tth[i]=tth[j]; tth[j]=tg;

i++;j ;

}

}

quick_sort(l,j);

quick_sort(i,r);

}

}

//HAM THUC HIEN THUAT TOAN FCFS

void FCFS(int &m)

{

//Dinh dang kieu chu cho ham outtextxy

settextstyle(1,0,1);

settextjustify(1,1);

outtextxy(320,80,"Thuat toan FCFS");

int k=-99;

m=n;

ten=(int*)malloc(n*sizeof(int));

for(int i=0;i<n;i++)

ten[i]=tentt[i];

int d1=0,d2=0;

moctg=(unsigned int*)malloc(1*sizeof(int));

moctg[0]=0;

while(d2<n) //Trong khi cac con tien trinh chua xuat hien {

moctg=(unsigned int*)realloc(moctg,(d1+2)*sizeof(int)); if(moctg[d1]<txh[d2])

{

m++;

ten=(int*)realloc(ten,m*sizeof(int));

moctg[d1+1]=txh[d2];

for(int i=m-1;i>=d1;i )

ten[i+1]=ten[i];

ten[d1]=k;

}

else

{

moctg[d1+1]=moctg[d1]+tth[d2];

Trang 3

}

d1++;

}

}

//HAM THUC HIEN CUA THUAT TOAN SJF

void thSJF(int *hangdoi, int &xh,int &so,unsigned int *tthhd,unsigned int *tconlai,int

&m)

{

if(so>0 || xh<n)

{

//Lap hang doi

for(int i=0;i<n;i++)

if(txh[i]<=moctg[m] && daxh[i]==0)

{

so++; xh++; daxh[i]=1;

hangdoi[so-1]=tentt[i];

tthhd[so-1]=tth[i];

tconlai[so-1]=tth[i];

}

//Sap xep lai hang doi theo thoi gian thuc hien

int tg;

if(so>1)

{

for(int i=0;i<n;i++)

for(int j=i+1;j<n;j++)

if(tthhd[j]>=tthhd[i])

{

tg=hangdoi[i]; hangdoi[i]=hangdoi[j]; hangdoi[j]=tg;

tg=tthhd[i]; tthhd[i]=tthhd[j]; tthhd[j]=tg;

tg=tconlai[i]; tconlai[i]=tconlai[j]; tconlai[j]=tg;

}

}

ten=(int*)realloc(ten,(m+1)*sizeof(int));

moctg=(unsigned int*)realloc(moctg,(m+2)*sizeof(int));

if(so==0) //Thuc hien khi so phan tu hang doi bang 0

{

ten[m]=-99; moctg[m+1]=txh[xh]; m++; //tao mot o trong

}

else //Thuc hien khi so pha tu hang doi khac 0

{

if(so>0)

{

ten[m]=hangdoi[so-1]; //Dua phan tu o dau hang doi vao thuc hien

moctg[m+1]=moctg[m]+tconlai[so-1];

m++;

for(int i=0;i<n;i++) //KT xem co tien trinh nao xuat hien va ngat duoc tien trinh dang thuc hien hay khong

if(txh[i]<moctg[m] && daxh[i]==0 && tth[i]<tthhd[so-1])

Trang 4

moctg[m]=txh[i];

tconlai[so-1]-=moctg[m]-moctg[m-1];

i=n+1; //Neu co tien trinh ngat -> dung tien trinh dang thuc hien

}

if(i==n) so ; //Neu khong co tien trinh ngat -> thuc hien xong tt dang th -> loai bo khoi hang doi

}

}

if(so>0 || xh<n) //Neu hang doi con phan tu hoac con co pha tu chua xuat hien

thSJF(hangdoi,xh,so,tthhd,tconlai,m); //Thuc hien lai voi hang doi theo de quy

}

}

//HAM THUC HIEN THUAT TOAN SJF

void SJF(int &m)

{

settextstyle(1,0,1);

settextjustify(1,1);

outtextxy(320,80,"Thuat toan SJF");

unsigned int *tthhd,*tconlai;

int *hangdoi,so=0,xh=0;

ten=(int*)calloc(m+1,sizeof(int));

moctg=(unsigned int*)calloc(m+2,sizeof(int));

hangdoi=(int*)calloc(n,sizeof(int));

tthhd=(unsigned int*)calloc(n,sizeof(int));

tconlai=(unsigned int*)calloc(n,sizeof(int));

m=0;

moctg[0]=0; //Gan moc thoi gian dau tien bang 0

for(int i=0;i<n;i++) //Gan moi tien trinh deu o trang thai chua xuat hien trong hang doi daxh[i]=0;

//Goi ham thuc hien cua SJF

thSJF(hangdoi,xh,so,tthhd,tconlai,m);

//outtextxy(640,480,"Xong RR ");;

}

//Ham thuc hien cua SRT (Chi khac SJF o cho kiem tra tien trinh chen ngang khi co tien trinh dang thuc hien)

void thSRT(int *hangdoi, int &xh,int &so,unsigned int *tthhd,unsigned int

*tconlai,int &m)

{

if(so>0 || xh<n)

{

//Lap hang doi

for(int i=0;i<n;i++)

if(txh[i]<=moctg[m] && daxh[i]==0)

{

Trang 5

so++; xh++; daxh[i]=1;

hangdoi[so-1]=tentt[i];

tthhd[so-1]=tth[i];

tconlai[so-1]=tth[i];

}

//Sap xep lai hang doi

int tg;

if(so>1)

{

for(int i=0;i<n;i++)

for(int j=i+1;j<n;j++)

if(tconlai[j]>=tconlai[i])

{

tg=hangdoi[i]; hangdoi[i]=hangdoi[j]; hangdoi[j]=tg; tg=tthhd[i]; tthhd[i]=tthhd[j]; tthhd[j]=tg;

tg=tconlai[i]; tconlai[i]=tconlai[j]; tconlai[j]=tg;

}

}

ten=(int*)realloc(ten,(m+1)*sizeof(int));

moctg=(unsigned int*)realloc(moctg,(m+2)*sizeof(int)); if(so==0)

{

ten[m]=-99; moctg[m+1]=txh[xh]; m++;

}

else

{

if(so>0)

{

ten[m]=hangdoi[so-1];

moctg[m+1]=moctg[m]+tconlai[so-1];

m++; int tam;

for(int i=0;i<n;i++)

if(txh[i]<moctg[m] && daxh[i]==0)

{

tam=tconlai[so-1]-(txh[i]-moctg[m-1]);

if(tth[i]<tam)

{

moctg[m]=txh[i];

tconlai[so-1]=tam;

i=n+1;

}

}

if(i==n) so ;

}

}

if(so>0 || xh<n)

thSRT(hangdoi,xh,so,tthhd,tconlai,m);

}

}

Trang 6

//HAM THUC HIEN THUAT TOAN SRT

void SRT(int &m)

{

settextstyle(1,0,1);

settextjustify(1,1);

outtextxy(320,80,"Thuat toan SRT");

unsigned int *tthhd,*tconlai;

int *hangdoi,so=0,xh=0;

ten=(int*)calloc(m+1,sizeof(int));

moctg=(unsigned int*)calloc(m+2,sizeof(int));

hangdoi=(int*)calloc(n,sizeof(int));

tthhd=(unsigned int*)calloc(n,sizeof(int));

tconlai=(unsigned int*)calloc(n,sizeof(int));

m=0;

moctg[0]=0;

for(int i=0;i<n;i++)

daxh[i]=0;

thSRT(hangdoi,xh,so,tthhd,tconlai,m);

//outtextxy(640,480,"Xong RR ");;

}

//Ham thuc hien cua RR

void thRR(int q,int *hangdoi, int &xh,int &so,unsigned int *tthtr,unsigned int

*tconlai,int &m)

{

if(so>0 || xh<n) //Neu hang doi con phan tu hoac con tien trinh chua xuat hien {

if(so==0 && xh<n) //Neu so phan tu hang doi bang 0 -> dua phan tu xuat hien som nhat trong ds cac phan tu chua xh (tuc la daxh=0) vao hang doi

{

xh++;

so++;

int vt;

for(int i=0;i<n;i++)

if(daxh[i]==0)

{

vt=i; i=n;

}

hangdoi[so-1]=tentt[vt];

tthtr[so-1]=tconlai[vt];

moctg[m+1]=txh[vt];

ten[m]=-99;

m++;

ten=(int*)realloc(ten,(m+1)*sizeof(int));

moctg=(unsigned int*)realloc(moctg,(m+2)*sizeof(int));

if(so>0 || xh<n) //Thuc hien voi hang doi vua lap duoc

thRR(q,hangdoi,xh,so,tthtr,tconlai,m);

}

Trang 7

if(so>0) // Neu so phan tu hang doi >0, dua phan tu dau hang doi vao thuc hien {

if(tthtr[so-1]<=q) //Neu t thuc hien con lai cua no <=q ->thuc hien xong

{

moctg[m+1]=moctg[m]+tthtr[so-1];

ten[m]=hangdoi[so-1];

so ;

int vt;

for(int i=0;i<n;i++)

if(tentt[i]==ten[m])

{

vt=i;i=n;

}

tconlai[vt]=0;

daxh[vt]=1;

}

else //Neu t thuc hien con lai >q -> dua no ve cuoi hang doi

{

moctg[m+1]=moctg[m]+q;

ten[m]=hangdoi[so-1];

for(int i=so-1;i>0;i )

{

hangdoi[i]=hangdoi[i-1];

tthtr[i]=tthtr[i-1];

daxh[i]=daxh[i-1];

}

hangdoi[0]=ten[m];

int vt;

for(i=0;i<n;i++)

if(tentt[i]==ten[m])

{

vt=i;i=n;

}

tconlai[vt]-=q;

tthtr[0]=tconlai[vt];

daxh[vt]=1;

}

m++;

ten=(int*)realloc(ten,(m+1)*sizeof(int));

moctg=(unsigned int*)realloc(moctg,(m+2)*sizeof(int));

}

for(int i=0;i<n;i++) // Kiem tra neu co tien trinh xuat hien khi tien trinh cu dang thuc hien thi dua tt moi vao vi tri dau tien cua hang doi

if(txh[i]<=moctg[m] && daxh[i]==0)

{

so++;

hangdoi[so-1]=tentt[i];

tthtr[so-1]=tconlai[i];

daxh[i]=1; xh++;

Trang 8

if(so>0 || xh<n) //Thuc hien voi hang doi hien co

thRR(q,hangdoi,xh,so,tthtr,tconlai,m);

}

}

//HAM THUC HIEN THUAT TOAN RR

void RR(int &m)

{

int q; cout<<"Luong tu thoi gian q= "; cin>>q;

settextstyle(1,0,1);

settextjustify(1,1);

outtextxy(320,80,"Thuat toan RR");

m=0;

int *hangdoi,so=0;

unsigned int *tthtr,*tconlai;

ten=(int*)calloc(m+1,sizeof(int));

moctg=(unsigned int*)calloc(m+2,sizeof(int));

hangdoi=(int*)calloc(n,sizeof(int));

tthtr=(unsigned int*)calloc(n,sizeof(int));

tconlai=(unsigned int*)calloc(n,sizeof(int));

moctg[0]=0;int xh=0;

//truoc khi thuc hien, gan tg con lai cua cactt=tth, cac tt o trang thai chua xuat hien trong hang doi

for(int i=0;i<n;i++)

{

tconlai[i]=tth[i];

daxh[i]=0;

}

//lap hang doi dau tien tai moc thoi gian bang 0

for(i=0;i<n;i++)

if(txh[i]<=moctg[0] && daxh[i]==0)

{

so++;

hangdoi=(int*)realloc(hangdoi,so*sizeof(int));

hangdoi[so-1]=tentt[i];

tthtr=(unsigned int*)realloc(tthtr,so*sizeof(int));

tthtr[so-1]=tconlai[i];

daxh[i]=1; xh++;

}

thRR(q,hangdoi,xh,so,tthtr,tconlai,m);

outtextxy(640,480,"Xong RR ");;

}

//Ham ve so do Grant voi dau vao la so o can ve m,mang ten,mang moctg

void vesodogrant(int ten[],int m,unsigned int moctg[])

{

setbkcolor(BLUE);

Trang 9

settextstyle(0,0,1);

int ax,ay,bx,by,rong=40; //Toa do cac o vuong can ve

int d=0,i=0,j=0; //d:So o can ve; i:Ve o theo hang; j:Xuong dong moi khi het hang char *s;

while(d<m) //Lap trong khi chua ve het

{

bx=30+210+i*rong;

if(bx>620) //Neu so o vuong khong the chua het tren mot hang->xuong hang

{ i=0;j++;}

ax=210+i*rong; ay=120+5+j*40; bx=210+rong+i*rong; by=120+5+20+j*40; //Tinh toa do cac o vuong

setcolor(WHITE);

rectangle(ax,ay,bx,by); //Ve o vuong

itoa(ten[d],s,10);

setcolor(YELLOW);

settextjustify(1,1);

outtextxy((ax+bx+textwidth("P"))/2,(ay+by)/2,s); //Xuat cac ten tien trinh

settextjustify(2,1);

outtextxy((ax+bx+textwidth("P"))/2-textwidth(s)/2,(ay+by)/2,"P");

settextjustify(1,2); setcolor(LIGHTGRAY);

itoa(moctg[d],s,10);

outtextxy(ax,by+3,s); //Xuat cac moc thoi gian

if(i==360/rong)

{

itoa(moctg[d+1],s,10);

outtextxy(bx,by+3,s);

}

if(ten[d]==-99) //Tao o trong

{setfillstyle(0,0); bar(ax+3,ay+3,bx-3,by-3);}

d++; i++; //Dem tong so o da ve

}

itoa(moctg[d],s,10);

outtextxy(bx,by+3,s);

}

//Ham kt de tinh thoi gian cho doi cho cac tien trinh

int ktcomat(int a,int ds[],int &d)

{

int i=0;

while(i<=d && a!=ds[i])

i++;

if(i<=d) return 1;

else return 0;

}

//HAM TINH THOI GIAN CHO DOI TRUNG BINH

float TGCDTB()

Trang 10

int *ds,*tkt,*tcd; //ds:cac tien trinh da duoc tinh, tkt:mang luu tg ket thuc cua cac tien trinh

//tcd:mang luu thoi gian cho cua cac tien trinh

float ttb; //ttb:thoi gian cho doi trung binh

ds=(int*)calloc(1,sizeof(int));

tkt=(int*)calloc(n,sizeof(int));

tcd=(int*)calloc(n,sizeof(int));

int i=m-1,d=0; ds[0]=-99;

while(d<=m+1 && i>=0) //Duyet nguoc tu cuoi mang ten,moctg.Neu tt nao chua co mat trong ds cac tien trinh da duoc tinh tg kt -> lay moctg[i+1] la tg ket thuc

{

if(!ktcomat(ten[i],ds,d))

{

tkt[d]=moctg[i+1];

d++;

ds=(int*)realloc(ds,(d+1)*sizeof(int));

ds[d]=ten[i];

}

i ;

}

//Sap lai mang thoi gian ket thuc theo dung tentt

for(i=0;i<n;i++)

for(int j=1;j<n+1;j++)

{

if(ds[j]==tentt[i])

{

d=tkt[i]; tkt[i]=tkt[j-1]; tkt[j-1]=d;

d=ds[i+1]; ds[i+1]=ds[j]; ds[j]=d;

}

}

//Tinh thoi gian cho doi=tg ket thuc-(tg xuat hien + tg thuc hien)

for(i=0;i<n;i++)

tcd[i]=tkt[i]-(txh[i]+tth[i]);

int stcho=0;

for(i=0;i<n;i++)

stcho=stcho+tcd[i]; //Tinh tong tho gian cho

ttb=(float)stcho/n;

return ttb;

}

void goithieu()

{

settextstyle(1,0,3);

settextjustify(1,1);

outtextxy(320,10,"LAP LICH CHO CPU");

settextjustify(1,2);

settextstyle(0,0,1);

outtextxy(320,470,"Nhom1 KHMT4_K3 DH Cong Nghiep Ha Noi");

Trang 11

void gt()

{

setcolor(WHITE);

settextstyle(1,0,2);

settextjustify(0,2);

outtextxy(80,80,"DANH SACH THANH VIEN NHOM 1");

settextstyle(1,0,1);

outtextxy(80,100,"1.Nguyen Tuan Anh");

outtextxy(80,115,"2.Pham Tuan Luong");

outtextxy(80,130,"3.Do thi Hong Van");

outtextxy(80,145,"4.Nguyen Van Bat");

outtextxy(80,160,"5.Nguyen Trung Hieu");

outtextxy(80,175,"6.Doan xuan Nghia");

getch();

}

void xuatdebai(int &n,int *tentt,unsigned int *txh,unsigned int *tth) {

char as[30];

setcolor(YELLOW);

settextstyle(0,0,1);

settextjustify(0,2);

outtextxy(10,40,"TenTT");

outtextxy(60,40,"TXH");

outtextxy(90,40,"TTH");

rectangle(5,35,120,55+15*n);

rectangle(5,15,120,35);

settextjustify(1,2);

outtextxy(60,25,"DE BAI");

settextjustify(0,2);

for(int i=0;i<n;i++)

{

sprintf(as,"P%d",tentt[i]);

outtextxy(10,55+15*i,as);

sprintf(as,"%d",txh[i]);

outtextxy(60,55+15*i,as);

sprintf(as,"%d",tth[i]);

outtextxy(90,55+15*i,as);

}

}

//THAN CHUONG TRINH CHINH

void main()

{

char k;

do

Trang 12

clrscr();

restorecrtmode(); //tro ve man hinh soan thao

nhapdl(); //Nhap du lieu

s:

restorecrtmode();

//Dua ra menu cho nguoi dung chon lua thuat toan

gotoxy(5,4);

cout<<"XEM KET QUA";

gotoxy(5,5);

cout<<"1:FIRST COME FIRST SERVED";

gotoxy(5,6);

cout<<"2:SHORTEST JOB FIRST";

gotoxy(5,7);

cout<<"3:SHORTEST REMAIN TIME";

gotoxy(5,8);

cout<<"4:ROUND ROBIN";

gotoxy(5,9);

cout<<"5:Nhap lai";

gotoxy(5,10);

cout<<"6:Danh sach thanh vien th";

gotoxy(5,11);

cout<<"7:Thoat";

gotoxy(5,12);

cout<<"Lua chon: ";

gotoxy(17,12);

cin>>k; //Nhap lua chon

}while(k=='5');

if(k=='7') exit(0);

if(k!='7')

{

//Khoi tao do hoa

int gd=DETECT,gm,er;

initgraph(&gd,&gm," \\BGI");

er=graphresult();

//Neu khoi tao do hoa loi ->bao loi

if(er!=grOk)

{

printf("Loi khoi tao do hoa: %s\n",grapherrormsg(er));

getch();

exit(1);

}

cleardevice();

goithieu();

quick_sort(0,n-1); //Sap xep lai cac tien trinh theo thoi gian xuat hien if(k=='1') FCFS(m);

else

if(k=='2') SJF(m);

else

if(k=='3') SRT(m);

Trang 13

if(k=='4') RR(m);

else

if(k=='6') { gt(); goto s;}

else goto s;

if(k!='6')

{

vesodogrant(ten,m,moctg); //Ve so do Grant

xuatdebai(n,tentt,txh,tth); //Xuat de bai

float ttb=floor(TGCDTB()*100+0.5)/100; //Tinh thoi gian cho doi trung binh cua thuat toan

setcolor(RED); settextstyle(1,0,1);

char as[30];

settextjustify(1,2);

sprintf(as,"Thoi gian cho doi tb: %f",ttb);

outtextxy(440,440,as);

getch();

goto s;

closegraph(); //Dong man hinh do hoa

}

}

} //Ket thuc chuong trinh

Ngày đăng: 01/07/2014, 18:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w