围个圈圈走走:c++ 程序问题

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 10:15:39
我的课程设计程序如下

#include<iostream.h>
#include<math.h>
#include<stdio.h>
void InitQueue();
int EmptyQueue();
const int Queuesize=20;
typedef int elemtype;
typedef struct process
{
char *pname;
int clock;
int deadtime;
int counter;
int cycle;
int fcounter;
}process;

typedef struct sqQueue
{
process * data[Queuesize];
int front,rear;
}sqQueue;
process *goodness(sqQueue *ptr,int count)
{
int front,rear,rt=0,k,min,deadtime,counter,cycle;
process *p,*p1;
front=ptr->front;
rear=ptr->rear;
if(front==rear)
return 0;
else
{
min=rt;
p1=ptr->data[front];
k=front;
while(k!=rear)
{
p=ptr->data[k];
deadtime=p->deadtime;
counter=p->counter;
cycle=p->cycle;
rt=cycle*deadtime+deadtime-counter-count;
if(min>rt)
{
min=rt;
p1=p;
}
k=(k+1)%Queuesize;
}
}
return p1;
}

void schedule(sqQueue *ptr)
{
process *next;
process *current;
int count=0;
next=current=goodness(ptr,count);
if(current)
{
if(current->fcounter)
{
while(count<50)
{
current->clock++;
cout<<current->pname;
count++;
current->counter=current->fcounter-count;
if(current->clock==current->fcounter)
{
current->cycle=current->cycle+1;
current->counter=current->fcounter;
current->clock=0;
}
next=goodness(ptr,count);
current=next;
}
}
}
}
void InitQueue(sqQueue *&qu)
{
qu=new sqQueue;
qu->front=qu->rear=0;
}

int EmptyQueue(sqQueue *q)
{
if(q->rear==q->front)
return 1;
else
return 0;
}

void main()
{
sqQueue *ptr1;
int flag=0;
InitQueue(ptr1);
if(EmptyQueue(ptr1))
{
while(flag==0)
{

cout<<"请输入进程名:";
cin>>ptr1->data[ptr1->rear]->pname;
cout<<endl;
cout<<"请分别输入"<<ptr1->data[ptr1->rear]->pname;
cout<<"的执行拍数,时限(周期),进程的剩余时间,进程被执行的次数,以及该进程的执行时间:"<<endl;
cin>>ptr1->data[ptr1->rear]->clock;
cout<<",";
cin>>ptr1->data[ptr1->rear]->deadtime;
cout<<",";
cin>>ptr1->data[ptr1->rear]->counter;
cout<<",";
cin>>ptr1->data[ptr1->rear]->cycle;
cout<<",";
cin>>ptr1->data[ptr1->rear]->fcounter;
cout<<endl;
cout<<"是否结束进程的输入:";
cin>>flag;
ptr1->rear=(ptr1->rear+1)%Queuesize;
}

cout<<"The following is to dispatch the above processes based on the LLF schedule:"<<endl;
schedule(ptr1);
}
}

这个程序在检测时没有错误但是运行时就出错,
我询问了我的同学,说是队列的空间没有分配
他是学C语言的,对于C++的指针不明白,
我想询问一下我的程序怎么才能解决
我这个程序是我们课程设计的内容
最低松弛度实时调度LLF算法
谢谢大家了
最好快点解决
明天就要交了

错误在于
cin>>ptr1->data[ptr1->rear]->pname;
输入语句上,
对指针直接进行 从终端读取是不对的
另外初始化有问题

一下是修改以后可以运行的程序:
#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include <stdlib.h>

void InitQueue();
int EmptyQueue();
const int Queuesize=20;
typedef int elemtype;
typedef struct process
{
char *pname;
int clock;
int deadtime;
int counter;
int cycle;
int fcounter;
}process;

typedef struct sqQueue
{
process * data[Queuesize];
int front,rear;
}sqQueue;
process *goodness(sqQueue *ptr,int count)
{
int front,rear,rt=0,k,min,deadtime,counter,cycle;
process *p,*p1;
front=ptr->front;
rear=ptr->rear;
if(front==rear)
return 0;
else
{
min=rt;
p1=ptr->data[front];
k=front;
while(k!=rear)
{
p=ptr->data[k];
deadtime=p->deadtime;
counter=p->counter;
cycle=p->cycle;
rt=cycle*deadtime+deadtime-counter-count;
if(min>rt)
{
min=rt;
p1=p;
}
k=(k+1)%Queuesize;
}
}
return p1;
}

void schedule(sqQueue *ptr)
{
process *next;
process *current;
int count=0;
next=current=goodness(ptr,count);
if(current)
{
if(current->fcounter)
{
while(count<50)
{
current->clock++;
cout<<current->pname;
count++;
current->counter=current->fcounter-count;
if(current->clock==current->fcounter)
{
current->cycle=current->cycle+1;
current->counter=current->fcounter;
current->clock=0;
}
next=goodness(ptr,count);
current=next;
}
}
}
}
void InitQueue(sqQueue *&qu)
{
qu=new sqQueue;

for(int i=0;i<=Queuesize;i++)
{
qu->data[i] = new process;
qu->data[i]->clock =0;
qu->data[i]->counter = 0;
qu->data[i]->cycle = 0;
qu->data[i]->deadtime = 0;
qu->data[i]->fcounter = 0;
qu->data[i]->pname = "test";
}
qu->front=qu->rear=0;
}

int EmptyQueue(sqQueue *q)
{
if(q->rear==q->front)
return 1;
else
return 0;
}

void main()
{
cout<<"main start! sizeof sqQueue is "<<sizeof(sqQueue)<<endl;
sqQueue *ptr1;
int flag=0;
InitQueue(ptr1);
if(EmptyQueue(ptr1))
{
while(flag==0)
{

cout<<"iput入term程名:"<<endl;
char test[20];
cin>>test;
ptr1->data[ptr1->rear]->pname=test;
cout<<endl;
cout<<"please分input入"<<ptr1->data[ptr1->rear]->pname;
cout<<"的zhi行拍数,shi限(周期),jin程的剩余time,jin程被zhi行的次数,以及this jin程的zhi行time:"<<endl;
cin>>ptr1->data[ptr1->rear]->clock;
cout<<",";
cin>>ptr1->data[ptr1->rear]->deadtime;
cout<<",";
cin>>ptr1->data[ptr1->rear]->counter;
cout<<",";
cin>>ptr1->data[ptr1->rear]->cycle;
cout<<",";
cin>>ptr1->data[ptr1->rear]->fcounter;
cout<<endl;
cout<<"是否jie束jin程的?input入:";
cin>>flag;
ptr1->rear=(ptr1->rear+1)%Queuesize;
}

cout<<"The following is to dispatch the above processes based on the LLF schedule:"<<endl;
schedule(ptr1);
}
}

因为没有仔细看你具体实现什么功能
所以有问题请联系