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

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

باراميتر تعني 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 و بالتالي سيتم عرض ناتج جمع العددين هكذا: &nbsp The sum is: 7.

    • ثاني مرة: وضعنا فيها القيمتين 5 و 9 و بالتالي سيتم عرض ناتج جمع العددين هكذا: &nbsp The sum is: 14.

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


النتيجة المطلوبة

لنفترض أن المستخدم قام بإدخال العددين 8 و 14.

التعامل مع الباراميترات في الخوارزميات - التمرين الأول

الخوارزمية

كود الجافا
		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.

ملاحظة: سبق أن شرحنا مبادئ المقارنة, لكننا الآن سنعلمك كيف تضع الكود في دالة و تستدعيه متى شئت.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل القيمتين " 7 " و " 9 ".

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