الخوارزميات التعامل مع الباراميترات

مفهوم الباراميتر

باراميتر تعني Parameter في اللغة الإنجليزية, و هو عن متغير يتم تعريفه بين أقواس الدالة.


في المثال التالي قمنا بتعريف دالة إسمها 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

شرح عملية الإستدعاء بتفصيل

هكذا كان يتم تمرير الأعداد التي كنا نضعها بين أقواس الدالة Sum().


إنتبه

إذا قمت باستدعاء دالة تحتوي على باراميتر أو أكثر, عليك إدخال قيمة مكان كل باراميتر موجود في الدالة عند إستدعائها و إلا سيؤدي ذلك إلى ظهور أخطاء في الكود.
أي باراميتر أو متغير عادي تنشئه في حدود الدالة يعتبر خاص لها, أي لا تستطيع التعامل معه بشكل مباشر من خارج حدود الدالة.

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

الحل و التفسير »



التمرين الثاني

أكتب دالة إسمها Maximum, تعطيها عددين صحيحين, فترجع العدد الأكبر فقط.
ثم أطلب من المستخدم إدخال عددين.
بعدها قم بعرض العدد الأكبر بين هذين العددين بالإعتماد على الدالة Maximum().

الحل و التفسير »



التمرين الثالث

أكتب دالة إسمها Average, يعطيها المستخدم علاماته المدرسية, فتحسب له معدله, ثم تطبع له نتيجته كالتالي:
- إذا كان معدله بين 10 و 20 ستطبع أنه ناجح.
- إذا كان معدله بين 0 و 9 ستطبع أنه راسب.
- إذا لم يكن معدله بين 0 و 20 ستطبع أن هناك خطأ في العلامات المدخلة.

في البرنامج, قم بتخزين أسماء المواد في مصفوفة إسمها Methods.
ثم أطلب من المستخدم إدخال علامة بين 0 و 20 لكل مادة و خزّن العلامات التي سيدخلها المستخدم في مصفوفة إسمها Notes.
في الأخير قم باستدعاء الدالة Average() لطباعة معدل و نتيجة المستخدم.

الحل و التفسير »



التمرين الرابع

أكتب دالة إسمها FindFirst, عند إستدعائها تعطيها باراميترين, الباراميتر الأول عبارة عن مصفوفة تحتوي على أعداد صحيحة, الباراميتر الثاني عبارة عن عدد صحيح.
مهمة الدالة هي معرفة إذا كان هذا العدد موجود في المصفوفة و لو مرة واحدة فقط.
إذاً ستستمر الدالة بفحص قيم عناصر المصفوفة إلى أن تجد عنصر واحد يحتوي على نفس قيمة المتغير.
في حال وجدت الدالة عنصر في المصفوفة يملك قيمة تساوي قيمة المتغير ستوقف عملية البحث, و ستعرض index أول عنصر وجدت فيه القيمة المطلوبة.

في البرنامج, قم بإنشاء مصفوفة ذات بعد واحد إسمها Numbers تحتوي على قيم أولية.
ثم أطلب من المستخدم إدخال أي عدد.
في الأخير قم باستدعاء الدالة FindFirst() لطباعة ما إذا كان الرقم الذي أدخله المستخدم موجود في المصفوفة أم لا.

الحل و التفسير »



التمرين الخامس

أكتب دالة إسمها FindAll, عند إستدعائها تعطيها باراميترين, الباراميتر الأول عبارة عن مصفوفة تحتوي على أعداد صحيحة, الباراميتر الثاني عبارة عن عدد صحيح.
مهمة الدالة هي معرفة كم عنصر في المصفوفة يملك نفس قيمة هذا العدد.
إذاً ستقوم الدالة بمقارنة جميع قيم عناصر المصفوفة مع قيمة هذا العدد. و كل عنصر تجد قيمته تساوي قيمة هذا العدد, ستعرض index العنصر الذي وجدت فيه القيمة.

في البرنامج, قم بإنشاء مصفوفة ذات بعد واحد إسمها Numbers تحتوي على قيم أولية.
ثم أطلب من المستخدم إدخال أي عدد.
في الأخير قم باستدعاء الدالة FindAll() لطباعة index كل عنصر في المصفوفة يحتوي على نفس قيمة هذا العدد.

الحل و التفسير »

الدورات

أدوات مساعدة

الأقسام

دورات
مقالات أسئلة مشاريع كتب