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

[تمت الإجابة]سؤال : كيف أفكّر لحل مسألة باستخدام القوائم ؟

بدأه tantie L في 10 نوفمبر 2013 · 11 رد · 1,546 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنا لا أطلب منكم الحل و لكن فقط أن تشيروا علي كيف أباشر و أتعامل مع هذا البرنامج فأنا لم أتعامل مع القوائم قط من قبل

 

أرجو أن تنصحوني أساتذتي و اخواني و أخواتي

 

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

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

 

و الله كفيل أجركم و ثوابكم

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


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#2

وانا لن أجيب :P

أختي الكريمة ..

فكّري بالطريقة التالية :

اللاعب هو كائن .. له اسم ولقب وموقع وثمن .. سننشئ struct نضع فيها هذه المعلومات , ولو كنا في ++C سننشئ class

فريق كرة القدم يملك أحد عشر لاعباً .. أي ( مصفوفة أو قائمة أو سلسلة .. إلخ ) من 11 عنصراً ..ولكن قد يكون عدد لاعبي الاحتياط غير محدد .. لذلك يجب أن نستخدم قائمة قابلة للتمدد (هذه طريقة تفكير ) أما التطبيق فقد يكون باستخدام linkedList

بالنسبة لأخذ بيانات الأعضاء فهذا بسيط .. ولن أتكلم فيه

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

 

أرجو منك أن تقرئي الدروس المثبّته للأخ Snack3er فوراً والآن ... ثم أن تقومي بحلّ المسألة .. ثم تدرجي الكود مع شرح فقراته .. ليكون الموضوع مفيداً لكل من يأتي بعدك ..

 

بالتوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 10 نوفمبر 2013 في 21:19 — السبب: تصحيح

1
#3

:P  :P  :P  حتى و ان أجبتني يا أستاذ فلن أتبع حلك فأنا جد عنيدة

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

و أكيد سأطرح الكود هذا ان كان صحيحا و ان كان خاطئا سأطلب تصحيحه منكم

و الآن الى المواضيغ المثبتة للأستاذ Snack3er 

مشكور

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


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#4
مصطفى 36a2 كتب:

وانا لن أجيب :P

أختي الكريمة ..

فكّري بالطريقة التالية :

اللاعب هو كائن .. له اسم ولقب وموقع وثمن .. سننشئ struct نضع فيها هذه المعلومات , ولو كنا في ++C سننشئ class

فريق كرة القدم يملك أحد عشر لاعباً .. أي ( مصفوفة أو قائمة أو سلسلة .. إلخ ) من 11 عنصراً ..ولكن قد يكون عدد لاعبي الاحتياط غير محدد .. لذلك يجب أن نستخدم قائمة قابلة للتمدد (هذه طريقة تفكير ) أما التطبيق فقد يكون باستخدام linkedList

بالنسبة لأخذ بيانات الأعضاء فهذا بسيط .. ولن أتكلم فيه

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

 

أرجو منك أن تقرئي الدروس المثبّته للأخ Snack3er فوراً والآن ... ثم أن تقومي بحلّ المسألة .. ثم تدرجي الكود مع شرح فقراته .. ليكون الموضوع مفيداً لكل من يأتي بعدك ..

 

بالتوفيق

ممكن الفرق بين المصفوفة والقائمة والسلسة

 

+

هي سقوم بالحدف والاضافة يعني ضروري استعمال LES LISTES CHAINEES

 

ممكن تقول لي اين هي  LES LISTES CHAINEES من بين المصفوفة والقائمة والسلسة

 

انا درست سابقا LES LISTES CHAINEES ولم اقم بصنع تطبيق اطبق فيه ما تعلمته سوى اشياء بسيطة للتعلم

يعني يمكننا التشارك في انجاز التمرين

#5

بصراحة ذكرت (مصفوفة , قائمة سلسلة ) من باب الترادف اللفظي .. حتى لا أقول قائمة فتظن الأخت أنها شيء جديد كلّيا ..ولكن بشكل عام ..كلمة مصفوفة تستخدم عادة لوصف الطريقة التالية في كتابة الكود :

