المطلوب
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
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]
.
النتيجة المطلوبة
لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12 ) عند التشغيل.
كود الجافا
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
.