الخوارزمياتالتعامل مع المصفوفة ذات البعدين - التمرين الأول
المطلوب
هذا التمرين مقسّم إلى ثلاثة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
- أكتب برنامج يطلب من المستخدم إعطائه عددين, العدد الأول يمثل عدد أسطر مصفوفة ذات بعدين إسمها
matrixو العدد الثاني يمثل عدد أعمدتها.
خزن العدد الأول في متغير إسمهaو العدد الثاني في متغير إسمهb.
إنتبه: يجب أن يدخل المستخدم عددين أكبر من صفر, لأن عدد عناصر المصفوفة لا يمكن أن يكون صفر أو أقل من صفر. - ثم يطلب من المستخدم إدخال قيمة لكل عنصر من عناصر المصفوفة
matrix. - ثم يعرض له جميع قيم عناصر المصفوفة
matrix.
النتيجة المطلوبة
لنفترض أن المستخدم أراد عدد الأسطر يساوي 3 و الأعمدة 4 و أدخل القيم 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 عند التشغيل.
الخوارزمية
كود الجافا
import java.util.Scanner; public class Matrix { public static void main (String[] args) { Scanner input = new Scanner(System.in); int a; int b; int[][] matrix; do { System.out.print("Enter the number of rows: "); a = input.nextInt(); } while ( a <= 0 ); do { System.out.print("Enter the number of columns: "); b = input.nextInt(); } while ( b <= 0 ); matrix = new int[a][b]; System.out.print("\n"); for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { System.out.print("Enter matrix[" +i+ "][" +j+ "]: "); matrix[i][j] = input.nextInt(); } System.out.print("\n"); } for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { System.out.print(matrix[i][j] + "\t"); } System.out.print("\n"); } System.out.print("\n"); } }
شرح الكود
int a; int b; int[][] matrix;
- هنا قمنا بتجهيز المتغير
aو الذي سنستخدمه لتخزين عدد أسطر المصفوفة, و هو أول شيء سيطلب من المستخدم إدخاله. - و المتغير
bو الذي سنستخدمه لتخزين عدد أعمدة المصفوفة, و هو ثاني شيء سيطلب من المستخدم إدخاله. - و المصفوفة
matrixو التي لم يتم تحديد عدد عناصرها.
do { System.out.print("Enter the number of rows: "); a = input.nextInt(); } while ( a <= 0 );
- هنا سيطلب من المستخدم إدخال عدد أسطر المصفوفة, بعدها سيتم تخزينه في المتغير
a. - بعدها سيتم فحص قيمة المتغير
a, إذا كانت أصغر أو تساوي 0 سيطلب من المستخدم إدخال العدد من جديد. - إذاً هذه الحلقة تضمن أن لا يقوم المستخدم بإدخال عدد أصغر أو يساوي 0 كعدد أسطر المصفوفة.
do { System.out.print("Enter the number of columns: "); b = input.nextInt(); } while ( b <= 0 );
- هنا سيطلب من المستخدم إدخال عدد أعمدة المصفوفة, بعدها سيتم تخزينه في المتغير
b. - بعدها سيتم فحص قيمة المتغير
b, إذا كانت أصغر أو تساوي 0 سيطلب من المستخدم إدخال العدد من جديد. - إذاً هذه الحلقة تضمن أن لا يقوم المستخدم بإدخال عدد أصغر أو يساوي 0 كعدد أعمدة المصفوفة.
matrix = new int[a][b];
- هنا سيتم تعيين قيمة المتغيرين
aوbاللتين أدخلهما المستخدم كعدد أسطر و أعمدة المصفوفةmatrix.
for (int i=0; i<a; i++) { for (int j=0; j<b; 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.
for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { System.out.print(matrix[i][j] + "\t"); } System.out.print("\n"); }
- هنا قمنا بإنشاء الحلقتين
iوjلعرض جميع قيم المصفوفة. - الحلقة
iللإنتقال من سطر إلى آخر في المصفوفة, و الحلقةjللإنتقال من عمود إلى آخر في كل سطر في المصفوفة. - هنا في كل دورة من دورات الحلقة
iسيتم إنشاء حلقةjلعرض قيمة جميع العناصر الموجودة في نفس السطر. - في كل دورة من دورات الحلقة
jسيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز\t. - بعد توقف الحلقة
j(أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر) سيتم النزول على سطر جديد بسبب الرمز\n.