مفهوم الباراميتر في الخوارزميات
باراميتر تعني Parameter في اللغة الإنجليزية. الباراميتر عبارة عن متغير من أي نوع مثل ( int
أو double
أو String
.. ) يتم تعريفه بين أقواس الدالة.
في المثال التالي قمنا بتعريف دالة إسمها Demo()
, نوعها int
, تملك باراميتر واحد نوعه int
و إسمه a
, و ترجع القيمة 0.
public static int Demo (int a) { return 0; }
هل أنت مجبر على وضع باراميتر للدالة؟
كلا أنت لست مجبر, و إنما تضع باراميتر إذا كنت بحاجة له.
لاحظ أننا قمنا بتعرف الدالة Demo()
من جديد بدون إعطائها أي باراميتر.
public static int Demo () { return 0; }
هل بإمكانك أن تضع أكثر من باراميتر للدالة؟
نعم بإمكانك وضع العدد الذي تريده من الباراميترات, شرط أن تحدد نوع كل باراميتر تقوم بإضافته و أن تضع فاصلة بين كل باراميترَين.
في المثال التالي قمنا بتعريف دالة إسمها Demo()
, نوعها void
, و تملك الباراميترات التالية:
الباراميتر الأول إسمه
a
و نوعهint
.الباراميتر الثاني إسمه
b
و نوعهdouble
.الباراميتر الثالث إسمه
c
و نوعهString
.الباراميتر الرابع إسمه
d
و نوعهboolean
.
public static void Demo (int a, double b, String c, boolean d) { }
ما هي الفائدة من الباراميترات و لم قد أحتاجهم؟
فائدة الباراميترات أنك من خلالهم تجعل المستخدم يدخل قيمه الخاصة في الدالة فتتغير النتيجة التي ترجعها الدالة حسب القيم التي يقوم هو بإدخالها.
هل يمكن وضع قيم أولية للباراميترات؟
كلا, لا يمكن وضع قيم أولية للباراميترات, لأن فكرة الباراميترات الأساسية هي أن يتم إعطائهم القيم عند الإستدعاء.
إذاً, عند تعريف الباراميتر بداخل الدالة, لا يمكن وضع قيمة أولية له.
أما عند إستدعاء الدالة, فإنه يجب تمرير قيمة مكان كل باراميتر موضوع فيها.
مثال يوضح طريقة التعامل مع الباراميترات و فائدتهم
في المثال التالي قمنا بتعريف دالة إسمها Sum()
, نوعها void
, تحتوي على باراميترَين نوعهما int
إسمهم a
و b
.
مهمة هذه الدالة هي طباعة ناتج جمع أي عددين صحيحين نضعهما فيها عند إستدعائها.
public class Parameters { public static void Sum (int a, int b) { System.out.print("The sum is: " + (a+b) + "\n"); } public static void main (String[] args) { Sum(3, 4); Sum(5, 9); Sum(10, 20); } }
الهدف من هذا المثال هو توضيح فكرة أن الباراميترات تجعل النتيجة التي ترجعها الدالة تتغير على حسب القيم التي ندخلها فيها عند إستدعائها.
public static void Sum (int a, int b) { System.out.print("The sum is: " + (a+b) + "\n"); }
هنا قمنا بتعريف دالة إسمها Sum()
و مهمتها طباعة ناتج جمع أي عددين صحيحين نضعهما فيها عند إستدعائها.
إذاً عند إستدعاء هذه الدالة يجب أن نمرر لها عددين صحيحين بين أقواسها, و عندها سيحدث التالي:
سيقوم الكمبيوتر بوضع هذين العددين في المتغيرَين
a
وb
بنفس الترتيب.بعدها سيقوم بتنفيذ أمر الطباعة الموضوع في الدالة و الذي يقضي بعرض ناتج جمع العددين الموجودين في المتغيرَين
a
وb
.
public static void main (String[] args) { Sum(3, 4); Sum(5, 9); Sum(10, 20); }
هنا قمنا باستدعاء الدالة Sum()
ثلاث مرات, و كل مرة قمنا بإعطائها عددين مختلفين, و بالتالي سيعمل الكود كالتالي:
أول مرة: وضعنا فيها القيمتين 3 و 4 و بالتالي سيتم عرض ناتج جمع العددين هكذا:  
The sum is: 7
.ثاني مرة: وضعنا فيها القيمتين 5 و 9 و بالتالي سيتم عرض ناتج جمع العددين هكذا:  
The sum is: 14
.ثالث مرة: وضعنا فيها القيمتين 10 و 20 و بالتالي سيتم عرض ناتج جمع العددين هكذا:  
The sum is: 30
.
إذا قمت باستدعاء دالة تحتوي على باراميتر أو أكثر, عليك إدخال قيمة مكان كل باراميتر موجود في الدالة عند إستدعائها و إلا سيؤدي ذلك إلى ظهور أخطاء في الكود.
أي باراميتر أو متغير عادي تنشئه في حدود الدالة يعتبر خاص لها, أي لا تستطيع التعامل معه بشكل مباشر من خارج حدود الدالة.
الفرق بين الكلمتين Parameter و Argument
أثناء تعريف الدالة, المتغيرات التي نقوم بتعريفها بين أقواسها تسمى Parameters.
بينما عندما نقوم باستدعاء الدالة و نعطيها قيم مكان كل باراميتر موضوع فيها, هذه القيم تسمى Arguments.
هنا المتغيرين
a
وb
يعتبروا Parameters بالنسبة للدالة.
public static void Sum (int a, int b) { System.out.print("The sum is: " + (a+b) + "\n"); }
هنا القيمتين 3 و 4 يعتبروا Arguments بالنسبة للدالة.
public static void main (String[] args) { Sum(3, 4); }
تمارين شاملة حول التعامل مع الباراميترات
التعامل مع الباراميترات في الخوارزميات - التمرين الأول
أكتب دالة إسمها Sum
تعطيها عددين صحيحين عند إستدعاءها, فتقوم بطباعة ناتج جمع هذين العددين فقط.
بعدها أطلب من المستخدم إدخال عددين, ثم قم باستدعائها لطباعة ناتج جمع هذين العددين.
import java.util.Scanner; public class Parameters { /* ------------------------------- هنا قمنا بتعريف الدالة ------------------------------ */ public static void Sum (int a, int b) { System.out.print("The sum is: " + (a+b) + "\n"); } /* --------------------------- من هنا يبدأ البرنامج بالتنفيذ --------------------------- */ public static void main (String[] args) { Scanner input = new Scanner(System.in); int num1; int num2; System.out.print("Enter first number: "); num1 = input.nextInt(); System.out.print("Enter second number: "); num2 = input.nextInt(); Sum(num1, num2); } }
public static void Sum (int a, int b) { System.out.print("The sum is: " + (a+b) + "\n"); }
هنا أنشأنا الدالة Sum()
و حددنا أن نوعها void
لأننا لا نريدها أن ترجع قيمة, و وضعنا لها باراميترين a
و b
.
إذاً عند إستدعاء هذه الدالة, يجب أن نمرر لها قيمتين نوعهما int
فتقوم بعرض ناتج جمع هاتين القيمتين فقط.
public static void main (String[] args) { Scanner input = new Scanner(System.in); int num1; int num2; System.out.print("Enter first number: "); num1 = input.nextInt(); System.out.print("Enter second number: "); num2 = input.nextInt(); Sum(num1, num2); }
بما أن الدالة main()
تمثل نقطة البداية بالنسبة للكمبيوتر, فهذا يعني أنه عند تشغيل البرنامج سيبدأ بتنفيذ الأوامر الموضوعة فيها.
في السطرين 19 و 20 قمنا بتجهيز المتغير num1
لتخزين أول عدد سيدخله المستخدم لاحقاً. و المتغير num2
لتخزين ثاني عدد سيدخله المستخدم.
من السطر 22 إلى السطر 26 سيطلب من المستخدم إدخال عددين, و سيتم تخزينهما في المتغيرين num1
و num2
.
في السطر 28 سيتم استدعاء الدالة Sum()
و تمرير القيم التي أدخلها المستخدم لها. عندها سيتم عرض ناتج جمع القيمتين اللتين أدخلهما المستخدم.
التعامل مع الباراميترات في الخوارزميات - التمرين الثاني
أكتب دالة إسمها Maximum
, تعطيها عددين صحيحين, فترجع العدد الأكبر فقط.
ثم أطلب من المستخدم إدخال عددين.
بعدها قم بعرض العدد الأكبر بين هذين العددين بالإعتماد على الدالة Maximum
.
ملاحظة: سبق أن شرحنا مبادئ المقارنة, لكننا الآن سنعلمك كيف تضع الكود في دالة و تستدعيه متى شئت.
import java.util.Scanner; public class Parameters { /* ------------------------------- هنا قمنا بتعريف الدالة ------------------------------ */ public static int Maximum (int a, int b) { if ( a > b ) { return a; } else { return b; } } /* --------------------------- من هنا يبدأ البرنامج بالتنفيذ --------------------------- */ public static void main (String[] args) { Scanner input = new Scanner(System.in); int num1; int num2; System.out.print("Enter first number: "); num1 = input.nextInt(); System.out.print("Enter second number: "); num2 = input.nextInt(); System.out.print("The max is: "+ Maximum(num1, num2) +"\n"); } }
public static int Maximum (int a, int b) { if ( a > b ) { return a; } else { return b; } }
هنا أنشأنا الدالة Maximum()
و حددنا أن نوعها int
لأننا نريدها أن ترجع عدد صحيح, و وضعنا لها باراميترين a
و b
.
إذاً, عند إستدعاء هذه الدالة يجب أن نمرر لها عددين نوعهما int
و عندها ستقوم بمقارنة هذين العددين و ترجع العدد الأكبر بينهما إلى المكان الذي تم إستدعاءها منه.
public static void main (String[] args) { Scanner input = new Scanner(System.in); int num1; int num2; System.out.print("Enter first number: "); num1 = input.nextInt(); System.out.print("Enter second number: "); num2 = input.nextInt(); System.out.print("The max is: "+ Maximum(num1, num2) +"\n"); }
بما أن الدالة main()
تمثل نقطة البداية بالنسبة للكمبيوتر, فهذا يعني أنه عند تشغيل البرنامج سيبدأ بتنفيذ الأوامر الموضوعة فيها.
في السطرين 28 و 29 قمنا بتجهيز المتغير num1
لتخزين أول عدد سيدخله المستخدم لاحقاً. و المتغير num2
لتخزين ثاني عدد سيدخله المستخدم.
من السطر 31 إلى السطر 35 سيطلب من المستخدم إدخال عددين, و سيتم تخزينهما في المتغيرين num1
و num2
.
في السطر 37 قمنا باستدعاء الدالة Maximum()
بداخل دالة الطباعة System.out.print()
لطباعة العدد الأكبر بين العددين اللذين أدخلهما المستخدم.
التعامل مع الباراميترات في الخوارزميات - التمرين الثالث
أكتب دالة إسمها Average
, يعطيها المستخدم علاماته المدرسية, فتحسب له معدله, ثم تطبع له نتيجته كالتالي:
- إذا كان معدله بين 10 و 20 ستطبع أنه ناجح.
- إذا كان معدله بين 0 و 9 ستطبع أنه راسب.
- إذا لم يكن معدله بين 0 و 20 ستطبع أن هناك خطأ في العلامات المدخلة.
في البرنامج, قم بتخزين أسماء المواد في مصفوفة إسمها Methods
.
ثم أطلب من المستخدم إدخال علامة بين 0 و 20 لكل مادة و خزّن العلامات التي سيدخلها المستخدم في مصفوفة إسمها Notes
.
في الأخير قم باستدعاء الدالة Average
لطباعة معدل و نتيجة المستخدم.
لنفترض أن المستخدم عنده 5 مواد (Algorithm, Java, Android, Linux, Networks) و سيدخل علامة لكل مادة منهم كالتالي.
تذكر: أسماء المواد يجب أن يتم وضعها في المصفوفة Methods
و علامة كل مادة يجب أن يتم تخزينها في المصفوفة Notes
.
import java.util.Scanner; public class Parameters { /* ------------------------------- هنا قمنا بتعريف الدالة ------------------------------ */ public static void Average (double[] a) { double S = 0; for(int i=0; i<a.length; i++) { S = S + a[i]; } S = S/a.length; System.out.print("Your average is: " +S+ "\n"); if( S >= 10 && S <= 20 ) { System.out.print("Congratulations you have succeeded \n"); } else if( S >= 0 && S < 10 ) { System.out.print("Sorry you failed"); } else { System.out.print("Impossible result! Please enter notes between 0 and 20 \n"); } } /* --------------------------- من هنا يبدأ البرنامج بالتنفيذ --------------------------- */ public static void main(String[] args) { Scanner input = new Scanner(System.in); double[] Notes = new double[5]; String[] Methods = {"Algorithm", "Java", "Android", "Linux", "Networks"}; for( int i=0; i<Notes.length; i++ ) { do { System.out.print(Methods[i] + ": "); Notes[i] = input.nextDouble(); } while( Notes[i] < 0 || Notes[i] > 20 ); } System.out.print("------------------------- \n"); Average(Notes); } }
public static void Average (double[] a) { double S = 0; for(int i=0; i<a.length; i++) { S = S + a[i]; } S = S/a.length; System.out.print("Your average is: " +S+ "\n"); if( S >= 10 && S <= 20 ) { System.out.print("Congratulations you have succeeded \n"); } else if( S >= 0 && S < 10 ) { System.out.print("Sorry you failed"); } else { System.out.print("Impossible result! Please enter notes between 0 and 20 \n"); } }
هنا أنشأنا الدالة Average()
و حددنا أن نوعها void
لأننا لا نريدها أن ترجع قيمة, و وضعنا لها باراميتر عبارة عن مصفوفة نوعها double
.
إذاً, عند إستدعاء هذه الدالة يجب أن نمرر لها مصفوفة ذات بعد واحد نوعها double
.
في السطر 10, قمنا بتجهيز المتغير S
و أعطينها القيمة 0 لأننا سنستخدمه لتخزين المعدل النهائي لقيم المصفوفة a
.
من السطر 12 إلى السطر 15, أنشأنا الحلقة for
للوصول إلى جميع قيم عناصر المصفوفة a
.
    في كل دورة من دورات هذه الحلقة سيتم إضافة قيمة عنصر من عناصر المصفوفة a
