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

I need help

مغلق
بدأه reem-12 في 10 مارس 2005 · 2 رد · 394 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ارجو مساعدتي في معرفة الطريقة التي احل بها هذه المسأله

بالسـي بلاس بلاس

a- Write a recursive function named total2d that find and return the total "sum" of all elements in a two dimension array. The function prototype is :

int total2d(int A[ ] [10 ] , int rowsize , int colsize, int colindex );

b- write a program to call and test the above total2d function.

#2

وعليكم السلام وتحية للجميع

بالبداية انا لا اعرف ما الفائدة من المتحول

colindex والرجاء توضيحه ان كان لابد من استخدامه في الحل

هذا total2d ولكن بمتحولين هما عدد الاعمدة والاسطر

============================================

int total2d(int A[ ] [ ],int row,int col)

{ if(row==0 && col==0)

return A[row][col];

else

if( row > 0)

return total2d(A , row-1,col)+A[row-1][col];

if(col >0)

return total2d(A,row,col-1)+A[row][col-1];

}

========================================

وان هناك سؤال او توضيح ارجو الرد .

وفي كل مرة لا ننسى الشكر للقائمين على هذا الموقع وما يقدمونه من افادة للناطقين بلغة الضاد

#3

الفكرة من الـ recursion هي تعريف شيء ما على أساس انه هذا الشيء مع الأخذ بعين الاعتبار بقية الأشياء في المجموعة.

مثلا أن نعرف "مجموع" رقم معين على أنه الرقم نفسه + الرقم الأصغر منه + الرقم الأصغر منه + ... الى أن نصل الى + صفر.

فمجموع الرقم س هو س + مجموع (س - 1)

كيف؟

لاحظ:

مجموع 1 هو 1 + 0 = 1

مجموع 2 هو 2 + 1 + 0 = 0

مجموع 3 هو 3 + 2 + 1 + 0 = 0

و لكن لاحظ ان 3 + 2 + 1 + 0 هو نفس 3 + مجموع 2

و كذلك الحال مع كافة الأرقام, باستثناء 0, فمجموع 0 هو 0, و عندما نصل الى 0 ينتهي الجمع.

فمجموع 1 هو 1 + مجموع 0, لكن مجموع 0 هو 0, لذلك مجموع 1 هو 1 + 0 = 1

مجموع 2 هو 2 + مجموع 1, لكن مجموع 1 هو 1 + مجموع 0, لكن مجموع 0 هو 0, لذلك مجموع 1 هو 1 + 0 = 1, لذلك مجموع 2 هو 2 + 1 = 3

لاحظ اننا ندخل الى مجموع جديد ثم نخرج منه .. فنحن ندخل في دالة جديدة ثم من هناك ندخل في دالة أخرى .. و هكذا .. لكن يجب أن نتوقف في لحظة من اللحظات, و إلا لن ينتهي البرنامج أبدا! و عندما نتوقف نخرج من ادالة الأخيرة, ثم نخرج من الدالة اللتي قبلها, الخ حتى نعود الى البداية.

ربما العملية شوية معقدة و تحتاج لبعض الوقت للفهم و الهضم.

عموما, في حالتك هنا لدينا حجم معين لطول و عرض المصفوفة, فهذا الحجم يخبرنا متى نتوقف, و لدينا colindex و هو حسب ما أظن هو "الخلية" او "المربع" او "العنصر" الحالي في هذه المصفوفة,

الحل هنا بشكل عام يمكن أن يكون:

مجموع الأرقام في المصفوفة ابتداءا من colindex هو colindex + مجموع الأرقام في المصفوفة ابتداءا من colindex + 1

يعني الرقم الحالي + المجموع الناتج من الرقم التالي ..

هنا سنتوقف عندما نصل الى الـ rowsize و الـ colsize

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

المشكلة أن السؤال يتطلب صيغة معينة للدالة, لذلك قد تظطر لإعادة كتباتها و لكن بإمكانك استخدام ذلك الكود كأساس تنطلق منه لحل السؤال.

لا أدري إن كان شرحي جيدا ام سيء, أرجوا ان تعلمنا بالتطورات

بالتوفيق.

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

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