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

اريد مساعدة مستعجلة في stack.......

مغلق
بدأه برمجة في 24 نوفمبر 2002 · 14 رد · 1,013 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف أخزن "Two Dimensional array" مصفوفة ذات بعدين في stack ?

بتوضيح أكثر البرنامج طويل لكن الكود الذي بسببه لم أستطيع تكملة البرنامج هو هذا الجزء و هو أن المستخدم المفروض يدخل رقمين أول مرة يدخل الرقم الأول ثم الرقم الثاني يعني متغيرين و بعد ذلك أريد ان اخزن هذه الأرقام في stack

بحيث عند طباعتها تنطبع على شكل مصفوفة ذات بعدين ؟؟؟

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

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

و جزاكم الله خيرا.....(f)

#2

السلام عليكم ,,,

أخي لم أفهم المطلوب بالظبط و لكن ممكن ان تضع الكود

هنا لتساعدنا في فهم المطلوب من البرنامج :)

مع تحياتي ,,, أخوك / طلال.

#3

السلام عليكم

اسفه لعدم التوضيح لكن البرنامج طويل لذلك سأختصره على الكود الذي لم اعرف اكمله ...........

اساس البرنامج هو كيف ادخل Tree و اعمل عليها مثل search و لكن بطريقة معينة اسمها "Depth First Search" و هذه الطريقة معقدة بعض الشيء لأن يكون فيها Two List المفروض واحدة منهم تكون stack و الأخرى تكون Queue ...

أنا سأكتب لك Algorithm البرنامج حتى تستطيع فهمه و بعد ذلك سأكتب لك الكود الذي اريد مساعدتك في

تصحيحه!!!!!!

Algorithm:-

step 1: start with open &closed list

step 2: initially open list is root and closed is empty

step 3: if Root is goal Then exit

step4: Else put the node adjacent of Root in the left open list and exit the root in the closed list

step 5: if first node in open list not goal node Then put the adjacent of the node in the left open list and exit the first node of open list in the closed list Else exit

step 6: Go to step 5 , if open listis empty or find the goal Then exit,Algrithm is finished

لقد استفدت منك و من الأخت لغة_ سي كثيرا في كيفية انشاء Tree التي على اساسها سأطبق Algorithm

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

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

وهذه هي فكرتي في هذه الفقرة فاذا كان عندك اي فكرة غير هذه ممكن استخدمها.........

اسفه جدا للإطالة لكن ان شاء الله اكون قدرت اوضح لك السؤال ......

مشكلة الكود في function push & function pop

لا تستغرب اذا لقيت متغيرات ما استخدمتها او اي شيء غريب لأن هذا جزء من البرنامج ............

ان شاء الله تقدر تساعدني و شكرا اتعبتكم معايا......

الكود

#include<iostream.h>

#include<iostream.h>

#include<conio.h>

void addvertex(int lab,int vertexlist[],int& nver);

void display(int &v,int vertexlist[]);

void addedge(int v,int e1,int e2,int adjmat[5][5]);

void pop(int array[5][5],int& top1,int &top2,int w,int t,int ch[5][5]);

void push(int array[5][5],int& top1,int &top2,int ch[5][5],int s,int e,int v);

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

void main()

 {

   clrscr();

    int adj[5][5],edgelist[5][5],nedge=-1,vertexlist[5][5];

    int nver=-1,r,i,j,se,ee;

    int v,top=-1,top1=-1;

     for(i=1;i<5;i++)

      {

        for(j=1;j<5;j++)

         {

           adj[j]=0;

           cout<<adj[j];

         }

        cout<<"n";

      }

    cout<<"enter vertex";

    cin>>v;

    addvertex(v,vertexlist,nver);

    cout<<"enter start edge";

    cin>>se;

    cout<<"enter end edge";

    cin>>ee;

    addedge(v,se,ee,adj);

    push(edgelist,nedge,top,adj,se,ee,v);

    display(nver,vertexlist);

    pop(edgelist,nedge,top,se,ee,adj);

  getch();

}

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

   void pop(int array[5][5],int& top1,int &top2,int w,int t,int ch[5][5])

   {

    for(int i=0;top1!=-1;i++)

    {for(int j=0;top2!=-1;j++)

        {  cout<<array[top1][top2];

         --top1;

         --top2;

     cout<<"n";

         }



    }

  }

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

