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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 5 أعمدة.
  2. ثم يطلب من المستخدم إدخال قيم لها.
  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
  4. بعدها يطلب من المستخدم إدخال أي عدد ليرى إذا كان موجوداً في المصفوفة, و يخزنه في المتغير x.
    إنتبه: يكفي أن يعرف المستخدم إذا كان العدد الذي يبحث عنه موجوداً مرة واحدة في المصفوفة.
  5. في الأخير يعرض للمستخدم ناتج عملية البحث, أي إذا وجد نفس قيمة المتغير x في المصفوفة matrix أم لا.

ملاحظة: قم بتعريف العدادين i و j مرة واحدة في بداية البرنامج.


إرشادات

هنا يجب إستخدام حلقتين while أو do while أثناء عملية البحث في المصفوفة لأنك لست بحاجة إلى المرور على جميع عناصرها.
ملاحظة: الأسلوب الذي ستتعلمه في هذا التمرين مهم جداً و يستخدم كثيراً.


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

لنفترض أن المستخدم أدخل قيم عشوائية في المصفوفة, ثم أدخل العدد 8 ليعرف إذا كانت القيمة 8 موجودة في المصفوفة أم لا.

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Matrix {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int[][] matrix = new int[3][5];
        int x;
        boolean found = false;
 
        int i;
        int j;
 
        for (i=0; i<3; i++)
        {
            for (j=0; j<5; j++)
            {
                System.out.print("Enter matrix["+i+"]["+j+"]: ");
                matrix[i][j] = input.nextInt();
            }
            System.out.print("\n");
        }
 
        for (i=0; i<3; i++)
        {
            for (j=0; j<5; j++)
            {
                System.out.print(matrix[i][j] + "\t");
            }
            System.out.print("\n");
        }
 
        System.out.print("\nEnter any number: ");
        x = input.nextInt();
 
        i=0;
        while (i<3 && found == false)
        {
            j=0;
            while (j<5 && found == false)
            {
                if( matrix[i][j] == x )
                {
                    found = true;
                }
                j++;
            }
            i++;
        }
 
        if( found == true )
        {
            System.out.print(x + " is exist in the matrix \n");
        }
        else
        {
            System.out.print(x + " is not exist in the matrix \n");
        }
 
    }
 
}
		

شرح الكود


		int[][] matrix = new int[3][5];
		int x;
		boolean found = false;
		
		int i;
		int j;
			
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 5 أعمدة.
  • و المتغير x لأننا سنستخدمه لتخزين القيمة (أي العدد) التي سيدخلها المستخدم لاحقاً للبحث عنها في المصفوفة.
  • و المتغير found الذي نوعه boolean أعطيناه القيمة false عند إنشائه لأننا سنستخدمه كشرط أساسي لإيقاف عملية البحث لاحقاً.
  • و المتغيران i و j سنستخدمها كعدادين لاحقاً بداخل حلقتين while عند البحث في المصفوفة لأننا هذه المرة لا نريد المرور على جميع عناصرها.


		for (i=0; i<3; i++)
		{
			for (j=0; j<5; j++)
			{
				System.out.print("Enter matrix["+i+"]["+j+"]: ");
				matrix[i][j] = input.nextInt();
			}
			System.out.print("\n");
		}
			
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.
  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
  • بعد توقف الحلقة j (أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر) سيتم النزول على سطر جديد بسبب الرمز \n.


		for (i=0; i<3; i++)
		{
			for (j=0; j<5; j++)
			{
				System.out.print(matrix[i][j] + "\t");
			}
			System.out.print("\n");
		}
			
  • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة matrix.
  • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.
  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.
  • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.
  • بعد توقف الحلقة j (أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر) سيتم النزول على سطر جديد بسبب الرمز \n.


		System.out.print("\nEnter any number: ");
		x = input.nextInt();
			
  • هنا سيطلب من المستخدم إدخال أي عدد, و بعدها سيتم تخزينه في المتغير x.


		i=0;
		while (i<3 && found == false)
		{
			j=0;
			while (j<3 && found == false)
			{
				if( matrix[i][j] == x )
				{
					found = true;
				}
				j++;
			}
			i++;
		}
			
  • هنا أنشانا الحلقتين i و j للمرور على جميع عناصر المصفوفة طالما أن القيمة التي نريد البحث عنها لم يتم إيجادها بعد.
  • قبل بداية الحلقة i أعطينا العداد i القيمة 0 لكي نبدأ عملية البحث إبتداءاً من السطر الأول في المصفوفة.
  • بعدها إستخدمنا الحلقة while و التي ستجعلنا ننتقل من سطر إلى آخر طالما أننا لا نتعدى عدد أسطر المصفوفة و أن القيمة التي نبحث عنها لم يتم إيجادها بعد.
  • قبل بداية الحلقة j أعطينا العداد j القيمة 0 لكي نبدأ عملية البحث إبتداءاً من العامود الأول في كل سطر من أسطر المصفوفة.
  • بعدها إستخدمنا الحلقة while و التي ستجعلنا ننتقل من عامود إلى آخر طالما أننا لا نتعدى عدد أعمدة المصفوفة و أن القيمة التي نبحث عنها لم يتم إيجادها بعد.
  • إذاً الحلقتين سيمرون على جميع العناصر الموجودة في المصفوفة طالما أن قيمة المتغير found تساوي false.
    و في حال وجدنا القيمة التي نبحث عنها في المصفوفة علينا تغيير قيمة المتغير found إلى true لجعل الحلقتان تتوقفان عن العمل.

  • بداخل الحلقة j سيتم مقارنة قيمة كل عنصر في المصفوفة مع قيمة المتغير x أي ( مع العدد الذي أدخله المستخدم ) كالتالي:
    • في حال كانت قيمة العنصر تساوي قيمة المتغير x سيتم تغيير قيمة المتغير found إلى true حتى يتم إيقاف الحلقتين, لأنه عندها سنكون قد وجدنا ما نبحث عنه.
    • بعدها سيتم زيادة قيمة العداد j واحداً حتى يتم الإنتقال إلى العنصر التالي في نفس السطر في حال بقيت قيمة المتغير found تساوي false.

  • في حال بحثنا في جميع العناصر الموجودة في نفس السطر و لم نجد قيمة أي عنصر تساوي قيمة المتغير x سيتم زيادة قيمة العداد i واحداً للإنتقال إلى السطر التالي, لأننا سنكون قد لم نجد بعد ما نبحث عنه.

  • إذاً, إذا تغيرت قيمة المتغير found إلى true يعني ذلك أننا وجدنا القيمة التي يبحث عنهاالمستخدم و سنوقف مباشرةً الحلقتين i و j لأننا سنوقف حينها عملية البحث.


		if( found == true )
		{
			System.out.print(x + " is exist in the matrix \n");
		}
		else
		{
			System.out.print(x + " is not exist in the matrix \n");
		}
			
  • هنا سيتم فحص قيمة المتغير found لتحديد الجملة التي سيتم طباعتها للمستخدم.
  • إذا أصبحت قيمة المتغير found تساوي true فهذا يعني أن القيمة التي بحث عنها المستخدم موجودة في المصفوفة.
  • أما إذا بقيت قيمة المتغير found تساوي false فهذا يعني أن القيمة التي بحث عنها المستخدم غير موجودة في المصفوفة.

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

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

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة