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

Sorting بالسي؟شلون؟ارجوكم افيدوني

مغلق
بدأه {{unknown}} في 21 ديسمبر 2004 · 13 رد · 968 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أرجوكم افيدوني...

لقد قمت بعمل هذا الكود بلغة السي

كل شيء لدي يعمل لكن هناك شيء واحد قد اخفقت به ولم يعمل لدي ولاأدري مالسبب.والمشكلة هي في الإختيار للرقم 5

حيث انه يفترض ان يقوم هذا الكود بعرض المحتويات(بالتسلسل)ولكنه لايعمل.فأرجوكم افيدوني كيف يمكنني ان أضيف و

اجعل هذا الكود (الخيار) يعمل ؟؟

ملاحظة:مرفق لكم الكود بلغة السي

________________________________________________

#include<stdio.h>

#include<string.h>

# define max 6

struct data_type

{

char name[30];

char topic[200];

int rollno;

};

struct stack_type

{

struct data_type data[max];

int top;

};

void initialize(struct stack_type*);

void push(struct data_type, struct stack_type*);

struct data_type pop(struct stack_type*);

void disno(struct stack_type);

void disall(struct stack_type);

main()

{

struct stack_type stack;

struct data_type tempdata;

int opt;

initialize (&stack);

clrscr();

do

{

printf("\n\n\t\*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-\n");

printf("\t\t\t\t*****Menu*****\n\n");

printf("\t\t 1.Add a Topic\n");

printf("\t\t 2.Remove a Topic\n");

printf("\t\t 3.Display Topics Based On Roll Number\n");

printf("\t\t 4.Display All The Topics \n");

printf("\t\t 5.Sort By Roll Number\n");

printf("\t\t 6.Exit\n\n");

printf("\t\t\t Enter your choice:");

scanf("%d",&opt);

printf("\n\t\t*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+\n");

switch(opt)

{

case 1:

if (stack.top==max-1)

{

printf("\n\n\t\t\t Stack is FULL\n");

getche();

}

else

{

clrscr();

printf("\n\n\n\t\t Enter The roll Number: ");

scanf("%d",&tempdata.rollno);

printf("\n\t\t Enter The Name: ");

scanf("%s",tempdata.name);

printf("\n\t\t Enter The topic: ");

scanf("%s",tempdata.topic);

push (tempdata,&stack);

}

clrscr();

break;

case 2:

if(stack.top==-1)

{

printf("\n\n\t\t\t Stack is EMPTY \n");

getche();

}

else

{

clrscr();

tempdata=pop(&stack);

printf("\n\t\t The Removed Element Is: \n");

printf("\t\t roll Number:%d\t\n",tempdata.rollno);

printf("\t\t Name:%s\t\n",tempdata.name);

printf("\t\t topic:%s\t\n",tempdata.topic);

getche();

}

break;

case 3:

clrscr();

disno(stack);

break;

case 4:

clrscr();

disall(stack);

break;

case 5: clrscr();

disno(stack);

break;

case 6:

clrscr();

printf("\n\n\n\n\n\n\n\n\n\n\t\t\t PROGRAM IS OVER \n");

break;

default:

printf("\n\t\t ERROR.. The number you enterd is not avaliable\n");

getche();

}

}

while (opt!=6);

getche();

}

/* function starts here */

void initialize (struct stack_type*pstack)

{

pstack -> top=-1;

}

void push (struct data_type element, struct stack_type *pstack)

{

pstack -> top=pstack ->top+1;

pstack -> data[pstack ->top]=element;

}

struct data_type pop (struct stack_type *pstack)

{

struct data_type temp;

temp=pstack->data [pstack->top];

pstack ->top=pstack->top-1;

return (temp);

}

void disno (struct stack_type stack)

{

int i,a=0;

int rollno;

struct data_type temp;

printf("\n\t\t\t Enter the roll Number:");

scanf("%d",&rollno);

for (i=stack.top;i>=0;i--)

{

temp=stack.data;

if(rollno==temp.rollno)

{

fflush(stdout);

printf("\n\t\t\t The Name is =%s\n",temp.name);

fflush(stdout);

printf("\n\t\t\t The topic is =%s\n",temp.topic);

a=1;

}

}

if (a!=1)

printf("\n\t\t\t The number you have entered is not available\n");

}

void disall (struct stack_type stack)

