algorithms-working-with-two-dimensional-arrays | التعامل مع مصفوفة ذات بعدين

المبادئ التي عليك اتباعها أو تقليدها مع المصفوفات ذات البعدين

تذكر المبادئ التالية في كل مرة تتعامل فيها مع مصفوفة ذات بعدين:

  • إستخدم حلقتين for متداخلتين في حال أردت الوصول لجميع عناصر المصفوفة.

  • الحلقة التي تجعلك تنتقل من سطر لآخر قم بتسمية العداد فيها i و إجعلها تبدأ من 0 إلى عدد الأسطر فيها ناقص 1.

  • الحلقة التي تجعلك تنتقل من عامود لآخر قم بتسمية العداد فيها j و إجعلها تبدأ من 0 إلى عدد الأعمدة فيها ناقص 1.

  • إستخدم الرمز \t في حال كنت تريد عرض عناصر المصفوفة كجدول لأنه يضع مسافات فارغة بشكل تلقائي بين كل قيمتين على نفس السطر.

  • إستخدم الحلقة while أو do while في حال لم تكن تريد الوصول لجميع عناصر المصفوفة.

  • إستخدم الحلقة do while في حال كنت تريد جعل المستخدم يدخل قيمة تستوفي شرط معين.

ستفهم كل هذه المبادئ من التمارين.



طريقة الوصول إلى قيم عناصر المصفوفة سطراً - سطراً أو عاموداً - عاموداً

  • في حال أردت الوصول إلى عناصر المصفوفة سطراً سطراً, عليك جعل الحلقة الخارجية تنتقل من سطر لآخر و الحلقة الداخلية تنتقل من عامود لآخر.

  • في حال أردت الوصول إلى عناصر المصفوفة عاموداً عاموداً, عليك جعل الحلقة الخارجية تنتقل من عامود لآخر و الحلقة الداخلية تنتقل من سطر لآخر.


المثال التالي يوضح كيف تعرّف الحلقتين i و j قي حال كنت تريد التنقل في المصفوفة سطراً - سطراً أو عاموداً - عاموداً.

كود الجافا
public class Matrix {
 
    public static void main (String[] args) {
 
        // قمنا بتعريف مصفوفة تتألف من 3 أسطر و 3 أعمدة
        int[][] matrix = {
                            {1, 2, 3},
                            {4, 5, 6},
                            {7, 8, 9}
                         };
 
 
        // هنا قمنا بعرض القيم الموجودة في كل سطر في المصفوفة
        for (int i=0; i<3; i++)
        {
            System.out.print("Row ["+i+"] values: ");
            for (int j=0; j<3; j++)
            {
                System.out.print( matrix[i][j] + " " );
            }
            System.out.print( "\n" );
        }
 
 
        System.out.print( "\n" );
 
 
        // هنا قمنا بعرض القيم الموجودة في كل جدول في المصفوفة
        for (int j=0; j<3; j++)
        {
            System.out.print("Column ["+j+"] values: ");
            for (int i=0; i<3; i++)
            {
                System.out.print( matrix[i][j] + " " );
            }
            System.out.print( "\n" );
        }
 
 
    }
 
}
		
نتيجة التشغيل

تذكر

يمكنك دائماً كتابة الكود بأكثر من طريقة و الحصول على نفس النتيجة.
بمعنى أخر, يوجد طريقة أخرى للتنقل بين عناصر المصفوفة غير التلاعب بأمكان الحلقات i و j.
الطريقة الأخرى ستتعلمها من التمارين الموضوعة ضمن هذا الدرس.

تمارين شاملة حول المصفوفات ذات البعدين


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

المطلوب

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

  1. أكتب برنامج يطلب من المستخدم إعطائه عددين, العدد الأول يمثل عدد أسطر مصفوفة ذات بعدين إسمها matrix و العدد الثاني يمثل عدد أعمدتها.
    &nbsp &nbsp خزن العدد الأول في متغير إسمه a و العدد الثاني في متغير إسمه b.
    &nbsp &nbsp إنتبه: يجب أن يدخل المستخدم عددين أكبر من صفر, لأن عدد عناصر المصفوفة لا يمكن أن يكون صفر أو أقل من صفر.

  2. ثم يطلب من المستخدم إدخال قيمة لكل عنصر من عناصر المصفوفة matrix.

  3. ثم يعرض له جميع قيم عناصر المصفوفة matrix.


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