Player myTeamplayers[100];
أي أنها من أساسيات اللغة .. لا تحتاج مكتبة ولا أي شيء خارجي .كلمة قائمة .. List هي هيكل بيانات .. ولكن هذا لا يعني أنها محصورة بشكل معيّن فهي مجرّد تمثيل نظري للقائمة .. قد ترغب باستعمال المصفوفة كــList أو قد ترغب باستعمال vector أو LinkedListالمهم ألا تخشى الاسم فكلها تدل على ترابط العناصر بشكل ما .. (هل وصلت الفكرة )
اقتباس
هي سقوم بالحدف والاضافة يعني ضروري استعمال LES LISTES CHAINEES
هذا ما كنت أتحدث عنه , جواب سؤالك : لا .أي كائن يمثّل قائمة يمكنه القيام بالعمليات السابقة (اضافة حذف بحث تعديل .. إلخ )ولكنها تتفاوت في الفعالية .. فمثلاً . لإضافة عنصر إلى مصفوفة في منتصفها سنحتاج إلى نسخ عناصر المصفوفة إلى مصفوفة أخرى كما يلي :مثلا نريد إضافة 5 في منتصف 1122 أي بين 1 و 2سننسخ 11 إلى مصفوفة أخرى . ثم ننسخ 5 ثم ننسخ 22 , راجع دروس الأخ Snack3er و انظر كيف يناقش الفرق بين إنشاء القائمة باستخدام مصفوفة أو باستخدام قائمة مترابطة listes chainees
اقتباس
مكن تقول لي اين هي LES LISTES CHAINEES من بين المصفوفة والقائمة والسلسة
الجواب بسيطLISTES قائمةCHAINEES متسلسلة (أو مترابطة )وهي تشبه المصفوفة في صفّ العناصر بشكل متتابع ( ولكن الفرق هو أن المصفوفة تصفّ العناصر بشكل متتابع في الذاكرة أي في عناوين الذاكرة بينما تصفّ القائمة المترابطة العناصر نظريّاً باستخدام المؤشرات أما في الذاكرة فهي عناصر غير متسلسلة )بالتوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 11 نوفمبر 2013 في 14:03 — السبب: تم نقل السؤال

#6

السلام عليكم

@MohcineFD

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

