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