{

int i;

struct data_type temp;

if(stack.top==-1)

printf("\n\t\t\t NO RECORD ENTERED \n");

else

{

printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");

for (i=stack.top; i>=0; i--)

{

temp = stack.data;

fflush(stdout);

printf("\t\t%d\t\t" ,temp.rollno);

fflush(stdout);

printf("%s\t\t",temp.name);

fflush(stdout);

printf("%s\t\n",temp.topic);

}

}

}

my addin topic.C

تم تعديل هذه المشاركة بواسطة {{unknown}} في 21 ديسمبر 2004 في 15:44

#2

السلام عليكم ..

غير الكود الموجود داخل ال case 5 ,, لأي شيء آخر كطباعة إسمك ب cout أو أي شيء ,, لتتأكد من أن المشكلة ليست من ال case وإنما من الكود الذي في داخل case 5 ,,

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

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

HGB

شكرا لك على سرعة الإجابة..:)

لكن المشكلة مازالت قائمة...قمت بتغير الفنكشن المربوط في حالة case 5

لكن لم يحدث اي تغيير..

وسؤالي هو

كيف أستطيع جعل الخيار 5 يقوم بعمل فرز للقيم التي ادخلتها وبالترتيب حسب القيمةid

ارجوكم قبل الإجابة القيام بتنزيل الكود بلغة السي وتشغيلة وفحص الإختيار 5 الذي يجب ان يقوم بترتيب البينات المضافة حسب التسلسل...أرجوكم مرة أخرى افيدوني...:(

#4

لرفع

للرفع

#5

هلا فيك اخوي

اخيرا انحلت المشكلة والله دوختني ببرنامجك هذا الله يهديك

انا كل شوي يطلع لي خطا المشكلة مدري وين الخطا

انت في الكود حاط case3 و الترتيب case5

لها نفس الدالة حرام عليك مستحيل ذي تصير

انا كتبت دالة مختلفة اسمها

void sorting()

الدالة تقوم بترتيب العناصر داخل stack في main()

يعني ترجعك على ال main والعناصر مرتبة كاملة

انا استخدمت buble sort لانه اسهل شي ومستعجل عندي اختبار بكره

فعلى العموم البرنامج الان جاهز وشغال 100%

اذا انك تبغى تطبع النواتج تلقائيا بعد الترتيب كل ماعليك انك تسوي نداء في case5 بعد نداء الترتيب تنادي على دالة طباعة الكل اللي مسميها انت

void disno(stack)

// ملاحظة انا عطلت مهمة clrscr() لانها ليسيت ANSII فهي لاتعمل مع visual studio

يمكنك ارجاعها للعمل بحذف ااشارة // واظنها لا تخفى عليك

تمنيت لو انك استخدمت pointers بشكل كامل واعتمدت في الحقول الفارغة على انها تكون تؤشر الى null لانه افضل من حجز كمية في الذاكرة طوال البرنامج

على العموم هذه تتطلب خبرة في Data Strucure

وهذا هو الكود

#include<stdio.h>
#include<string.h>
# define max 6

struct data_type
{

	char name[30];
	char topic[200];
	int rollno;
};
	struct stack_type
	{
	struct data_type data[max];
	int top;
	};
	void initialize(struct stack_type*);
	void push(struct data_type, struct stack_type*);
	struct data_type pop(struct stack_type*);
	void disno(struct stack_type);
	void disall(struct stack_type);
	void sorting(struct stack_type*);

main()
{
	struct stack_type stack;
	struct data_type tempdata;
	int opt;
	initialize (&stack);
	//clrscr();
	do
	{
  printf("\n\n\t\*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-\n");
  printf("\t\t\t\t*****Menu*****\n\n");
  printf("\t\t 1.Add a Topic\n");
  printf("\t\t 2.Remove a Topic\n");
  printf("\t\t 3.Display Topics Based On Roll Number\n");
  printf("\t\t 4.Display All The Topics \n");
  printf("\t\t 5.Sort By Roll Number\n");
  printf("\t\t 6.Exit\n\n");
  printf("\t\t\t Enter your choice:");
  scanf("%d",&opt);
  printf("\n\t\t*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+\n");
  switch(opt)
  {
 	 case 1:
 	 if (stack.top==max-1)
 	 {
    printf("\n\n\t\t\t Stack is FULL\n");
    getche();
 	 }
 	 else
 	 {
    //clrscr();
    printf("\n\n\n\t\t Enter The roll Number: ");
    scanf("%d",&tempdata.rollno);
    printf("\n\t\t Enter The Name: ");
    scanf("%s",tempdata.name);
    printf("\n\t\t Enter The topic: ");
    scanf("%s",tempdata.topic);
    push (tempdata,&stack);
 	 }
 	 //clrscr();
 	 break;

 	 case 2:
 	 if(stack.top==-1)
 	 {
    printf("\n\n\t\t\t Stack is EMPTY \n");
    getche();
 	 }
 	 else
 	 {
    //clrscr();
    tempdata=pop(&stack);
    printf("\n\t\t The Removed Element Is: \n");
    printf("\t\t roll Number:%d\t\n",tempdata.rollno);
    printf("\t\t Name:%s\t\n",tempdata.name);
    printf("\t\t topic:%s\t\n",tempdata.topic);
    getche();
 	 }
 	 break;

 	 case 3:
    //clrscr();
    disno(stack);
    break;

 	 case 4:
    //clrscr();
    disall(stack);
    break;
 	 case 5: //clrscr();
    sorting(&stack);
    break;

 	 case 6:
    //clrscr();
    printf("\n\n\n\n\n\n\n\n\n\n\t\t\t PROGRAM IS OVER \n");
    break;

 	 default:
    printf("\n\t\t ERROR.. The number you enterd is not avaliable\n");
    getche();
  }
  }
  while (opt!=6);
  getche();
}


  /* function starts here */

  void initialize (struct stack_type*pstack)
  {
 	 pstack -> top=-1;
  }

   void push (struct data_type element, struct stack_type *pstack)
  {
 	 pstack -> top=pstack ->top+1;
 	 pstack -> data[pstack ->top]=element;
  }


 struct data_type pop (struct stack_type *pstack)
  {
  struct data_type temp;
  temp=pstack->data [pstack->top];
  pstack ->top=pstack->top-1;
  return (temp);
  }

   void sorting(struct stack_type *stack)
   {
    int i=0,j=0;
 	 struct data_type temp;
 	 for(i=0;i<stack->top;i++)
 	 {
    for(j=i+1;j<stack->top+1;j++)
    {
   	 if (stack->data.rollno > stack->data[j].rollno)
   	 {
      temp = stack->data;
      stack->data = stack->data[j];
      stack->data[j] = temp;
   	 }
    }
  }
   }
  void disno (struct stack_type stack)
   {

 	 
   int i,a=0;
   int rollno;
   struct data_type temp;
   printf("\n\t\t\t Enter the roll Number:");
   scanf("%d",&rollno);
   for (i=stack.top;i>=0;i--)
  {
 	 temp=stack.data;
 	 if(rollno==temp.rollno)
 	 {
    fflush(stdout);
    printf("\n\t\t\t The Name is =%s\n",temp.name);
    fflush(stdout);
    printf("\n\t\t\t The topic is =%s\n",temp.topic);
    a=1;
 	 }
   }
    if (a!=1)
    printf("\n\t\t\t The number you have entered is not available\n");
    
   }

    void disall (struct stack_type stack)
    {
    int i;
    struct data_type temp;
    if(stack.top==-1)
 	 printf("\n\t\t\t NO RECORD ENTERED \n");
    else
 	 {
 	 printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");
 	 for (i=stack.top; i>=0; i--)
 	 {
    temp = stack.data;
    fflush(stdout);
    printf("\t\t%d\t\t" ,temp.rollno);
    fflush(stdout);
    printf("%s\t\t",temp.name);
    fflush(stdout);
    printf("%s\t\n",temp.topic);
 	 }
 	 }

    }

تحياتي

تم تعديل هذه المشاركة بواسطة Vara في 28 ديسمبر 2004 في 21:23

#6

الأخ\Vara

اولا وقبل كل شيء اشكرك جزيل الشكر على هذا الرد والإيضاح...لكن لدي بعض الملاحظات.....

لقد قمت بإضافة دالة الطباعة في

void sorting

ولكن لم تعمل ولا ادري اين الخطا بالضبط.

لذا ارجو منك او من كل من لديه المعرفة بلغة السي ان يفيدني بالكود الصحيح والذي يظهر لي البيانات جميعها ومرتبة ترتيبا تصاعديا في الخيار رقم 5.ارجو قبل الإجابة تنزيل الملف المرفق للتاكد من عمل البرنامج.

stack static.C

#7

للرفع

#8

للرفع

:(

#9

أخي الكريم مشكلتك في غاية السهولة

المشكلة كلها تقع في طريقة استخدامك للمؤشر

في دالة الطباعة مررت بها ستركت

void disall(struct stack_type)

وفي دالة الترتيب مررت مؤشر لستركت

void sorting(struct stack_type*)

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

الخطا الثاني عندك هو ترتيب الاقواس في دالتك

هذا هو الحل ولا تنسانا من دعوة بظهر الغيب:

دالة تقوم بالترتيب والطباعة مباشرة

  void sorting(struct stack_type *stack)
{
   int i=0,j=0;
   struct data_type temp;
   for(i=0;i<stack->top;i++)
  {
     for(j=i+1;j<stack->top+1;j++)
   {
   	 if (stack->data.rollno > stack->data[j].rollno)
   	 {
        temp = stack->data;
        stack->data = stack->data[j];
          stack->data[j] = temp;
   	 }
  }
   }

     printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");
   for (i=stack->top; i>=0; i--)
 	 {
        temp = stack->data;
        fflush(stdout);
        printf("\t\t%d\t\t" ,temp.rollno);
        fflush(stdout);
        printf("%s\t\t",temp.name);
        fflush(stdout);
        printf("%s\t\n",temp.topic);
 	 }

   
  
}

اخيرا اتمنى ان تخبرني مافائدة هذه الدالة

fflush(stdout);

تحياتي لك

#10

السلام عليكم

اخوتي الأكارم..الف شكر لكم ولكل من حاول ان يقدم لي المساعدة...

لقد استطعت والحمدالله وبفضل الله وبفضلكم ان احلها المسألة نوعا ما

وعلى حسب افادة اخي

Vara

فقد أضفت دالة واسميتها

void dissort

وقمت بعد ذلك بإضافت

dissort(stack);

في ال

case5

بعد

sorting(&stack);

والحمدالله إشتغل.

الآن عند دخولي فالمنتدى لاحظت ردك أخي العزيز فهد علي وإشتغلت على الطريقة اللي افدتني اياه

والحمدالله النتيجة طلعت نفس الشي.والله تراكم اثلجتم صدري بردودكم الطيبة وجزاكم الله ألف خير.

لكن الآن اصبح عندي مشكلة بسيطة وهي كيف استطيع ان

اجعل البيانات تظهر بالترتيب التصاعدي في الأختيار 5وليس بالترتيب التنازلي مثل ما

هو عليه الآن

.ارجوكم كملو جميلكم وافيدوني

:)

مرفق لكم ملف من البرنامج.ارجو ان تقوم بتنزيله قبل الرد للتأكد من صحة البرمجة

---------------

أخي العزيز فهد علي اجابة لسؤالك

__________

--------------------------------.

الدالة

Fflush

يعتبر المعيار الروتيني حتى تتحكم بالملف.وهو يجعل البيانات في بحالة الإنتظار.وبهذه الحالة تكون اي من البيانات لم تكتب الى القرص وانما هي بحالة الإنتظار.

عندما تنادي الدالة

Fwrite

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

fflush ()

يكتب البيانات المحجوزة في القرص في حالة عدم إضافة اي معلومة

إن إستعمالة غير متطلب.لكنه مفيد اذا اردت من أن تتأكد من أن البيانات قد كتبت من قبل.

Fflush(stdout)

يقوم بتنظيف البيانات الخارجة من الحاجر

Fflush(stdin)

يقوم بتنظيف البيانات المضافة الى الحاجز

أقصد الحاجز وهو (البفر)

Buffer

ارجو اني وضحت معنى الدالة واذا اردت توضيح أكثر فأفدني

______________

#include<stdio.h>
#include<string.h>
# define max 6

struct data_type
{

char name[30];
char topic[200];
int rollno;
};
struct stack_type
{
struct data_type data[max];
int top;
};
void initialize(struct stack_type*);
void push(struct data_type, struct stack_type*);
struct data_type pop(struct stack_type*);
void disno(struct stack_type);
void disall(struct stack_type);
void sorting(struct stack_type*);
void dissort(struct stack_type);

main()
{
struct stack_type stack;
struct data_type tempdata;
int opt;
initialize (&stack);
clrscr();
do
{
 printf("\n\n\t\*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-\n");
 printf("\t\t\t\t*****Menu*****\n\n");
 printf("\t\t 1.Add a Topic\n");
 printf("\t\t 2.Remove a Topic\n");
 printf("\t\t 3.Display Topics Based On Roll Number\n");
 printf("\t\t 4.Display All The Topics \n");
 printf("\t\t 5.Sort By Roll Number\n");
 printf("\t\t 6.Exit\n\n");
 printf("\t\t\t Enter your choice:");
 scanf("%d",&opt);
 printf("\n\t\t*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+\n");
 switch(opt)
 {
  case 1:
  if (stack.top==max-1)
  {
   printf("\n\n\t\t\t Stack is FULL\n");
   getche();
  }
  else
  {
  clrscr();
   printf("\n\n\n\t\t Enter The roll Number: ");
   scanf("%d",&tempdata.rollno);
   printf("\n\t\t Enter The Name: ");
   scanf("%s",tempdata.name);
   printf("\n\t\t Enter The topic: ");
   scanf("%s",tempdata.topic);
   push (tempdata,&stack);
  }
 clrscr();
  break;

  case 2:
  if(stack.top==-1)
  {
   printf("\n\n\t\t\t Stack is EMPTY \n");
   getche();
  }
  else
  {
  clrscr();
   tempdata=pop(&stack);
   printf("\n\t\t The Removed Element Is: \n");
   printf("\t\t roll Number:%d\t\n",tempdata.rollno);
   printf("\t\t Name:%s\t\n",tempdata.name);
   printf("\t\t topic:%s\t\n",tempdata.topic);
   getche();
  }
  break;

  case 3:
  clrscr();
   disno(stack);
   break;

  case 4:
  clrscr();
   disall(stack);
   break;
  case 5: clrscr();
   sorting(&stack);
   dissort(stack);
   break;

  case 6:
  clrscr();
   printf("\n\n\n\n\n\n\n\n\n\n\t\t\t PROGRAM IS OVER \n");
   break;

  default:
   printf("\n\t\t ERROR.. The number you enterd is not avaliable\n");
   getche();
 }
 }
 while (opt!=6);
 getche();
}


 /* function starts here */

 void initialize (struct stack_type*pstack)
 {
  pstack -> top=-1;
 }

  void push (struct data_type element, struct stack_type *pstack)
 {
  pstack -> top=pstack ->top+1;
  pstack -> data[pstack ->top]=element;
 }


struct data_type pop (struct stack_type *pstack)
 {
 struct data_type temp;
 temp=pstack->data [pstack->top];
 pstack ->top=pstack->top-1;
 return (temp);
 }

  void sorting(struct stack_type *stack)
  {
   int i=0,j=0;
  struct data_type temp;
  for(i=0;i<stack->top;i++)
  {
   for(j=i+1;j<stack->top+1;j++)
   {
    if (stack->data.rollno > stack->data[j].rollno)
    {
     temp = stack->data;
     stack->data = stack->data[j];
     stack->data[j] = temp;
    }
   }
 }
  }
 void disno (struct stack_type stack)
  {


  int i,a=0;
  int rollno;
  struct data_type temp;
  printf("\n\t\t\t Enter the roll Number:");
  scanf("%d",&rollno);
  for (i=stack.top;i>=0;i--)
 {
  temp=stack.data;
  if(rollno==temp.rollno)
  {
   fflush(stdout);
   printf("\n\t\t\t The Name is =%s\n",temp.name);
   fflush(stdout);
   printf("\n\t\t\t The topic is =%s\n",temp.topic);
   a=1;
  }
  }
   if (a!=1)
   printf("\n\t\t\t The number you have entered is not available\n");

  }

   void disall (struct stack_type stack)
   {
   int i;
   struct data_type temp;
   if(stack.top==-1)
  printf("\n\t\t\t NO RECORD ENTERED \n");
   else
  {
  printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");
  for (i=stack.top; i>=0; i--)
  {
   temp = stack.data;
   fflush(stdout);
   printf("\t\t%d\t\t" ,temp.rollno);
   fflush(stdout);
   printf("%s\t\t",temp.name);
   fflush(stdout);
   printf("%s\t\n",temp.topic);
  }
  }

   }
void dissort (struct stack_type stack)
   {
   int i;
   struct data_type temp;
   if(stack.top==-1)
  printf("\n\t\t\t NO RECORD ENTERED \n");
   else
  {
  printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");
  for (i=stack.top; i>=0; i--)
  {
   temp = stack.data;
   fflush(stdout);
   printf("\t\t%d\t\t" ,temp.rollno);
   fflush(stdout);
   printf("%s\t\t",temp.name);
   fflush(stdout);
   printf("%s\t\n",temp.topic);
  }
  }

   }

netok.C

#11

بارك الله فيك على هالتوضيح

اما بخصوص الطباعة بالترتيب تصاعدي ام تنازلي

اخي يبدو انك لم تفهم هيكلية تخزين البيانات في الاستاك

بداية:

- اول عنصر يدخل في الاستاك يعطىtop=0 وهكذا تزايديا

فلو افترضنا ان الاستاك فيه 10 عناصر

فبالتالي اول عنصر في الاستاك يكون فهرسه صفر

واخر عنصر في الاستاك يكون فهرسه 9

لو عدنا الى برنامجك نجد انك استخدمت في الطباعة حلقة for بالشكل التالي

for (i=stack.top; i>=0; i--)

وبالتالي اعطيت i=top ومن ثم جعلته يتناقص تدريجيا

لو عكسنا الحالة السابقة سيتحقق طلبك وهو كالتالي

for(i=0;i<=stack.top;i++)

تحياتي لك

ولا تنساني من دعوة علها تكون عوناً لي في اختباري غداً

#12

اخي العزيز

فهد علي

والله ما ادري شلون اشكرك انت وكل من ارشدني...ووجهني بهالمسألة تراكم ماقصرتو وشكرا لكم للمرة الثانية وجزاكم الله الف الف خير ووفقكم الله في خطاكم.

بالفعل اخي العزيز...لم أنتبه لهذه النقطة التي ذكرتها لكنني شككت ان الدلة

for

لم اصيغها جيدا...والحمدالله بفضل الله ولكم انحلت المشكلة.

اولا اعذروني ....لأنني لست سوى مبتدأ بهذة اللغة وليس لي باع طوبل بالبرمجة لكنني احاول وسأحاول قدر المستطاع ان افعل شيئا زكلما ساواحه عقدة ما فإنني متأكدج من انكم لن تطمعو بإرشادي وتوجيهي سولء انا ام غيري الى السبيل الصحيح.

مرة أخرى اشكركم وإن شاء الله تتوفق غدا بلإختبار.

وهذا هو الكود النهائي الذي كنت اطمح إليه.

#include<stdio.h>
#include<string.h>
# define max 6

struct data_type
{

char name[30];
char topic[200];
int rollno;
};
struct stack_type
{
struct data_type data[max];
int top;
};
void initialize(struct stack_type*);
void push(struct data_type, struct stack_type*);
struct data_type pop(struct stack_type*);
void disno(struct stack_type);
void disall(struct stack_type);
void sorting(struct stack_type*);
void dissort(struct stack_type);

main()
{
struct stack_type stack;
struct data_type tempdata;
int opt;
initialize (&stack);
clrscr();
do
{
 printf("\n\n\t\*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-\n");
 printf("\t\t\t\t*****Menu*****\n\n");
 printf("\t\t 1.Add a Topic\n");
 printf("\t\t 2.Remove a Topic\n");
 printf("\t\t 3.Display Topics Based On Roll Number\n");
 printf("\t\t 4.Display All The Topics \n");
 printf("\t\t 5.Sort By Roll Number\n");
 printf("\t\t 6.Exit\n\n");
 printf("\t\t\t Enter your choice:");
 scanf("%d",&opt);
 printf("\n\t\t*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+-*+\n");
 switch(opt)
 {
  case 1:
  if (stack.top==max-1)
  {
   printf("\n\n\t\t\t Stack is FULL\n");
   getche();
  }
  else
  {
  clrscr();
   printf("\n\n\n\t\t Enter The roll Number: ");
   scanf("%d",&tempdata.rollno);
   printf("\n\t\t Enter The Name: ");
   scanf("%s",tempdata.name);
   printf("\n\t\t Enter The topic: ");
   scanf("%s",tempdata.topic);
   push (tempdata,&stack);
  }
 clrscr();
  break;

  case 2:
  if(stack.top==-1)
  {
   printf("\n\n\t\t\t Stack is EMPTY \n");
   getche();
  }
  else
  {
  clrscr();
   tempdata=pop(&stack);
   printf("\n\t\t The Removed Element Is: \n");
   printf("\t\t roll Number:%d\t\n",tempdata.rollno);
   printf("\t\t Name:%s\t\n",tempdata.name);
   printf("\t\t topic:%s\t\n",tempdata.topic);
   getche();
  }
  break;

  case 3:
  clrscr();
   disno(stack);
   break;

  case 4:
  clrscr();
   disall(stack);
   break;
  case 5: clrscr();
   sorting(&stack);
   dissort(stack);
   break;

  case 6:
  clrscr();
   printf("\n\n\n\n\n\n\n\n\n\n\t\t\t PROGRAM IS OVER \n");
   break;

  default:
   printf("\n\t\t ERROR.. The number you enterd is not avaliable\n");
   getche();
 }
 }
 while (opt!=6);
 getche();
}


 /* function starts here */

 void initialize (struct stack_type*pstack)
 {
  pstack -> top=-1;
 }

  void push (struct data_type element, struct stack_type *pstack)
 {
  pstack -> top=pstack ->top+1;
  pstack -> data[pstack ->top]=element;
 }


struct data_type pop (struct stack_type *pstack)
 {
 struct data_type temp;
 temp=pstack->data [pstack->top];
 pstack ->top=pstack->top-1;
 return (temp);
 }

  void sorting(struct stack_type *stack)
  {
   int i=0,j=0;
  struct data_type temp;
  for(i=0;i<stack->top;i++)
  {
   for(j=i+1;j<stack->top+1;j++)
   {
    if (stack->data.rollno > stack->data[j].rollno)
    {
     temp = stack->data;
     stack->data = stack->data[j];
     stack->data[j] = temp;
    }
   }
 }
  }
 void disno (struct stack_type stack)
  {


  int i,a=0;
  int rollno;
  struct data_type temp;
  printf("\n\t\t\t Enter the roll Number:");
  scanf("%d",&rollno);
  for (i=stack.top;i>=0;i--)
 {
  temp=stack.data;
  if(rollno==temp.rollno)
  {
   fflush(stdout);
   printf("\n\t\t\t The Name is =%s\n",temp.name);
   fflush(stdout);
   printf("\n\t\t\t The topic is =%s\n",temp.topic);
   a=1;
  }
  }
   if (a!=1)
   printf("\n\t\t\t The number you have entered is not available\n");

  }

   void disall (struct stack_type stack)
   {
   int i;
   struct data_type temp;
   if(stack.top==-1)
  printf("\n\t\t\t NO RECORD ENTERED \n");
   else
  {
  printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");
  for (i=stack.top; i>=0; i--)
  {
   temp = stack.data;
   fflush(stdout);
   printf("\t\t%d\t\t" ,temp.rollno);
   fflush(stdout);
   printf("%s\t\t",temp.name);
   fflush(stdout);
   printf("%s\t\n",temp.topic);
  }
  }

   }
void dissort (struct stack_type stack)
   {
   int i;
   struct data_type temp;
   if(stack.top==-1)
  printf("\n\t\t\t NO RECORD ENTERED \n");
   else
  {
  printf("\t\t%s\t%s\t%s","roll No\t", "Name\t", "topic\n");
  for(i=0;i<=stack.top;i++)
  {
   temp = stack.data;
   fflush(stdout);
   printf("\t\t%d\t\t" ,temp.rollno);
   fflush(stdout);
   printf("%s\t\t",temp.name);
   fflush(stdout);
   printf("%s\t\n",temp.topic);
  }
  }

   }
#13

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

اخي unknown أريد ان اسألك سوالا

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

الاخطاء هي على الداله getche()

فاستبد لتها بالداله

getchar()فاشتغل البرنامج باحسن مايكون طبعا بإلغاء الدالهclrscr()

ولاادري اخي هل هذا خطا منك وشكرا

اسأل الله ان يوفق الجميع لمايحب ويرضى

#14

اخي

**programme

اولا اشكرك جزيل الشكر على تجربتك واستخدامك للهذا الكود...

ثانيا...

هذا الكود ...شغال عندي 100000000% وطبعا انا استخدم لتشغيلة

Turbo C

فهو افضل.....

شكرا لك اخي العزيز.............

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

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

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

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

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

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