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

Queueاريد مساعده في عمل برنامج لQueue

مغلق
بدأه Mrs.n في 13 أكتوبر 2004 · 7 رد · 668 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الســــــــــلام عليكم ورحمة الله وبركاته

اتمنا ان تكونوا في صحه وعافيه

كل اللي اطلبه منكم ان تخبروني ماهي اخطائي في كود البرنامج هذا

اولا سوف اشرح البرنامج وماهي فكرته

فكرة البرنامج هي ان نعمل طابور في اي مكان نفرض انه بنك مثلا

فطبعا هذا الطابور يوجد فيه اضافه وحذف ومثلا لوكان عندنا عدد الاماكن المتاحه هي 6

ودخلنا 6اشخاص ومن ثم بدنا نحذف فالحذف لايتم الا من بداية الاشخاص اللي ادخلوا هم اول من ينحذف يعني حذفا نفرض منهم 3 اشخاص واردنا ان نضيف شخص اخر برغم من انه عدد الاشخاص الذي وصل عندهم العدد هو 6 فيضيف شخص اخر بشكل يشبه الدائره على اسم اول شخص تم ادخاله وهكذا

نستخدم back للاضافه و front للحذف

frunt تقف عن اول شخص في الطابور

back اخر شخص فيه

شرح اخر عن طريق الارقام

مثلا

21 34 5 6

8 ........ 8

8 ........ 8

|| ........||

back .... front \\هنا مكان وقوف المؤشرات

الخطوه الثانيه نفرض اننا نريد حذف رقم 1

1 2 3 4 5 6

...8 ........8

..||........||

back..... front // هنا بانتقال الفرونت الى رقم 2 فهذا يعني انه تم حذف رقم واحد واصبح اول الطابور هو رقم 2 واخره 6

لو اردنا الطباعه الطابور

2 3 4 5 6 //هكذا يطبعه

الخطوه الثالثه لو اردنا اضافة رقم اخر مثلا 7

7 2 3 4 5 6

8 8

|| ||

front.. back // اصبح اخر الطابور هو 7 واعتبرها كان ال arry دائره

لو اردنا الطباعه من اول عنصر الى اخر عنصر تكون

2 3 4 5 6 7

الخطوه الثالثه لو طلب منا طباعة اول عنصر

2//سيطبع 2

الرابعه طباعة اخر عنصر

7 //سيطبع 7

وهذه هيه طريقة حلي يوجد بها اخطاء ولالاسف لا اعلم ماهيه فاتمنى ان تساعدوني

#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
const int max=6;
int front;
int back;
int count;
struct Queue
{
	name;
	id;
};

void intilization(int f);
Queue add(Queue x[max]);
void remove(Queue x[max]);
void display(Queue x[max]);
void main()
{
	Queue x[max];
	char choes;
	char ans;
	cout<<"menu";
	cout<<"\n (A)dd";
	cout<<"\n (R)emove";
	cout<<"\n (F)irst";
	cout<<"\n (L)ast";
	cout<<"\n (D)isplay";
	cout<<"\n (Q)uit";
	do{
	cout<<"\npleas choes from menu:";
	cin>>choes;
	switch(choes)
	{
	case 'A':add(x);
       break;
    case 'R':remove(x);
          break;
	case 'F':cout<<"\nthe first person:"<<x.name[front]<<"\nsocal security number:"<<x.id[front];
     break;
    case 'L':cout<<"\nthe last person:"<<x.name[back]<<"\nsocal security number:"<<x.id[back];
     break;

	case 'D':display(x);
  break;
	case 'Q':cout<<"exit";
  break;
	}
	cout<<"\n we whant choes anther time y/n";
	cin>>ans;
	}while(ans=='y' || ans=='Y' );
	getche();
}


