الخوارزمياتالعوامل - التمرين السادس
المطلوب
أكتب برنامج لحساب قيمة المتغير S النهائية.
إرشادات
إذا ركزت قليلاً في عمليات القسمة الظاهرة في الصورة فستجد أن ناتج عمليات القسمة سيكون في كل مرة على الأغلب يحتوي على فاصلة عشرية كالتالي:
1, -0.5, 0.33, -0.25, 0.2.
- لذلك بما أننا ننوي تخزين ناتج عمليات قسمة في المتغير
Sفهذا يعني أنه يجب أن يكون معرف كـdoubleحتى لا نخسر أي رقم يحتوي على فاصلة عشرية يضاف عليه أو يطرح منه. - و بما أن قيمة العداد
iستدخل في كل عملية قسمة يتم إجراءها فهذا يعني أنه يجب أن يكون أيضاً معرف كـdoubleحتى لا نخسر أي رقم يحتوي على فاصلة عشرية ينتج عن عملية القسمة.
النتيجة المطلوبة
طريقة التحليل
- الرقم الموجود في الأعلى هو دائماً الرقم 1.
- الرقم الموجود في الأسفل يبدأ من 1 وصولاً إلى 100 و هو عبارة عن قيمة العداد المستخدم في الحلقة في كل دورة.
الخوارزمية
كود الجافا
public class Sum_Odd_And_Even_Numbers { public static void main (String[] args) { double S=0; for (double i=1; i <=100; i++) { if ( i%2 == 1) { S = S + (1/i); } else if ( i%2 == 0) { S = S - (1/i); } } System.out.print("S= " +S+ "\n"); } }
شرح الكود
double S=0;
- هنا قمنا بتعريف المتغير
Sلتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (double i=1; i <=100; i++) { if ( i%2 == 1) { S = S + (1/i); } else if ( i%2 == 0) { S = S - (1/i); } }
- هنا قمنا بإنشاء حلقة من 1 إلى 100 و في كل دورة تزيد قيمة العداد 1.
- في كل دورة يقوم البرنامج بفحص قيمة العداد
iكالتالي:- يبدأ بالشرط الأول فيسأل نفسه, هل هي عدد مفرد؟
إذا كان الجواب نعم, سيتم زيادة (الناتج من قسمة 1 علىi) على قيمةSالقديمة, ثم تخزين الناتج النهائي فيSمن جديد. - إذا لم تكن عدد مفرد ينتقل إلى الشرط الثاني, فيسأل نفسه: هل هي عدد مزدوج؟
إذا كان الجواب نعم, سيتم إنقاص (الناتج من قسمة 1 علىi) من قيمةSالقديمة, ثم تخزين الناتج النهائي فيSمن جديد.
- يبدأ بالشرط الأول فيسأل نفسه, هل هي عدد مفرد؟
- ملاحظة: أيضاً في المنطق إذا لم يكن الرقم مفرد فإنه حتماً مزدوج.
إذاً كان بإمكاننا وضع جملةelseبدل جملةelse if.
في الواقع هنا يفضّل وضعelseلكي لا تجعل الكمبيوتر يقوم بتحليل قيمة العداد ليعرف إذا كانت مزدوجة أم لا.
لأنها حتماً ستكون مزدوجة إذا قام بفحصها أولاً و لم يجدها مفردة. - إذا أردت أن يكون الكود ممتازاً فعليك كتابة البرنامج بهذه الطريقة:
public class Sum_Odd_And_Even_Numbers { public static void main (String[] args) { double S=0; for (double i=1; i <=100; i++) { if ( i%2 == 1) { S = S + (1/i); } else { S = S - (1/i); } } System.out.print("S= " +S+ "\n"); } }