المصفوفة هي مجموعة من العناصر المترابطة بشكل متتالي مباشر أي 1 2 3 و نتمكن من الوصول الى عناصرها بشكل سهل بسيط مباشر عن طريق كتابة رقم الخانة المطلوبة فلو أردنا أن نصل مثلا الى 2 في المصفوفة الرقمية السابقة فكل ما علينا هو كتابة التعليمة ([printf("%d",t[1 بافتراض أن أول @ هي 0 و هذا مايميز المصفوفة عن  القاصمة أي سهولة الوصول الى العناصر و أما فيما يخص اضافة أو حذف عنصر فه عملية تطول في المصفوفة سواء في البداية أو الوسط لأنك ستظطر الى القيام بعملية نسخ و ازاحة أي decalage مع حفظ المحتوايات الخاصة بالخانات  ثم تقوم باظافة عنصرك الجديد و تقوم باعادة ما نسخته عملية طويلة ،أما العمليات على المصفوفات فهي ليست بالأمر الصعب فهي سهلة القيام على المصفوفة بشكل جميل و المصفوفة في الذاكرة تكون متسلسلة خانة بعد خانة و يجب عليك عندما تعمل على المصفوفات أن تقوم من البداية بحجز أكبر عدد ممكن أن يستخدمه المسنخدم لبرنامجك بطريقتين أما أن تستخدم

#define n 100

و هنا قمنا بحجز 100 خانة في الذاكرة 

 

أو أن تسستخدم الطريقة الروتينية و هي [int t[100 و هذه مصفوفة رقمية اسمها t عدد خاناتها 100 

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

 

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

القوائم أيضا هي مجموعة من الخانات متصلة فيما بينها لكن بالموقع في الذاكرة و نرمز له في لغة C ب & و هذا الموقع نعرفه بالمؤشر pointeur و هو متغير رقمي يقوم بالتأشير على أول موقع من القائمة و نسميه عندنا tete أي رأس القائمة و يمكنك أن تسميه كيفما شئت ثم ينتقل الى الخانة التالية -و أنا أفضل في القوائم أن نسمي عناصرنا بالعقدة- باستخدام ptr next وهو موقع العقدة التالية و يجب الاشارة الى أن مواقع قد تكون متباعدة مثلا من 10 الى 50 الى 30 و هكذا 

سأواصل اجابتك فيما بعد

1

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


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#7

@MouhcineFD

معذرة لأنني تأخرت في متابعة اجابتي فقد كنت أدرس...

توقفت عند طريقة النتقال بين عقد القائمة...من هذه الطريقة يمكنك الاستنتاج أنه للانتقال الى العقدة التالية فانك تحتاج للسابقة لأنها تحوي على الموقع الخاص بالتي تليها و هذا يعني أنك ان كنت تبحث عن عنصر ما فعليك المرور بالقائمة من الرأس ألى Null و هو العنصر الذي يعني أنه لا عقدة بعده...هذا حقا أمر سيء في القائمة لكنها تعتذر و تقول سأعوضكم عن هذا بالتالي فالقائمة تسهل الكثير الكثير من الأمور ومنها عملية الاضافة و الحذف كما أنه صديقة رائعة للذاكرة اذ أنها لا تحجز أكبر عدد من الخانات من البداية بل كلما احتجت الى عقدة جديدة تذهب الى المكان المطلوب بداية نهاية أو وسط و تقوم باستخدام malloc فتوجد عندك عقدة جديدة من نفس نوع قائمتك و كذلك الحذف بداية نهاية أو وسط ثم تستخدم free فتحذف العقدة التي عليها المؤشر و العمليات على القوائم هي أيضا سهلة بشكل جميل أما شكل القائمة في الذاكرة فهي ليست بالمتسلسلة فالعقدة الأولى قد تكون في مكان من الذاكرة و التي تليها بعيييييييييييييدة عنها و تصل اليها باستخدام المؤشر الذي يجد @ الخاصة بها في الحقل الثاني من العقدة التي تسبقها و هذا ما يأخذنا الى موضوع مهم مهم مهم مهم (كررها ما شئت) وهو الحفاظ على القيمة الأولى للرأس أو tete  لذلك لا تقم باستخدام متغير آخر له نفس اسم رأس القائمة الذي اخترته استخدم قدر ما شئت من المتغيرات لكن احذر ثم احذر ثم احذر أن تغير قيمة رأس القائمة لأنه ان حدث هذا فان رأس القائمة و القائمة و كل عملك سيذهب مع مهب الريح و هذا أفضع كوابيس أي مبرمج في بداية الطريق مثلي

و القاشمة نوعين : 

قائمة متصلة بسيطة Singly Linked List : و الحركة فيها تتم في اتجاه واحد من البداية الى Null

قائمة متصلة مضاعفة Doubly Linked List : و الحركة فيها تتم في اتجاهين

هذا ما أعرفه عن القوائم و المصفوفات

LES LISTES CHAINEES هي نفسها القائمة الا أنه تعبير يستعمل للاشارة الى مجموعة عقد مترابطة فيما بينها باستخدام المؤشر و @ ترسم نظريا عقدة منعدة حقول الحقل الأخير خاص ب@ الخاصة بالعقدة التالية لكنها حقيقة في الذاكرة خانات متباعدة

و أما فيما يخص مشاركتي في حلي لتمريني يبدو أن الأستاذ مصطفى لن يسمح بذلك

لكنني سأسألكم عن الأمور التي لم أعرفها و أكيد سأستغل البرنامج الذي تعملون عليه :evil:

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

موفق

1

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


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#8

أحسنت أختي شرح موفّق ويدل على فهمك للقوائم ( مع وجود بعض الملاحظات والأخطاء البسيطة في التعبير , لا داعي لذكرها )

 

بانتظار حلّك للمسألة , بالتوفيق

#9

بارك الله فيكم اخواني

لدي معلومات مسبقة عن القوائم سبق وان تعاملت بها وتلك المعلومات زادت الآن  :)

+

@ تنعي العنوان اي & في السي ؟؟

 

+

سنرى من سيقوم بعمل افضل تطبيق

وسأقول لك معلومة جد سرية وهي ان تطبيقنا سيكون جاهز يوم الاربعاء بادن الله  B)

#10

و فيك بارك الله 

علمت هذا لكن أردت أن أعيد منها اجابة على سؤالك و تأكيدا من صحة معلوماتي

أجل @ تعني & في السي adresse

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

أهنئكم على ذلك لكن لا تطرحوه حت لا أختلس النظر فأكون غششت فتعاونوا معي على البر و التقوى و لا تطرحوه الى أن أنهي كتابة برنامجي ....طلب غريب ههههه

و شكرا لك على هذه المعلومة السرية  B)

تم تعديل هذه المشاركة بواسطة tantie L في 12 نوفمبر 2013 في 02:40

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


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#11

!!!

لا يوجد عملية @ في السي ؟! ربما تقصدين بها الرمز إلى العنوان ليس إلا , وليس بداخل الكود .. أليس كذلك ؟

#12

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

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


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

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

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

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

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

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