void addvertex(int lab,int vertexlist[],int& nver)

 {

    nver++;

    vertexlist[nver]=lab;

 }

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

void addedge(int ver,int e1,int e2,int adjmat[5][5])

{

  adjmat[ver][e1]=1;

  adjmat[ver][e2]=1;

  adjmat[e1][ver]=1;

  adjmat[e2][ver]=1;

  cout<<"nedge="<<adjmat[e2][ver];

}

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

void display(int &v,int vertexlist[])

{

  while(v!=-1)

   {

     cout<<"nThe vertex="<<vertexlist[v];

     --v;

   }

}

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

void push(int array[5][5],int& top1,int &top2,int ch[5][5],int s,int e,int v)

 {

    ++top1;

     ++top2;

    array[top1][top2]=ch[v][e];

    array[top1][top2]=ch[e][v];

    array[top1][top2]=ch[v];

    array[top1][top2]=ch[v];



 }

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#4

انا اسفه لانني لم قرات البرنامج جيد

لكن لماذا لم تستخدمي struct في هذا البرنامج

اختكم

لغة سي

#5

السلام عليكم

لقد فعلت هذا البرنامج كثير جدا و بطرق مختلفة تقريبا خمسة مرات و أنا اكرر البرنامج و في كل مرة استخدم شيء فقد استخدمت structure و استخدمت class و جعلت البرنامج كله على بعض من غير function و لكن مشكلتي في الشروط عند تطبيقها لاحظت انها صعبة في حالات structure & class لذلك اقتصرت الموضوع على function لأنه بالنسبة لي و لطول البرنامج اسهل بكثير

الكود الذي عرضته عليكم كان جزء من البرنامج ....

#6

السلام عليكم ,,,

أختي لقد قرأت البرنامج و لكن البرنامج ملخبط للغاية :(

ما فهمت كيف برمجتي الدالتين push و pop ?

أختي أنتي برمجتيها أعتقد بالمصفوفات مو ؟

ممكن تبرمجيها Dynamikly أي بإستخدام العامل new.

و هذا أفضل :)

ممكن تشرحي البرنامج مرة أخرى لو تكرمتي

بوضوح و نقطة نقطة :)

مع تحياتي ,,, أخوك / طلال.

#7

اولا شكرا على الرد

ثانيا كما ذكرت سابقا انا كتبت البرنامج في اكثر من طريقة

و الأن انا اشتغل على طريقة اخرى غير التي ذكرتها ان اشتغلت معايا كملت عليها و ان واجهتني مشاكل لا غنى عنكم

انا اسفه جدا جدا جدا للإزعاج لأن افكاري غير مرتبة تقريبا

لذلك اعمل اكثر من طريقة حتى اصل للحل الصحيح

و ان شاء الله تكون هي المحاولة الأخيرة.........

و بالنسبة لإستخدام العامل new انا الشيء الذي لا اعرف التعامل معه جيدا احاول قدر الإمكان الإبتعاد عنه حتى لا ادخل في متاهات و مشاكل لاني في محاولاتي السابقة استخدمته و لكن واجهتني في بعض المشاكل......

و مرة اخرى اسفة للإزعاج

ان شاء الله اذا انتهيت منه اعرض عليكم النتيجة النهائية .....

#8

السلام عليكم ,,,

نحن في الانتظار أختي :)

و من ثم ليس الحل التهرب عندما لا تجيدن الشيئ

بل أصري على معرفته جيداً :)

مع تحياتي ,,,أخوك / طلال.

#9

السلام عليكم

على حسب فهمي

ان البرنامج يسير على شكل الاتي:

ان المستخدم يدخل الرقم والموقع

واذا تم اختيار حذف يجب ان يحذف الرقم مع الموقع

************

انا من رايي

ان تستخديم strcut

تعرفين فيها موقع الرقم row ,col

وتستخدميها على شكل list

ويكون stackعلى list

اذا انا فهمت البرنامج صح، اردي تاكيد على ذلك

