التعليم السعودي

التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع

التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع
التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع

المناهج السعودية

التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع

المطلوب

هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 4 أسطر و 4 أعمدة.
  2. ثم يطلب من المستخدم إدخال قيم لها.
    إنتبه: نريد هذه المصفوفة أن تحتوي فقط على قيم أكبر أو تساوي صفر, مثل ( 10, 43, 3, 5, 8 ).
  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
  4. بعدها يقوم بجمع قيم جميع العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal.
  5. في الأخير يقوم يعرض للمستخدم ناتج الجمع.

 

إرشادات

لتمييز قيم العناصر الموجودة على الـ 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]

 

النتيجة المطلوبة

لنفترض أن المستخدم أدخل القيم 1234567 ,89101112 ) عند التشغيل.

تحليل النتيجة

الخوارزمية

كود الجافا

  1. package matrix;
  2. import java.util.Scanner;
  3. public class Matrix {
  4.     public static void main (String[] args) {
  5.         Scanner input = new Scanner(System.in);
  6.         int[][] matrix = new int[4] [4] ;
  7.         int SOD = 0;                         // Diagonal سنخزن فيه قيم العناصر الموجودة على الـ SOD المتغير
  8.         int SAD = 0;                         // Diagonal سنخزن فيه قيم العناصر الموجودة فوق الـ SAD المتغير
  9.         int SUD = 0;                         // Diagonal سنخزن فيه قيم العناصر الموجودة تحت الـ SUD المتغير
  10.         for (int i=0; i<4; i++)
  11.         {
  12.             for (int j=0; j<4; j++)
  13.             {
  14.                 do
  15.                 {
  16.                     System.out.print(“Enter matrix[“+i+“][“+j+“]: “);
  17.                     matrix[i] [j] = input.nextInt();
  18.                 }
  19.                 while( matrix[i] [j] < 0 );
  20.             }
  21.             System.out.print(“\n”);
  22.         }
  23.         for (int i=0; i<4; i++)
  24.         {
  25.             for (int j=0; j<4; j++)
  26.             {
  27.                 System.out.print(matrix[i] [j] + “\t”);
  28.             }
  29.             System.out.print(“\n”);
  30.         }
  31.         for (int i=0; i<4; i++)
  32.         {
  33.             for (int j=0; j<4; j++)
  34.             {
  35.                 if ( i == j )
  36.                 {
  37.                     SOD = SOD + matrix[i] [j] ;
  38.                 }
  39.                 else if ( i < j )
  40.                 {
  41.                     SAD = SAD + matrix[i] [j] ;
  42.                 }
  43.                 else if ( i > j )
  44.                 {
  45.                     SUD = SUD + matrix[i] [j] ;
  46.                 }
  47.             }
  48.         }
  49.         System.out.print(“\n”);
  50.         System.out.print(“The sum of elements above the diagonal is: “ +SAD+ “\n”);
  51.         System.out.print(“The sum of elements on the diagonal is: “ +SOD+ “\n”);
  52.         System.out.print(“The sum of elements under the diagonal is: “ +SUD+ “\n”);
  53.     }
  54. }

شرح الكود

  1.         int[][] matrix = new int[4] [4] ;
  2.         int SOD = 0;
  3.         int SAD = 0;
  4.         int SUD = 0;
    • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 4 أسطر و 4 أعمدة.
    • و المتغير SOD و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة على الـ Diagonal.
    • و المتغير SAD و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة فوق الـ Diagonal.
    • و المتغير SUD و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة تحت الـ Diagonal.
  1.         for (int i=0; i<4; i++)
  2.         {
  3.             for (int j=0; j<4; j++)
  4.             {
  5.                 do
  6.                 {
  7.                     System.out.print(“Enter matrix[“+i+“][“+j+“]: “);
  8.                     matrix[i] [j] = input.nextInt();
  9.                 }
  10.                 while( matrix[i] [j] < 0 );
  11.             }
  12.             System.out.print(“\n”);
  13.         }
    • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة matrix
    • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
    • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.
    • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر محدد في المصفوفة.
    • قبل تخزين القيمة التي أدخلها المستخدم في المصفوفة سيتم فحصها, إذا كانت أصغر من 0 سيطلب من المستخدم إدخال القيمة من جديد.
    • الآن, بعد أن يدخل المستخدم قيمة أكبر أو تساوي 0 سيتم تخزينها في المصفوفة, و سيطلب من المستخدم إدخال قيمة للعنصر التالي في المصفوفة.
    • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
  1.         for (int i=0; i<4; i++)
  2.         {
  3.             for (int j=0; j<4; j++)
  4.             {
  5.                 System.out.print(matrix[i] [j] + “\t”);
  6.             }
  7.             System.out.print(“\n”);
  8.         }
    • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة matrix
    • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.
    • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.
    • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t
    • بعد توقف الحلقة j, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
  1.         for (int i=0; i<4; i++)
  2.         {
  3.             for (int j=0; j<4; j++)
  4.             {
  5.                 if ( i == j )
  6.                 {
  7.                     SOD = SOD + matrix[i] [j] ;
  8.                 }
  9.                 else if ( i < j )
  10.                 {
  11.                     SAD = SAD + matrix[i] [j] ;
  12.                 }
  13.                 else if ( i > j )
  14.                 {
  15.                     SUD = SUD + matrix[i] [j] ;
  16.                 }
  17.             }
  18.         }
    • هنا أنشانا الحلقتين i و j للوصول إلى جميع عناصر المصفوفة.
    • كل عنصر يتم الوصول إليه سيتم مقارنة مكان وجوده مع قيمة العدادين i و j  كالتالي:
      • إذا كانت قيمة العداد i تساوي قيمة العداد j, يعني ذلك أن العنصر موجود على الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغير SOD
      • و إذا كانت قيمة العداد i أصغر من قيمة العداد j, يعني ذلك أن العنصر موجود فوق الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغير SAD
      • و إذا كانت قيمة العداد i أكبر من قيمة العداد j, يعني ذلك أن العنصر موجود تحت الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغير SUD
  1.         System.out.print(“\n”);
  2.         System.out.print(“The sum of elements above the diagonal is: “ +SAD+ “\n”);
  3.         System.out.print(“The sum of elements on the diagonal is: “ +SOD+ “\n”);
  4.         System.out.print(“The sum of elements under the diagonal is: “ +SUD+ “\n”);
  • هنا قمنا بعرض ناتج جمع قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal و التي تم تخزينه في المتغيرات SAD, و SOD, و SUD

 
المصدر: التعامل مع المصفوفة ذات البعدين في الخوارزميات – التمرين السابع – المناهج السعودية

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى