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