#include <stdioh>
#include <stdlibh>
#include <timeh>
const int TOTAL = 52;
const int PLAYERS = 4;
const int MAXSIZE = TOTAL/PLAYERS;
const int TYPES = 4;
typedef struct card {
int type; // type 0:梅花,1:方片,2:红桃,3:黑桃
int point; // point = 2 -- 14
}CARD;
void sort(int a[][TYPES][MAXSIZE]) {
int i,j,k,m,n,t,size;
for(m = 0; m < PLAYERS; ++m) {
for(n = 0; n < TYPES; ++n) {
for(size = 0; a[m][n][size]; ++size);
for(i = 0; i < size - 1; ++i) {
k = i;
for(j = i + 1; j < size; ++j) {
if(a[m][n][k] < a[m][n][j]) k = j;
}
if(k != i) {
t = a[m][n][k];
a[m][n][k] = a[m][n][i];
a[m][n][i] = t;
}
}
}
}
}
void show(int a[][TYPES][MAXSIZE]) {
int i,j,k;
char type[TYPES] = {'\5','\4','\3','\6'};
char player[PLAYERS][6] = {"EAST","SOUTH","WEST","NORTH"};
char point[] = "JQKA";
for(k = 0; k < PLAYERS; ++k) {
printf("<%s>\n",player[k]);
for(i = 0; i < TYPES; ++i) {
printf(" %c ",type[i]);
for(j = 0; j < MAXSIZE && a[k][i][j];++j) {
if(a[k][i][j] < 11) printf("%d ",a[k][i][j]);
else printf("%c ",point[a[k][i][j] - 11]);
}
printf("\n");
}
printf("\n");
}
}
int Has(int a[][TYPES][MAXSIZE],CARD Card) {
int i,j;
for(i = 0; i < PLAYERS; ++i) {
for(j = 0; j < MAXSIZE && a[i][Cardtype][j]; ++j)
if(a[i][Cardtype][j] == Cardpoint)
return 1;
}
return 0;
}
int isFull(int a[][MAXSIZE]) {
int n = 0,i,j;
for(i = 0; i < TYPES; ++i) {
for(j = 0; a[i][j] && j < MAXSIZE; ++i)
++n;
}
return n == MAXSIZE;
}
int addCard(int a[PLAYERS][TYPES][MAXSIZE],CARD Card) {
int i = 0;
if(Has(a,Card)) return 0;
int who = rand()%PLAYERS;
while(isFull(a[who])) who = (who + 1)%PLAYERS;
while(a[who][Cardtype][i]) ++i;
a[who][Cardtype][i] = Cardpoint;
return 1;
}
int main() {
int i,playingCard[PLAYERS][4][MAXSIZE] = {0};
CARD t;
srand((unsigned)time(NULL));
for(i = 0; i < TOTAL; ++i) {
ttype = rand()%4;
tpoint = rand()%13 + 2;
if(addCard(playingCard,t) == 0) --i;
}
sort(playingCard);
show(playingCard);
return 0;
}
这几个题是我这学期的 *** 作系统实验里面,变了两个月才弄出来的,现在跟你分享一下(运行过了 没问题的)
先来先服务:c语言编写的
#include <stdioh>
#include <malloch>
typedef struct jinchen //定义结构体
{
char name[5];
int tijiaoshijian;
int reachtime;
int runtime;
int beirun;
int accomplishtime;
char state;
int flag;
struct jinchen next;
}PCB;
PCB finish,ready;//定义队列 一个完成一个就绪
int time=0;
int t=0;
int num;
void InitPcb() //进程初始化
{
int i,j=0;
PCB p,q,l,m,k,n;
printf("请输入进程个数:");
scanf("%d",&num);
ready=(PCB )malloc(sizeof(PCB));
ready->next=NULL;
finish=(PCB )malloc(sizeof(PCB));
finish->next=NULL;
l=(PCB )malloc(sizeof(PCB));
l->next=NULL;
p=l;
for(i=0;i<num;i++)
{
q=(PCB )malloc(sizeof(PCB));
printf("\n进程号 %d:\n",i);
printf("请输入进程名:");
scanf("%s",q->name);
q->reachtime=0;
printf("请输入提交时间:");
scanf("%d",&(q->tijiaoshijian));
printf("请输入运行时间:");
scanf("%d",&(q->runtime));
q->beirun=q->runtime;
q->state='R';
q->flag=0;
if(i!=0) //链接就绪进程
{
//q->next=NULL;
q->next=p->next;
p->next=q;
p=p->next;
}
else //第一个进程插入就绪队列
{
p->next=q;
p=p->next;
p->next=NULL;
}
}
p=l->next;
k=ready;
for(i=0;i<num;i++) //按照提交时间排序
{
q=l->next;
t=1000;
while(q!=NULL)
{
if(q->tijiaoshijian<t&&q->flag==0)
{
t=q->tijiaoshijian;
m=(PCB )malloc(sizeof(PCB));
m->next=NULL;
m->accomplishtime=q->accomplishtime;
m->beirun=q->beirun;
m->flag=q->flag;
for(j=0;j<5;j++)
m->name[j]=q->name[j];
m->reachtime=q->reachtime;
m->runtime=q->runtime;
m->state=q->state;
m->tijiaoshijian=q->tijiaoshijian;
n=q;
}
q=q->next;
}
p=p->next;
n->flag=1;
m->flag=1;
k->next=m;
k=k->next;
}
k->next=NULL;
}
void display() //函数作用:计算和显示相关输出
{
PCB p;
int m,n=0,k=0,l;
p=finish->next;
while(p!=NULL)
{
printf("进程名 :%s",p->name);
m=p->accomplishtime-p->tijiaoshijian;
printf("周转时间:%d",m);
l=m/(p->beirun);
printf("带权周转时间:%d",l);
printf("\n");
n=m+n;
k=l+k;
p=p->next;
}
printf("平均周转时间:%d\n",n/num);
printf("平均带权周转时间:%d\n",k/num);
}
void Use()//进程调用
{
int j;
PCB p=ready->next,k=ready,q,n=finish;
while(k->next!=NULL)
{
p=ready->next;
for(j=0;j<num&&p!=NULL;j++)
{
time++;
//printf("%d\n\n",++t);
if(p->reachtime==0)
p->reachtime=time;
if(p->state!='C')
{
printf("正在运行:%s\n",p->name);
p->runtime--;
if(p->runtime!=0) //进程没有运行完,放入队列最后
{
q=p;
while(q->next!=NULL)
q=q->next;
ready->next=p->next;
q->next=p;
p=ready->next;
q=q->next;
q->next=NULL;
}
else //进程运行完,放入完成队列
{
p->state='C';
printf("%s进程完成\n",p->name);
p->accomplishtime=time;
n->next=p;
n=p;
ready->next=p->next;
p->next=NULL;
}
}
}
}
}
int main()
{
PCB p;
InitPcb();
Use();
display();
p=finish->next;
printf("运行完毕!说明:已运行完成的进程放入完成队列,未运行完成的进程放在队列最后");
}
运行结果见图
按最高优先级算法:C++程序
#include <stdioh>
#include <stdlibh>
#include <conioh>
#define getpch(type) (type)malloc(sizeof(type))
struct pcb{
char name[5];
char state;
int super;
int needtime;
int rtime;
int tijiaotime;
int starttime;
int ftime;
int zztime;
int dzztime;
struct pcb link;
}ready=NULL, p;
typedef struct pcb PCB;
float pzztime=0;
float pdzztime=0;
int n;
int time=20;
void sort()
{
PCB first, second;
int insert=0;
if((ready==NULL)||((p->super)<(ready->super)))
{
p->link=ready;
ready=p;
}
else
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)<(second->super))
{
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
void input()
{
int i;
PCB q;
printf("请输入进程数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\n第%d个进程:\n",i);
p=getpch(struct pcb);
printf("\n 进程名:");
scanf("%s",&p->name);
printf("\n 优先级:");
scanf("%d",&p->super);
printf("\n 运行时间:");
scanf("%d",&p->needtime);
printf("\n提交时间:");
scanf("%d",&p->tijiaotime);
p->rtime=0;
p->state='R';
p->link=NULL;
sort();
}
q=ready;
}
int space()
{
int l=0;
PCB pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
void disp(PCB p2)
{
time = p2->tijiaotime > time p2->tijiaotime:time;
p2->starttime=time;
time+=p2->needtime;
p2->state='R';
p2->ftime=time;
p2->zztime=p2->ftime-p2->tijiaotime;
p2->dzztime=p2->zztime/p2->needtime;
pzztime=p2->zztime+pzztime;
pdzztime=p2->dzztime+pdzztime;
printf("周转时间:%d\n",p->zztime);
printf("带权周转时间为 %d\n",p->dzztime);
}
void destroy()
{
free(p);
}
void running()
{
p->rtime=p->rtime+1;
if(p->rtime==p->needtime)
{ p->state='C';
printf("%s",p->name);
printf("运行完毕\n");
disp(p);
destroy();
}
else
{
(p->super)++;
sort();
printf("正在运行进程%s\n",p->name);
}
}
void main()
{
int len,h=0;
input();
len=space();
while((len!=0)&&(ready!=NULL))
{
h++;
p=ready;
ready=p->link;
p->link=NULL;
running();
}
pzztime=pzztime/n;
pdzztime=pdzztime/n;
printf("\n平均周转时间:%f\n平均带权周转时间为%f\n",pzztime,pdzztime);
}
以上就是关于扑克牌洗牌发牌过程模拟全部的内容,包括:扑克牌洗牌发牌过程模拟、进程调度模拟程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)