Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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

المطلوب

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

  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]

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

لنفترض أن المستخدم أدخل 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.

نرجو منك الإنتقال لدورة البرمجة للمبتدئين الجديدة التي أنشأنها كبديل أفضل لهذه الدورة ففي تلك الدورة قمنا بتبسيط الشرح أكثر و جعلناك قادر على تجربة الكود بشكل مباشر في موقعنا.


دورة تعلم البرمجة للمبتدئين >