مفهوم العوامل و أنواعها في الخوارزميات
عامل : تعني Operator في اللغة الإنجليزية, و العامل عبارة عن رمز له معنى محدد في البرمجة.
ملاحظة: هناك الكثير من العوامل و كل عامل يمكن إستخدامه لغرض محدد مع الإشارة إلى أنك لست مضطراً لأن تتعلمهم كلهم.
ستتعرف في هذا الدرس على العوامل الأكثر إستخداماً و التي تستخدم في الشروط و الحلقات.
أدرس جميع الأمثلة و التمارين الموضوعة حتى لا تفوتك أي فكرة قد تحتاجها مستقبلاً.
عند دراسة الأمثلة الموضوعة, قم بتغيير قيم المتغيرات و حاول أن تتلاعب بالكود لأن ذلك سيجعلك تفهم أكثر و سيجعل فكرة العوامل ترسخ في ذاكرتك.
العوامل التي تستخدم في العمليات الحسابية Arithmetic Operators
إسم العامل | رمزه | طريقة إستخدامه | إستخدامه |
---|---|---|---|
Assignment | = | a = b |
أعطي a قيمة b |
Addition | + | a + b |
أضف قيمة b على قيمة a |
Subtraction | - | a - b |
إطرح قيمة b من قيمة a |
Unary plus | + | +a |
أضرب قيمة a بالعامل + |
Unary minus | - | -a |
أضرب قيمة a بالعامل - |
Multiplication | * | a * b |
أضرب قيمة a بقيمة b |
Division | / | a / b |
أقسم قيمة a على قيمة b |
Modulo | % | a % b |
للحصول على آخر رقم يبقى عندما نقسم قيمة a على قيمة b |
Increment | ++ | a++ |
لإضافة 1 على قيمة a و تستخدم في الحلقات |
Decrement | -- | a-- |
لإنقاص 1 من قيمة a و تستخدم في الحلقات |
أمثلة و ملاحظات حول طريقة إستخدام و فائدة كل عامل مذكور في الجدول.
العوامل التي تستخدم في العمليات الحسابية في الخوارزميات
مثال حول العامل =
(Assignment Operator)
العامل =
يستخدم لإعطاء قيمة للمتغير.
public class Assignment { public static void main (String[] args) { int b = 20; int a = b; } }
مثال حول العامل +
(Addition Operator)
العامل +
يستخدم لإضافة قيمة على قيمة, أي في عمليات الجمع.
public class Addition { public static void main (String[] args) { int a = 20; int b = 14; int c = a + b; // b و a تحتوي على ناتج جمع القيمتين c } }
مثال حول العامل -
(Subtraction Operator)
العامل -
يستخدم لإنقاص قيمة من قيمة, أي في عمليات الطرح.
public class Subtraction { public static void main (String[] args) { int a = 20; int b = 14; int c = a - b; // b و a تحتوي على الفرق بين القيمتين c } }
مثال حول العامل +
(Unary-Plus Operator)
يعني ضرب القيمة بالعامل +
.
public class UnaryPlus { public static void main (String[] args) { // positive أكبر من صفر, أي قيمة a المثال الأول: إذا كانت قيمة int a = 10; int b = +a; // a لقيمة UnaryPlus تحتوي على الـ b System.out.print( b + "\n" ); // negative أصغر من صفر, أي قيمة a المثال الثاني: إذا كانت قيمة a = -10; b = +a; // a لقيمة UnaryPlus تحتوي على الـ b System.out.print( b + "\n" ); } }
مثال حول العامل -
(Unary-Minus Operator)
يعني ضرب القيمة بالعامل -
.
public class UnaryMinus { public static void main (String[] args) { // positive أكبر من صفر, أي قيمة a المثال الأول: إذا كانت قيمة int a = 10; int b = -a; // a لقيمة UnaryMinus تحتوي على الـ b System.out.print( b + "\n" ); // negative أصغر من صفر, أي قيمة a المثال الثاني: إذا كانت قيمة a = -10; b = -a; // a لقيمة UnaryMinus تحتوي على الـ b System.out.print( b + "\n" ); } }
مثال حول العامل *
(Multiplication Operator)
العامل *
يستخدم لضرب قيمة بقيمة, أي في عمليات الضرب.
public class Multiplication { public static void main (String[] args) { int a = 6; int b = 5; int c = a * b; // b و a تحتوي على ناتج ضرب القيمتين c } }
مثال حول العامل /
(Division Operator)
العامل /
يستخدم لقسمة قيمة على قيمة, أي في عمليات القسمة.
public class Divison { public static void main (String[] args) { int a = 8; int b = 5; int c = a / b; // b على قيمة a تحتوي على ناتج قسمة قيمة c System.out.print( c + "\n" ); } }
لو كانت المتغيرات a
و b
و c
معرفة كـ double
لكانت القيمة النهائية للمتغير c
تساوي 1.6
و ليس 1
.
إذاً هنا عندما قمنا بتعريف المتغيرات كـ int
خسرنا كل القيم التي بعد الفاصلة.
معلومة
الآلة الحاسبة التي نستخدمها في المدرسة أو العمل تعطينا الجواب دائماً كـ double
لأنها لا تتجاهل أي رقم موجود بعد الفاصلة.
مثال حول العامل %
(Modulo Operator)
العامل %
يقال له الـ Modulo و يسمى Remainder في الرياضيات و هو آخر رقم يبقى من علمية القسمة.
إذاً نستخدم الـ Modulo للحصول على آخر رقم يبقى من عملية القسمة.
و له فوائد كثيرة, فمثلاً يمكنك أن تعرف أيضاً إذا كان الرقم مفرد أو مزدوج ( أي Even or Odd ) من خلاله.
في هذا المثال سنقوم بتخزين الرقم الذي يبقى من القسمة في المتغير c
.
public class Modulo { public static void main (String[] args) { int a = 8; int b = 5; int c = a % b; // b على a تحتوي على الباقي من قسمة c System.out.print( c + "\n" ); } }
لمعرفة إذا كان العدد مفرد أو مزدوج أنظر إلى الباقي من عملية قسمة هذا الرقم على 2 فقط.
أي عدد تقسمه على 2 و يبقى منه 1, فهذا يعني أن هذا العدد هو عدد مفرد.
أي عدد تقسمه على 2 و يبقى منه 0 ( أي لا يبقى منه شيء ) , فهذا يعني أن هذا العدد هو عدد مزدوج.
لاحظ الصورة التالية.
مثال حول العامل ++
(Increment Operator)
العامل ++
يستخدم لزيادة قيمة المتغير واحداً, و هذا الأسلوب يستخدم كثيراً في الحلقات لزيادة قيمة العداد واحداً في كل دورة بكود أقل.
public class Increment { public static void main (String[] args) { for ( int i=1; i <=5; i++ ) { System.out.print( i +"\n"); } } }
أنشأنا حلقة تتكرر من 1 إلى 5 أي أنشأنا حلقة تتكرر5 مرات.
في كل دورة قمنا بطباعة قيمة العداد
i
.الآن أنظر إلى الفارق في الحلقة:
for ( int i=1; i <=5; i++ )
سابقاً كنا نكتبها هكذا:
for ( int i=1; i <=5; i=i+1 )
إذاً i++
هي فقط إختصار للكود i = i + 1
.
مثال حول العامل --
(Decrement Operator)
العامل --
يستخدم لإنقاص قيمة المتغير واحداً, و هذا الأسلوب يستخدم كثيراً في الحلقات لإنقاص قيمة العداد واحداً في كل دورة بكود أقل.
public class Decrement { public static void main (String[] args) { for ( int i=5; i>=1; i-- ) { System.out.print( i +"\n"); } } }
أنشأنا حلقة تتكرر من 5 إلى 1 أي أيضاً أنشأنا حلقة تتكرر5 مرات.
هنا أعطينا العداد قيمة أولية تساوي 5, في كل دورة سيسأل الكمبيوتر نفسه هذا السؤال: هل قيمة الـ
i
أكبر أو تساوي 1؟إذا كانت قيمة العداد أكبر أو تساوي 1 سيقوم البرنامج بطباعة قيمة العداد
i
.هنا لاحظ أننا قمنا بإنقاص قيمة العداد 1 في كل دورة و هذا ما يسمى Decrement.
يمكنك أيضاً إنقاص قيمة العداد 1 في بعد كل دورة من الحلقة أيضاً بطريقتين:
الطريقة الأولى:
for ( int i=5; i>=1; i-- )
الطريقة الثانية:
for ( int i=5; i>=1; i=i-1 )
إذاً i--
هي فقط إختصار للكود i = i - 1
.
من الآن فصاعداً مع الحلقات سنختصر الكود i = i + 1
بالكود i++
.
و الكود i = i - 1
بالكود i--
.
العوامل التي تستخدم للمقارنة Comparison Operators
إسم العامل | رمزه | طريقة إستخدامه | إستخدامه |
---|---|---|---|
Equal to | == | a == b |
لمعرفة إذا كانت قيمة a تساوي قيمة b |
Not equal to | =! | a != b |
لمعرفة إذا كانت قيمة a لا تساوي قيمة b |
Greater than | a > b |
لمعرفة إذا كانت قيمة a أكبر من قيمة b |
|
Less than | > | a < b |
لمعرفة إذا كانت قيمة a أصغر من قيمة b |
Greater than or equal to | = | a >= b |
لمعرفة إذا كانت قيمة a أكبر أو تساوي قيمة b |
Less than or equal to | => | a <= b |
لمعرفة إذا كانت قيمة a أصغر أو تساوي قيمة b |
أمثلة و ملاحظات حول طريقة إستخدام و فائدة كل عامل مذكور في الجدول.
العوامل التي تستخدم للمقارنة في الخوارزميات Comparison Operators
مثال حول العامل ==
(Equal To Operator)
العامل ==
يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول تساوي قيمة المتغير الثاني.
public class EqualTo { public static void main (String[] args) { int a = 10; int b = 10; if( a == b ) { System.out.print("a is Equal To b"); } System.out.print("\n"); } }
مثال حول العامل !=
(Not Equal To Operator)
العامل !=
يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول لا تساوي قيمة المتغير الثاني.
public class NotEqualTo { public static void main (String[] args) { int a = 10; int b = 1234; if( a != b ) { System.out.print("a is Not Equal To b"); } System.out.print("\n"); } }
مثال حول العامل >
(Greater Than Operator)
العامل >
يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أكبر من قيمة المتغير الثاني.
public class GreaterThan { public static void main (String[] args) { int a = 50; int b = 14; if( a > b ) { System.out.print("a is Greater Than b"); } System.out.print("\n"); } }
مثال حول العامل <
(Less Than Operator)
العامل <
يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أصغر من قيمة المتغير الثاني.
public class LessThan { public static void main (String[] args) { int a = 5; int b = 20; if( a < b ) { System.out.print("a is Less Than b"); } System.out.print("\n"); } }
مثال حول العامل >=
(Greater Than or Equal To Operator)
العامل >=
يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أكبر أو تساوي قيمة المتغير الثاني.
public class GreaterThanOrEqualTo { public static void main (String[] args) { // b أكبر من قيمة a إذا كانت قيمة int a = 20; int b = 10; if( a >= b ) { System.out.print("a is Greater Than Or Equal To b"); } System.out.print("\n"); // b تساوي قيمة a إذا كانت قيمة a = 10; b = 10; if( a >= b ) { System.out.print("a is Greater Than Or Equal To b"); } System.out.print("\n"); } }
مثال حول العامل <=
(Less Than or Equal To Operator)
العامل <=
يستخدم لتنفيذ كود معين إذا كانت قيمة المتغير الأول أصغر أو تساوي قيمة المتغير الثاني.
public class LessThanOrEqualTo { public static void main (String[] args) { // b أصغر من قيمة a إذا كانت قيمة int a = 4; int b = 16; if( a <= b ) { System.out.print("a is Less Than Or Equal To b"); } System.out.print("\n"); // b تساوي قيمة a إذا كانت قيمة a = 4; b = 4; if( a <= b ) { System.out.print("a is less Than Or Equal To b"); } System.out.print("\n"); } }
العوامل التي تستخدم لوضع شروط منطقية Logical Operators
إسم العامل | رمزه | طريقة إستخدامه | إستخدامه |
---|---|---|---|
AND | && | condition-1 && condition-2 |
يستخدم لتنفيذ كود معين إذا تحقق الشرط الأول و الشرط الثاني |
OR | || | condition-1 || condition-2 |
يستخدم لتنفيذ كود معين إذا تحقق الشرط الأول أو الشرط الثاني |
أمثلة و ملاحظات حول طريقة إستخدام و فائدة كل عامل مذكور في الجدول.
العوامل التي تستخدم لوضع شروط منطقية في الخوارزميات Logical Operators
مثال حول العامل &&
(AND Operator)
العامل &&
يستخدم لتنفيذ كود معين إذا تحققت جميع الشروط الموضوعة.
public class And { public static void main (String[] args) { int note = 15; if( note > 9 && note <= 20 ) // إذا تحقق الشرط الأول و الشرط الثاني سيتم تنفيذ الكود { System.out.print(note +" is between 10 and 20, so you succeed"); } else if( note >= 0 && note < 10 ) // إذا تحقق الشرط الأول و الشرط الثاني سيتم تنفيذ الكود { System.out.print(note +" is between 0 and 9, so you failed"); } else if( note < 0 ) { System.out.print(note +" , note can't be a negative number !!!"); } else { System.out.print(note +" note can't be more than 20 !!!"); } System.out.print("\n"); } }
لو وضعنا قيمة المتغير note
تساوي 7
لو وضعنا قيمة المتغير note
تساوي -5
لو وضعنا قيمة المتغير note
تساوي 21
مثال حول العامل ||
(OR Operator)
العامل ||
يستخدم لتنفيذ كود معين إذا تحقق أحد الشروط الموضوعة.
هنا يكفي أن يتحقق شرط واحد حتى يتم تنفيذ الأوامر الموضوعة.
public class Or { public static void main (String[] args) { String name = "Ziad"; if( name == "Ziad" || name == "Hamada" ) // إذا تحقق الشرط الأول أو الشرط الثاني أو كلاهما سيتم تنفيذ الكود { System.out.print(name +" is my brother."); } else { System.out.print("Sorry " +name+ ", I don't know you !!!"); } System.out.print("\n"); } }
تمارين شاملة حول إستخدام العوامل في الحلقات و الشروط
العوامل في الخوارزميات - التمرين الأول
أكتب برنامج مهمته جمع جميع الأعداد المفردة بين 1 و 10.
لا تستخدم الـ Modulo.
إجعله يظهر قيمة العداد و قيمة المتغير S
في كل دورة.
إذاً هنا قررنا جعل قيمة العداد الأولية تساوي 1 و في نهاية كل دورة سيتم إضافة 2 عليها و هكذا ستظل دائماً قيمة العداد مفردة.
public class Sum_Odd_Numbers { public static void main (String[] args) { int S=0; for (int i=1; i<11 i="" n="" pre="" s="S" system.out.print=""> 11>
int S=0;
هنا قمنا بتعريف المتغير S
لتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=1; i<11 i="i+2)" pre="">
هنا أنشأنا حلقة تبدأ من 1 إلى ما قبل الرقم 11 (أي من 1 إلى 10) و في نهاية كل دورة تزيد 2.
إذا كتبنا i<11 code=""> كأننا كتبنا تماماً
i <=10
لأن الحلقة في الحالتين ستتوقف عندما تصبح قيمة العداد i
تساوي 10.11>
هنا كما تلاحظ أعطينا العداد رقم 1 كقيمة أولية و أضفنا عليه 2 في نهاية كل دورة, و هكذا إستطعنا جعل قيمة الـ i
مفردة في كل دورة.
System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n");
كل شيء مكتوب بين " "
سيظهر كما هو عند تشغيل البرنامج, و كل شيء بدونهم ستظهر قيمته الحالية عند التشغيل.
طريقة كتابة هذا البرنامج تعتبر ممتازة, لأنك جعلت العداد يعمل بطريقة تجعلك تحصل على الأرقام المفردة بـ 5 دورات فقط.
العوامل في الخوارزميات - التمرين الثاني
أكتب برنامج مهمته جمع جميع الأعداد المفردة بين 1 و 10.
إستخدم الـ Modulo لتمييز الأعداد المفردة عن المزدوجة.
إجعله يظهر قيمة العداد و قيمة المتغير S
في كل دورة.
إذاً, هنا قررنا إنشاء حلقة تتألف من 10 دورات و في نهاية كل دورة تزيد قيمة العداد فيها 1.
الفكرة المهمة هنا أننا سنفحص قيمة العداد في كل دورة, إذا كانت عبارة عن عدد مفرد سنضيفها على المتغير
S
, و إذا لم تكن كذلك لن نفعل شيئ.
public class Sum_Odd_Numbers { public static void main (String[] args) { int S=0; for (int i=1; i<11 1="" i="" if="" n="" pre="" s="S" system.out.print=""> 11>
int S=0;
هنا قمنا بتعريف المتغير S
لتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=1; i<11 1="" i="" if="" n="" pre="" s="S" system.out.print="">
الحلقة for (int i=1; i<11 code="" i=""> تعني أنه عندنا 10 دورات و في نهاية كل دورة تزيد قيمة العداد 1.11>
جملة الشرط if (i%2 == 1)
تعني أنه إذا كانت قيمة العداد i
عبارة عن عدد مفرد, سيتم تنفيذ أمر الطباعة و إضافة قيمة العداد على قيمة المتغير S
.
العوامل في الخوارزميات - التمرين الثالث
أكتب برنامج مهمته جمع جميع الأعداد المزدوجة بين 1 و 10.
لا تستخدم الـ Modulo.
إجعله يظهر قيمة العداد و قيمة المتغير S
في كل دورة.
إذاً هنا قررنا جعل قيمة العداد الأولية تساوي 2 و في نهاية كل دورة سيتم إضافة 2 عليها و هكذا ستظل دائماً قيمة العداد مزدوجة.
public class Sum_Odd_Numbers { public static void main (String[] args) { int S=0; for (int i=2; i<11 i="" n="" pre="" s="S" system.out.print=""> 11>
int S=0;
هنا قمنا بتعريف المتغير S
لتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=2; i<11 i="i+2)" pre="">
هنا أنشأنا حلقة تبدأ من 2 إلى ما قبل الرقم 11 (أي من 2 إلى 10) و في نهاية كل دورة تزيد 2.
إذا كتبنا i<11 code=""> كأننا كتبنا تماماً
i <=10
لأن الحلقة في الحالتين ستتوقف عندما تصبح قيمة العداد i
تساوي 10.11>
هنا كما تلاحظ أعطينا العداد رقم 2 كقيمة أولية و أضفنا عليه 2 في نهاية كل دورة, و هكذا إستطعنا جعل قيمة الـ i
مزدوجة في كل دورة.
System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n");
كل شيء مكتوب بين " "
سيظهر كما هو عند تشغيل البرنامج, و كل شيء بدونهم ستظهر قيمته الحالية عند التشغيل.
طريقة كتابة هذا البرنامج تعتبر ممتازة, لأنك جعلت العداد يعمل بطريقة تجعلك تحصل على الأرقام المزدوجة بـ 5 دورات فقط.
العوامل في الخوارزميات - التمرين الرابع
أكتب برنامج مهمته جمع جميع الأعداد المزدوجة بين 1 و 10.
إستخدم الـ Modulo لتمييز الأعداد المزدوجة عن المفردة.
إجعله يظهر قيمة العداد و قيمة المتغير S
في كل دورة.
إذاً, هنا قررنا إنشاء حلقة تتألف من 10 دورات و في نهاية كل دورة تزيد قيمة العداد فيها 1.
الفكرة المهمة هنا أننا سنفحص قيمة العداد في كل دورة, إذا كانت عبارة عن عدد مزدوج سنضيفها على المتغير
S
, و إذا لم تكن كذلك لن نفعل شيئ.
public class Sum_Even_Numbers { public static void main (String[] args) { int S=0; for (int i=1; i<11 0="" i="" if="" n="" pre="" s="S" system.out.print=""> 11>
int S=0;
هنا قمنا بتعريف المتغير S
لتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=1; i<11 0="" i="" if="" n="" pre="" s="S" system.out.print="">
الحلقة for (int i=1; i<11 code="" i=""> تعني أنه عندنا 10 دورات و في نهاية كل دورة تزيد قيمة العداد 1.11>
جملة الشرط if (i%2 == 0)
تعني أنه إذا كانت قيمة العداد i
عبارة عن عدد مزدوج, سيتم تنفيذ أمر الطباعة و إضافة قيمة العداد على قيمة المتغير S
.
العوامل في الخوارزميات - التمرين الخامس
أكتب برنامج لحساب قيمة المتغير S
النهائية.
إجعل البرنامج يظهر لك قيمة العداد و قيمة المتغير S
في كل دورة.
public class Sum_Odd_And_Even_Numbers { public static void main (String[] args) { int S=0; for (int i=1; i <=10; i++) { if ( i%2 == 1) { System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n"); S = S + i; } else if ( i%2 == 0) { System.out.print("S = " +S+ " - " +i+ " = " +(S-i)+ "\n"); S = S - i; } } System.out.print("\n"); } }
int S=0;
هنا قمنا بتعريف المتغير S
لتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=1; i <=10; i++) { if ( i%2 == 1) { System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n"); S = S + i; } else if ( i%2 == 0) { System.out.print("S = " +S+ " - " +i+ " = " +(S-i)+ "\n"); S = S - i; } }
هنا قمنا بإنشاء حلقة من 1 إلى 10 و في كل دورة تزيد قيمة العداد 1.
في كل دورة يقوم البرنامج بفحص قيمة الـ i
.
   يسأل نفسه: هل هي عدد مفرد ؟
   إذا لم تكن عدد مفرد ينتقل إلى الشرط الثاني, فيسأل نفسه: هل هي عدد مزدوج؟
   - إذا كانت قيمة العداد i
مفردة سيقوم بزيادتها على قيمة الـ S
.
   - إذا كانت قيمة العداد i
مزدوجة سيقوم بإنقاصها من قيمة الـ S
.
ملاحظة: في المنطق إذا لم يكن الرقم مفرد فإنه حتماً مزدوج.
   إذاً كان بإمكاننا وضع جملة else
بدل جملة الـ else if
.
   في الواقع هنا يفضل وضع else
لكي لا تجعل الكمبيوتر يقوم بتحليل قيمة العداد ليعرف إذا كانت مزدوجة أم لا.
   لأنها حتماً ستكون مزدوجة إذا قام بفحصها أولاً و لم يجدها مفردة.
إذا أردت أن يكون الكود ممتازاً فعليك كتابة البرنامج بهذه الطريقة:
public class Sum_Odd_And_Even_Numbers { public static void main (String[] args) { int S=0; for (int i=1; i <=10; i++) { if ( i%2 == 1) { System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n"); S = S + i; } else { System.out.print("S = " +S+ " - " +i+ " = " +(S-i)+ "\n"); S = S - i; } } System.out.print("\n"); } }
العوامل في الخوارزميات - التمرين السادس
أكتب برنامج لحساب قيمة المتغير 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"); } }