الخوارزمياتالتعامل مع المصفوفة ذات البعد الواحد - التمرين السابع
المطلوب
هذا التمرين مقسّم إلى أربع أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
- أكتب برنامج يعرّف ثلاث مصفوفات
AوBوC. - ثم يطلب من المستخدم إدخال العدد الذي يمثل عدد عناصر المصفوفتين
AوB. - بعدها يطلب من المستخدم إعطاء قيم للمصفوفتين
AوBو يخزنهم في المصفوفةC. - في الأخير يعرض للمستخدم القيم التي أصبحت تحتويها المصفوفة
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; <=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سيطبع للمستخدم أن العنصر رقم كذا قيمته كذا.