على قيمة المتغير S
.
في السطر 17, قسمنا قيمة المتغير S
على عدد عناصر المصفوفة a
. إذاً, هنا أصبحت قيمة المتغير S
تمثل معدل القيم الموجودة في المصفوفة a
.
في السطر 19, سيتم عرض المعدل المخزن في المتغير S
.
من السطر 21 إلى السطر 32, سيتم فحص المعدل المخزن في المتغير S
كالتالي:
إذا كان المعدل بين 10 و 20 ( مثل 13.5) سيتم طباعة الجملة
congartulation you did it !!!
.
إذا كان المعدل أكبر من 0 و أصغر من 10 ( أي حتى و لو كان 9.9 ) سيتم طباعة الجملة
sorry you failed
.
إذا كان المعدل ليس بين 0 و 20 ( مثل 5- أو 38 ) سيتم طباعة الجملة
you didn't enter your note correctly, please try again
.
    لأنه من المستحيل أن يكون معدله عبارة عن عدد سلبي أو أكبر من أعلى معدل ممكن ( أي أكبر من 20 ).
ملاحظة: في المنطق هذا الخطأ لا يمكن أن يحدث في جميع الأحوال عند إستدعاء هذه الدالة من الدالةmain()
لأننا في الدالةmain()
تأكدنا من كل علامة قام بإدخالها المستخدم قبل إستدعاء هذه الدالة.
public static void main(String[] args) { Scanner input = new Scanner(System.in); double[] Notes = new double[5]; String[] Methods = {"Algorithm", "Java", "Android", "Linux", "Networks"}; for( int i=0; i<Notes.length; i++ ) { do { System.out.print(Methods[i] + ": "); Notes[i] = input.nextDouble(); } while( Notes[i] < 0 || Notes[i] > 20 ); } System.out.print("------------------------- \n"); Average(Notes); }
في السطر 43, قمنا بتجهيز المصفوفة Notes
لتخزين العلامات التي سيدخلها المستخدم و حددنا أنها تتألف من 5 عناصر لأننا سندخل فيها فقط 5 قيم, و حددنا نوعها double
لأننا نريد الأخذ بعين الإعتبار الأرقام الموجود بعد الفاصلة.
في السطر 44, قمنا بتجهيز المصفوفة Methods
لتخزين أسماء المواد التي سيطلب من المستخدم إدخال علامتها.
من السطر 46 إلى السطر 54, قمنا بإنشاء حلقتين متداخلتين يعملان كالتالي:
بما أن أسماء المواد موجودة في المصفوفة
Methods
و المصفوفةNotes
مجهزة لتخزين علامات المستخدم, أنشأنا الحلقةi
للمرور على قيم المصفوفتين بشكل متوازي, بحيث في كل دورة سيطلب من المستخدم إدخال علامة لمادة موجودة في عنصر من عناصر المصفوفةMethods
و القيمة التي يدخلها المستخدم ستخزن في نفس index العنصر الموجود في المصفوفةMethods
.إذاً بواسطة الحلقة
for
سيتم المرور على عناصر المصفوفتينMethods
وNotes
بشكل متوازي.و بواسطة الحلقة
do while
سيستمر الكمبيوتر في الطلب من المستخدم بإدخال علامة مادة معينة من المواد طالما أن العلامة التي يدخلها ليست بين 0 و 20.
في السطر 57, قمنا باستدعاء الدالة Average()
و مررنا لها المصفوفة التي تحتوي على العلامات التي أدخلها المستخدم و التي تم تخزينها في المصفوفة Notes
حتى يتم طباعة معدل المستخدم.
التعامل مع الباراميترات في الخوارزميات - التمرين الرابع
أكتب دالة إسمها FindFirst
, عند إستدعائها تعطيها باراميترين, الباراميتر الأول عبارة عن مصفوفة تحتوي على أعداد صحيحة, الباراميتر الثاني عبارة عن عدد صحيح.
مهمة الدالة هي معرفة إذا كان هذا العدد موجود في المصفوفة و لو مرة واحدة فقط.
إذاً ستستمر الدالة بفحص قيم عناصر المصفوفة إلى أن تجد عنصر واحد يحتوي على نفس قيمة المتغير.
في حال وجدت الدالة عنصر في المصفوفة يملك قيمة تساوي قيمة المتغير ستوقف عملية البحث, و ستعرض index أول عنصر وجدت فيه القيمة المطلوبة.
في البرنامج, قم بإنشاء مصفوفة ذات بعد واحد إسمها Numbers
تحتوي على قيم أولية.
ثم أطلب من المستخدم إدخال أي عدد.
في الأخير قم باستدعاء الدالة FindFirst()
لطباعة ما إذا كان الرقم الذي أدخله المستخدم موجود في المصفوفة أم لا.
إفترض أن المصفوفة Numbers
تحتوي على القيم و أن المستخدم حاول البحث عن القيمة 5 فيها.
إذا إفترضنا أن المصفوفة تحتوي على نفس القيم الموضوعة في الصورة السابقة, و بحثنا عن العدد 16.
إذا إفترضنا أن المصفوفة تحتوي على نفس القيم الموضوعة في الصورة السابقة, و بحثنا عن العدد 5.
import java.util.Scanner; public class Parameters { /* ------------------------------- هنا قمنا بتعريف الدالة ------------------------------ */ public static void FindFirst (int[] a, int b) { boolean stopSearch = false; int i = 0; while ( stopSearch == false && i<a.length ) { if ( a[i] == b ) { System.out.print(b+ " is exist at index number: " +i+ "\n"); stopSearch = true; } i++; } if( stopSearch == false ) { System.out.print(b+ " is not exist \n"); } } /* --------------------------- من هنا يبدأ البرنامج بالتنفيذ --------------------------- */ public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] Numbers = {2, 7, 5, 6, 9, 14, 0, 5, 12, 5}; int x; System.out.print("Find: "); x = input.nextInt(); FindFirst(Numbers, x); } }
public static void FindFirst (int[] a, int b) { boolean stopSearch = false; int i = 0; while ( stopSearch == false && i<a.length ) { if ( a[i] == b ) { System.out.print(b+ " is exist at index number: " +i+ "\n"); stopSearch = true; } i++; } if( stopSearch == false ) { System.out.print(b+ " is not exist \n"); } }
هنا أنشأنا الدالة FindFirst()
و حددنا أن نوعها void
لأنها لن ترجع قيمة, و وضعنا لها باراميترين, الأول مصفوفة نوعها int
و الثاني متغير نوعه int
.
إذاً, عند إستدعاء هذه الدالة يجب أن نمرر لها مصفوفة و قيمة من النوع int
.
في السطر 10, قمنا بتجهيز المتغير stopSearch
لأننا سنستخدمه لإيقاف الحلقة while
مباشرةً إذا تم إيجاد القيمة المراد البحث عنها في المصفوفة
في السطر 11, قمنا بتجهيز المتغير i
لأننا سنستخدمه كعداد في الحلقة while
.
من السطر 13 إلى السطر 21, أنشأنا الحلقة while
للمرور على جميع عناصر المصفوفة طالما أن القيمة المراد البحث عنها في المصفوفة لم يتم إيجادها بعد.
في كل دورة من دورات الحلقة
while
سيتم مقارنة قيمة عنصر من عناصر المصفوفة مع قيمة المتغيرb
المراد البحث عنها.في حال وجود عنصر في المصفوفة يملك نفس قيمة المتغير
b
, سيتم طباعة رقم index العنصر, ثم وضع القيمة true في المتغيرstopSearch
لجعل الحلقةwhile
تتوقف.
من السطر 23 إلى السطر 26, سيتم فحص قيمة المتغير stopSearch
, في حال بقيت false فهذا يعني أنه لم يتم إيجاد القيمة التي تم البحث عنها في المصفوفة, لذلك سيتم طباعة أنه لم يتم إيجاد القيمة المراد البحث عنها.
public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] Numbers = {2, 7, 5, 6, 9, 14, 0, 5, 12, 5}; int x; System.out.print("Find: "); x = input.nextInt(); FindFirst(Numbers, x); }
في السطر 37, قمنا بإنشاء المصفوفة Numbers
و حددنا نوعها int
و أعطيناها قيم عشوائية مباشرةً عند إنشائها.
في السطر 38, قمنا بتعريف المتغير x
لتخزين العدد الذي سيدخله المستخدم.
في السطرين 40 و 41, طلبنا من المستخدم إدخال العدد الذي يريد البحث عنه في المصفوفة و وضعناه في المتغير x
.
في السطر 43, قمنا باستدعاء الدالة FindFirst()
و مررنا لها المصفوفة التي تحتوي على الأعداد العشوائية و العدد الذي أدخله المستخدم حتى تبحث عن العدد الذي أدخله المستخدم في المصفوفة, ثم تطبع له نتيجة البحث.
التعامل مع الباراميترات في الخوارزميات - التمرين الخامس
أكتب دالة إسمها FindAll
, عند إستدعائها تعطيها باراميترين, الباراميتر الأول عبارة عن مصفوفة تحتوي على أعداد صحيحة, الباراميتر الثاني عبارة عن عدد صحيح.
مهمة الدالة هي معرفة كم عنصر في المصفوفة يملك نفس قيمة هذا العدد.
إذاً ستقوم الدالة بمقارنة جميع قيم عناصر المصفوفة مع قيمة هذا العدد. و كل عنصر تجد قيمته تساوي قيمة هذا العدد, ستعرض index العنصر الذي وجدت فيه القيمة.
في البرنامج, قم بإنشاء مصفوفة ذات بعد واحد إسمها Numbers
تحتوي على قيم أولية.
ثم أطلب من المستخدم إدخال أي عدد.
في الأخير قم باستدعاء الدالة FindAll
لطباعة index كل عنصر في المصفوفة يحتوي على نفس قيمة هذا العدد.
لنفترض أن المصفوفة تحتوي على نفس القيم الموضوعة في الصورة السابقة, و بحثنا عن العدد 1.
لنفترض أن المصفوفة تحتوي على نفس القيم الموضوعة في الصورة السابقة, و بحثنا عن العدد 5.
import java.util.Scanner; public class Parameters { /* ------------------------------- هنا قمنا بتعريف الدالة ------------------------------ */ public static void FindAll (int[] a, int b) { int found = 0; for ( int i=0; i<a.length; i++ ) { if ( a[i] == b ) { System.out.print(b+ " is exist at index number: " +i+ "\n"); found++; } } if( found == 0 ) { System.out.print(b+ " is not exist \n"); } } /* --------------------------- من هنا يبدأ البرنامج بالتنفيذ --------------------------- */ public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] Numbers = {2, 7, 5, 6, 9, 14, 0, 5, 12, 5}; int x; System.out.print("Find all: "); x = input.nextInt(); FindAll(Numbers, x); } }
public static void FindAll (int[] a, int b) { int found = 0; for ( int i=0; i<a.length; i++ ) { if ( a[i] == b ) { System.out.print(b+ " is exist at index number: " +i+ "\n"); found++; } } if( found == 0 ) { System.out.print(b+ " is not exist \n"); } }
هنا أنشأنا الدالة FindAll()
و حددنا أن نوعها void
لأنها لن ترجع قيمة, و وضعنا لها باراميترين, الأول مصفوفة نوعها int
و الثاني متغير نوعه int
.
إذاً, عند إستدعاء هذه الدالة يجب أن نمرر لها مصفوفة و قيمة من النوع int
.
في السطر 10, قمنا بتجهيز المتغير found
و أعطيناه القيمة 0 كقيمة أولية لأننا سنستخدمه لتخزين عدد المرات التي تم فيها إيجاد قيمة المتغير b
بداخل المصفوفة a
.
من السطر 12 إلى السطر 19, أنشأنا الحلقة for
للمرور على جميع عناصر المصفوفة كالتالي:
في كل دورة من دورات الحلقة سيتم مقارنة قيمة عنصر من عناصر المصفوفة مع قيمة المتغير
b
المراد البحث عنها.في حال وجود عنصر في المصفوفة يملك نفس قيمة المتغير
b
, سيتم طباعة رقم index العنصر, ثم إضافة 1 على قيمة المتغيرfound
.
من السطر 21 إلى السطر 24, سيتم فحص قيمة المتغير found
, في حال بقيت 0 فهذا يعني أنه لم يتم إيجاد القيمة التي تم البحث عنها في المصفوفة, لذلك سيتم طباعة أنه لم يتم إيجاد القيمة المراد البحث عنها.
public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] Numbers = {2, 7, 5, 6, 9, 14, 0, 5, 12, 5}; int x; System.out.print("Find all: "); x = input.nextInt(); FindAll(Numbers, x); }
في السطر 35, قمنا بإنشاء المصفوفة Numbers
و حددنا نوعها int
و أعطيناها قيم عشوائية مباشرةً عند إنشائها.
في السطر 36, قمنا بتعريف المتغير x
لتخزين العدد الذي سيدخله المستخدم.
في السطرين 38 و 39, طلبنا من المستخدم إدخال العدد الذي يريد البحث عنه في المصفوفة و وضعناه في المتغير x
.
في السطر 41, قمنا باستدعاء الدالة FindAll()
و مررنا لها المصفوفة التي تحتوي على الأعداد العشوائية و العدد الذي أدخله المستخدم حتى تبحث عن العدد الذي أدخله المستخدم في المصفوفة, ثم تطبع له نتيجة البحث.