diff --git a/Test.cpp b/Test.cpp new file mode 100644 index 0000000..96b5f9c --- /dev/null +++ b/Test.cpp @@ -0,0 +1,140 @@ +//#include +// +//void paixu(int n, int a[]) { //n为数组的元素个数 +// for (int i = 0; i < n - 1; i++) { +// //TODO +// for (int j = i + 1; j < n; j++) { +// //TODO +// if (a[i] > a[j]) { +// int t = a[i]; +// a[i] = a[j]; +// a[j] = t; +// } +// } +// +// } +// for (int i = 0; i < n; i++) { +// //TODO +// printf("%d", a[i]); +// } +//} + +//int main() { +// int a[5] = {8, 6, 5, 4, 1}; +// paixu(5, a); +//} + +//#include +//int main() { +// int min, div, m, n, i = 2; +// printf("请输入两个数:\n"); +// scanf("%d %d", &m, &n); +// if (m > n) +// min = n; +// else +// min = m; +// for (i; i <= min; i++) { +// if (m % i == 0 && n % i == 0) { +// div = i; +// } +// } +// printf("最大公约数为%d\n", div); +// return 0; +//} +// +//#include +// +//int main() { +// int n1, n2, i, gcd; +// +// printf("输入两个正整数"); +// scanf("%d %d", &n1, &n2); +// +// for (i = 1; i <= n1 && i <= n2; ++i) { +// // 判断 i 是否为最大公约数 +// if (n1 % i == 0 && n2 % i == 0) +// gcd = i; +// } +// +// printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd); +// +// return 0; +//} + + +//#include +//int main() +//{ +// int a[11]={1,2,3,4,5,7,8,9,10,11}; +// int i,t,m; +// printf("输入一个数:\n"); +// scanf("%d",&m); +// for(i=0;i<11;i++) +// { +// if(ma[9]) +// a[10]=m; +// } +// printf("排序后:\n"); +// for(i=0;i<11;i++) +// printf("%d ",a[i]); +// return 0; +//} + + +//#include +//#include +// +//int main() { +// double r, s ; +// printf("半径:"); +// scanf("%lf", &r); +// s = (3 * 3.1415926 * r * r) / 4; +// printf("s=%lf", s); +//} + +//#include +//#include +//main() { +// int n, i, k; +// for (n = 100; n > 0; n--) { +// k = sqrt(n); +// for (i = 2; i <= k; i++) +// if (n % i == 0) +// break; +// if (i > k) { +// printf("%d\n", n); +// break; +// } +// } +//} + +#include + +int gcd(int m, int n) { + int div, i, min; + if (m < n) { + min = m; + } else { + min = n; + } + for (i = 2; i <= min; i++) { + if (m % i == 0 && n % i == 0) { + div = i; + } + } + return div; +} + +int main() { + int m, n; + printf("请输入两个整数:\n"); + scanf("%d %d", &m, &n); + int result = gcd(m, n); + printf("%d和%d的最大公约数是%d\n", m, n, result); + return 0; +} + diff --git a/计算机组成原理实验代码/Best_Bad_Fit.cpp b/计算机组成原理实验代码/Best_Bad_Fit.cpp new file mode 100644 index 0000000..a7f6aac --- /dev/null +++ b/计算机组成原理实验代码/Best_Bad_Fit.cpp @@ -0,0 +1,430 @@ +#include +#include +#define N 5 +#include +using namespace std; +enum STATE +{ +F,W +}; + +struct subAreaNode +{ + int addr; // ʼַ + int size; // С + int taskId; // ҵ + STATE state; // ״̬ + subAreaNode *pre; // ǰָ + subAreaNode *nxt; // ָ +}subHead; + + +struct PCB +{ + char name[8]; // + int arrive_time; //ʱ + int run_time; //ʱ + int finish_time; //ʱ + int zhouzhuan_time; //תʱ + float daiquan_time; //Ȩתʱ +}; + +float sumzhouzhuantime,sumdaiquanzhouzhuantime; +struct PCB pcb[N],temp; + +void input(); // +void sort(); //Ľ̰ʱִ +void output(); //㷨ʱ + + + +// ʼз +void intSubArea() +{ + // ʼڴ + subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode)); + // ׸ֵ + fir->addr = 0; + fir->size = 1000; // ڴʼС + fir->state = F; + fir->taskId = -1; + fir->pre = &subHead; + fir->nxt = NULL; + // ʼͷϢ + subHead.pre = NULL; + subHead.nxt = fir; +} + + +// Ӧ㷨 +int BestFit(int taskId, int size) +{ +subAreaNode *tar = NULL; +int tarSize = 1000 + 1; +subAreaNode *p = subHead.nxt; +while (p != NULL) +{ +// Ѱѿ +if (p->state == F && p->size >= size && p->size < tarSize) { +tar = p; +tarSize = p->size; +} +p = p->nxt; +} +if (tar != NULL) { +// ҵҪĿз +if (tar->size - size <= 10) +{ +// +tar->state = W; +tar->taskId = taskId; +} +else +{ +// СΪsize +subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode)); +node->addr = tar->addr + size; +node->size = tar->size - size; +node->state = F; +node->taskId = -1; +// ޸ķڵָ +node->pre = tar; +node->nxt = tar->nxt; +if (tar->nxt != NULL) +{ +tar->nxt->pre = node; +} +tar->nxt = node; +// +tar->size = size; +tar->state = W; +tar->taskId = taskId; +} +printf("ڴɹ\n"); +return 1; +} +else +{ +printf("Ҳʵڴʧ...\n"); +return 0; +} +} + + + + +void BadFit(int taskId,int size){ //Ӧ + //ѿָ + struct subAreaNode *q = NULL; + subAreaNode *node = subHead.nxt; + //ҵһĿп + while(node != NULL){ + if(node->state == F && node->size >= size){ + q = node; + break; + } + //һΪ˵ûпԷ + if(node->nxt == NULL){ + printf("ʧܣû㹻Ŀռ䣡\n"); + break; + } else{ + node = node->nxt; + } + + } + //ѰѵĿп + while(node != NULL){ + if(node->state == F && node->size >= size && node->size < q->size){ //еĿռ + q = node; + } + node = node->nxt; + } + if(q->size < size){ //ѿпĴССС + //ʣĿռ + struct subAreaNode *p = (struct subAreaNode*)malloc(sizeof(struct subAreaNode)); + p->addr = q->addr + size; + p->size = q->size - size; + p->state = F; + p->taskId = -1; + //Ŀռ + q->taskId = taskId; + q->size = size; + q->state = W; + //ıڵ + p->nxt = q->nxt; + q->nxt = p; + }else if(q->size == size){ //ѿпռС + q->taskId = taskId; + q->size = size; + q->state = W; + } +} + + +int freeSubArea(int taskId) // ڴ +{ +int flag = 0; +subAreaNode *p = subHead.nxt, *pp; +while (p != NULL) +{ +if (p->state == W && p->taskId == taskId) +{ +flag = 1; +if ((p->pre != &subHead && p->pre->state == F) +&& (p->nxt != NULL && p->nxt->state == F)) +{ +// 1ϲ +// Ⱥϲ +pp = p; +p = p->pre; +p->size += pp->size; +p->nxt = pp->nxt; +pp->nxt->pre = p; +free(pp); +// ϲ +pp = p->nxt; +p->size += pp->size; +p->nxt = pp->nxt; +if (pp->nxt != NULL) +{ +pp->nxt->pre = p; +} +free(pp); +} +else if ((p->pre == &subHead || p->pre->state == W) +&& (p->nxt != NULL && p->nxt->state == F)) +{ +// 2ֻϲķ +pp = p->nxt; +p->size += pp->size; +p->state = F; +p->taskId = -1; +p->nxt = pp->nxt; +if (pp->nxt != NULL) +{ +pp->nxt->pre = p; +} +free(pp); +} +else if ((p->pre != &subHead && p->pre->state == F) +&& (p->nxt == NULL || p->nxt->state == W)) +{ +// 3ֻϲķ +pp = p; +p = p->pre; +p->size += pp->size; +p->nxt = pp->nxt; +if (pp->nxt != NULL) +{ +pp->nxt->pre = p; +} +free(pp); +} +else +{ +// 4·úϲ +p->state = F; +p->taskId = -1; +} +} +p = p->nxt; +} +if (flag == 1) +{ +// ճɹ +printf("ڴճɹ...\n"); +return 1; +} +else +{ +// ҲĿҵʧ +printf("ҲĿҵڴʧ...\n"); +return 0; +} +} + + + + +// ʾз +void showSubArea() +{ + printf("\n"); + printf(" ǰڴ£ \n"); + printf(" W:״̬ F:״̬ \n"); + printf("___________________________________________\n"); + printf("| ʼַ | ռС | ״̬ | ҵ |\n"); + subAreaNode *p = subHead.nxt; + while (p != NULL) + { + printf("___________________________________________\n"); + + printf(" %3d k |", p->addr); + printf(" %3d k |", p->size); + printf(" %s |", p->state == F ? "F" : "W"); + if (p->taskId > 0) + { + printf(" %2d ", p->taskId); + } + else + { + printf(" "); + } + printf("\n"); + p = p->nxt; + } + printf("___________________________________________\n"); +} + +void sort() //յʱԽ̽ +{ + for(int i=0;ipcb[j].arrive_time) + { + temp=pcb[i]; + pcb[i]=pcb[j]; + pcb[j]=temp; + } + } + } +} + +void output(int j) +{ + int i; + cout<<"Ϣ(FCFS㷨):"<pcb[i-1].finish_time) + { + pcb[i].finish_time=pcb[i].arrive_time+pcb[i].run_time; + pcb[i].zhouzhuan_time=pcb[i].run_time; + pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time; + } + else + { + pcb[i].finish_time=pcb[i-1].finish_time+pcb[i].run_time; + pcb[i].zhouzhuan_time=pcb[i].finish_time-pcb[i].arrive_time; + pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time; + } + + } + + for(i=0;i>>>>>>>>>>>>>>>>>̬㷨ģ֮/Ӧ㷨<<<<<<<<<<<<<<<<<<\n") ; + printf(" ____________________________________\n"); + printf(" | 1: Ӧ㷨 2: Ӧ㷨 |\n"); + printf(" |___________________________________|\n"); + printf("ѡ㷨:"); + scanf("%d",&select); + + // ģ⶯̬㷨 + + for(int i=0;i +//#include +//#include +//using namespace std; +//int main() +//{ +// +// double F,C; +// cin>>F; +// C=(F-32)*5/9; +// cout < +#define n 5 +struct JCB +{ + int name; // + int atime; //̵ʱ + int runtime; //ʱ + int ftime; //ʱ + int total; //תʱ + float welght; //Ȩתʱ䣨תϵ + int arun; //̵ + +}f[n]; + + +//ʼִʱ䣬ҵʱ䣬תʱʹȨתʱ䣨תϵ +int main() +{ + int amount; + int i,j,l,k,h; + + struct JCB f[n]; + + printf("̸(2-24):\n"); + scanf("%d",&amount); + for(i=0;i +using namespace std; +#define N 3 +struct PCB +{ + char name[8]; + int arrive_time; + int run_time; + int finish_time; + int zhouzhuan_time; + float daiquan_time; +}; + +float sumzhouzhuantime,sumdaiquanzhouzhuantime; +struct PCB pcb[N],temp; + +void input(); // +void sort(); //Ľ̰ʱִ +void output(); //㷨ʱ + +int main() +{ + input(); + sort( ); + output(); +} + +void input() +{ + int i; + cout<<"--------------------------------------"<pcb[j].arrive_time) + { + temp=pcb[i]; + pcb[i]=pcb[j]; + pcb[j]=temp; + } + } + } +} + +void output() +{ + int i; + cout<<"FCFS㷨:"<pcb[i-1].finish_time) + { + pcb[i].finish_time=pcb[i].arrive_time+pcb[i].run_time; + pcb[i].zhouzhuan_time=pcb[i].run_time; + pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time; + } + else + { + pcb[i].finish_time=pcb[i-1].finish_time+pcb[i].run_time; + pcb[i].zhouzhuan_time=pcb[i].finish_time-pcb[i].arrive_time; + pcb[i].daiquan_time=(float)pcb[i].zhouzhuan_time/pcb[i].run_time; + } + + } + + for(i=0;i +#include + +enum STATE +{ +Free, +Busy +}; + +struct subAreaNode +{ +int addr; // ʼַ +int size; // С +int taskId; // ҵ +STATE state; // ״̬ +subAreaNode *pre; // ǰָ +subAreaNode *nxt; // ָ +}subHead; + +// ʼз +void intSubArea() +{ +// ʼڴ +subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode)); +// ׸ֵ +fir->addr = 0; +fir->size = 1000; // ڴʼС +fir->state = Free; +fir->taskId = -1; +fir->pre = &subHead; +fir->nxt = NULL; +// ʼͷϢ +subHead.pre = NULL; +subHead.nxt = fir; +} + +// ״Ӧ㷨 +int firstFit(int taskId, int size) +{ +subAreaNode *p = subHead.nxt; +while (p != NULL) +{ +if (p->state == Free && p->size >= size) +{ +// ҵҪĿз +if (p->size - size <= 10) +{ +// +p->state = Busy; +p->taskId = taskId; +} +else { +// СΪsize +subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode)); +node->addr = p->addr + size; +node->size = p->size - size; +node->state = Free; +node->taskId = -1; +// ޸ķڵָ +node->pre = p; +node->nxt = p->nxt; +if (p->nxt != NULL) +{ +p->nxt->pre = node; +} +p->nxt = node; +// +p->size = size; +p->state = Busy; +p->taskId = taskId; +} +printf("ڴɹ\n"); +return 1; +} +p = p->nxt; +} +printf("Ҳʵڴʧ...\n"); +return 0; +} + +// Ӧ㷨 +int bestFit(int taskId, int size) +{ +subAreaNode *tar = NULL; +int tarSize = 1000 + 1; +subAreaNode *p = subHead.nxt; +while (p != NULL) +{ +// Ѱѿ +if (p->state == Free && p->size >= size && p->size < tarSize) { +tar = p; +tarSize = p->size; +} +p = p->nxt; +} +if (tar != NULL) { +// ҵҪĿз +if (tar->size - size <= 10) +{ +// +tar->state = Busy; +tar->taskId = taskId; +} +else +{ +// СΪsize +subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode)); +node->addr = tar->addr + size; +node->size = tar->size - size; +node->state = Free; +node->taskId = -1; +// ޸ķڵָ +node->pre = tar; +node->nxt = tar->nxt; +if (tar->nxt != NULL) +{ +tar->nxt->pre = node; +} +tar->nxt = node; +// +tar->size = size; +tar->state = Busy; +tar->taskId = taskId; +} +printf("ڴɹ\n"); +return 1; +} +else +{ +printf("Ҳʵڴʧ...\n"); +return 0; +} +} + +int freeSubArea(int taskId) // ڴ +{ +int flag = 0; +subAreaNode *p = subHead.nxt, *pp; +while (p != NULL) +{ +if (p->state == Busy && p->taskId == taskId) +{ +flag = 1; +if ((p->pre != &subHead && p->pre->state == Free) +&& (p->nxt != NULL && p->nxt->state == Free)) +{ +// 1ϲ +// Ⱥϲ +pp = p; +p = p->pre; +p->size += pp->size; +p->nxt = pp->nxt; +pp->nxt->pre = p; +free(pp); +// ϲ +pp = p->nxt; +p->size += pp->size; +p->nxt = pp->nxt; +if (pp->nxt != NULL) +{ +pp->nxt->pre = p; +} +free(pp); +} +else if ((p->pre == &subHead || p->pre->state == Busy) +&& (p->nxt != NULL && p->nxt->state == Free)) +{ +// 2ֻϲķ +pp = p->nxt; +p->size += pp->size; +p->state = Free; +p->taskId = -1; +p->nxt = pp->nxt; +if (pp->nxt != NULL) +{ +pp->nxt->pre = p; +} +free(pp); +} +else if ((p->pre != &subHead && p->pre->state == Free) +&& (p->nxt == NULL || p->nxt->state == Busy)) +{ +// 3ֻϲķ +pp = p; +p = p->pre; +p->size += pp->size; +p->nxt = pp->nxt; +if (pp->nxt != NULL) +{ +pp->nxt->pre = p; +} +free(pp); +} +else +{ +// 4·úϲ +p->state = Free; +p->taskId = -1; +} +} +p = p->nxt; +} +if (flag == 1) +{ +// ճɹ +printf("ڴճɹ...\n"); +return 1; +} +else +{ +// ҲĿҵʧ +printf("ҲĿҵڴʧ...\n"); +return 0; +} +} + +// ʾз +void showSubArea() +{ +printf("*********************************************\n"); +printf("** ǰڴ£ **\n"); +printf("*********************************************\n"); +printf("** ʼַ | ռС | ״̬ | ҵ **\n"); +subAreaNode *p = subHead.nxt; +while (p != NULL) +{ +printf("**-----------------------------------------**\n"); +printf("**"); +printf(" %3d k |", p->addr); +printf(" %3d k |", p->size); +printf(" %s |", p->state == Free ? "Free" : "Busy"); +if (p->taskId > 0) +{ +printf(" %2d ", p->taskId); +} +else +{ +printf(" "); +} +printf("**\n"); +p = p->nxt; +} +printf("*********************************************\n"); +} + +int main() +{ +int option, ope, taskId, size; +// ʼз +intSubArea(); +// ѡ㷨 +while (1) +{ +printf("\n\n"); +printf("\t****************ѡҪģķ㷨******************\n"); +printf("\n\n"); +printf("\t \t 0 ״Ӧ㷨 \n"); +printf("\n\n"); +printf("\t \t 1 Ӧ㷨 \n"); +printf("\n\n"); +printf("\t\t\t\tѡ:"); +scanf("%d", &option); +if (option == 0) +{ +printf("ѡ״Ӧ㷨㷨ģ\n"); +break; +} +else if (option == 1) +{ +printf("ѡӦ㷨㷨ģ\n"); +break; +} +else +{ +printf(" 0/1\n\n"); +} +} +// ģ⶯̬㷨 +while (1) +{ +printf("\n"); +printf("*********************************************\n"); +printf("** 1: ڴ 2: ڴ 0: ˳ **\n"); +printf("*********************************************\n"); +scanf("%d", &ope); +if (ope == 0) break; +if (ope == 1) { +// ģڴ +printf("ҵţ "); +scanf("%d", &taskId); +printf("ҪڴС(KB) "); +scanf("%d", &size); +if (size <= 0) +{ +printf("󣺷ڴСΪֵ\n"); +continue; +} +// ÷㷨 +if (option == 0) +{ +firstFit(taskId, size); +} +else +{ +bestFit(taskId, size); +} +// ʾз +showSubArea(); +} +else if (ope == 2) +{ +// ģڴ +printf("Ҫյҵţ "); +scanf("%d", &taskId); +freeSubArea(taskId); +// ʾз +showSubArea(); +} +else +{ +printf(" 0/1/2\n"); +} +} +printf("㷨ģ\n"); +system("pause"); +return 0; +} + + diff --git a/计算机组成原理实验代码/Fibonacci.cpp b/计算机组成原理实验代码/Fibonacci.cpp new file mode 100644 index 0000000..3c77240 --- /dev/null +++ b/计算机组成原理实验代码/Fibonacci.cpp @@ -0,0 +1,69 @@ +/*------------------------------------------------ +ơ +-------------------------------------------------- +/* дfunĹǣFibonacciдsСһɺءFibonacciF(n)ĶΪ + F(0)=0F(1)=1 + F(n)=F(n-1)+F(n-2) + 磺s=1000ʱֵΪ1597 + ע⣺Դļprog.cС + ĶmainеκݣںfunĻд䡣 +*********Begin******************** End **********ɾ +*/ + + + +#include +#include +#include +#include +int fun(int s) +{ + /********** Begin **********/ +int f1,f2,f; + f1=0; + f2=1; + do + { + f=f1+f2; + f1=f2; + f2=f; + } + while(f2<=s); + +return f2; + + + + + + /********** End ***********/ + +} + + +void NONO ( ) +{/* ڴļݣúݣرļ */ + FILE *fp, *wf ; + int i, n, s ; + + fp = fopen("bc06.in","r") ; + if(fp == NULL) { + printf("ļbc06.in!") ; + } + wf = fopen("bc06.out","w") ; + for(i = 0 ; i < 10 ; i++) { + fscanf(fp, "%d", &n) ; + s = fun(n) ; + fprintf(wf, "%d\n", s) ; + } + fclose(fp) ; + fclose(wf) ; +} + +main() /**/ +{ int n; + system("cls"); + n=1000; + printf("n=%d,f=%d\n",n,fun(n)); + NONO(); +} diff --git a/计算机组成原理实验代码/First_Fit_1.cpp b/计算机组成原理实验代码/First_Fit_1.cpp new file mode 100644 index 0000000..d76f88a --- /dev/null +++ b/计算机组成原理实验代码/First_Fit_1.cpp @@ -0,0 +1,131 @@ + +#include +#include +#include +#include +#include +using namespace std; +struct FF { + char name[10]; + float address;//ʼַ + float AFFival_time;//û + float Service_hours;//û + float Process_size;//̴С + float size;//ڴһһֵ + float max_size;//ڴֵ + float state;//0Ϊ 1ΪУΪʲôbool ΪϮֻ60 +}; +void print_Memory(FF *p,int N);//ڴռӡ +void recovery(FF *p,int N);//պչ +void input(FF *p, int N);//뺯 +void run(FF *p,int N);//ʽ +void detelex(FF *p,int N);//̺ +void input(FF *p, int N) { + int i; + int x=0; + printf("ϵͳڴС"); + scanf("%f",&p[0].max_size); + printf("\n"); + for(i = 0; i <= N - 1; i++) { + printf("%d̵,ʱ,ʱ,̴С(磺1 2 1 5)\n", i+1); + scanf("%s %f %f %f", p[i].name, &p[i].AFFival_time, &p[i].Service_hours,&p[i].Process_size); + } +} + +void print(FF *p,int N){ + for(int i=0;i<=N;i++){ + printf(p[i].name, &p[i].AFFival_time, &p[i].Service_hours,&p[i].Process_size); + } +} +void distribution(FF *p,int N) { + int i; + p[0].size=p[0].max_size; + + for (i=0; i=p[i].Process_size) { + p[0].size=p[0].size-p[i].Process_size; + p[i+1].state=1; + } else { + printf("%d̽ȥ",i+1); + printf("лл㣬ڴ治\n"); + p[i+1].size=p[0].size; + p[i+1].state=0; + print_Memory(p, N); + } + } +} +void recovery(FF *p,int N) {//һٷֻϿ + int i; + for(i=1; i>xx; + if(xx==1) { + detelex(p, N); + print(p,N); + } else if(xx==2) { + recovery(p, N); + } else if(xx==3) { + print_Memory(p, N); + } + } +} +void detelex(FF *p,int N) { + float yy; + printf("\nɾ̵ʼַ\n"); + scanf("%f",&yy); + for(int i =0;i +#include + +enum STATE { + F, W +}; + +struct subAreaNode { + int addr; // ʼַ + int size; // С + int taskId; // ҵ + STATE state; // ״̬ + subAreaNode *pre; // ǰָ + subAreaNode *nxt; // ָ +} subHead; + + +// ʼз +void intSubArea() { +// ʼڴ + subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode)); +// ׸ֵ + fir->addr = 0; + fir->size = 95; // ڴʼС + fir->state = F; + fir->taskId = -1; + fir->pre = &subHead; + fir->nxt = NULL; +// ʼͷϢ + subHead.pre = NULL; + subHead.nxt = fir; +} + +//// ״Ӧ㷨 +//int firstFit(int taskId, int size) +//{ +//subAreaNode *p = subHead.nxt; +//while (p != NULL) +//{ +//if (p->state == F && p->size >= size) +//{ +//// ҵҪĿз +//if (p->size - size <= 10) +//{ +//// +//p->state = W; +//p->taskId = taskId; +//} +//else { +//// СΪsize +//subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode)); +//node->addr = p->addr + size; +//node->size = p->size - size; +//node->state = F; +//node->taskId = -1; +//// ޸ķڵָ +//node->pre = p; +//node->nxt = p->nxt; +//if (p->nxt != NULL) +//{ +//p->nxt->pre = node; +//} +//p->nxt = node; +//// +//p->size = size; +//p->state = W; +//p->taskId = taskId; +//} +//printf("ڴɹ\n"); +//return 1; +//} +//p = p->nxt; +//} +//printf("Ҳʵڴʧ...\n"); +//return 0; +//} + + +//struct subAreaNode *node + +void BestFit(int taskId, int size) { //Ӧ + //ѿָ + struct subAreaNode *q = NULL; + subAreaNode *node = subHead.nxt; + //ҵһĿп + while (node != NULL) { + if (node->state == F && node->size >= size) { + q = node; + break; + } + //һΪ˵ûпԷ + if (node->nxt == NULL) { + printf("ʧܣû㹻Ŀռ䣡\n"); + break; + } else { + node = node->nxt; + } + + } + //ѰѵĿп + while (node != NULL) { + if (node->state == F && node->size >= size && node->size < q->size) { //еĿռ + q = node; + } + node = node->nxt; + } + if (q->size > size) { //ѿпĴСС + //ʣĿռ + struct subAreaNode *p = (struct subAreaNode*)malloc(sizeof(struct subAreaNode)); + p->addr = q->addr + size; + p->size = q->size - size; + p->state = F; + p->taskId = -1; + //Ŀռ + q->taskId = taskId; + q->size = size; + q->state = W; + //ıڵ + p->nxt = q->nxt; + q->nxt = p; + } else if (q->size == size) { //ѿпռС + q->taskId = taskId; + q->size = size; + q->state = W; + } +} + + + + + + + +int freeSubArea(int taskId) { // ڴ + int flag = 0; + subAreaNode *p = subHead.nxt, *pp; + while (p != NULL) { + if (p->state == W && p->taskId == taskId) { + flag = 1; + if ((p->pre != &subHead && p->pre->state == F) + && (p->nxt != NULL && p->nxt->state == F)) { +// 1ϲ +// Ⱥϲ + pp = p; + p = p->pre; + p->size += pp->size; + p->nxt = pp->nxt; + pp->nxt->pre = p; + free(pp); +// ϲ + pp = p->nxt; + p->size += pp->size; + p->nxt = pp->nxt; + if (pp->nxt != NULL) { + pp->nxt->pre = p; + } + free(pp); + } else if ((p->pre == &subHead || p->pre->state == W) + && (p->nxt != NULL && p->nxt->state == F)) { +// 2ֻϲķ + pp = p->nxt; + p->size += pp->size; + p->state = F; + p->taskId = -1; + p->nxt = pp->nxt; + if (pp->nxt != NULL) { + pp->nxt->pre = p; + } + free(pp); + } else if ((p->pre != &subHead && p->pre->state == F) + && (p->nxt == NULL || p->nxt->state == W)) { +// 3ֻϲķ + pp = p; + p = p->pre; + p->size += pp->size; + p->nxt = pp->nxt; + if (pp->nxt != NULL) { + pp->nxt->pre = p; + } + free(pp); + } else { +// 4·úϲ + p->state = F; + p->taskId = -1; + } + } + p = p->nxt; + } + if (flag == 1) { +// ճɹ + printf("ڴճɹ...\n"); + return 1; + } else { +// ҲĿҵʧ + printf("ҲĿҵڴʧ...\n"); + return 0; + } +} + +// ʾз +void showSubArea() { + printf("\n"); + printf(" ǰڴ£ \n"); + printf(" W:״̬ F:״̬ \n"); + printf("___________________________________________\n"); + printf("| ʼַ | ռС | ״̬ | ҵ |\n"); + subAreaNode *p = subHead.nxt; + while (p != NULL) { + printf("___________________________________________\n"); + + printf(" %3d k |", p->addr); + printf(" %3d k |", p->size); + printf(" %s |", p->state == F ? "F" : "W"); + if (p->taskId > 0) { + printf(" %2d ", p->taskId); + } else { + printf(" "); + } + printf("\n"); + p = p->nxt; + } + printf("___________________________________________\n"); +} + +int main() { + int ope, taskId, size; + char name; + int ArriveTime; + int ServerTime; +// ʼз + intSubArea(); + +// ģ⶯̬㷨 + while (1) { + printf("ĬFF(״Ӧ㷨)\n"); + printf("_________________________________________\n"); + printf("| 1: ڴ 2: ڴ 0: ˳ |\n"); + printf("|________________________________________|\n"); + scanf("%d", &ope); + if (ope == 0) break; + if (ope == 1) { +// ģڴ + printf("ҵţ "); + scanf("%d", &taskId); + printf("ҵ "); + scanf("%s", &name); + printf("뵽ʱ䣺 "); + scanf("%d", &ArriveTime); + printf("ʱ䣺 "); + scanf("%d", &ServerTime); + printf("ҪڴС(KB) "); + scanf("%d", &size); + if (size <= 0) { + printf("󣺷ڴСΪֵ\n"); + continue; + } +// ÷㷨 + +//firstFit(taskId, size); + BestFit(taskId, size); + +// ʾз + showSubArea(); + } else if (ope == 2) { +// ģڴ + printf("Ҫյҵţ "); + scanf("%d", &taskId); + freeSubArea(taskId); +// ʾз + showSubArea(); + } else { + printf(" 0/1/2\n"); + } + } + printf("㷨ģ\n"); + system("pause"); + return 0; +} diff --git a/计算机组成原理实验代码/OPT.cpp b/计算机组成原理实验代码/OPT.cpp new file mode 100644 index 0000000..ba978e6 --- /dev/null +++ b/计算机组成原理实验代码/OPT.cpp @@ -0,0 +1,108 @@ +#include +#include +using namespace std; +int number=0; +int Pyblock=0; +int opt(int a[]) +{ + int i, j, zero = 0, one = 0, two = 0, q = 0; + int b[Pyblock]; + for (i = 0; i < Pyblock; i++) + { + b[i] =-1; //Ϊ-1 + } + for (i = 0; i < number; i++) + { + if (i < 3) + { + q++; + for (j = 0; j < Pyblock; j++) + { + if (b[j] == -1) + { + b[j] = a[i]; + break; + } + } + } + else + { + if (b[0] != a[i]) + { + if (b[1] != a[i]) + { + if(b[2] != a[i]){ + q++; + for (int t = i + 1; t < number; t++) + { + if (b[0] == a[t]) + zero = 1; + else if (b[1] == a[t]) + one = 1; + else if (b[2] == a[t]) + two = 1; + if (zero == 1 && one == 1 && two == 0) + { + b[2] = a[i]; + break; + } + else if (zero == 1 && one == 0 && two == 1) + { + b[1] = a[i]; + break; + } + else if (zero == 0 && one == 1 && two == 1) + { + b[0] = a[i]; + break; + } + } + } + } + } + } + for (int f = 0; f < Pyblock; f++) + { + printf("%d\t", b[f]); + } + printf("\n"); + zero = 0; + one = 0; + two = 0; + } + return q; +} + +int main() +{ + int o; + + while(1) + { + printf("ĸ:\n"); + scanf("%d",&Pyblock); + printf("\n"); + break; + } + + while(1) + { + printf("ҳи:\n"); + scanf("%d",&number); + printf("\n"); + break; + } + int a[number]; + printf("ҳ:\n"); + for (int i = 0; i < number; i++) + { + cin>>a[i]; + } + printf("optҳû㷨\n"); + o = opt(a); + printf("ȱҳ%dΣû%d, ȱҳ:%.2f%% .\n\n\n", o, o - Pyblock,((double)o/number)*100); + return 0; +} + +//4 3 2 1 4 3 5 4 3 2 1 5 + diff --git a/计算机组成原理实验代码/OPT2.cpp b/计算机组成原理实验代码/OPT2.cpp new file mode 100644 index 0000000..ebdd828 --- /dev/null +++ b/计算机组成原理实验代码/OPT2.cpp @@ -0,0 +1,124 @@ +#include +int block_num; // +int page_num; //Ҫʵҳи +int page[100]; //Ҫʵҳ +int memory[10]; //еҳ +int table[100][10]; //ʾ +int reg[10]; //Ĵ--¼ҳķʱ +char Que[100]; //飬¼Ƿȱҳ + +int main() +{ + int count=0; //¼ȱҳ + int i,j,k; + while(1) + { + printf("ĸ(M<=10):\n"); + scanf("%d",&block_num); + printf("\n"); + break; + } + + while(1) + { + printf("Ҫʵҳи(P<=100):\n"); + scanf("%d",&page_num); + printf("\n"); + break; + } + + printf("ҳ:\n"); + for(i=0;i +#define number 11 +#define block 3 +#include +using namespace std; +int opt(int a[]) +{ + int i, j, zero = 0, one = 0, two = 0, q = 0; + int b[block]; + for (i = 0; i < block; i++) + { + b[i] =-1; //Ϊ-1 + } + for (i = 0; i < number; i++) + { + if (i < 3) + { +// printf("ȱҳ%d\n", a[i]); + q++; + for (j = 0; j < block; j++) + { + if (b[j] == -1) + { + b[j] = a[i]; + break; + } + } + } + else + { + if (b[0] != a[i] && b[1] != a[i] && b[2] != a[i]) + { +// printf("ȱҳ%d\n", a[i]); + q++; + for (int t = i + 1; t < number; t++) + { + if (b[0] == a[t]) + zero = 1; + else if (b[1] == a[t]) + one = 1; + else if (b[2] == a[t]) + two = 1; + if (zero == 1 && one == 1 && two == 0) + { + b[2] = a[i]; + break; + } + else if (zero == 1 && one == 0 && two == 1) + { + b[1] = a[i]; + break; + } + else if (zero == 0 && one == 1 && two == 1) + { + b[0] = a[i]; + break; + } + } + } +// else +// printf("%dȱҳ\n", a[i]); + } + for (int f = 0; f < block; f++) + { + printf("%d\t", b[f]); + } + printf("\n"); + zero = 0; + one = 0; + two = 0; + } + return q; +} + +int main() +{ + int i, o, l=0,f=0; + int a[number]; + printf(":\n"); + for (i = 0; i < number; i++) + { + cin>>a[i]; + } + printf("optҳû㷨\n"); + o = opt(a); + printf("ȱҳ%dΣû%dΡ\n\n\n", o, o - block); + return 0; +} diff --git a/计算机组成原理实验代码/RR.cpp b/计算机组成原理实验代码/RR.cpp new file mode 100644 index 0000000..c712211 --- /dev/null +++ b/计算机组成原理实验代码/RR.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +using namespace std; + +typedef struct +{ + char name; + int ArrivalTime; + int ServiceTime; + int FinishedTime; + int WholeTime; + double WeightWholeTime; +}RR; + +static queueRRqueue; //һ +static double AverageWT =0,AverageWWT=0; +static int q; //ʱƬ +static int n; //̸ +static RR RRarray[100]; //̽ṹ + +void Input() +{ + + + //ûģʽ + cout<<"________________________________________________________"<>n; + cout<<"ʱƬ "; + cin>>q; + + cout<<":"<>RRarray[i].name; + } + + cout<<"̵ĵʱ:"<>RRarray[i].ArrivalTime; + } + + cout<<"̵ķʱ:"<>RRarray[i].ServiceTime; + } +} + +void RRAlgorithm() +{ + char processMoment[100]; //洢ÿʱƬpӦĽ + RRqueue.push(RRarray[0]); + + int processMomentPoint = 0; + int CurrentTime=0; + int tempTime; + int i=1; //ָδĽ̵± + int finalProcessNumber = 0; //ִRR㷨󣬽̵ĸ + int processTime[50]; + + //CurrentTimeijʼ + if (RRarray[0].ServiceTime>=q) + { + CurrentTime = q; + } + else + { + CurrentTime = RRarray[0].ServiceTime; + } + + while(!RRqueue.empty()) + { + for (int j=i;j= RRarray[j].ArrivalTime) + { + RRqueue.push(RRarray[j]); + i++; + } + } + if (RRqueue.front().ServiceTime +using namespace std; +const int N=10; +double daoda[N];//洢ʱ +double fuwu[N]; //洢ʱ +double fuwu_[N];//ʱĸ +double wancheng[N]={0};//洢ʱ ,ʱȶֵΪ0 +double zhouzhuan[N];//洢תʱ +double daiquanz[N];//洢Ȩתʱ +string name[N];//ÿ̵ +int main() +{ + //RR ʱƬת㷨 + cout<<""<>n; + cout<<""<>name[i];//̵ A B C ֮ + cin>>daoda[i]>>fuwu[i];//ʼ 뵽ʱʱ + fuwu_[i]=fuwu[i];// + } + double q; + cout<<"ʱƬq:"<>q; + for(int i=0;i +#include + +int main(void) { + // 初始化 + const int screenWidth = 640; + const int screenHeight = 480; + + //启用反锯齿 + SetConfigFlags(FLAG_MSAA_4X_HINT); + + //初始化窗口 + InitWindow(screenWidth, screenHeight, "Sample"); + + // 初始化摄像机 + Camera3D camera = { 0 }; + camera.position = (Vector3) { + 40.0f, 20.0f, 0.0f + }; //相机所在位置{x,y,z} + camera.target = (Vector3) { + 0.0f, 0.0f, 0.0f + }; //相机朝向位置{x,y,z} + camera.up = (Vector3) { + 0.0f, 1.0f, 0.0f + }; //相机正上方朝向矢量 + camera.fovy = 70.0f; //相机视野宽度 + camera.projection = CAMERA_PERSPECTIVE; //采用透视投影 + + //设置动画帧率(刷新率,fps)为30帧/秒 + SetTargetFPS(30); + //-------------------------------------------------------------------------------------- + int angle = 0; //多边形旋转角度 + + // 主游戏循环 + while (!WindowShouldClose()) { //关闭窗口或者按ESC键时返回true + + double time = GetTime(); + // 每次循环更新一帧 + // 摄像机围绕y轴转动 + double cameraTime = time * 0.3; + camera.position.x = (float)cos(cameraTime) * 40.0f; + camera.position.z = (float)sin(cameraTime) * 40.0f; + + BeginDrawing(); + + ClearBackground(WHITE); + //以摄像机视角绘制3d内容 + BeginMode3D(camera); + DrawCube(Vector3{0, 0, 0}, 10, 10, 10, VIOLET); + DrawCubeWires(Vector3{0, 0, 0}, 10, 10, 10, BLACK); + EndMode3D(); + EndDrawing(); + } + + //关闭窗口 + CloseWindow(); + + return 0; +} +