الخوارزمياتالتعامل مع الباراميترات - التمرين الثالث
المطلوب
أكتب دالة إسمها 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()
تأكدنا من كل علامة قام بإدخالها المستخدم قبل إستدعاء هذه الدالة.
- إذا كان المعدل بين 10 و 20 ( مثل 13.5) سيتم طباعة الجملة
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
حتى يتم طباعة معدل المستخدم.