Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

الخوارزمياتالعوامل - التمرين السادس

المطلوب

أكتب برنامج لحساب قيمة المتغير 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");
}
}
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;
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);
}
}
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");
}
}
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"); } }

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


دورة تعلم البرمجة للمبتدئين >