Algorithmsالتعامل مع الباراميترات في الخوارزميات
مفهوم الباراميتر
باراميتر تعني 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()
و مهمتها طباعة ناتج جمع أي عددين صحيحين نضعهما فيها عند إستدعائها.
إذاً عند إستدعاء هذه الدالة يجب أن نمرر لها عددين صحيحين بين أقواسها, و عندها سيحدث التالي:
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
.
شرح عملية الإستدعاء بتفصيل
هكذا كان يتم تمرير الأعداد التي كنا نضعها بين أقواس الدالة Sum()
.
إنتبه
إذا قمت باستدعاء دالة تحتوي على باراميتر أو أكثر, عليك إدخال قيمة مكان كل باراميتر موجود في الدالة عند إستدعائها و إلا سيؤدي ذلك إلى ظهور أخطاء في الكود.
أي باراميتر أو متغير عادي تنشئه في حدود الدالة يعتبر خاص لها, أي لا تستطيع التعامل معه بشكل مباشر من خارج حدود الدالة.
الفرق بين الكلمتين Parameter و Argument
أثناء تعريف الدالة, المتغيرات التي نقوم بتعريفها بين أقواسها تسمى Parameters.
بينما عندما نقوم باستدعاء الدالة و نعطيها قيم مكان كل باراميتر موضوع فيها, هذه القيم تسمى Arguments.
مثال
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
تعطيها عددين صحيحين عند إستدعاءها, فتقوم بطباعة ناتج جمع هذين العددين فقط.
بعدها أطلب من المستخدم إدخال عددين, ثم قم باستدعائها لطباعة ناتج جمع هذين العددين.
الحل و التفسير »
التمرين الثاني
أكتب دالة إسمها Maximum
, تعطيها عددين صحيحين, فترجع العدد الأكبر فقط.
ثم أطلب من المستخدم إدخال عددين.
بعدها قم بعرض العدد الأكبر بين هذين العددين بالإعتماد على الدالة Maximum
.
الحل و التفسير »
التمرين الثالث
أكتب دالة إسمها Average
, يعطيها المستخدم علاماته المدرسية, فتحسب له معدله, ثم تطبع له نتيجته كالتالي:
- إذا كان معدله بين 10 و 20 ستطبع أنه ناجح.
- إذا كان معدله بين 0 و 9 ستطبع أنه راسب.
- إذا لم يكن معدله بين 0 و 20 ستطبع أن هناك خطأ في العلامات المدخلة.
في البرنامج, قم بتخزين أسماء المواد في مصفوفة إسمها Methods
.
ثم أطلب من المستخدم إدخال علامة بين 0 و 20 لكل مادة و خزّن العلامات التي سيدخلها المستخدم في مصفوفة إسمها Notes
.
في الأخير قم باستدعاء الدالة Average
لطباعة معدل و نتيجة المستخدم.
الحل و التفسير »
التمرين الرابع
أكتب دالة إسمها FindFirst
, عند إستدعائها تعطيها باراميترين, الباراميتر الأول عبارة عن مصفوفة تحتوي على أعداد صحيحة, الباراميتر الثاني عبارة عن عدد صحيح.
مهمة الدالة هي معرفة إذا كان هذا العدد موجود في المصفوفة و لو مرة واحدة فقط.
إذاً ستستمر الدالة بفحص قيم عناصر المصفوفة إلى أن تجد عنصر واحد يحتوي على نفس قيمة المتغير.
في حال وجدت الدالة عنصر في المصفوفة يملك قيمة تساوي قيمة المتغير ستوقف عملية البحث, و ستعرض index أول عنصر وجدت فيه القيمة المطلوبة.
في البرنامج, قم بإنشاء مصفوفة ذات بعد واحد إسمها Numbers
تحتوي على قيم أولية.
ثم أطلب من المستخدم إدخال أي عدد.
في الأخير قم باستدعاء الدالة FindFirst()
لطباعة ما إذا كان الرقم الذي أدخله المستخدم موجود في المصفوفة أم لا.
الحل و التفسير »
التمرين الخامس
أكتب دالة إسمها FindAll
, عند إستدعائها تعطيها باراميترين, الباراميتر الأول عبارة عن مصفوفة تحتوي على أعداد صحيحة, الباراميتر الثاني عبارة عن عدد صحيح.
مهمة الدالة هي معرفة كم عنصر في المصفوفة يملك نفس قيمة هذا العدد.
إذاً ستقوم الدالة بمقارنة جميع قيم عناصر المصفوفة مع قيمة هذا العدد. و كل عنصر تجد قيمته تساوي قيمة هذا العدد, ستعرض index العنصر الذي وجدت فيه القيمة.
في البرنامج, قم بإنشاء مصفوفة ذات بعد واحد إسمها Numbers
تحتوي على قيم أولية.
ثم أطلب من المستخدم إدخال أي عدد.
في الأخير قم باستدعاء الدالة FindAll
لطباعة index كل عنصر في المصفوفة يحتوي على نفس قيمة هذا العدد.
الحل و التفسير »