لنفترض أن المستخدم أراد عدد الأسطر يساوي 3 و الأعمدة 4, و أدخل القيم ( 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 a;
        int b;
        int[][] matrix;

        do
        {
		System.out.print("Enter the number of rows: ");
		a = input.nextInt();
        }
        while ( a  <= 0 );

        do
        {
		System.out.print("Enter the number of columns: ");
		b = input.nextInt();
        }
        while ( b  <= 0 );

        matrix = new int[a][b];

        System.out.print("\n");

        for (int i=0; i<a; i++)
        {
		for (int j=0; j<b; j++)
		{
		System.out.print("Enter matrix[" +i+ "][" +j+ "]: ");
		matrix[i][j] = input.nextInt();
		}
		System.out.print("\n");
        }

        for (int i=0; i<a; i++)
        {
		for (int j=0; j<b; j++)
		{
		System.out.print(matrix[i][j] + "\t");
		}
		System.out.print("\n");
        }

        System.out.print("\n");

		}

		}
	  
شرح الكود

    			int a;
    			int b;
    			int[][] matrix;
    		  
  • هنا قمنا بتجهيز المتغير a و الذي سنستخدمه لتخزين عدد أسطر المصفوفة, و هو أول شيء سيطلب من المستخدم إدخاله.

  • و المتغير b و الذي سنستخدمه لتخزين عدد أعمدة المصفوفة, و هو ثاني شيء سيطلب من المستخدم إدخاله.

  • و المصفوفة matrix و التي لم يتم تحديد عدد عناصرها.



  • 			do
    			{
    			System.out.print("Enter the number of rows: ");
    			a = input.nextInt();
    			}
    			while ( a  <= 0 );
    		  
  • هنا سيطلب من المستخدم إدخال عدد أسطر المصفوفة, بعدها سيتم تخزينه في المتغير a.

  • بعدها سيتم فحص قيمة المتغير a. إذا كانت أصغر أو تساوي 0, سيطلب من المستخدم إدخال العدد من جديد.

  • إذاً هذه الحلقة تضمن أن لا يقوم المستخدم بإدخال عدد أصغر أو يساوي 0 كعدد أسطر المصفوفة.



  • 			do
    			{
    			System.out.print("Enter the number of columns: ");
    			b = input.nextInt();
    			}
    			while ( b  <= 0 );
    		  
  • هنا سيطلب من المستخدم إدخال عدد أعمدة المصفوفة, بعدها سيتم تخزينه في المتغير b.

  • بعدها سيتم فحص قيمة المتغير b. إذا كانت أصغر أو تساوي 0, سيطلب من المستخدم إدخال العدد من جديد.

  • إذاً هذه الحلقة تضمن أن لا يقوم المستخدم بإدخال عدد أصغر أو يساوي 0 كعدد أعمدة المصفوفة.



  • 			matrix = new int[a][b];
    		  
  • هنا سيتم تحديد قيمة المتغيرين a و b اللتين أدخلهما المستخدم كعدد أسطر و أعمدة المصفوفة matrix.



  • 			for (int i=0; i<a; i++)
    			{
    			for (int j=0; j<b; 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 (int i=0; i<a; i++)
    			{
    			for (int j=0; j<b; j++)
    			{
    			System.out.print(matrix[i][j] + "\t");
    			}
    			System.out.print("\n");
    			}
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.

  • بعد توقف الحلقة j, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 3 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم ناتج جمع جميع قيم عناصرها.


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

لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9 ) عند التشغيل.

الخوارزمية
كود الجافا
		import java.util.Scanner;

		public class Matrix {

		public static void main (String[] args) {

        Scanner input = new Scanner(System.in);

        int[][] matrix = new int[3][3];
        int S = 0;

        for (int i=0; i<3 all="" elements="" for="" he="" i="" input.nextint="" int="" is:="" j="" matrix="" n="" nter="" of="" pre="" s="S" sum="" system.out.print="">
	
شرح الكود

    			int[][] matrix = new int[3][3];
    			int S = 0;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.

  • و المتغير S الذي سنستخدمه لاحقاً لتخزين ناتج جمع قيم جميع العناصر الموجودة في المصفوفة لذلك أعطيناه القيمة 0 كقيمة أولية.



  • 			for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<3 for="" i="" int="" j="" matrix="" pre="" s="S">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j للوصول إلى جميع قيم عناصر المصفوفة.

  • كل عنصر يتم الوصول إليه, يتم إضافة قيمته على قيمة المتغير S.

  • إذاً عند توقف الحلقتين i و j سيكون المتغير S يحتوي على ناتج جميع قيم عناصر المصفوفة.



  • 			System.out.print("The sum of all elements is: " +S+ "\n");
    		  
  • هنا قمنا بعرض قيمة المتغير S كناتج جمع جميع قيم العناصر الموجودة في المصفوفة.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 3 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم ناتج جمع قيم العناصر الموجودة في كل سطر فيها.


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

لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9 ) عند التشغيل.

تحليل النتيجة
الخوارزمية
كود الجافا
		import java.util.Scanner;

		public class Matrix {

		public static void main (String[] args) {

        Scanner input = new Scanner(System.in);

        int[][] matrix = new int[3][3];
        int S;

        for (int i=0; i<3 :="" elements="" for="" he="" i="" in="" input.nextint="" int="" is="" j="" matrix="" n="" nter="" of="" pre="" row="" s="S" sum="" system.out.print="">
	
شرح الكود

    			int[][] matrix = new int[3][3];
    			int S;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.

  • و المتغير S الذي سنستخدمه لاحقاً لتخزين ناتج جمع القيم الموجودة في كل سطر.
    &nbsp &nbsp ملاحظة: لم نضع القيمة 0 كقيمة أولية للمتغير S الآن لأننا قبل حساب ناتج قيمة العناصر الموجودة في كل سطر سنضع فيه القيمة 0 كقيمة أولية.



  • 			for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<3 :="" elements="" for="" he="" i="" in="" int="" is="" j="" matrix="" n="" of="" pre="" row="" s="S" sum="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j للوصول إلى جميع قيم عناصر المصفوفة.

  • في كل دورة من دورات الحلقة i سيتم حساب ناتج جمع القيم الموجودة في نفس السطر, ثم طباعة الناتج كالتالي:

    • سيتم تصفير قيمة المتغير S قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس السطر حتى لا يتم إضافة ناتج جمع القيم الموجودة في السطر القديم على ناتج القيم الموجودة في السطر الحالي في كل مرة يتم فيها الإنتقال إلى سطر جديد.

    • بعدها سيتم إنشاء الحلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

    • في كل دورة من دورات الحلقة j سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس السطر على قيمة المتغير S.

    • عند توقف الحلقة j سيكون ناتج جمع جميع العناصر الموجودة في نفس السطر موجود في المتغير S.

    • لذلك سيتم عرض قيمة المتغير S كناتج جمع جميع العناصر الموجودة في نفس السطر.


  • لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس السطر على قيمة المتغير S :

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[0][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[0][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[0][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في السطر الأول.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[1][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[1][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[1][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في السطر الثاني.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[2][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[2][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[2][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في السطر الثالث.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 3 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم ناتج جمع قيم العناصر الموجودة في كل عامود فيها.


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

لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9 ) عند التشغيل.

تحليل النتيجة
الخوارزمية
كود الجافا
		import java.util.Scanner;

		public class Matrix {

		public static void main (String[] args) {

        Scanner input = new Scanner(System.in);

        int[][] matrix = new int[3][3];
        int S;

        for (int i=0; i<3 column="" elements="" for="" he="" i="" in="" input.nextint="" int="" is:="" j="" matrix="" n="" nter="" of="" pre="" s="S" sum="" system.out.print="">
	
شرح الكود

    			int[][] matrix = new int[3][3];
    			int S;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.

  • و المتغير S الذي سنستخدمه لاحقاً لتخزين ناتج جمع القيم الموجودة في كل عامود.
    &nbsp &nbsp ملاحظة: لم نضع القيمة 0 كقيمة أولية للمتغير S الآن لأننا قبل حساب ناتج قيمة العناصر الموجودة في كل عامود سنضع فيه القيمة 0 كقيمة أولية.



  • 			for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int j=0; j<3 column="" elements="" for="" he="" i="" in="" int="" is:="" j="" matrix="" n="" of="" pre="" s="S" sum="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين j و i للوصول إلى جميع قيم عناصر المصفوفة.
    &nbsp &nbsp ملاحظة: الإختلاف الوحيد في هذا التمرين عن التمرين السابق, هو أننا جعلنا الحلقة j الحلقة الخارجية و الحلقة i الحلقة الداخلية.

  • في كل دورة من دورات الحلقة j سيتم حساب ناتج جمع القيم الموجودة في نفس العامود, ثم طباعة الناتج كالتالي:

    • سيتم تصفير قيمة المتغير S قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس العامود حتى لا يتم إضافة ناتج جمع القيم الموجودة في العامود القديم على ناتج القيم الموجودة في العامود الحالي في كل مرة يتم فيها الإنتقال إلى عامود جديد.

    • بعدها سيتم إنشاء الحلقة i للمرور على جميع العناصر الموجودة في نفس العامود.

    • في كل دورة من دورات الحلقة i سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس العامود على قيمة المتغير S.

    • عند توقف الحلقة i سيكون ناتج جمع جميع العناصر الموجودة في نفس العامود موجود في المتغير S.

    • لذلك سيتم عرض قيمة المتغير S كناتج جمع جميع العناصر الموجودة في نفس العامود.


  • لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس العامود على قيمة المتغير S :

    • عندما تكون قيمة العداد j تساوي 0 و قيمة العداد i تساوي 0, سيتم إضافة قيمة العنصر matrix[0][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد j تساوي 0 و قيمة العداد i تساوي 1, سيتم إضافة قيمة العنصر matrix[1][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد j تساوي 0 و قيمة العداد i تساوي 2, سيتم إضافة قيمة العنصر matrix[2][0] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الأول.

    • عندما تكون قيمة العداد j تساوي 1 و قيمة العداد i تساوي 0, سيتم إضافة قيمة العنصر matrix[0][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد j تساوي 1 و قيمة العداد i تساوي 1, سيتم إضافة قيمة العنصر matrix[1][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد j تساوي 1 و قيمة العداد i تساوي 2, سيتم إضافة قيمة العنصر matrix[2][1] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثاني.

    • عندما تكون قيمة العداد j تساوي 2 و قيمة العداد i تساوي 0, سيتم إضافة قيمة العنصر matrix[0][2] على قيمة المتغير S.

    • عندما تكون قيمة العداد j تساوي 2 و قيمة العداد i تساوي 1, سيتم إضافة قيمة العنصر matrix[1][2] على قيمة المتغير S.

    • عندما تكون قيمة العداد j تساوي 2 و قيمة العداد i تساوي 2, سيتم إضافة قيمة العنصر matrix[2][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثالث.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 3 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض له ناتج جمع قيم عناصر كل عامود فيها.


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

لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9 ) عند التشغيل.

تحليل النتيجة
الخوارزمية
كود الجافا
		import java.util.Scanner;

		public class Matrix {

		public static void main (String[] args) {

        Scanner input = new Scanner(System.in);

        int[][] matrix = new int[3][3];
        int S;

        for (int i=0; i<3 :="" column="" elements="" for="" i="" in="" input.nextint="" int="" is="" j="" matrix="" n="" nter="" of="" pre="" s="S" sum="" system.out.print="" the="">
	
شرح الكود

    			int[][] matrix = new int[3][3];
    			int S;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.

  • و المتغير S الذي سنستخدمه لاحقاً لتخزين ناتج جمع القيم الموجودة في كل عامود.
    &nbsp &nbsp ملاحظة: لم نضع القيمة 0 كقيمة أولية للمتغير S الآن لأننا قبل حساب ناتج قيمة العناصر الموجودة في كل عامود سنضع فيه القيمة 0 كقيمة أولية.



  • 			for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<3 :="" column="" elements="" for="" i="" in="" int="" is="" j="" matrix="" n="" of="" pre="" s="S" sum="" system.out.print="" the="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j للوصول إلى جميع قيم عناصر المصفوفة.
    &nbsp &nbsp ملاحظة: الإختلاف الوحيد بين هذا التمرين و التمرين الثالث, هو أننا كتبنا matrix[j][i] بدلاً من matrix[i][j] مما جعلنا نمر على عناصر المصفوفة عاموداً عاموداً.

  • إذاً هنا سيتم الإنتقال من من سطر إلى آخر بواسطة الحلقة j و من عامود إلى آخر بواسطة الحلقة i.

  • في كل دورة من دورات الحلقة i سيتم حساب ناتج جمع القيم الموجودة في نفس العامود, ثم طباعة الناتج كالتالي:

    • سيتم تصفير قيمة المتغير S قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس العامود حتى لا يتم إضافة ناتج جمع القيم الموجودة في العامود القديم على ناتج القيم الموجودة في العامود الحالي في كل مرة يتم فيها الإنتقال إلى عامود جديد.

    • بعدها سيتم إنشاء الحلقة j للمرور على جميع العناصر الموجودة في نفس العامود.

    • في كل دورة من دورات الحلقة j سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس العامود على قيمة المتغير S.

    • عند توقف الحلقة j سيكون ناتج جمع جميع العناصر الموجودة في نفس العامود موجود في المتغير S.

    • لذلك سيتم عرض قيمة المتغير S كناتج جمع جميع العناصر الموجودة في نفس العامود.


  • لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس العامود على قيمة المتغير S :

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[0][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[1][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[2][0] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الأول.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[0][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[1][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[2][1] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثاني.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[0][2] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[1][2] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[2][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثالث.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 4 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.

  4. ثم يقوم بتخزين جميع القيم الموجودة في المصفوفة matrix بداخل مصفوفة ذات بعد واحد, قم بتسميتها vector.

  5. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويهم المصفوفة vector على نفس السطر.


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

لنفترض أن المستخدم أدخل القيم ( 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[3][4];
        int[] vector = new int[3*4];
        int k=0;

        for (int i=0; i<3 1="" contain="" for="" i="" input.nextint="" int="" j="" k="k" lt="" matrix="" n="" nter="" nvector="" pre="" system.out.print="" t="" these="" values:="" vector.length="" vector="">
	
شرح الكود

    			int[][] matrix = new int[3][4];
    			int[] vector = new int[3*4];
    			int k=0;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 4 أعمدة ( 3 * 4 = 12 عنصر ).

  • و المصفوفة vector و حددنا أنها تتألف من 3 * 4 عناصر أيضاً, أي من 12 عنصر لأن عدد عناصرها يجب أن يساوي عدد عناصر المصفوفة matrix.

  • و المتغير k الذي أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لاحقاً كعداد للوصول إلى عناصر المصفوفة vector.



  • 			for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة matrix.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<3 1="" for="" i="" int="" j="" k="k" matrix="" pre="" vector="">
    		  
  • هنا أنشأنا الحلقتين i و j لتخزين قيمة كل عنصر موجود في المصفوفة matrix في المصفوفة vector.

  • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.

  • المتغير k إستخدمناه كعداد بالنسبة للمصفوفة vector فبواسطته إستطعنا الوصول إلى عناصر المصفوفة vector بشكل متوازي مع عناصر المصفوفة matrix.

  • إذاً في كل دورة من دورات الحلقة j سيتم وضع قيمة العنصر الحالي في المصفوفة matrix في العنصر التالي في المصفوفة vector لأن قيمة العداد k تزيد واحد في كل مرة.



  • 			System.out.print("matrix contain these values: \n");
    
    			for (int i=0; i<3 for="" i="" int="" j="" matrix="" n="" pre="" system.out.print="" t="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة matrix.

  • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.

  • بعد توقف الحلقة j, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			System.out.print("\nvector contain these values: \n");
    
    			for (int i=0; i<vector.length; i++)
    			{
    			System.out.print(vector[i] + "\t");
    			}
    		  
  • هنا أنشأنا حلقة تبدأ من index العنصر الأول في المصفوفة vector إلى آخر عنصر موجود فيها بهدف عرض قيمة كل عنصر فيها.

  • في كل دورة من دورات الحلقة i سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 4 أسطر و 4 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.
    &nbsp &nbsp إنتبه: نريد هذه المصفوفة أن تحتوي فقط على قيم أكبر أو تساوي صفر, مثل 10, 43, 3, 5, 8.

  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.

  4. بعدها يقوم بجمع قيم جميع العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal.

  5. في الأخير يعرض للمستخدم ناتج الجمع.


إرشادات

لتمييز قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal برمجياً عليك إستغلال مكان وجود العنصر في المصفوفة.

ركز جيداً في الصورة و ستلاحظ أنه يمكنك تمييز مكان وجود العنصر بالنسبة للـ Diagonal كالتالي:

  • إذا كان index السطر يساوي index العامود فهذا يعني أن العنصر موجود على الـ Diagonal مثل العناصر التالية:
    matrix[0][0] &nbsp matrix[1][1] &nbsp matrix[2][2] &nbsp matrix[3][3].


  • إذا كان index السطر أكبر من index العامود فهذا يعني أن العنصر موجود تحت الـ Diagonal مثل العناصر التالية:
    matrix[1][0] &nbsp matrix[2][0] &nbsp matrix[2][1] &nbsp matrix[3][0] &nbsp matrix[3][1] &nbsp matrix[3][2].


  • إذا كان index السطر أصغر من index العامود فهذا يعني أن العنصر موجود فوق الـ Diagonal مثل العناصر التالية:
    matrix[0][1] &nbsp matrix[0][2] &nbsp matrix[0][3] &nbsp matrix[1][2] &nbsp matrix[1][3] &nbsp 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 0="" do="" else="" for="" i="" if="" input.nextint="" int="" j="" matrix="" n="" nter="" sad="SAD" sod="SOD" system.out.print="" t="" while=""> 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 0="" do="" for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="" while="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة matrix.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر محدد في المصفوفة.

  • قبل تخزين القيمة التي أدخلها المستخدم في المصفوفة سيتم فحصها, إذا كانت أصغر من 0 سيطلب من المستخدم إدخال القيمة من جديد.

  • الآن, بعد أن يدخل المستخدم قيمة أكبر أو تساوي 0 سيتم تخزينها في المصفوفة, و سيطلب من المستخدم إدخال قيمة للعنصر التالي في المصفوفة.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<4 for="" i="" int="" j="" matrix="" n="" pre="" system.out.print="" t="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة matrix.

  • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.

  • بعد توقف الحلقة j, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<4 else="" for="" i="" if="" int="" j="" matrix="" sad="SAD" sod="SOD"> 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.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 5 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.

  4. بعدها يطلب من المستخدم إدخال أي عدد ليرى كم مرة هذا العدد موجود في المصفوفة, و يخزنه في المتغير x.

  5. في الأخير يعرض للمستخدم ناتج عملية البحث, أي كم مرة وجد نفس قيمة المتغير x في المصفوفة matrix.


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

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

الخوارزمية
كود الجافا
		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;
        int found = 0;

        for (int i=0; i<3 1="" any="" exist="" for="" found="" i="" if="" in="" input.nextint="" int="" is="" j="" matrix="" n="" nenter="" nter="" number:="" pre="" system.out.print="" t="" the="" times="" x="">
	
شرح الكود

    			int[][] matrix = new int[3][5];
    			int x;
    			int found = 0;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 5 أعمدة.

  • و المتغير x سنستخدمه لتخزين القيمة (أي العدد) التي سيدخلها المستخدم لاحقاً للبحث عنها في المصفوفة.

  • و المتغير found و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لاحقاً لحساب كم مرة تم إيجاد القيمة التي بحث عنها المستخدم.



  • 			for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (int i=0; i<3 for="" i="" int="" j="" matrix="" n="" pre="" system.out.print="" t="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة matrix.

  • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.

  • بعد توقف الحلقة j, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



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



  • 			for (int i=0; i<3 1="" for="" found="found" i="" if="" int="" j="" matrix="" pre="" x="">
    		  
  • هنا أنشانا الحلقتين i و j للمرور على جميع عناصر المصفوفة.

  • سيتم مقارنة قيمة كل عنصر في المصفوفة مع قيمة المتغير x أي ( مع العدد الذي أدخله المستخدم ).

  • في كل مرة تكون فيها قيمة العنصر تساوي قيمة المتغير x سيتم زيادة قيمة العداد found واحداً

  • إذاً المتغير found سيمثل عدد وجود قيمة المتغير x في المصفوفة matrix.



  • 			System.out.print(x + " is exist " +found+ " times in the Matrix \n");
    		  
  • هنا قمنا بعرض قيمة المتغير found لعرض نتيجة البحث, أي لعرض كم مرة قد وجدت القيمة المتغير x في المصفوفة.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 5 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.

  4. بعدها يطلب من المستخدم إدخال أي عدد ليرى إذا كان موجوداً في المصفوفة, و يخزنه في المتغير x.
    &nbsp &nbsp إنتبه: يكفي أن يعرف المستخدم إذا كان العدد الذي يبحث عنه موجوداً مرة واحدة في المصفوفة.

  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 any="" else="" exist="" false="" for="" found="=" i="" if="" in="" input.nextint="" is="" j="" matrix="" n="" nenter="" not="" nter="" number:="" pre="" system.out.print="" t="" the="" true="" while="" x="">
	
شرح الكود

    			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 for="" i="" input.nextint="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (i=0; i<3 for="" i="" j="" matrix="" n="" pre="" system.out.print="" t="">
    		  
  • هنا قمنا بإنشاء الحلقتين 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 false="" found="true;" i="" if="" j="" matrix="" pre="" while="" x="">
    		  
  • هنا أنشانا الحلقتين i و j للمرور على جميع عناصر المصفوفة طالما أن القيمة التي نريد البحث عنها لم يتم إيجادها بعد.

  • قبل بداية الحلقة i أعطينا العداد i القيمة 0 لكي نبدأ عملية البحث إبتداءاً من السطر الأول في المصفوفة.

  • بعدها إستخدمنا الحلقة while و التي ستجعلنا ننتقل من سطر إلى آخر طالما أننا لا نتعدى عدد أسطر المصفوفة و أن القيمة التي نبحث عنها لم يتم إيجادها بعد.

  • قبل بداية الحلقة j أعطينا العداد j القيمة 0 لكي نبدأ عملية البحث إبتداءاً من العامود الأول في كل سطر من أسطر المصفوفة.

  • بعدها إستخدمنا الحلقة while و التي ستجعلنا ننتقل من عامود إلى آخر طالما أننا لا نتعدى عدد أعمدة المصفوفة و أن القيمة التي نبحث عنها لم يتم إيجادها بعد.

  • إذاً كما تلاحظ أن الحلقتين سيمرون على جميع العناصر الموجودة في المصفوفة طالما أن قيمة المتغير found تساوي false
    &nbsp &nbsp إذاً في حال وجدنا القيمة التي نبحث عنها في المصفوفة, علينا تغيير قيمة المتغير 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 فهذا يعني أن القيمة التي بحث عنها المستخدم غير موجودة في المصفوفة.



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

المطلوب

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

  1. أكتب برنامج يعرّف مصفوفة إسمها matrix تتألف من 3 أسطر و 3 أعمدة.

  2. ثم يطلب من المستخدم إدخال قيم لها.

  3. ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.

  4. بعدها يقوم بجمع قيم العناصر الموجودة في كل سطر, و يخزن ناتج الجمع في مصفوفة ذات بعد واحد إسمها vector.

  5. في الأخير يعرض للمستخدم القيم التي أصبحت تحتويها المصفوفة vector.

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


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

لنفترض أن المستخدم أدخل القيم ( 1, 2, 3, 4, 5, 6, 7 ,8, 9 ) عند التشغيل.

تحليل النتيجة
الخوارزمية
كود الجافا
		import java.util.Scanner;

		public class Matrix {

		public static void main (String[] args) {

        Scanner input = new Scanner(System.in);

        int[][] matrix = new int[3][3];
        int[] vector = new int[3];
        int i;
        int j;
        int S;

        for (i=0; i<3 contain="" for="" i="" input.nextint="" j="" matrix="" n="" nter="" nvector="" pre="" s="" system.out.print="" t="" these="" values:="" vector="">
	
شرح الكود

    			int[][] matrix = new int[3][3];
    			int[] vector = new int[3];
    			int i;
    			int j;
    			int S;
    		  
  • هنا قمنا بتجهيز المصفوفة matrix و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.

  • و المصفوفة vector و حددنا أنها تتألف من 3 عناصر فقط لأن كل عنصر بداخلها سنضع فيه ناتج جمع قيم سطر كامل من سطور المصفوفة matrix.

  • و المتغيران i و j في البداية ليكونا عدادين لأي مصفوفتين في البرنامج. و في كل مرة سنستخدمها سنقوم فقط بتصفير قيمتيهما بدل أن نقوم بتعريفهما من جديد.

  • و المتغير S لتخزين مجموع القيم الموجودة في كل سطر. سنعطيه القيمة 0 كقيمة أولية لاحقاً قبل البدء بحساب ناتج قيم الموجودة في نفس السطر.



  • 			for (i=0; i<3 for="" i="" input.nextint="" j="" matrix="" n="" nter="" pre="" system.out.print="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.

  • الحلقة i للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.

  • بعد توقف الحلقة j, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			System.out.print("matrix contain these values:\n");
    			for (i=0; i<3 for="" i="" j="" matrix="" n="" pre="" system.out.print="" t="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j لعرض جميع قيم المصفوفة matrix.

  • الحلقة i للإنتقال من سطر إلى آخر فيها, و الحلقة j للإنتقال من عمود إلى آخر في كل سطر فيها.

  • هنا في كل دورة من دورات الحلقة i سيتم إنشاء حلقة j لعرض قيمة جميع العناصر الموجودة في نفس السطر.

  • في كل دورة من دورات الحلقة j سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t.

  • بعد توقف الحلقة j, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n.



  • 			for (i=0; i<3 for="" i="" j="" matrix="" pre="" s="" vector="">
    		  
  • هنا قمنا بإنشاء الحلقتين i و j للوصول إلى جميع قيم عناصر المصفوفة.

  • في كل دورة من دورات الحلقة i سيتم حساب ناتج جمع القيم الموجودة في نفس السطر, ثم وضع الناتج في المصفوفة vector كالتالي:

    • سيتم تصفير قيمة المتغير S قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس السطر حتى لا يتم إضافة ناتج جمع القيم الموجودة في السطر القديم على ناتج القيم الموجودة في السطر الحالي في كل مرة يتم فيها الإنتقال إلى سطر جديد.

    • بعدها سيتم إنشاء الحلقة j للمرور على جميع العناصر الموجودة في نفس السطر.

    • في كل دورة من دورات الحلقة j سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس السطر على قيمة المتغير S.

    • عند توقف الحلقة j سيكون ناتج جمع جميع العناصر الموجودة في نفس السطر موجود في المتغير S و عندها سيتم إضافة قيمة المتغير S في عنصر جديد في المصفوفة vector.


  • لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس السطر على قيمة المتغير S ثم إضافتها في المصفوفة vector :

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[0][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[0][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 0 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[0][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون المتغير S قد إحتوى على ناتج جمع جميع قيم العناصر الموجودة في السطر الأول في المصفوفة matrix و بالتالي سيتم وضع قيمته في العنصر vector[0].

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[1][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[1][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 1 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[1][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون المتغير S قد إحتوى على ناتج جمع جميع قيم العناصر الموجودة في السطر الأول في المصفوفة matrix و بالتالي سيتم وضع قيمته في العنصر vector[1].

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 0, سيتم إضافة قيمة العنصر matrix[2][0] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 1, سيتم إضافة قيمة العنصر matrix[2][1] على قيمة المتغير S.

    • عندما تكون قيمة العداد i تساوي 2 و قيمة العداد j تساوي 2, سيتم إضافة قيمة العنصر matrix[2][2] على قيمة المتغير S.
      &nbsp &nbsp إلى هنا يكون المتغير S قد إحتوى على ناتج جمع جميع قيم العناصر الموجودة في السطر الأول في المصفوفة matrix و بالتالي سيتم وضع قيمته في العنصر vector[2].



    			System.out.print("\nvector contain these values:\n");
    			for (i=0; i<3 i="" pre="" system.out.print="" t="" vector="">
    		  
  • هنا قمنا بإنشاء الحلقة i لعرض جميع قيم التي أصبحت تحتويهم المصفوفة vector بعد أن تم وضع ناتج جمع كل سطر في المصفوفة matrix فيها.