الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن في حل المشكلة هذا الكود

مغلقمُجاب
بدأه Luna Volver A salir في 14 مارس 2014 · 3 رد · 1,020 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم اخواني الغاليين

هل من الممكن ان اجد من يساعدني في تصحيح هذا الكود

هذا الكود صحيح و لكن المشكلة ان يتوقف عن العمل في الحالة الاولى و لا اعرف السبب

#include<iostream.h>		  const size =20;		  int queue[size];		  int stack[size];		  int item ,  item2,n,i,r,f,top;		  void push(int item){		  if(top>=size-1)		  cout<<"full"<<endl;		  else			  top++;			  stack[top]=item;			  }		void pop()		{		  if(top==-1)		  cout<<"empty"<<endl;		  else		 item= stack[top];		 top--;		 }		 void displays(){		  for(i=top;i>=0;i++)		  cout<<stack<<" ";		  cout<<endl;		  }		  void addqueue(int item2){			if(r>size-1)			cout<<"fullq"<<endl;			else			  r++;			  queue[r]=item2 ;			  }		  void deleteq(){			 if(f>r)			 cout<<"empty"<<endl;			 else				item2=queue[f];				f++;				}            void display()	  {	if(r<f)	cout<<"the queue is empty\n";	else	cout<<"content the queue\n";	for(i=r;i>=f;i--)	cout<<queue<<endl;	 }	 main()	 {		 top=-1;		 f=r=-1;		 int s;		 cin>>s;		 switch(s)		 {	case 1:	 cout<<"how many"<<endl;		  cin>>n;		  for(i=0;i<n;i++)		  {			 item=0;			 push(item) ;			 };break ;	 case 2:			 cout<<"howmany"<<endl;				cin>>n;				  for(i=0;i<n;i++)					{					  addqueue(stack);					  pop();					  };break ;	case 3:		  display() ; break ;		}		}
#2

قمت بتنسيق الكود و قرأت الحالة الاولي فقط و كان ينقص التحقق من أن قيمة n قد تكون أكبر من size:

#include <iostream>using namespace std;const size =20;int queue[size];int stack[size];int item, item2, n, i, r, f, top;void push(int item){	if (top >= size-1)		cout<<"full"<<endl;	else	{		top++;		stack[top]=item;	}}void pop(){	if (top == -1)		cout<<"empty"<<endl;	else	{		item = stack[top];		top--;	}}void displays(){	for(i=top;i>=0;i++)		cout<<stack<<" ";	cout<<endl;}void addqueue(int item){	if (r>size-1)		cout<<"fullq"<<endl;	else	{		r++;		queue[r]=item2;	}}void deleteq(){	if(f>r)		cout<<"empty"<<endl;	else	{		item2=queue[f];		f++;	}}void display(){	if(r<f)		cout<<"the queue is empty\n";	else	{		cout<<"content the queue\n";		for(i=r;i>=f;i--)			cout<<queue<<endl;	}}int main(){	top=f=r=-1;	int s;	cin>>s;	switch(s)	{	case 1:		cout<<"how many"<<endl;		cin>>n;		if (n>size) n=size;		for(i=0;i<n;i++)		{			item=0;			push(item);		};		break;	case 2:		cout<<"howmany"<<endl;		cin>>n;		for(i=0;i<n;i++)		{			addqueue(stack);			pop();		};		break;		case 3:		display();		break;	}}

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#3

شكرا اخي على المساعدة

 ولكن بالنسبة لتحقق من قيمة n   فانه لا داعي لتحقق منها لان المكدس لدينا فارغ و يبدأ بالاضافة الى ان يصل نهاية في حالة ان n تساوي الحجم و يعرض رسالة خطأ على " ان المكدس ممتلئ"

كما ان الكود ايضا لا يعمل بعد هذا التعديل الذي قمت به و لك مني خلص الشكر و التقدير

تم تعديل هذه المشاركة بواسطة Luna Volver A salir في 15 مارس 2014 في 20:09

#4 أفضل إجابة
#include<iostream>using namespace std;const int size =20;int queue[size];int stack[size];int item, item2, n, i, r, f, top;void push(int item){	if(top>=size-1)					//سيبقى مخزن بلا قيمة وهو الأخير بسبب علامة = 		cout<<"full"<<endl;	else		top++;	stack[top]=item;			// سينفذ في حالة true or false بسبب عدم وجود أقواس {}}void pop(){	if(top==-1)		cout<<"empty"<<endl;	else		item= stack[top];	top--;						// لابد من وجود أقواس نفس الدالة السابقة حتى ينفذ الأمرين		}void displays(){	for(i=top;i>=0;i++)				// كيف يزداد!!! إذا ستصبح infinite loop		cout<<stack<<" ";	cout<<endl;}void addqueue(int item2){	if(r>size-1)							// هنا صحيحة لماذا لا تكون مثلها في الدالة البوش		cout<<"fullq"<<endl;	else		r++;							// أقواس حتى ينفذ الأمرين{}	queue[r]=item2 ;}void deleteq(){	if(f>r)		cout<<"empty"<<endl;	else		item2=queue[f];		f++;}void display(){	if(r<f)		cout<<"the queue is empty\n";	else		cout<<"content the queue\n";		for(i=r;i>=f;i--)						// تنفذ في الحالة الصحيحة والخاطئة		cout<<queue<<endl;}int main(){	top=-1;	f=r=-1;	int s;	cout<<stack[6];	cin>>s;		switch(s)	{	case 1:		cout<<"how many"<<endl;		cin>>n;		  for(i=0;i<n;i++)		  {			 item=0;							 push(item) ;				// كل المدخلات ستكون صفر			 };							// loop لا تنتهي ب semicolon ;		  break ;	 	case 2:			cout<<"howmany"<<endl;			cin>>n;			 for(i=0;i<n;i++)			 {				 addqueue(stack);			//كل المدخلات ستكون صفر				 pop();			 }			break ;	case 3:		  display() ;		  break ;		}	system("pause");	return 0;}

ذكرت بعض الأخطاء بدون تصحيحها وجميع ما ذُكر أخطاء في syntax فقط

تم تعديل هذه المشاركة بواسطة المـقـدام في 16 مارس 2014 في 10:29

3

 إن المعلم والطبيب كلاهمــــا ... لا ينصحـان إذا همـا لم يكرمـا 


فاصبر لدائـك إن أهنت طبيبه ... واصبــر لجهلك إن جفوت معلما

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر ساعة · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…