الخوارزمياتالتعامل مع المصفوفة ذات البعدين - التمرين العاشر
المطلوب
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
- أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 3 أعمدة. - ثم يطلب من المستخدم إدخال قيم لها.
- ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
- بعدها يقوم بجمع قيم العناصر الموجودة في كل سطر, و يخزن ناتج الجمع في مصفوفة ذات بعد واحد إسمها
vector
. - في الأخير يعرض للمستخدم القيم التي أصبحت تحتويها المصفوفة
vector
.
ملاحظة: قم بتعريف العدادين i
و j
مرة واحدة في بداية البرنامج.
النتيجة المطلوبة
لنفترض أن المستخدم أدخل 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; i++) { for (j=0; j<3; j++) { System.out.print("Enter matrix["+i+"]["+j+"]: "); matrix[i][j] = input.nextInt(); } System.out.print("\n"); } System.out.print("matrix contain these values:\n"); for (i=0; i<3; i++) { for (j=0; j<3; j++) { System.out.print(matrix[i][j] + "\t"); } System.out.print("\n"); } for (i=0; i<3; i++) { S=0; for (j=0; j<3; j++) { S = S + matrix[i][j]; } vector[i] = S; } System.out.print("\nvector contain these values:\n"); for (i=0; i<3; i++) { System.out.print(vector[i] +"\t"); } System.out.print("\n"); } }
شرح الكود
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; i++) { for (j=0; j<3; 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
.
System.out.print("matrix contain these values:\n"); for (i=0; i<3; i++) { for (j=0; j<3; j++) { System.out.print(matrix[i][j] + "\t"); } System.out.print("\n"); }
- هنا قمنا بإنشاء الحلقتين
i
وj
لعرض جميع قيم المصفوفةmatrix
. - الحلقة
i
للإنتقال من سطر إلى آخر فيها, و الحلقةj
للإنتقال من عمود إلى آخر في كل سطر فيها. - هنا في كل دورة من دورات الحلقة
i
سيتم إنشاء حلقةj
لعرض قيمة جميع العناصر الموجودة في نفس السطر. - في كل دورة من دورات الحلقة
j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز\t
. - بعد توقف الحلقة
j
(أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر) سيتم النزول على سطر جديد بسبب الرمز\n
.
for (i=0; i<3; i++) { S=0; for (j=0; j<3; j++) { S = S + matrix[i][j]; } vector[i] = S; }
- هنا قمنا بإنشاء الحلقتين
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
.
إلى هنا يكون المتغير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
.
إلى هنا يكون المتغير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
.
إلى هنا يكون المتغيرS
قد إحتوى على ناتج جمع جميع قيم العناصر الموجودة في السطر الأول في المصفوفةmatrix
و بالتالي سيتم وضع قيمته في العنصرvector[2]
.
System.out.print("\nvector contain these values:\n"); for (i=0; i<3; i++) { System.out.print(vector[i] +"\t"); }
- هنا قمنا بإنشاء الحلقة
i
لعرض جميع قيم التي أصبحت تحتويهم المصفوفةvector
بعد أن تم وضع ناتج جمع كل سطر في المصفوفةmatrix
فيها.