جمل الشرط في الخوارزميات
شكل جمل الشرط بشكل عام
في لغات البرمجة يوجد ثلاث جمل يمكن إستخدامها لوضع شروط تحدد متى يتم تنفيذ كود معين أم لا. الجمل المستخدمة في وضع الشروط هي if, else if, else.
طريقة كتابتهم ( Syntax )
if ( condition )
{
// إذا كان الشرط صحيحاً نفذ هذا الكود
}
else if ( condition )
{
// إذا كان الشرط صحيحاً نفذ هذا الكود
}
else
{
// نفذ هذا الكود في حال لم يتم التعرّف على الكود في أي شرط
}
ملاحظة
لست بحاجة إلى إستخدام الجمل الثلاثة في كل شرط تضعه في البرنامج, و لكنك مجبر على إستخدام جملة الشرط if مع أي شرط.
تابع كل الدرس حتى تتعرّف على جميع طرق وضع الشروط.
جملة الشرط if
if في اللغة العربية تعني " إذا ". و هي تستخدم فقط في حال كنت تريد تنفيذ كود معين حسب شرط معين.
المثال الأول
إذا كانت قيمة المتغير S أكبر من 5 إطبع جملة :   S is bigger than 5.
كود الجافا
public class If_Statment {
public static void main (String[] args) {
int S = 0;
if ( S > 5 )
{
System.out.print("S is bigger than 5.");
}
System.out.print("\n");
}
}
شرح الكود
في البداية, إشتغل البرنامج بدون أي مشكلة و لكنه لم يظهر أي نتيجة لأن الشرط لم يتحقق.
int S = 0;
قمنا بتعريف المتغير S , و أعطيناه 0 كقيمة.
if ( S > 5 )
{
System.out.print("S is bigger than 5.");
}
الآن, إنتبه إلى جملة الشرط if ( S > 5 ) لتعرف كيف سيتعامل الكمبيوتر مع هذا الشرط بدقة.
سيرى أولاً قيمة المتغير
S, و بعد أن يعرف قيمتها سيرى إذا كانت أكبر من 5.في حال وجد أن قيمة المتغير
Sأكبر من 5 سينفذ كل الكود الموجود في حدود جملة الشرطif.في حال لم تكن أكبر منها سيتجاهل كل شيء موجود بداخل جملة الشرط.
هنا قام البرنامج بتجاهل الكود الموجود في حدود جملة الشرط لأن قيمة المتغير
Sليست أكبر من 5.
المثال الثاني
إذا كانت قيمة المتغير S أكبر من 5 إطبع جملة :   S is bigger than 5.
إنتبه: هذا نفس المثال السابق و لكننا قمنا بتغير قيمة المتغير S فقط.
كود الجافا
public class If_Statment {
public static void main (String[] args) {
int S = 20;
if ( S > 5 )
{
System.out.print("S is bigger than 5.");
}
System.out.print("\n");
}
}
شرح الكود
لاحظ الفرق, هنا نفذ البرنامج دالة الطباعة الموجودة في حدود جملة الشرط
if.قمنا بتعريف المتغير
S, و أعطيناه قيمة 20هنا قام البرنامج بتنفيذ الكود الموجود في حدود جملة الشرط لأن قيمة المتغير
Sأكبر من 5.
جملة الشرط else
else في اللغة العربية تعني "أي شيء آخر", و هي تستخدم فقط في حال كنت تريد تنفيذ كود معين لا يطابق أي شرط موجود بداخل الجملة if أو الجمل else if و يجب وضعها دائماً في الأخير, لأنها تستخدم في حال لم يتم تنفيذ أي جملة شرطية قبلها.
إذاً, إذا نفذ البرنامج جملة الـ if فإنه سيتجاهل الجملة else.
و إذا لم ينفذ أي جملة من جمل الـ if و else if فإنه سينفذ الجملة else.
مثال
إذا كانت قيمة المتغير name تساوي Mhamad إطبع جملة :   This is my name.
كود الجافا
public class If_Else_Statments {
public static void main (String[] args) {
String name = "Mhamad";
if ( name == "Mhamad" )
{
System.out.print("This is my name.");
}
else
{
System.out.print("NOT my name!");
}
System.out.print("\n");
}
}
شرح الكود
في هذا البرنامج إستخدمنا الجملتين
ifوelse.قمنا بتعريف المتغير
name, و أعطيناه قيمةMhamad.ركز جيداً على جملة الشرط التالية
if ( name == "Mhamad" )
لاحظ أننا وضعنا إثنتين = و ليس واحدة =.
وضعنا == للمقارنة, لنرى هل قيمة المتغير name تساوي Mhamad.
بما أن قيمة المتغير name تساوي Mhamad فإن الكمبيوتر سينفذ كل الكود الموجود في حدود الجملة if و سيتجاهل الجملة else.
ملاحظة
إذا كنت تريد مقارنة متغيرين مع بعضهما لترى إذا كانت قيمهم متساوية, يجب أن تضع بينهما == و ليس =.
لو عدت للمثال السابق و وضعت = بدلاً من == لأدى ذلك إلى خطأ منطقي و ليس برمجي, أي لو كتبت الكود كالتالي:
if ( name = "Mhamad" )
في هذه الحالة الكمبيوتر سيظن أنك تريد وضع القيمة Mhamad كقيمة جديدة للمتغير name و ليس مقارنة قيمة المتغير name مع القيمة Mhamad.
كما أنه سيظهر لك خطأ لأنه يجب وضع شرط في الجملة if و ليس إعطاء قيمة لمتغير فقط.
جملة الشرط else if
جملة else if تستخدم إذا كنت تريد وضع أكثر من إحتمال ( أي أكثر من شرط ).
جملة أو جمل الشرط else if يوضعون في الوسط أي بين الجملتين if و else.
مثال
إذا كانت قيمة المتغير month تساوي رقم بين 1 و 12 , إطبع إسم الشهر على حسب رقم الشهر.
كود الجافا
public class MonthsOfTheYear {
public static void main (String[] args) {
int month = 3;
if ( month == 1 )
{
System.out.print("January");
}
else if ( month == 2 )
{
System.out.print("February");
}
else if ( month == 3 )
{
System.out.print("March");
}
else if ( month == 4 )
{
System.out.print("April");
}
else if ( month == 5 )
{
System.out.print("May");
}
else if ( month == 6 )
{
System.out.print("June");
}
else if ( month == 7 )
{
System.out.print("Jul");
}
else if ( month == 8 )
{
System.out.print("August");
}
else if ( month == 9 )
{
System.out.print("September");
}
else if ( month == 10 )
{
System.out.print("October");
}
else if ( month == 11 )
{
System.out.print("November");
}
else if ( month == 12 )
{
System.out.print("December");
}
else
{
System.out.print("NOT a Month!");
}
System.out.print("\n");
}
}
شرح الكود
عدد الأشهر في السنة هو 12 شهراً. فكرة البرنامج أنه عند تشغيله, نقوم بإدخال رقم الشهر لكي يطبع لنا إسمه.
في هذا البرنامج إستخدمنا الجمل
ifوelse ifوelse.قمنا بتعريف المتغير
month, و أعطيناه قيمة 3.بما أنه عندنا 12 شهراً, إذاً عندنا 12 إحتمال.
12 إحتمال يعني أنه يوجد جملة
ifواحدة بالإضافة إلى 11 جملةelse ifبعدها.هنا وضعنا الجملة
elseلأن أي رقم ليس بين 1 و 12 لا يمكن أن يكون رقم لشهر.
إنتبه
لو وضعنا if بدل جميع الـ else if سيؤدّي ذلك إلى أخطاء عدة في الكود
والسبب سيقوم البرنامج باختبار جميع جمل الـ if و سينفذ جملة else مهما كانت قيمة المتغير month.
ضع if بدل جميع الـ else if, ثم قم بتشغيل البرنامج و لاحظ كيف أنه سينفذ أيضاً الجملة else. و سيعطي النتيجة التالية عند تشغيله.
مفهوم العوامل و أنواعها
عامل : تعني 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 و تستخدم في الحلقات |
أمثلة و ملاحظات حول طريقة إستخدام و فائدة كل عامل مذكور في الجدول.
AlgorithmsArithmetic Operators
العوامل التي تستخدم في العمليات الحسابية في الخوارزميات
مثال حول العامل = (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=i+2)
{
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<11; i=i+2)
هنا أنشأنا حلقة تبدأ من 1 إلى ما قبل الرقم 11 (أي من 1 إلى 10) و في نهاية كل دورة تزيد 2.
إذا كتبنا i<11 كأننا كتبنا تماماً i <=10 لأن الحلقة في الحالتين ستتوقف عندما تصبح قيمة العداد i تساوي 10.
هنا كما تلاحظ أعطينا العداد رقم 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; i++)
{
if (i%2 == 1)
{
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<11; i++)
{
if (i%2 == 1)
{
System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n");
S = S + i;
}
}
الحلقة for (int i=1; i<11; i++) تعني أنه عندنا 10 دورات و في نهاية كل دورة تزيد قيمة العداد 1.
جملة الشرط 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=i+2)
{
System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n");
S = S + i;
}
System.out.print("\n");
}
}
شرح الكود
int S=0;
هنا قمنا بتعريف المتغير S لتخزين المجموع لذلك أعطيناه القيمة 0 كقيمة أولية.
for (int i=2; i<11; i=i+2)
هنا أنشأنا حلقة تبدأ من 2 إلى ما قبل الرقم 11 (أي من 2 إلى 10) و في نهاية كل دورة تزيد 2.
إذا كتبنا i<11 كأننا كتبنا تماماً i <=10 لأن الحلقة في الحالتين ستتوقف عندما تصبح قيمة العداد i تساوي 10.
هنا كما تلاحظ أعطينا العداد رقم 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; i++)
{
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<11; i++)
{
if (i%2 == 0)
{
System.out.print("S = " +S+ " + " +i+ " = " +(S+i)+ "\n");
S = S + i;
}
}
الحلقة for (int i=1; i<11; i++) تعني أنه عندنا 10 دورات و في نهاية كل دورة تزيد قيمة العداد 1.
جملة الشرط 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");
}
}

