الخوارزمياتالتعامل مع الباراميترات - التمرين الثالث
المطلوب
أكتب دالة إسمها 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حتى يتم طباعة معدل المستخدم.