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