طباعة مصفوفة ثنائية البعد (2D) بشكل مائل (طلب مساعدة)

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

حاولت كتابة دالة (function) تقوم بطباعة مصفوفة ثنائية البعد (2D) بشكل مائل

ولنفترض أن المصفوفة 3×3

وكانت المدخلات بالترتيب 

array[0][0] , array[0][1] , array[0][2]
array[1][0] , array[1][1] , array[1][2]
array[2][0] , array[2][1] , array[2][2]

inPut :

3 2 1

6 5 4 

9 8 7

عندها ستكون المخرجات

outPut:

9 6 8 3 5 7 2 4 1

والسر في التلاعب بالعلاقة بين مؤشر اللوب الداخلي واللوب الخارجي

من يساعدني في حلها :)

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

أنا أساعدك، ولكن لن اعطيك الحل تام. واضح عليه انه تكليف جامعي. لذلك تحتاج ان تجتهد قليلاً.

في مثل هذه المسائل ركز أولاً بالعلاقة الفعلية، (لا اقصد علاقة العين البشرية) فأن من خلال عينك تعرف طريقة سير القارئ (iterator).

لاحظ لدينا في مصوفة ذات بعدين. أي ثلاث مصفوفات داخل مصفوفة.

المصفوفة صفر هي:

 1,2,3

المصفوفة واحد هي:

 4,5,6

المصفوفة اثنان هي:

 7,8,9

أنت تريد القارئ يأخذ في الدورة الاولى (0,0)

وفي الدورة الثانية (1,0) و (0,1)

وفي الدورة الثالثة (2,0) و (1,1) و (0,2)

وفي الدورة الرابعة (2,1) و (1,2)

وفي الدورة الخامسة (2,2)

ولنفترض ان هناك قيمة لمتغير d تساوي ثلاثة، أي حجم المصفوفة الكبيرة 3x3  من هنا انت عرفت ان الدورة الاولى دائما (0,0) والاخيرة دائما

   (d-1,d-1) 

معنى ذلك في For loop عندما تساوي i صفر ! سوف تأخذ (i,i)

لاحظ هنا السر في الدورة الثانية عندما يكون i يساوي واحد فأول مدخل تأخذه (1,0) يعني ذلك (i,0) أول قيمة من المصفوفة i ( يعني رقم الدورة اذا بداءت من الصفر )

في حال (كانت الدورة رقمها مثلا ٤ (الأخيرة في هذا المثال) لو تلاحظ لاتملك المصفوفة هذا الرقم (i,0) أي (4,0) فهو عنوان خاطئ! تأخذ الحد الاقصى في البعد الأول والباقي تضعه في البعد الثاني. مثلاً الحد الأقصى هو اثنان (d-1). لذا نأخذ من الأربعة اثنان .. يتبقى اثنان فيصبح كذلك (2,2) كما جاء في الدورة الرابعة.

هذا الخانة الاولى من كل دورة، اذا كيف ايجاد الخانة الثانية او وجدت او الثالثة!

لو تلاحظ (رقم الدورة + ١) يساوي (عدد الخانات التي يجب ان تجدها في كل دورة)

نعود للدورة الثانية وعرفنا كيف نجد اول خانة وعرفنا ان (i,0) هي اول خانة وفي الدورة الثانية يكون i تساوي واحد لذا يكون العنوان للخانة الاولى هو (1,0) ولكن ١ + ١ يساوي اثنان يعني يجب ايجاد خانة اخرى هنا كيف نجدها ؟

لو تلاحظ البعد الاول من كل خانة في كل دورة يتناقص عن ماقبلة في نفس الدورة وايضاً البعد الثاني من كل خانة في الدورة نفسها يزيد واحد عن الخانة التي قبلها. هنا صورة للتوضيح.

وهنا فهمت المسألة منطقياً تستطيع شرحها بالكود .. (اذا لم تستطيع) ، ارفق لي محاولتك وسوف أخبرك بالخلل.

عسى أن لا يكون هذا واجب بيتي لك :)

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

في الحلقة الداخلية ، إذا كان رقم العمود مختلف عن رقم الصف ، قم بإنشاء متغيران جديدان لرقم العمود و رقم الصف ، مثلاً I , J ،

I = (2 - j ) % (i + 2)

و الآخر ،

J = j + (i - 1)

الأفضل أن تستبدل الرقم 2 بمتغيرات ، عليك أن تعرف كيف تستخرج هذه المتغيرات ؛)

بالتوفيق

لم أفهم ، كيف تريدها مائلة؟

1

..2

....3

......4

هكذا؟

عذراً أخي ربما الشرح غير واضح

المقصود أخي طباعة المصفوفة على خط واحد

9 8 7 6 5 4 3 2 1 

ولكن ترتيب الطباعة ليس نفسه ترتيب العناصر في المصفوفة وإنما كالتالي :

array [0][0] >>array[1][0] >> array[0][1] >> وهكذا

والمثال فوق يوضح طريقة إخراج البيانات