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

المطلوب

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

  1. أكتب برنامج يعرّف ثلاث مصفوفات A و B و C.

  2. ثم يطلب من المستخدم إدخال العدد الذي يمثل عدد عناصر المصفوفتين A و B.

  3. بعدها يطلب من المستخدم إعطاء قيم للمصفوفتين A و B و يخزنهم في المصفوفة C.

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


إرشادات

يجب أن يتم جمع قيم عناصر المصفوفتين A و B قي المصفوفة C كالتالي.


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

لنفترض أن المستخدم أراد حجم المصفوفتين A و B يساوي " 4 " و أدخل نفس القيم كما في الصورة السابقة.

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Vector {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int[] A;
        int[] B;
        int[] C;
        int k = 0;     // C سنستخدم هذا المتغير كعداد للوصول لعناصر المصفوفة
 
        do
        {
            System.out.print("Enter the length for vectors ( A ) and ( B ): ");
            N = input.nextInt();
        }
        while ( N  <= 0 );
 
        A = new int[N];
        B = new int[N];
        C = new int[N*2];
 
        System.out.print("\n");
 
        for (int i=0; i <=N-1; i++)
        {
            System.out.print("Enter A[" +i+ "]: ");
            A[i] = input.nextInt();
 
            System.out.print("Enter B[" +i+ "]: ");
            B[i] = input.nextInt();
        }
 
        System.out.print("\n");
 
        for (int i=0; i <=N-1; i++)
        {
            C[k] = A[i];
            C[k+1] = B[i];
 
            k = k+2;
        }
 
        System.out.print("\n");
 
        for (int i=0; i <=(N*2)-1; i++)
        {
            System.out.print("C[" +i+ "]: " + C[i] +"\n");
        }
 
        System.out.print("\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int[] A;
    		int[] B;
    		int[] C;
    		int k = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين عدد عناصر المصفوفتين A و B, و هو أول شيء سيطلب من المستخدم إدخاله.

  • و المصفوفات A و B و C و لم نحدد عدد عناصرهم.

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



  • 		do
    		{
    			System.out.print("Enter the length for vectors ( A ) and ( B ): ");
    			N = input.nextInt();
    		}
    		while ( N  <= 0 );
    				
  • هنا سيطلب من المستخدم إدخال عدد عناصر المصفوفتينA و B, بعدها سيتم تخزينه في المتغير N.

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

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



  • 		A = new int[N];
    		B = new int[N];
    		C = new int[N*2];
    				
  • هنا سيتم تحديد عدد عناصر المصفوفات الثلاثة كالتالي:

    • عدد عناصر المصفوفتان A و B يساوي قيمة المتغير N.

    • عدد عناصر المصفوفة c يساوي عدد عناصر المصفوفتين A و B مع بعض, أي يساوي قيمة المتغير N*2.
      ملاحظة: عدد عناصر المصفوفة C يمكن تحديدها بأكثر من طريقة, فمثلاً يمكنك أن تكتب N+N أو A.length + B.length بدل N*2.



    		for (int i=0; i <=N-1; i++)
    		{
    			System.out.print("Enter A[" +i+ "]: ");
    			A[i] = input.nextInt();
    		
    			System.out.print("Enter B[" +i+ "]: ");
    			B[i] = input.nextInt();
    		}
    				
  • هنا أنشأنا حلقة تبدأ من index العنصر الأول في كلا المصفوفتين, أي العنصر رقم 0, إلى آخر عنصر موجود فيهما و الذي يملك الـ index الأخير, أي N-1.

  • في كل دورة من دورات الحلقة i سيطلب من المستخدم إدخال قيمة لعنصر في المصفوفة A, و قيمة لعنصر في المصفوفة B.
        فمثلاً, عندما تكون قيمة العداد i تساوي 0 , سيطلب منه إدخال قيمة للعنصر A[0] و العنصر B[0].



  • 		for (int i=0; i <=N-1; i++)
    		{
    			C[k] = A[i];
    			C[k+1] = B[i];
    		
    			k = k+2;
    		}
    				
  • هنا أنشأنا حلقة تبدأ من index العنصر الأول في كل المصفوفات, أي العنصر رقم 0, إلى آخر عنصر موجود في المصفوفات و الذي يملك الـ index الأخير, أي N-1.

  • في كل دورة من دورات الحلقة i سيحدث التالي في المصفوفة C من خلال العداد k:

    • سيتم وضع قيمة عنصر المصفوفة A في عنصر جديد في المصفوفة C.

    • ثم وضع قيمة عنصر المصفوفة B في العنصر التالي في المصفوفة C.

    • ثم سيتم زيادة قيمة المتغير k إثنين لتجاوز الخانتين السابقتين اللتين تم وضع القيم فيهما.

    • طريقة عمل الكود:

      • في البداية, قيمة العداد i تساوي 0, لذلك سيتم وضع قيمة العنصر A[0] في العنصر C[0], ثم قيمة العنصر B[0] في العنصر C[1].

      • بعد أن تم إضافة 2 على قيمة المتغير k و أصبحت قيمة العداد i تساوي 1, سيتم وضع قيمة العنصر A[1] في العنصر C[2], ثم قيمة العنصر B[1] في العنصر C[3].

      • بعد أن تم إضافة 2 على قيمة المتغير k و أصبحت قيمة العداد i تساوي 2, سيتم وضع قيمة العنصر A[2] في العنصر C[4], ثم قيمة العنصر B[2] في العنصر C[5].

      • بعد أن تم إضافة 2 على قيمة المتغير k و أصبحت قيمة العداد i تساوي 3, سيتم وضع قيمة العنصر A[3] في العنصر C[6], ثم قيمة العنصر B[3] في العنصر C[7].

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



    		for (int i=0; i <=(N*2)-1; i++)
    		{
    			System.out.print("C[" +i+ "]: " + C[i] +"\n");
    		}
    				
  • هنا أنشأنا حلقة تبدأ من index العنصر الأول في المصفوفة C إلى آخر عنصر موجود فيها بهدف عرض قيمة كل عنصر أصبح فيها.

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

دورات

أدوات