المبادئ التي عليك اتباعها أو تقليدها مع المصفوفات ذات البعدين
تذكر المبادئ التالية في كل مرة تتعامل فيها مع مصفوفة ذات بعدين:
إستخدم حلقتين
for
متداخلتين في حال أردت الوصول لجميع عناصر المصفوفة.الحلقة التي تجعلك تنتقل من سطر لآخر قم بتسمية العداد فيها
i
و إجعلها تبدأ من 0 إلى عدد الأسطر فيها ناقص 1.الحلقة التي تجعلك تنتقل من عامود لآخر قم بتسمية العداد فيها
j
و إجعلها تبدأ من 0 إلى عدد الأعمدة فيها ناقص 1.إستخدم الرمز
\t
في حال كنت تريد عرض عناصر المصفوفة كجدول لأنه يضع مسافات فارغة بشكل تلقائي بين كل قيمتين على نفس السطر.إستخدم الحلقة
while
أوdo while
في حال لم تكن تريد الوصول لجميع عناصر المصفوفة.إستخدم الحلقة
do while
في حال كنت تريد جعل المستخدم يدخل قيمة تستوفي شرط معين.
ستفهم كل هذه المبادئ من التمارين.
طريقة الوصول إلى قيم عناصر المصفوفة سطراً - سطراً أو عاموداً - عاموداً
في حال أردت الوصول إلى عناصر المصفوفة سطراً سطراً, عليك جعل الحلقة الخارجية تنتقل من سطر لآخر و الحلقة الداخلية تنتقل من عامود لآخر.
في حال أردت الوصول إلى عناصر المصفوفة عاموداً عاموداً, عليك جعل الحلقة الخارجية تنتقل من عامود لآخر و الحلقة الداخلية تنتقل من سطر لآخر.
المثال التالي يوضح كيف تعرّف الحلقتين i
و j
قي حال كنت تريد التنقل في المصفوفة سطراً - سطراً أو عاموداً - عاموداً.
public class Matrix { public static void main (String[] args) { // قمنا بتعريف مصفوفة تتألف من 3 أسطر و 3 أعمدة int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // هنا قمنا بعرض القيم الموجودة في كل سطر في المصفوفة for (int i=0; i<3; i++) { System.out.print("Row ["+i+"] values: "); for (int j=0; j<3; j++) { System.out.print( matrix[i][j] + " " ); } System.out.print( "\n" ); } System.out.print( "\n" ); // هنا قمنا بعرض القيم الموجودة في كل جدول في المصفوفة for (int j=0; j<3; j++) { System.out.print("Column ["+j+"] values: "); for (int i=0; i<3; i++) { System.out.print( matrix[i][j] + " " ); } System.out.print( "\n" ); } } }
يمكنك دائماً كتابة الكود بأكثر من طريقة و الحصول على نفس النتيجة.
بمعنى أخر, يوجد طريقة أخرى للتنقل بين عناصر المصفوفة غير التلاعب بأمكان الحلقات i
و j
.
الطريقة الأخرى ستتعلمها من التمارين الموضوعة ضمن هذا الدرس.
تمارين شاملة حول المصفوفات ذات البعدين
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين الأول
هذا التمرين مقسّم إلى ثلاثة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يطلب من المستخدم إعطائه عددين, العدد الأول يمثل عدد أسطر مصفوفة ذات بعدين إسمها
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
.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين الثاني
المطلوب
هذا التمرين مقسّم إلى ثلاثة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 3 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم ناتج جمع جميع قيم عناصرها.
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 S = 0; for (int i=0; i<3 all="" elements="" for="" he="" i="" input.nextint="" int="" is:="" j="" matrix="" n="" nter="" of="" pre="" s="S" sum="" system.out.print=""> 3>
int[][] matrix = new int[3][3]; int S = 0;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.
و المتغير S
الذي سنستخدمه لاحقاً لتخزين ناتج جمع قيم جميع العناصر الموجودة في المصفوفة لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<3 for="" i="" int="" j="" matrix="" pre="" s="S">
هنا قمنا بإنشاء الحلقتين i
و j
للوصول إلى جميع قيم عناصر المصفوفة.
كل عنصر يتم الوصول إليه, يتم إضافة قيمته على قيمة المتغير S
.
إذاً عند توقف الحلقتين i
و j
سيكون المتغير S
يحتوي على ناتج جميع قيم عناصر المصفوفة.
System.out.print("The sum of all elements is: " +S+ "\n");
هنا قمنا بعرض قيمة المتغير S
كناتج جمع جميع قيم العناصر الموجودة في المصفوفة.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين الثالث
هذا التمرين مقسّم إلى ثلاثة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 3 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم ناتج جمع قيم العناصر الموجودة في كل سطر فيها.
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 S; for (int i=0; i<3 :="" elements="" for="" he="" i="" in="" input.nextint="" int="" is="" j="" matrix="" n="" nter="" of="" pre="" row="" s="S" sum="" system.out.print=""> 3>
int[][] matrix = new int[3][3]; int S;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.
و المتغير S
الذي سنستخدمه لاحقاً لتخزين ناتج جمع القيم الموجودة في كل سطر.
    ملاحظة: لم نضع القيمة 0 كقيمة أولية للمتغير S
الآن لأننا قبل حساب ناتج قيمة العناصر الموجودة في كل سطر سنضع فيه القيمة 0 كقيمة أولية.
for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<3 :="" elements="" for="" he="" i="" in="" int="" is="" j="" matrix="" n="" of="" pre="" row="" s="S" sum="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
للوصول إلى جميع قيم عناصر المصفوفة.
في كل دورة من دورات الحلقة i
سيتم حساب ناتج جمع القيم الموجودة في نفس السطر, ثم طباعة الناتج كالتالي:
سيتم تصفير قيمة المتغير
S
قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس السطر حتى لا يتم إضافة ناتج جمع القيم الموجودة في السطر القديم على ناتج القيم الموجودة في السطر الحالي في كل مرة يتم فيها الإنتقال إلى سطر جديد.بعدها سيتم إنشاء الحلقة
j
للمرور على جميع العناصر الموجودة في نفس السطر.في كل دورة من دورات الحلقة
j
سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس السطر على قيمة المتغيرS
.عند توقف الحلقة
j
سيكون ناتج جمع جميع العناصر الموجودة في نفس السطر موجود في المتغيرS
.لذلك سيتم عرض قيمة المتغير
S
كناتج جمع جميع العناصر الموجودة في نفس السطر.
لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس السطر على قيمة المتغير S
:
عندما تكون قيمة العداد
i
تساوي 0 و قيمة العدادj
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 0 و قيمة العدادj
تساوي 1, سيتم إضافة قيمة العنصرmatrix[0][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 0 و قيمة العدادj
تساوي 2, سيتم إضافة قيمة العنصرmatrix[0][2]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في السطر الأول.عندما تكون قيمة العداد
i
تساوي 1 و قيمة العدادj
تساوي 0, سيتم إضافة قيمة العنصرmatrix[1][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 1 و قيمة العدادj
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 1 و قيمة العدادj
تساوي 2, سيتم إضافة قيمة العنصرmatrix[1][2]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في السطر الثاني.عندما تكون قيمة العداد
i
تساوي 2 و قيمة العدادj
تساوي 0, سيتم إضافة قيمة العنصرmatrix[2][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 2 و قيمة العدادj
تساوي 1, سيتم إضافة قيمة العنصرmatrix[2][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 2 و قيمة العدادj
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][2]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في السطر الثالث.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين الرابع
هذا التمرين مقسّم إلى ثلاثة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 3 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم ناتج جمع قيم العناصر الموجودة في كل عامود فيها.
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 S; for (int i=0; i<3 column="" elements="" for="" he="" i="" in="" input.nextint="" int="" is:="" j="" matrix="" n="" nter="" of="" pre="" s="S" sum="" system.out.print=""> 3>
int[][] matrix = new int[3][3]; int S;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.
و المتغير S
الذي سنستخدمه لاحقاً لتخزين ناتج جمع القيم الموجودة في كل عامود.
    ملاحظة: لم نضع القيمة 0 كقيمة أولية للمتغير S
الآن لأننا قبل حساب ناتج قيمة العناصر الموجودة في كل عامود سنضع فيه القيمة 0 كقيمة أولية.
for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int j=0; j<3 column="" elements="" for="" he="" i="" in="" int="" is:="" j="" matrix="" n="" of="" pre="" s="S" sum="" system.out.print="">
هنا قمنا بإنشاء الحلقتين j
و i
للوصول إلى جميع قيم عناصر المصفوفة.
    ملاحظة: الإختلاف الوحيد في هذا التمرين عن التمرين السابق, هو أننا جعلنا الحلقة j
الحلقة الخارجية و الحلقة i
الحلقة الداخلية.
في كل دورة من دورات الحلقة j
سيتم حساب ناتج جمع القيم الموجودة في نفس العامود, ثم طباعة الناتج كالتالي:
سيتم تصفير قيمة المتغير
S
قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس العامود حتى لا يتم إضافة ناتج جمع القيم الموجودة في العامود القديم على ناتج القيم الموجودة في العامود الحالي في كل مرة يتم فيها الإنتقال إلى عامود جديد.بعدها سيتم إنشاء الحلقة
i
للمرور على جميع العناصر الموجودة في نفس العامود.في كل دورة من دورات الحلقة
i
سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس العامود على قيمة المتغيرS
.عند توقف الحلقة
i
سيكون ناتج جمع جميع العناصر الموجودة في نفس العامود موجود في المتغيرS
.لذلك سيتم عرض قيمة المتغير
S
كناتج جمع جميع العناصر الموجودة في نفس العامود.
لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس العامود على قيمة المتغير S
:
عندما تكون قيمة العداد
j
تساوي 0 و قيمة العدادi
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
j
تساوي 0 و قيمة العدادi
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
j
تساوي 0 و قيمة العدادi
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][0]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الأول.عندما تكون قيمة العداد
j
تساوي 1 و قيمة العدادi
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
j
تساوي 1 و قيمة العدادi
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
j
تساوي 1 و قيمة العدادi
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][1]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثاني.عندما تكون قيمة العداد
j
تساوي 2 و قيمة العدادi
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][2]
على قيمة المتغيرS
.عندما تكون قيمة العداد
j
تساوي 2 و قيمة العدادi
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][2]
على قيمة المتغيرS
.عندما تكون قيمة العداد
j
تساوي 2 و قيمة العدادi
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][2]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثالث.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين الخامس
هذا التمرين مقسّم إلى ثلاثة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 3 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض له ناتج جمع قيم عناصر كل عامود فيها.
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 S; for (int i=0; i<3 :="" column="" elements="" for="" i="" in="" input.nextint="" int="" is="" j="" matrix="" n="" nter="" of="" pre="" s="S" sum="" system.out.print="" the=""> 3>
int[][] matrix = new int[3][3]; int S;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 3 أسطر و 3 أعمدة.
و المتغير S
الذي سنستخدمه لاحقاً لتخزين ناتج جمع القيم الموجودة في كل عامود.
    ملاحظة: لم نضع القيمة 0 كقيمة أولية للمتغير S
الآن لأننا قبل حساب ناتج قيمة العناصر الموجودة في كل عامود سنضع فيه القيمة 0 كقيمة أولية.
for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<3 :="" column="" elements="" for="" i="" in="" int="" is="" j="" matrix="" n="" of="" pre="" s="S" sum="" system.out.print="" the="">
هنا قمنا بإنشاء الحلقتين i
و j
للوصول إلى جميع قيم عناصر المصفوفة.
    ملاحظة: الإختلاف الوحيد بين هذا التمرين و التمرين الثالث, هو أننا كتبنا matrix[j][i]
بدلاً من matrix[i][j]
مما جعلنا نمر على عناصر المصفوفة عاموداً عاموداً.
إذاً هنا سيتم الإنتقال من من سطر إلى آخر بواسطة الحلقة j
و من عامود إلى آخر بواسطة الحلقة i
.
في كل دورة من دورات الحلقة i
سيتم حساب ناتج جمع القيم الموجودة في نفس العامود, ثم طباعة الناتج كالتالي:
سيتم تصفير قيمة المتغير
S
قبل البدء بحساب ناتج جمع قيم العناصر الموجودة في نفس العامود حتى لا يتم إضافة ناتج جمع القيم الموجودة في العامود القديم على ناتج القيم الموجودة في العامود الحالي في كل مرة يتم فيها الإنتقال إلى عامود جديد.بعدها سيتم إنشاء الحلقة
j
للمرور على جميع العناصر الموجودة في نفس العامود.في كل دورة من دورات الحلقة
j
سيتم إضافة قيمة عنصر من العناصر الموجودة في نفس العامود على قيمة المتغيرS
.عند توقف الحلقة
j
سيكون ناتج جمع جميع العناصر الموجودة في نفس العامود موجود في المتغيرS
.لذلك سيتم عرض قيمة المتغير
S
كناتج جمع جميع العناصر الموجودة في نفس العامود.
لاحظ كيف سيتم إضافة قيم العناصر الموجودة في نفس العامود على قيمة المتغير S
:
عندما تكون قيمة العداد
i
تساوي 0 و قيمة العدادj
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 0 و قيمة العدادj
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][0]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 0 و قيمة العدادj
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][0]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الأول.عندما تكون قيمة العداد
i
تساوي 1 و قيمة العدادj
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 1 و قيمة العدادj
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][1]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 1 و قيمة العدادj
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][1]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثاني.عندما تكون قيمة العداد
i
تساوي 2 و قيمة العدادj
تساوي 0, سيتم إضافة قيمة العنصرmatrix[0][2]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 2 و قيمة العدادj
تساوي 1, سيتم إضافة قيمة العنصرmatrix[1][2]
على قيمة المتغيرS
.عندما تكون قيمة العداد
i
تساوي 2 و قيمة العدادj
تساوي 2, سيتم إضافة قيمة العنصرmatrix[2][2]
على قيمة المتغيرS
.
    إلى هنا يكون قد تم حساب ناتج جمع قيم العناصر الموجودة في العامود الثالث.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين السادس
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 4 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
ثم يقوم بتخزين جميع القيم الموجودة في المصفوفة
matrix
بداخل مصفوفة ذات بعد واحد, قم بتسميتهاvector
.ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويهم المصفوفة
vector
على نفس السطر.
لنفترض أن المستخدم أدخل القيم ( 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[][] matrix = new int[3][4]; int[] vector = new int[3*4]; int k=0; for (int i=0; i<3 1="" contain="" for="" i="" input.nextint="" int="" j="" k="k" lt="" matrix="" n="" nter="" nvector="" pre="" system.out.print="" t="" these="" values:="" vector.length="" vector=""> 3>
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 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة matrix
.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<3 1="" for="" i="" int="" j="" k="k" matrix="" pre="" vector="">
هنا أنشأنا الحلقتين 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 for="" i="" int="" j="" matrix="" n="" pre="" system.out.print="" t="">
هنا قمنا بإنشاء الحلقتين 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
.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين السابع
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 4 أسطر و 4 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
    إنتبه: نريد هذه المصفوفة أن تحتوي فقط على قيم أكبر أو تساوي صفر, مثل10, 43, 3, 5, 8
.ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
بعدها يقوم بجمع قيم جميع العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal.
في الأخير يعرض للمستخدم ناتج الجمع.
لتمييز قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal برمجياً عليك إستغلال مكان وجود العنصر في المصفوفة.
ركز جيداً في الصورة و ستلاحظ أنه يمكنك تمييز مكان وجود العنصر بالنسبة للـ Diagonal كالتالي:
إذا كان index السطر يساوي index العامود فهذا يعني أن العنصر موجود على الـ Diagonal مثل العناصر التالية:
matrix[0][0]
 matrix[1][1]
 matrix[2][2]
 matrix[3][3]
.إذا كان index السطر أكبر من index العامود فهذا يعني أن العنصر موجود تحت الـ Diagonal مثل العناصر التالية:
matrix[1][0]
 matrix[2][0]
 matrix[2][1]
 matrix[3][0]
 matrix[3][1]
 matrix[3][2]
.إذا كان index السطر أصغر من index العامود فهذا يعني أن العنصر موجود فوق الـ Diagonal مثل العناصر التالية:
matrix[0][1]
 matrix[0][2]
 matrix[0][3]
 matrix[1][2]
 matrix[1][3]
 matrix[2][3]
.
لنفترض أن المستخدم أدخل القيم ( 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[][] matrix = new int[4][4]; int SOD = 0; // Diagonal سنخزن فيه قيم العناصر الموجودة على الـ SOD المتغير int SAD = 0; // Diagonal سنخزن فيه قيم العناصر الموجودة فوق الـ SAD المتغير int SUD = 0; // Diagonal سنخزن فيه قيم العناصر الموجودة تحت الـ SUD المتغير for (int i=0; i<4 0="" do="" else="" for="" i="" if="" input.nextint="" int="" j="" matrix="" n="" nter="" sad="SAD" sod="SOD" system.out.print="" t="" while=""> j ) { SUD = SUD + matrix[i][j]; } } } System.out.print("\n"); System.out.print("The sum of elements above the diagonal is: " +SAD+ "\n"); System.out.print("The sum of elements on the diagonal is: " +SOD+ "\n"); System.out.print("The sum of elements under the diagonal is: " +SUD+ "\n"); } } 4>
int[][] matrix = new int[4][4]; int SOD = 0; int SAD = 0; int SUD = 0;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 4 أسطر و 4 أعمدة.
و المتغير SOD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة على الـ Diagonal.
و المتغير SAD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة فوق الـ Diagonal.
و المتغير SUD
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين ناتج جمع قيم العناصر الموجودة تحت الـ Diagonal.
for (int i=0; i<4 0="" do="" for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="" while="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة matrix
.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر محدد في المصفوفة.
قبل تخزين القيمة التي أدخلها المستخدم في المصفوفة سيتم فحصها, إذا كانت أصغر من 0 سيطلب من المستخدم إدخال القيمة من جديد.
الآن, بعد أن يدخل المستخدم قيمة أكبر أو تساوي 0 سيتم تخزينها في المصفوفة, و سيطلب من المستخدم إدخال قيمة للعنصر التالي في المصفوفة.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<4 for="" i="" int="" j="" matrix="" n="" pre="" system.out.print="" t="">
هنا قمنا بإنشاء الحلقتين i
و j
لعرض جميع قيم المصفوفة matrix
.
الحلقة i
للإنتقال من سطر إلى آخر فيها, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر فيها.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
لعرض قيمة جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t
.
بعد توقف الحلقة j
, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<4 else="" for="" i="" if="" int="" j="" matrix="" sad="SAD" sod="SOD"> j ) { SUD = SUD + matrix[i][j]; } } } 4>
هنا أنشانا الحلقتين i
و j
للوصول إلى جميع عناصر المصفوفة.
كل عنصر يتم الوصول إليه سيتم مقارنة مكان وجوده مع قيمة العدادين i
و j
كالتالي:
إذا كانت قيمة العداد
i
تساوي قيمة العدادj
, يعني ذلك أن العنصر موجود على الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغيرSOD
.و إذا كانت قيمة العداد
i
أصغر من قيمة العدادj
, يعني ذلك أن العنصر موجود فوق الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغيرSAD
.و إذا كانت قيمة العداد
i
أكبر من قيمة العدادj
, يعني ذلك أن العنصر موجود تحت الـ Diagonal. و بالتالي سيتم إضافة قيمته على قيمة المتغيرSUD
.
System.out.print("\n"); System.out.print("The sum of elements above the diagonal is: " +SAD+ "\n"); System.out.print("The sum of elements on the diagonal is: " +SOD+ "\n"); System.out.print("The sum of elements under the diagonal is: " +SUD+ "\n");
هنا قمنا بعرض ناتج جمع قيم العناصر الموجودة على الـ Diagonal, فوق الـ Diagonal, و تحت الـ Diagonal و التي تم تخزينه في المتغيرات SAD
, و SOD
, و SUD
.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين الثامن
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 5 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
بعدها يطلب من المستخدم إدخال أي عدد ليرى كم مرة هذا العدد موجود في المصفوفة, و يخزنه في المتغير
x
.في الأخير يعرض للمستخدم ناتج عملية البحث, أي كم مرة وجد نفس قيمة المتغير
x
في المصفوفةmatrix
.
لنفترض أن المستخدم أدخل قيم عشوائية في المصفوفة, ثم أدخل العدد 3 ليعرف كم مرة توجد القيمة 3 في المصفوفة.
import java.util.Scanner; public class Matrix { public static void main (String[] args) { Scanner input = new Scanner(System.in); int[][] matrix = new int[3][5]; int x; int found = 0; for (int i=0; i<3 1="" any="" exist="" for="" found="" i="" if="" in="" input.nextint="" int="" is="" j="" matrix="" n="" nenter="" nter="" number:="" pre="" system.out.print="" t="" the="" times="" x=""> 3>
int[][] matrix = new int[3][5]; int x; int found = 0;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 3 أسطر و 5 أعمدة.
و المتغير x
سنستخدمه لتخزين القيمة (أي العدد) التي سيدخلها المستخدم لاحقاً للبحث عنها في المصفوفة.
و المتغير found
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لاحقاً لحساب كم مرة تم إيجاد القيمة التي بحث عنها المستخدم.
for (int i=0; i<3 for="" i="" input.nextint="" int="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (int i=0; i<3 for="" i="" int="" j="" matrix="" n="" pre="" system.out.print="" t="">
هنا قمنا بإنشاء الحلقتين i
و j
لعرض جميع قيم المصفوفة matrix
.
الحلقة i
للإنتقال من سطر إلى آخر فيها, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر فيها.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
لعرض قيمة جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t
.
بعد توقف الحلقة j
, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
System.out.print("\nEnter any number: "); x = input.nextInt();
هنا سيطلب من المستخدم إدخال أي عدد, و بعدها سيتم تخزينه في المتغير x
.
for (int i=0; i<3 1="" for="" found="found" i="" if="" int="" j="" matrix="" pre="" x="">
هنا أنشانا الحلقتين i
و j
للمرور على جميع عناصر المصفوفة.
سيتم مقارنة قيمة كل عنصر في المصفوفة مع قيمة المتغير x
أي ( مع العدد الذي أدخله المستخدم ).
في كل مرة تكون فيها قيمة العنصر تساوي قيمة المتغير x
سيتم زيادة قيمة العداد found
واحداً
إذاً المتغير found
سيمثل عدد وجود قيمة المتغير x
في المصفوفة matrix
.
System.out.print(x + " is exist " +found+ " times in the Matrix \n");
هنا قمنا بعرض قيمة المتغير found
لعرض نتيجة البحث, أي لعرض كم مرة قد وجدت القيمة المتغير x
في المصفوفة.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين التاسع
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 5 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
بعدها يطلب من المستخدم إدخال أي عدد ليرى إذا كان موجوداً في المصفوفة, و يخزنه في المتغير
x
.
    إنتبه: يكفي أن يعرف المستخدم إذا كان العدد الذي يبحث عنه موجوداً مرة واحدة في المصفوفة.في الأخير يعرض للمستخدم ناتج عملية البحث, أي إذا وجد نفس قيمة المتغير
x
في المصفوفةmatrix
أم لا.
ملاحظة: قم بتعريف العدادين i
و j
مرة واحدة في بداية البرنامج.
هنا يجب إستخدام حلقتين while
أو do while
أثناء عملية البحث في المصفوفة لأنك لست بحاجة إلى المرور على جميع عناصرها.
ملاحظة: الأسلوب الذي ستتعلمه في هذا التمرين مهم جداً و يستخدم كثيراً.
لنفترض أن المستخدم أدخل قيم عشوائية في المصفوفة, ثم أدخل العدد 8 ليعرف إذا كانت القيمة 8 موجودة في المصفوفة أم لا.
import java.util.Scanner; public class Matrix { public static void main (String[] args) { Scanner input = new Scanner(System.in); int[][] matrix = new int[3][5]; int x; boolean found = false; int i; int j; for (i=0; i<3 any="" else="" exist="" false="" for="" found="=" i="" if="" in="" input.nextint="" is="" j="" matrix="" n="" nenter="" not="" nter="" number:="" pre="" system.out.print="" t="" the="" true="" while="" x=""> 3>
int[][] matrix = new int[3][5]; int x; boolean found = false; int i; int j;
هنا قمنا بتجهيز المصفوفة matrix
و حددنا أنها تتألف من 3 أسطر و 5 أعمدة.
و المتغير x
لأننا سنستخدمه لتخزين القيمة (أي العدد) التي سيدخلها المستخدم لاحقاً للبحث عنها في المصفوفة.
و المتغير found
الذي نوعه boolean
أعطيناه القيمة false عند إنشائه لأننا سنستخدمه كشرط أساسي لإيقاف عملية البحث لاحقاً.
و المتغيران i
و j
سنستخدمها كعدادين لاحقاً بداخل حلقتين while
عند البحث في المصفوفة لأننا هذه المرة لا نريد المرور على جميع عناصرها.
for (i=0; i<3 for="" i="" input.nextint="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (i=0; i<3 for="" i="" j="" matrix="" n="" pre="" system.out.print="" t="">
هنا قمنا بإنشاء الحلقتين i
و j
لعرض جميع قيم المصفوفة matrix
.
الحلقة i
للإنتقال من سطر إلى آخر فيها, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر فيها.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
لعرض قيمة جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t
.
بعد توقف الحلقة j
, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
System.out.print("\nEnter any number: "); x = input.nextInt();
هنا سيطلب من المستخدم إدخال أي عدد, و بعدها سيتم تخزينه في المتغير x
.
i=0; while (i<3 false="" found="true;" i="" if="" j="" matrix="" pre="" while="" x="">
هنا أنشانا الحلقتين i
و j
للمرور على جميع عناصر المصفوفة طالما أن القيمة التي نريد البحث عنها لم يتم إيجادها بعد.
قبل بداية الحلقة i
أعطينا العداد i
القيمة 0 لكي نبدأ عملية البحث إبتداءاً من السطر الأول في المصفوفة.
بعدها إستخدمنا الحلقة while
و التي ستجعلنا ننتقل من سطر إلى آخر طالما أننا لا نتعدى عدد أسطر المصفوفة و أن القيمة التي نبحث عنها لم يتم إيجادها بعد.
قبل بداية الحلقة j
أعطينا العداد j
القيمة 0 لكي نبدأ عملية البحث إبتداءاً من العامود الأول في كل سطر من أسطر المصفوفة.
بعدها إستخدمنا الحلقة while
و التي ستجعلنا ننتقل من عامود إلى آخر طالما أننا لا نتعدى عدد أعمدة المصفوفة و أن القيمة التي نبحث عنها لم يتم إيجادها بعد.
إذاً كما تلاحظ أن الحلقتين سيمرون على جميع العناصر الموجودة في المصفوفة طالما أن قيمة المتغير found
تساوي false
    إذاً في حال وجدنا القيمة التي نبحث عنها في المصفوفة, علينا تغيير قيمة المتغير found
إلى true لجعل الحلقتان تتوقفان عن العمل.
بداخل الحلقة j
سيتم مقارنة قيمة كل عنصر في المصفوفة مع قيمة المتغير x
أي ( مع العدد الذي أدخله المستخدم ) كالتالي:
في حال كانت قيمة العنصر تساوي قيمة المتغير
x
سيتم تغيير قيمة المتغيرfound
إلى true حتى يتم إيقاف الحلقتين, لأنه عندها سنكون قد وجدنا ما نبحث عنه.بعدها سيتم زيادة قيمة العداد
j
واحداً حتى يتم الإنتقال إلى العنصر التالي في نفس السطر في حال بقيت قيمة المتغيرfound
تساوي false
في حال بحثنا في جميع العناصر الموجودة في نفس السطر و لم نجد قيمة أي عنصر تساوي قيمة المتغير x
سيتم زيادة قيمة العداد i
واحداً للإنتقال إلى السطر التالي, لأننا سنكون قد لم نجد بعد ما نبحث عنه.
إذاً, إذا تغيرت قيمة المتغير found
إلى true يعني ذلك أننا وجدنا القيمة التي يبحث عنهاالمستخدم و سنوقف مباشرةً الحلقتين i
و j
لأننا سنوقف حينها عملية البحث.
if( found == true ) { System.out.print(x + " is exist in the matrix \n"); } else { System.out.print(x + " is not exist in the matrix \n"); }
هنا سيتم فحص قيمة المتغير found
لتحديد الجملة التي سيتم طباعتها للمستخدم.
إذا أصبحت قيمة المتغير found
تساوي true فهذا يعني أن القيمة التي بحث عنها المستخدم موجودة في المصفوفة.
أما إذا بقيت قيمة المتغير found
تساوي false فهذا يعني أن القيمة التي بحث عنها المستخدم غير موجودة في المصفوفة.
التعامل مع المصفوفة ذات البعدين في الخوارزميات - التمرين العاشر
هذا التمرين مقسّم إلى خمسة أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.
أكتب برنامج يعرّف مصفوفة إسمها
matrix
تتألف من 3 أسطر و 3 أعمدة.ثم يطلب من المستخدم إدخال قيم لها.
ثم يعرض للمستخدم جميع القيم التي أصبحت تحتويها المصفوفة.
بعدها يقوم بجمع قيم العناصر الموجودة في كل سطر, و يخزن ناتج الجمع في مصفوفة ذات بعد واحد إسمها
vector
.في الأخير يعرض للمستخدم القيم التي أصبحت تحتويها المصفوفة
vector
.
ملاحظة: قم بتعريف العدادين i
و j
مرة واحدة في بداية البرنامج.
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 contain="" for="" i="" input.nextint="" j="" matrix="" n="" nter="" nvector="" pre="" s="" system.out.print="" t="" these="" values:="" vector=""> 3>
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 for="" i="" input.nextint="" j="" matrix="" n="" nter="" pre="" system.out.print="">
هنا قمنا بإنشاء الحلقتين i
و j
لجعل المستخدم يدخل قيمة لكل عنصر في المصفوفة.
الحلقة i
للإنتقال من سطر إلى آخر في المصفوفة, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر في المصفوفة.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
للمرور على جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيطلب من المستخدم إدخال قيمة لعنصر, ثم سيتم تخزينها في هذا العنصر.
بعد توقف الحلقة j
, أي بعد إعطاء قيم لجميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
System.out.print("matrix contain these values:\n"); for (i=0; i<3 for="" i="" j="" matrix="" n="" pre="" system.out.print="" t="">
هنا قمنا بإنشاء الحلقتين i
و j
لعرض جميع قيم المصفوفة matrix
.
الحلقة i
للإنتقال من سطر إلى آخر فيها, و الحلقة j
للإنتقال من عمود إلى آخر في كل سطر فيها.
هنا في كل دورة من دورات الحلقة i
سيتم إنشاء حلقة j
لعرض قيمة جميع العناصر الموجودة في نفس السطر.
في كل دورة من دورات الحلقة j
سيتم عرض قيمة عنصر, ثم وضع بعض المسافات الفارغة بسبب الرمز \t
.
بعد توقف الحلقة j
, أي بعد عرض قيم جميع العناصر الموجودة في نفس السطر, سيتم النزول على سطر جديد بسبب الرمز \n
.
for (i=0; i<3 for="" i="" j="" matrix="" pre="" s="" vector="">
هنا قمنا بإنشاء الحلقتين 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="" pre="" system.out.print="" t="" vector="">
هنا قمنا بإنشاء الحلقة i
لعرض جميع قيم التي أصبحت تحتويهم المصفوفة vector
بعد أن تم وضع ناتج جمع كل سطر في المصفوفة matrix
فيها.