اختكم

لغة سي

#10

السلام عليكم

فكرة البرنامج هي كالتالي:

يطلب من المستخدم يدخل Tree ثم يدخل node يريد البحث عنها بطريقة معينة...

طريقة البحث: في البداية يكون عندي Two list واحدة منهم اسمها open و تتخزن على شكل Queue و الأخرى اسمها close وتتخزن على شكل Stack

open يكون فيها في البداية الـRoot

اسأل المستخدم ما هي الـ node التي يريد البحث عنها؟؟

الشروط :

اذا كانت الـnode التي يبحث عنها هي الـ Root يتوقف و يظهر رسالة تفيد بأنه وجد الـnode ....

اذا لم تكن الـnode التي يبحث عنها هي الـ Root يضع هذا الـRoot في close و يضع الـnode adjacent تبع هذا الـRoot في open

(علما ان البحث يكون عن طريق open)

ثم يرى اول node adjacent من اليسار بالنسبة لهذا الـRoot

هل هي الـnode المطلوب البحث عنها ؟؟

فإن لم تكن هي يضعها في close و يضيف الـnode adjacent تبعها في open,,,,,,,ثم يرى اول node adjacent من اليسار بالنسبة لهذا الـRoot

هل هي الـnode المطلوب البحث عنها ؟؟

ان لم تكن هي يضعها في close و يضيف الـnode adjacent

تبعها في open,,,,,,,,وثم يكرر السابق و يستمر في ذلك حتى يجد الـnode او تصبح الـopen فاضية في هذه الحالة يتوقف عن البحث و ينتهي البرنامج...............

هذا بالنسبة لفكرة البرنامج

__________________________________

بالنسبة لتطبيق الشروط بالنسبة لطريقة الحل التي سأتبعها

ساجعل المستخدم يدخل مصفوفة ذات بعدين يكون الصفوف عبارة عن Root و الأعمدة عبارة عن node adjacent

فكرة هذه المصفوفة ان كل node مرتبطة بالـRoot تساوي واحد و الباقي اصفار

مثـــــال لذلك هذه المصفوفة:

__ 1 2 3 4 5 هذه الأعمدة يعني node adjacent

___________________

1 _ 0 1 1 0 0

2 _ 1 0 0 1 1 الصفوف عبارة عن الـRoot

3 _ 1 0 0 0 0

4 _ 0 1 0 0 0

5 _ 0 1 0 0 0

شرح المصفوفة ان 1 هو الـRoot و child تبعه هو 2 و 3 و ان 2 child تبعها هو 4و 5 و ان 3و4و5 ليس لها child

(باختصار الـnode adjacent التي كنت اتحدث عنها في البداية هي رقم العمود الذي يحتوي على الواحد......

مثـــــــــــــال:

لو كان المطلوب من هذه الـTree الرقم (5) في البداية نضع (1) في open بما انها لا تساوي الرقم الذي طلبه المستخدم و هو (5) اضع )1( في close و اضع(2)و(3) في open ثم اختبر (2) هل هي المطلوبة طبعا لا ؟ اذا اضعها في close و اضع في open الأربعة و الخمسة ثم اختبر الأربعة هل هي المطلوبة طبعا لا ؟ اذا اضعها في close و اختبر الخمسة و هي المطلوبة ؟

ملاحظة: لا اكرر الأرقام التي وضعتها في close مثال الأربعة لم اضع لها (2) بالرغم من انها node adjacent تبع الأربعة ....

__________________________________

ان شاء الله هذه المرة اكون قدرت اوصل لكم الفكرة ........

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

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

و اسفه مرة اخرى على الإزعاج.........

#11

عرفت ما تقصدين

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

كما هو موجود في الملف السابق

اختكم لغة سي

#12

السلام عليكم

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

و شكرا لك و كل عام و انت بخير

#13

هل قمتي بعمل البرنامج

ام مازلا هناك مشاكل

اختكم

لغةسي

#14

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

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

شكرا لكي على الإهتمام....

#15

وانا الانتظر

وان شاء الله احل المشكلة في اقرب فرصة

اختكم

لغة سي

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

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