I have created this program, and it works fine for random values .
But when I ever enter same Arrival time it gives error output !
.i.e arrivaltime bursttime
p1 0 10
p2 0 6
now the problem is that instead of p2 running first p1 starts...
plz help.
Process.h

#include <iostream>
using namespace std;
class Process
{
private:
	int bstTime,wtTime,arrTime;
	int procNo; int procTime;
	int trArTime;int startTime; int endTime;
public:
	Process()
	{
		bstTime=wtTime=arrTime=trArTime=0;
		procTime=0;
	}
	Process(int bT, int arT)
	{
		bstTime=bT;
		arrTime=arT;
	}
	/////////////////////////////////////////
	void setBstTime(int bTime)
	{
		bstTime=bTime;
	}
	///////////////////////////////////////
	void setArrTime(int arTime)
	{
		arrTime=arTime;
	}
////////////////////////////////////////
	 void getInput(int i)
	 {
		 cout<<"\t\tEnter the Burst Time of the   P"<<i<<" : ";;cin>>bstTime;
		 procTime=bstTime;
		 cout<<"\t\tEnter the Arrival Time of the P"<<i<<" : ";cin>>arrTime;
		 procNo=i;
		
	 }
	 ////////////////////////////////////
	 int getBstTime()
	 {return bstTime;}
	 //////////////////////////////////
	 int getWtTime()
	 {
		 return wtTime;
	 }
	 ////////////////////////////////////
	 int getArrTime()
	 {return arrTime;}
	 /////////////////////////////////////
	 int getProcID()
	 {return procNo;}
	 ///////////////////////////
	 //Decrease Remaining time
	 void decProcTime()
	 {
		 if(procTime>0)
		 procTime--;
	 }
	 ///////////////////get time to be processed 
	 int getProcTime()
	 {return procTime;}
	 //////////////////////////////////////////
	 void setStartingTime(int t)
	 {startTime=t;}
	 //////////////////////////////////////////
	 void setEndingTime(int t)
	 {endTime=t;}
	 //////////////////////////////////////////
	 int getStartTime()
	 {return startTime;}
	 //////////////////////////////////////////
	 int getEndingTime()
	 {return endTime;}
	 //////////////////////////////////////////
	void calcWaitingTime()
	 {
		 wtTime=(endTime-bstTime-arrTime);
		 trArTime=wtTime + bstTime;
		
	 }
	 //////////////////////////////////Get Turn around Time

	 int getTurnAroundTime()
	 {
		 return trArTime;
	 }
	 /////////////////////////////////////////////////
	 int getWaitingTime()
	 {return wtTime;}


};

and .cpp file

#include "process.h"
#include <sstream>
#include <string>

stringstream st,st1,st2;

void sortAgain(Process pro[], int no, int t)		//Sorting the processes
{
for(int i=0;i<no;i++)
{
	for(int j=0;j<no;j++)
		if((pro[j].getProcTime()>pro[j+1].getProcTime())&&(pro[j+1].getArrTime()==t)&& (pro[j].getArrTime()<t))
			
		{
			st<<char(179);
			st1<<char(179);
			st2<<t;
			Process temp=pro[j];
			pro[j]=pro[j+1];
			pro[j+1]=temp;
		}
}
}
void sortByID(Process pro[],int no)
{
	for(int i=0;i<no;i++)			//Sorting by process ID
	{
		for(int j=0;j<no-i;j++)
		{
			if(pro[j].getProcID()>pro[j+1].getProcID())
			{
				Process temp=pro[j];
			      pro[j]=pro[j+1];
			       pro[j+1]=temp;
			}
		}
	}
}
void drawLine(int n)
{
	for(int i=0;i<n;i++)	//Draw Line
		cout<<"-";
}
int main()
{st2<<"0";
//	char ch='219';
	int totalTime=0;
	double avgWaitTime;
	Process *pros=NULL;
	int noPros;
	cout<<"\n\tEnter the Number of Processes ";cin>>noPros;
	/////////*Create a dynamic array of Processes using new operator*/
	pros=new Process[noPros];
	/*Take input from user*/
	for(int k=0;k<noPros;k++)
	{
		cout<<"\n\t\tEnter the data for the P"<<k+1<<endl<<endl;
		pros[k].getInput(k+1);
	}
	
	cout<<"\n\n\tProcesses\t\tArrival Time\t\tCPU Burst Time\n";
	drawLine(80);
	cout<<endl;
	for(int j=0;j<noPros;j++)
	{
		cout<<"\t P"<<pros[j].getProcID()<<"\t\t\t    "<<pros[j].getArrTime()<<"\t\t\t    "<<pros[j].getBstTime()<<endl;
	}
///Calculate total Burst CPU Time of all the processes
	for(int l=0;l<noPros;l++)
		totalTime+=pros[l].getBstTime();
	/*Now start calculating waiting time */
	
	int time=pros[0].getArrTime();
	int done=0;
	pros[0].setStartingTime(time);
	while(time<totalTime)
	{
		while(done<noPros)
		{
			
			if(pros[done].getProcTime()==0)
			{
				pros[done].setEndingTime(time);
				pros[done+1].setStartingTime(time);
				done++;
				st1<<char(179);
				st<<char(179);
				st2<<time;
				
			}
			else
			{	
				st<<"P"<<pros[done].getProcID();
				pros[done].decProcTime();
				st1<<char(219)<<char(219);
				time++;
				sortAgain(pros, noPros, time);
				
			}
			
			
		}
		
	}
	sortByID(pros,noPros);
	
		cout<<"\n\n\tProcesses\tArrival Time\tCPU Burst Time\tWaitingTime\t\n";
	drawLine(80);
	cout<<endl;
	for(int m=0;m<noPros;m++)
		pros[m].calcWaitingTime();
	for(int n=0;n<noPros;n++)
	{
		cout<<"\t P"<<pros[n].getProcID()<<"\t\t    "<<pros[n].getArrTime()<<"\t\t    "<<pros[n].getBstTime()<<"\t\t    "<<pros[n].getWaitingTime()<<"\t\t    "<<endl;
	}
	string str=st.str();
	string str2=st1.str();
	string str3=st2.str();
	
	
	/////////////////////////Average Calculations/////////////////////////
	avgWaitTime=0.0;
	for(int o=0;o<noPros;o++)
	avgWaitTime+=pros[o].getWaitingTime(); ////////////////calculate avg waiting time
	avgWaitTime/=noPros;
	cout<<"\n\tAverage Waiting Time = "<<avgWaitTime<<endl<<endl;
	cout<<"\t::Gantt Chart ::- \n\n";

cout<<"\t";
cout<<str<<endl;
cout<<"\t";
cout<<str2<<endl;
cout<<"\t";

	
	cout<<endl<<endl;
	system("pause");

return 0;
}

yeh i have facing this problem too
so if any one know the solution reply soon
help!!!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.