//********fun intilization************
void intilization()
{
  front=0;
  back=max-1;
  count=0;
    
};
//*************functoin add***********
Queue add(Queue x[max])
{
	if (count<max)
	{
  count++;
  back=(back+1)%max;
  cin>>x.name[back]<<x.id[back];
	}
	else
  cout<<"is full";
}
//*******fun remove************
void remove(Queue x[max])
{
	if(count>0)
	{
  count--;
  cout<<"the person remorv"<<x.name[front]<<"\nsocal security number:"<<x.id[front];
  cout<<"\n size:"<<count;
  front=(front+1)%max;
  else
 	 cout<<"is empty";
	}
	//***********fun display********
	void display(Queue x[max])
	{
  cout<<"\people witing in the queue"<<"\t\t\tssn";
  for(int i=front;i<back;i++)
  {
 	 cout<<"\n"<<x.name<<"\t\t\t"<<x.id;
  }
  cout<<"\n size:"<<count;
	}

ولكم مني جزيل الشكر

#2
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<conio.h>
using namespace std;

#define max 6 

typedef struct Qu
{
int item[max];
int front;
int back;
int count;
}Queue;

void menu();
void init(Queue *x);
void add(Queue *x,int value);
void remove(Queue *x);
void display(Queue x);
void main()
{
Queue x;
char choes;
char ans;
int value;
init(&x);

do{
	menu();
cout<<"\npleas choes from menu:";
cin>>choes;
switch(choes)
{
case 'a':
case 'A':cout<<"\n enter number to add:\n";
      cin>>value;
      add(&x,value);
         break;
case 'r':
case 'R':remove(&x);
         break;
case 'f':
case 'F':cout<<"\nthe first person:"<<x.item[x.front]<<endl;
    break;
case 'l':   
case 'L':cout<<"\nthe last person:"<<x.item[x.back]<<endl;
    break;
case 'd':
case 'D':display(x);
 break;
case 'q':
case 'Q':cout<<"exit";
	exit(0);
 break;
}

}while(1);
getche();
}
//********fun menu********************
void menu()
{
cout<<"\nmenu";
cout<<"\n (A)dd";
cout<<"\n (R)emove";
cout<<"\n (F)irst";
cout<<"\n (L)ast";
cout<<"\n (D)isplay";
cout<<"\n (Q)uit";
}

//********fun intilization************
void init(Queue *x)
{
 x->front=0;
 x->back=max-1;
 x->count=0;
   
}
//*************functoin add***********
void add(Queue *x, int value)
{
if (x->count<max)
{
 x->count++;
 x->back=(x->back+1)%max;
 x->item[x->back]=value;
 cout<<"added\n";
}
else
 cout<<"is full\n";
}
//*******fun remove************
void remove(Queue *x)
{
if(x->count>0)
{
 x->count--;
 cout<<x->item[x->front]<<"removed\n";
 x->front=(x->front+1)%max;
} 
else
  cout<<"is empty";
}
//***********fun display********
void display(Queue x)
{
	cout<<"numbers is :";
 for(int i=x.front;i<x.back;i++)
 {
  cout<<"\n"<<x.item<<"\t";
 }

}
#3

اشكرك اخي على المجهود

ولكن اتمنى ان تشرح للي التعديل انا فهمت بعض الاشياء وبعضها ما فهمت او مادرستها للحين

وهذا واجب ولازم نلتزم بالجزء اللي ندرسه

يعني انا توني ادرس البوينتر اللحين

#define max 6 

typedef struct Qu //فهمت انها struct  بس انا اول مره امر علي طريقة كتابتها هذي يعني متعودين مانكتب  typedef   فياريت تشرحها للي
{
int item[max];
int front;
int back;
int count;
}Queue;
#4

شكرا على التعديل وانا اضفت الاشياء اللي احتاجها في البرنامج وصار يشتغل مثل مابي

والفضل لله ثم لك

وعرفت وش هي اخطائي الحمدالله

هذا البرانامج بعد مساعدتك وتحويله الى الفكره الاساسيه بان نضيف الاسم ورقم

اتمنى اشوف التعليق عليه

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<conio.h>
using namespace std;

#define max 6 

 struct Queue
{
int item[max];
char name[max][20];
int front;
int back;
int count;
};

void menu();
void init(Queue *x);
void add(Queue *x,int value,char name[20]);
void remove(Queue *x);
void display(Queue x);
void main()
{
Queue x;
char choes;
int value;
char name[20];
init(&x);
menu();
do{

cout<<"\npleas choes from menu:";
cin>>choes;
switch(choes)
{
case 'a':
case 'A':cout<<"*************************";
	cout<<"\n enter socal security number add:";
     cin>>value;
     cout<<"\n enter person to add:";
  cin>>name;
     add(&x,value,name);
  cout<<"\n***************************";
        break;
case 'r':
case 'R':cout<<"***************************\n";
     remove(&x);
  cout<<"\n***************************";
        break;
case 'f':
case 'F':cout<<"******************************";
      cout<<"\n The first socal security number"<<"\t person name";
         cout<<"\n"<<x.item[x.front]<<"\t\t\t\t"<<x.name[x.front];
   cout<<"\n******************************";
   break;
case 'l':   
case 'L':cout<<"******************************";
     cout<<"\n The last socal security number"<<"\t person name";
         cout<<"\n"<<x.item[x.back]<<"\t\t\t\t"<<x.name[x.back];
         cout<<"\n******************************";
   break;
case 'd':
case 'D':cout<<"******************************";
     display(x);
  cout<<"\n******************************";
break;
case 'q':
case 'Q':cout<<"exit";
	exit(0);
break;
}

}while(1);

getche();
}
//********fun menu********************
void menu()
{
cout<<"\nmenu";
cout<<"\n (A)dd";
cout<<"\n (R)emove";
cout<<"\n (F)irst";
cout<<"\n (L)ast";
cout<<"\n (D)isplay";
cout<<"\n (Q)uit";
}

//********fun intilization************
void init(Queue *x)
{
x->front=0;
x->back=max-1;
x->count=0;
  
}
//*************functoin add***********
void add(Queue *x, int value,char name[20])
{
if (x->count<max)
{
x->count++;
x->back=(x->back+1)%max;
x->item[x->back]=value;
strcpy(x->name[x->back],name);
cout<<"added\n";
}
else
cout<<"is full\n";
}
//*******fun remove************
void remove(Queue *x)
{
if(x->count>0)
{
x->count--;
cout<<x->item[x->front]<<"removed\n";
x->front=(x->front+1)%max;
} 
else
 cout<<"is empty";
}
//***********fun display********
void display(Queue x)
{
cout<<"\nsocal security number"<<"\t person name";
for(int i=x.front;i<(x.back+1);i++)
{
 cout<<"\n"<<x.item<<"\t\t\t\t"<<x.name;
}

}
#5

السلام عليكم

أخي الكريم بالنسبة لتعديلك فهو صحيح لكن شيء واحد أعتقد انه راح يسبب لك مشكلة وهو في الدالة display() لان اللوب الي عملتو غير صحيح ليشش؟؟؟؟؟

لان مش في كل الاحوال front يكون أصغر من back

فمثلا هناك احتمال ان يكون front =4 و back =1 في هذه الحالة البرنامج لن يطبع شيء!!!!!

void display(Queue x)
{
cout<<"\nsocal security number"<<"\t person name";
for(int i=x.front;i<(x.back+1);i++)
{
cout<<"\n"<<x.item<<"\t\t\t\t"<<x.name;
}

}

جرب الكود مرة اخرى وافحص هذه النقطة

مع تحياتي

#6

وعليكم السلام ورحمة الله وبركاته

اولا اشكرك على ماتبذله من جهد

عن ملاحظتك في function display

عندما يكون front اكبر من back

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

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

ارجو منك ان تلقي نظره احرى ولو كان فيه تعديل عدله

#7

السلام عليكم

اخي فهمت وش تقصد وبالفعل في خطاء في الطباعه او شرطه وانا احاول ان اعدله

واذا عدلته كتبت التعديل

واعتذر عن الرد السابق

#8

هذا هو التعديل إن شاء الله يكون صح

void display(Queue x)
{

for(int i=x.front;i!=(x.back+1);i++)
{
	if(i>max-1)
	{
  i=(i)%max;
  
	}
 cout<<"\n"<<x.item<<"\t\t\t\t"<<x.name;
}

}

وكل سنه وانت بخير

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

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