الخوارزمياتالتعامل مع المصفوفة ذات البعدين - التمرين السابع
المطلوب
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
- أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 4 أسطر و 4 أعمدة. - ثم يطلب من المستخدم إدخال قيم لها.
إنتبه: نريد هذه المصفوفة أن تحتوي فقط على قيم أكبر أو تساوي صفر, مثل10
,43
,3
,5
,8
. - ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
- بعدها يقوم بجمع قيم جميع العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal و تحت الـ Diagonal.
- في الأخير يعرض للمستخدم ناتج الجمع.
إرشادات
لتمييز قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal برمجياً عليك إستغلال مكان وجود العنصر في المصفوفة.
ركز جيداً في الصورة و ستلاحظ أنه يمكنك تمييز مكان وجود العنصر بالنسبة للـ Diagonal كالتالي:
- إذا كان index السطر يساوي index العامود فهذا يعني أن العنصر موجود على الـ Diagonal مثل العناصر التالية:
matrix[0][0] matrix[1][1] matrix[2][2] matrix[3][3] - إذا كان index السطر أكبر من index العامود فهذا يعني أن العنصر موجود تحت الـ Diagonal مثل العناصر التالية:
matrix[1][0] matrix[2][0] matrix[2][1] matrix[3][0] matrix[3][1] matrix[3][2] - إذا كان index السطر أصغر من index العامود فهذا يعني أن العنصر موجود فوق الـ Diagonal مثل العناصر التالية:
matrix[0][1] matrix[0][2] matrix[0][3] matrix[1][2] matrix[1][3] matrix[2][3]
النتيجة المطلوبة
لنفترض أن المستخدم أدخل 12 قيمة كما في الصورة التالية عند التشغيل.
تحليل النتيجة
الخوارزمية
كود الجافا
شرح الكود
- هنا قمنا بتجهيز المصفوفة
matrix
و حددنا أنها تتألف من 4 أسطر و 4 أعمدة. - و المتغير
SOD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة على الـ Diagonal. - و المتغير
SAD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة فوق الـ Diagonal. - و المتغير
SUD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة تحت الـ Diagonal.
- هنا قمنا بإنشاء الحلقتين
i
وj
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفةmatrix
. - الحلقة
i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقةj
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة. - هنا في كل دورة من دورات الحلقة
i
سيتم إنشاء حلقةj
للمرور على جميع العناصر الموجودة في نفس السطر. - في كل دورة من دورات الحلقة
j
سيطلب من المستخدم إدخال قيمة لعنصر محدد في المصفوفة. - قبل تخزين القيمة التي أدخلها المستخدم في المصفوفة سيتم فحصها, إذا كانت أصغر من 0 سيطلب من المستخدم إدخال القيمة من جديد.
- الآن, بعد أن يدخل المستخدم قيمة أكبر أو تساوي 0 سيتم تخزينها في المصفوفة, و سيطلب من المستخدم إدخال قيمة للعنصر التالي في المصفوفة.
- بعد توقف الحلقة
j
(أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر) سيتم النزول على سطر جديد بسبب الرمز \n.
- هنا قمنا بإنشاء الحلقتين
i
وj
لعرض جميع قيم المصفوفةmatrix
. - الحلقة
i
للإنتقال من سطر إلى آخر فيها, و الحلقةj
للإنتقال من عمود إلى آخر في كل سطر فيها. - هنا في كل دورة من دورات الحلقة
i
سيتم إنشاء حلقةj
لعرض قيمة جميع العناصر الموجودة في نفس السطر. - في كل دورة من دورات الحلقة
j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t. - بعد توقف الحلقة
j
(أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر) سيتم النزول على سطر جديد بسبب الرمز \n.
- هنا أنشانا الحلقتين
i
وj
للوصول إلى جميع عناصر المصفوفة. - كل عنصر يتم الوصول إليه سيتم مقارنة مكان وجوده مع قيمة العدادين
i
وj
كالتالي: - إذا كانت قيمة العداد
i
تساوي قيمة العدادj
فهذا يعني أن العنصر موجود على الـ Diagonal و بالتالي سيتم إضافة قيمته على قيمة المتغيرSOD
. - و إذا كانت قيمة العداد
i
أصغر من قيمة العدادj
فهذا يعني أن العنصر موجود فوق الـ Diagonal و بالتالي سيتم إضافة قيمته على قيمة المتغيرSAD
. - و إذا كانت قيمة العداد
i
أكبر من قيمة العدادj
فهذا يعني أن العنصر موجود تحت الـ Diagonal و بالتالي سيتم إضافة قيمته على قيمة المتغيرSUD
.
- هنا قمنا بعرض ناتج جمع قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal و تحت الـ Diagonal التي تم تخزينها في المتغيرات
SAD
,SOD
وSUD
.