التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
جدول المحتويات
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
المطلوب
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
- أكتب برنامج يعرّف مصفوفة إسمها
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 مثل العناصر التالية:
-
- إذا كان index السطر أكبر من index العامود فهذا يعني أن العنصر موجود تحت الـ Diagonal مثل العناصر التالية:
matrix[1][0]
matrix[2][0]
matrix[2][1]
matrix[3][0]
matrix[3][1]
matrix[3][2]
- إذا كان index السطر أكبر من index العامود فهذا يعني أن العنصر موجود تحت الـ Diagonal مثل العناصر التالية:
- إذا كان index السطر أصغر من index العامود فهذا يعني أن العنصر موجود فوق الـ Diagonal مثل العناصر التالية:
matrix[0][1]
matrix[0][2]
matrix[0][3]
matrix[1][2]
matrix[1][3]
matrix[2][3]
النتيجة المطلوبة
لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12 ) عند التشغيل.
كود الجافا
- package matrix;
- import java.util.Scanner;
- public class Matrix {
- public static void main (String[] args) {
- Scanner input = new Scanner(System.in);
- int[][] matrix = new int[4] [4] ;
- int SOD = 0; // Diagonal سنخزن فيه قيم العناصر الموجودة على الـ SOD المتغير
- int SAD = 0; // Diagonal سنخزن فيه قيم العناصر الموجودة فوق الـ SAD المتغير
- int SUD = 0; // Diagonal سنخزن فيه قيم العناصر الموجودة تحت الـ SUD المتغير
- for (int i=0; i<4; i++)
- {
- for (int j=0; j<4; j++)
- {
- do
- {
- System.out.print(“Enter matrix[“+i+“][“+j+“]: “);
- matrix[i] [j] = input.nextInt();
- }
- while( matrix[i] [j] < 0 );
- }
- System.out.print(“\n”);
- }
- for (int i=0; i<4; i++)
- {
- for (int j=0; j<4; j++)
- {
- System.out.print(matrix[i] [j] + “\t”);
- }
- System.out.print(“\n”);
- }
- for (int i=0; i<4; i++)
- {
- for (int j=0; j<4; j++)
- {
- if ( i == j )
- {
- SOD = SOD + matrix[i] [j] ;
- }
- else if ( i < j )
- {
- SAD = SAD + matrix[i] [j] ;
- }
- else if ( i > j )
- {
- SUD = SUD + matrix[i] [j] ;
- }
- }
- }
- System.out.print(“\n”);
- System.out.print(“The sum of elements above the diagonal is: “ +SAD+ “\n”);
- System.out.print(“The sum of elements on the diagonal is: “ +SOD+ “\n”);
- System.out.print(“The sum of elements under the diagonal is: “ +SUD+ “\n”);
- }
- }
شرح الكود
- int[][] matrix = new int[4] [4] ;
- int SOD = 0;
- int SAD = 0;
- int SUD = 0;
-
- هنا قمنا بتجهيز المصفوفة
matrix
و حددنا أنها تتألف من 4 أسطر و 4 أعمدة. - و المتغير
SOD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة على الـ Diagonal. - و المتغير
SAD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة فوق الـ Diagonal. - و المتغير
SUD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة تحت الـ Diagonal.
- هنا قمنا بتجهيز المصفوفة
- for (int i=0; i<4; i++)
- {
- for (int j=0; j<4; j++)
- {
- do
- {
- System.out.print(“Enter matrix[“+i+“][“+j+“]: “);
- matrix[i] [j] = input.nextInt();
- }
- while( matrix[i] [j] < 0 );
- }
- System.out.print(“\n”);
- }
-
- هنا قمنا بإنشاء الحلقتين
i
وj
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفةmatrix
- الحلقة
i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقةj
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة. - هنا في كل دورة من دورات الحلقة
i
سيتم إنشاء حلقةj
للمرور على جميع العناصر الموجودة في نفس السطر. - في كل دورة من دورات الحلقة
j
سيطلب من المستخدم إدخال قيمة لعنصر محدد في المصفوفة. - قبل تخزين القيمة التي أدخلها المستخدم في المصفوفة سيتم فحصها, إذا كانت أصغر من 0 سيطلب من المستخدم إدخال القيمة من جديد.
- الآن, بعد أن يدخل المستخدم قيمة أكبر أو تساوي 0 سيتم تخزينها في المصفوفة, و سيطلب من المستخدم إدخال قيمة للعنصر التالي في المصفوفة.
- بعد توقف الحلقة
j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز\n
- هنا قمنا بإنشاء الحلقتين
- for (int i=0; i<4; i++)
- {
- for (int j=0; j<4; j++)
- {
- System.out.print(matrix[i] [j] + “\t”);
- }
- System.out.print(“\n”);
- }
-
- هنا قمنا بإنشاء الحلقتين
i
وj
لعرض جميع قيم المصفوفةmatrix
- الحلقة
i
للإنتقال من سطر إلى آخر فيها, و الحلقةj
للإنتقال من عمود إلى آخر في كل سطر فيها. - هنا في كل دورة من دورات الحلقة
i
سيتم إنشاء حلقةj
لعرض قيمة جميع العناصر الموجودة في نفس السطر. - في كل دورة من دورات الحلقة
j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز\t
- بعد توقف الحلقة
j
, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز\n
- هنا قمنا بإنشاء الحلقتين
- for (int i=0; i<4; i++)
- {
- for (int j=0; j<4; j++)
- {
- if ( i == j )
- {
- SOD = SOD + matrix[i] [j] ;
- }
- else if ( i < j )
- {
- SAD = SAD + matrix[i] [j] ;
- }
- else if ( i > j )
- {
- SUD = SUD + matrix[i] [j] ;
- }
- }
- }
-
- هنا أنشانا الحلقتين
i
وj
للوصول إلى جميع عناصر المصفوفة. - كل عنصر يتم الوصول إليه سيتم مقارنة مكان وجوده مع قيمة العدادين
i
وj
كالتالي:- إذا كانت قيمة العداد
i
تساوي قيمة العدادj
, يعني ذلك أن العنصر موجود على الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغيرSOD
- و إذا كانت قيمة العداد
i
أصغر من قيمة العدادj
, يعني ذلك أن العنصر موجود فوق الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغيرSAD
- و إذا كانت قيمة العداد
i
أكبر من قيمة العدادj
, يعني ذلك أن العنصر موجود تحت الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغيرSUD
- إذا كانت قيمة العداد
- هنا أنشانا الحلقتين
- System.out.print(“\n”);
- System.out.print(“The sum of elements above the diagonal is: “ +SAD+ “\n”);
- System.out.print(“The sum of elements on the diagonal is: “ +SOD+ “\n”);
- System.out.print(“The sum of elements under the diagonal is: “ +SUD+ “\n”);
- هنا قمنا بعرض ناتج جمع قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal و التي تم تخزينه في المتغيرات
SAD
, وSOD
, وSUD
المصدر: التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع – المناهج السعودية