الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شابتر 4 (الجزء الثانى)

بدأه XMasterrrr في 26 نوفمبر 2010 · 12 رد · 1,318 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اولا مثال للمراجعة على ما أخذنا

اكثير من خيار شرطى (داخلى)

دكتور فى الجامعة و لنقول انه انا :D دكتور احمد يصحح للطلاب امتحاناتهم بدرجات حتى يتضح مستوى الطلاب له و يميز من يريد.. و يستخدم ال 10 درجات التالية لكل امتحاناته


الدرجة-----------المستوى
A او اعلى 90
B 80-89
C 70-79
D 60-69
F اقل من 60

طلب منك ان تقوم بكتابة برنامج حتى يسأل الطالب ان يدخل درجته من ثم يقوم بطباعة المستوى الخاص بهذه الدرجة

ها هى الخوارزمية:

اقتباس

1 – اسأل الطالب عن الدرجة

2 – اذا كانت الدرجة اقل من 60, اذا فالدرجة هى F

3 – اذا كان الدرجة اقل من 70, اذا فالدرجة هى D

4 – اذا كانت الدرجة اقل من 80 , اذا فالدرجة هى C

5 – اذا كانت الدرجة اقل من 90 , اذا فالدرجة هى B

6 – اذا كانت اعلى من 90 فهى A

انت قررت ان مثل هذا البرنامج يحتاج الى اكثر من شرط داخلى, حسنا فلنأخذ الأن المثال:

// هذا البرنامج يحتى على اكثر من جملة شرطية داخلية

#include <iostream>
using namespace std;

int main()
{

    int testScore;

    cout <<"Enter your numeric test score and I will\n";
    cout<<"Tell you the letter grade you earner: ";
    cin >> testScore;

    if (testScore <60)
    {

        cout << "Your grade is F.\n";
    }
    else
    {

        if (testScore <70)
        {
            cout << "Your grade is D.\n";
        }
        else
        {
            if (testScore < 80)
            {
                cout << "Your grade is C.\n";
            }
            else
            {

                if (testScore < 90)
                {
                    cout << "Your garde is B.\n";
                }
                else
                {
                    cout << "Your grade is A.\n";
                }
            }
        }
    }
    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter your numeric test score and I will

tell you the letter grade you earnet: 78[Enter]

Your grade is C.

مخرجات اخرى:

اقتباس

Enter your numeric test score and I will

tell you the letter grade you earnet: 84[Enter]

Your grade is B.

الأن انتهينا من المراجعة على ما سبق

فى المشاركة التالية سوف ندرس ال if/else if

2

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#2

جمل ال if/else if الشرطية

الملخص : جمل ال if/else if تقوم بأختبار مجموعة من الخيارات. هى غالبا افضل و اسهل من ان تقوم بعمل if/else الداخلية ( ملاحظة : لكل واحدة عملها )

على الرغم من ان البرنامج الماضى بسيط جدا, لكن الجمل البرمجية به صعبة جدا ﻷنها متداخلة. فى السى++ و لغات برمجية اخرى, من الممكن ان تقوم بأختبار اكثر من حالة بأستخدام if/else if. ال if/else if هذه تقوم بعمل شئ شبيه بالجمال if الداخلية لكن بطريقة ابسط فى الكتابة. هنا الشكل الطبيعى لل if/else fi

if (expression_1)
{
    statment
    statment
    etc.
}
else if (expression_2)
{
    statment
    statment
    etc.
}
else if (expression_3)
{
    statment
    statment
    etc.
}
else if (expression_4)
{
    statment
    statment
    etc.
}
// زى منتا عاوز

else
{
    statment
    statment
    etc.
}

عندما يتم تنفيذ الجمل, يتم اختبار expression_1 فأذا كانت صحيحة يتم طباعة و تنفيذ ما داخل المجموعة من الاكواد التى بداخلها و باقى الجمل الشرطية يتم تفاديها. اما اذا كانت خطاء, فيتم الذهاب لجملة else if التالية لها . فأذا كانت صحيحة , سيتم تنفيذ مجموعة الاكواد التى بداخلها و يتم تجاهل البقية. هذه العملية تستمر من فوق لتحت حتى تكون حالة واحدة صحيحة, و اذا لم يوجد فسوف يتم استخدام اخير else و تنفيذ المجموعة من الاكواد التى بداخله.

اخير else . ليس بها if تتبعها, هى نفسها ال else التى درسناها من قبل. معظم الاحيان نستخدمها.

ملاحظة : الاقواس التى حولين الجمل البرمجية بعد else if هى نفسها التى درسناها من قبل و كل ما تقوم بفعله هو انها تقوم بتنفيذ عدد اكثر من جملة واحدة , اما اذا اردنا تنفيذ جملة واحدة من الممكن ان نستخدم الطريقة التالية كما تعلمنا سابقى

else if(expression_2)
    statment;

البرنامج التالى هو نفسه البرنامج الماضى لكن بعد بعض التغييرات لكى نستخدم if/else if:

// النسخة الخاصة ب if/else if
#include <iostream>
using namespace std;

int main()
{

    int testScore;

    cout <<"Enter your numeric test score and I will\n";
    cout<<"Tell you the letter grade you earner: ";
    cin >> testScore;

    if (testScore <60)
        cout << "Your grade is F.\n";
    else if (testScore < 70)
        cout << "Your grade is D.\n";
    else if (testScore < 80)
        cout << "Your grade is C.\n";
    else if (testScore < 90)
        cout << "Your grade is B.\n";
    else
        cout << "Your grade is A.\n";

    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter your numeric test score and I will

tell you the letter grade you earnet: 78[Enter]

Your grade is C.

مخرجات اخرى:

اقتباس

Enter your numeric test score and I will

tell you the letter grade you earnet: 84[Enter]

Your grade is B.

حسنا هيا لندرس الأن كيف عملت هذه الجمل الشرطية من نوع if/else if, فى الاول تم اختبار testScore < 60 فى البداية

if (testScore <60)
        cout << "Your grade is F.\n";

معناها اذا كان ال testScore اقل من 60, سوف تظر الرسالة "Your grade is F.\n” و بقية الجمل الشرطية سوف يتم تفاديها, اما اذا لم يكن ال testScore اقل من 60, سوف يتم المحاولة مع جملة else if التالية ل

ها:
else if (testScore < 70)
        cout << "Your grade is D.\n";

اول جملة كما عرفنا تقوم بعمل كل الدرجات التى اقل من 60, اذا فأذا كان ال testScore لديه الناتج 60 او اعلى, فسوف يتم المحاولة مع الجملة لو ان testScore اقل من 70, يتم اظهار جملة "Your grade is D.\n” و يتم تجاهل بقية الجمل ال if/else if. اما اذا كانت خطاء فسوف يتم المحاولة مع بقية الجملة حتى يجدون الصحيح او يتم استخدام اخير else اذا لا يوجد اى واحدة صحيح.

لاحظ ان ترتيب كتابة الجمل if / else if / else واحد و هو هو لكن الفرق هو المعنى البرمجى كما شرحنا.

استخدام جملة else لكشف الاخطاء

الجملة else الاخير, تعتبر خيارية , لكن معظم المبرمجين يفضلون استخدامها لكشف الاخطاء. مثال, البرنامج الماضى سوف يقوم بأعطاء A لاى رقم بعد 90 حتى لو وصلت لمليون. لكن ماذا لو ان اكبر رقم من الممكن ان تصله هو 100 ؟ من الممكن ان نقوم بعديل برنامجنا حتى لا يقبل رقم اكبر من 100 , مثال:

// استخدام ال else لكشف الاخطاء
#include <iostream>
using namespace std;

int main()
{

    int testScore;

    cout <<"Enter your numeric test score and I will\n";
    cout<<"Tell you the letter grade you earner: ";
    cin >> testScore;

    if (testScore <60)
        cout << "Your grade is F.\n";
    else if (testScore < 70)
        cout << "Your grade is D.\n";
    else if (testScore < 80)
        cout << "Your grade is C.\n";
    else if (testScore < 90)
        cout << "Your grade is B.\n";
    else if (testScore <= 100)
        cout << "Your grade is A.\n";
    else
        cout << “We don\'t give scores higher than 100.\n”;

    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter your numeric test score and I will

tell you the letter grade you earned: 105[Enter]

We don't give scores higher than 100.

مقارنة ال if الداخلية و if / else if

انت لا تحتاج لأستخدام جمل if / else if لأن المنطق البرمجى الخاص بها من الممكن ان يٌبرمج بأستخدام if / else داخلية. لكن جمل if / else داخلية لديها شيئان سيئان اثناء كتابة و تنفيذ الكود:

1 – الكود يكبر و يكبر حتى يصعبُ تفهمه

2 – لانه يوجد الكثير من الحالات داخل الجمل الداخلية, كمبية كبيرة من الاختبارات قد تصل انها اكبر من ان تظهر على شاشة الكمبيوتر بشكل طولى., و تجعل الشكل صعب القرائه كما قولنا سابقا.

المظهر الخاص ب if/else if اسهل بكثير من المظهر الخاص ب الجمل الداخلية if/else و ايضا يكون الطول اقل حتى يظهر على الشاشة بالكامل.

فى المشاركة القادمة سوف ندرس ان نقوم بعمل menus اى لوائح

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#3

Menus

القائمة

اللوائح ( خيارات تأخذها)

الملخص : من الممكن ان تستعمل جمل if/else داخلية او if/else if لكى تقوم بعمل برنامج به خيارات كثيرة . برنامج مثل ال Menu هو عبارة عن برنامج يجعل المستخدم يختار الشئ الذى يريده من ضمن اللائحة.

ال Menu هى شاشة بها اكثر من خيار و يختار المستخدم منها , مثال, برنامج يقوم بترتيب الايميلات التى لديك يكون به مثل هذه الخيارات:

اقتباس

1 – اضافة اسم الى اللائحة

2 – حذف اسم من اللائحة

3 – تغير اسم فى اللائحة

4 – طباعة اللائحة

5 – الخروج من البرنامج

المستخدم يقوم بأختيار خيار واحد من الاختيارات الماضية بأدخال رقم الخيار الذى يريده. لمثال ادخلنا 4 يقوم بطباعة الاسماء التى لديك فى الميل. و ادخال 5 يقوم بأغلاق البرنامج. لمثل هذه البرنامج من الممكن ان نستخدم الجمل if/else الداخلية او جمل if/else if. بعد ادخال المستخدم لرقم ما يقوم البرنامج بمقارنة الرقم بشئ مماثل فى البرنامج و يتم تنفيذه.

البرنامج التالى يقوم بعمل حسابة لأشتراك فى نادى صحى. النادى لديه 3 اختيارات لتختار منهم: Standard Adult membership, Child membership, senior citizen membership. البرنامج يقوم بأعطاء قائمة لكى تختار منها الاختيار الذى تريده و يقوم بحسابة المدة و من ثم الثمن , المثال:

// هذا البرنامج يقوم باظهار قائمة و يسأل المستحدم
// لكى يختار. تم استخدام جمل if / else if لكى تختار
//اى خيار يريد المستخدم
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int choice;
    int months;
    double charges;

    const double ADULT = 40.0;
    const double SENIOR = 30.0;
    const double CHILD = 20.0;

    cout << "\t\tHealth Club Membership menu\n\n";
    cout << "1. Standard Adult Membership\n";
    cout << "2. Child Membership\n";
    cout << "3. Senior Citizen Membership\n";
    cout << "4. Quit the Program\n\n";
    cout << "Enter your choice: ";
    cin >> choice;

    cout << fixed << showpoint << setprecision(2);

    if (choice == 1)
    {
        cout << "For how many months? ";
        cin >> months;
        charges = months * ADULT;
        cout << "The total charges are $" << charges << endl;
    }
    else if (choice == 2)
    {
        cout << "For how many months? ";
        cin >> months;
        charges = months * CHILD;
        cout << "The total charges are $" << charges << endl;
    }
    else if (choice == 3)
    {
        cout << "For how many months? ";
        cin >> months;
        charges = months * SENIOR;
        cout << "The total charges are $" << charges << endl;
    }
    else if (choice == 4)
    {
        cout << "Program ending.\n";
    }
    else
    {
        cout << "The valid choices are 1 throught 4. Run the\n";
        cout << "program again and select one of those.\n";
    }

    cin.get();
    return 0;
}

المخرجات :

اقتباس

Health Club Membership Menu

1. Standard Adult Membership

2. Child Membership

3. Senior Citizen Membership

4. Quit the program

Enter your choice: 3[Enter]

For how many months? 6[Enter]

The total charges are $180.00

لاحظ اننا قمنا بعمل 3 ثوابت مسماه بنوع double . هذه الثوابت تحمل السعر الشهر لكل نوع.

ايضا لاحظ ان البرنامج يسمح للمستخدم ان يعرف عندما يقوم بأدخال اختيار خطاء لو كان الرقم غير 1,2,3,4 قد اُدخل, يتم طباعة رسالة خطاء.

فى المشاركة القادمة سوف ندرس العلامات المنطقية

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#4

العلامات المنطقية

Logical Operators

الملخص : العلامات المنطقية تقوم بعمل مقارنة بين اكثر من حالتين … سندرس ذلك افضل

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

فى الجدول القادم سوف نتعرف على العلامات المنطقيقة

(لربما لم تصلك حتى الأن ما معنى ما قولته لكن فى الامثل سوف تفهم … )

الجدول:

العلامة : &&

المعنى : و

التأثير : تقوم بعمل اختبار حالتين فى نفس السطر و يجب ان تكون الحالتين صحيحتين

العلامة : || (لمن يريد ان يعرف كيف يكبتها تقوم بالضغط على زر shift + علامة \ فى الكيبورد)

المعنى : او

التأثير : تقوم بعمل اختبار لحالتين لكن نريد حالة واحدة فقط صحيحة او اذا كان يوجد اكثر لا مشكلة

العلامة : !

المعنى : لا

التأثير : العلامة ! تقوم بقلب ال صحيح الى خطاء و تقوم بقلب الخطاء الى صحيح

علامة ال &&

علامة ال && تُعرف بمعنى العلامة المنطقة (و) و بالانجليزية AND . تأخذ حالتين و تقوم بمعرفة اذا كانوا صح او خطاء لكن يجب ان يكون الاثنين صحيح و ليس واحدة فقط , لنأخذ مثال:

if (temperature < 20 && minutes > 12)
    cout << "The temperature is in a danger zone.";

فى المثال الماضى . كان يوجد حالتين فى جملة واجدة . الجملة الخاصة بالكائن cout لن تُطبع الا اذا كانت temperature اقل من 20 و minutes اكبر من 12. اذا كانت واحدة من الاثنتين خطاء فلن يتم تنفيذ الجمل و فى مثالنا هنا كانت جملة cout.

نصيحة : يجب عليك ان تقوم كتابة الجملة كاملة من الناحيتين. مثال, الجملة التالية ليست صحيحة لأن الحالة التى على يمين ال && ليست كاملة

temperature > 0 && < 100

هذه ليست صحيحة, يجب ان تُكتب كالتالى:

temperature > 0 && temperature < 100

الجدول التالى به قائمة الصح و الخطاء سوف نرى كيف يكون الصح و الخطاء فى &&

الجدول:

اقتباس

الجملة------- خطاء ام صح

صح و خطاء خطاء

خطاء و صح خطاء

خطاء و خطاء خطاء

صح و صح صح

كما شاهدنا فى الجدول الماضى يجب ان تكون الحالتين صحيح حتى يتم يتنفيذ الجمل التى بها &&

ملاحظة: لو تم اختبار اول حالة و تم اكتشافها خطاء لن يتم عمل اختبار للحالات التالية لأن بالفعل الجملة لن يتم تطبيقها .

علامات ال && من الممكن ان تستخدم بدلا من جمل if الداخلية. البرنامج التالى كنا قد شرحناه فى الجزاء الماضى من هذا الشاتبر( الجزء الاول) الان سوف نستخدمه لكن مع علامات ال &&

المثال:

// استخدام علامة ال &&
#include <iostream>
using namespace std;

int main()
{
    char employed,
            recentGrad;

            cout << "Answer the following questions\n";
            cout << "with either Y for Yes or ";
            cout << "N for No\n";
            cout << "Are you employer? ";
            cin >> employed;
            cout << "Have you graduated from college ";
            cout << "in the past two years? ";
            cin >> recentGrad;

            if (employed == 'Y' && recentGrad == 'Y')
            {
                cout << "You qualify for the special "
                     << "interest rate.\n";
            }
            else
            {
                cout << "You must be employed and have\n";
                cout << "graduated from college in the\n";
                cout << "past two years to qualify.\n";
            }

    cin.get();
    return 0;
}

المخرجات:

اقتباس

Answer the following questions

with either Y for Yes or N for No.

Are you employed? Y[Enter]

Have you graduated from college in the past two years? N[Enter]

You must be employed and have

graduated from college in the

past two years to qualify.

المخرجات مرة اخرى

اقتباس

Answer the following questions

with either Y for Yes or N for No.

Are you employed? N[Enter]

Have you graduated from college in the past two years? Y[Enter]

You must be employed and have

graduated from college in the

past two years to qualify.

المخرجات مرة اخرى

اقتباس

Answer the following questions

with either Y for Yes or N for No.

Are you employed? Y[Enter]

Have you graduated from college in the past two years? Y[Enter]

You qualify for the special interest rate.

الرسالة "You qualify for the special interest rate” تظهر فقد عندما تكون الحالتين صحيحتين employed == 'Y' و recentGrad == 'Y' لاحظ يكونان صحيح فقط. لكن لو كانت واحدة فقط منهم خطاء فسوف تظهر الرسالة "You must be employed and have graduated from college in the past two years to qualify.”.

ملاحظة: على الرغم من انهم شبه بعض, لكن البرنامج هذا ليس كالبرنامج الذى اخذناه فى الجزء الماضى من هذا الشابتر الفرق فقط فى البرمجة المنطقية فهى تختلف , مثال, هذا البرنامج لا يظهر رسالة "You must be employed to qualify.”

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#5

العلامة ||

العلامة || تُعرف ب او و بالانجليزية OR . تأخذ الحالتين و تختبرهم و اية واحدة صحيحة يتم تنفيذ الحالة مثال:

if (temperature < 20 || temperature > 100)
    cout << "The temperature is in the danger zone.";

جملة الكائن cout سوف يتم تنفيذها لو ال temperature اقل من 20 او temperature اكبر من 10 . لو واحدة فقط صحيحة فسوف يتم تنفيذ الجمل.

نصيحة: يجب عليك وضع جملة برمجية كاملة على ناحيتين ال || مثال

temperature < 0 || > 100

هذه لن تعمل

يجب ان تكون كالتالى

temperature < 0 || temperature > 100

الجدول التالى يوضع فى اى حالة تكون صحيحة او فى اى حالة تكون خطاء

اقتباس

الجملة------- خطاء ام صح

صح و خطاء صح

خطاء و صح صح

خطاء و خطاء خطاء

صح و صح صح

الجميع صحيح ماعدا ان تكون الناحيتين خطاء.

البرنامج التالى يقوم بعمل اختبارات مختلفة لكى يعرف اذا كان الشخص الطالب للقرض احق به ام لا. سوف يقوم بمعرفة هل هذا الشخص يكسب 35000 الف دولار فى السنة على الاقل, او انه يعمل منذ 5 سنوات حتى يأخذ القرض (ياحلاوة ياولاد :D )

المثال:

#include <iostream>
using namespace std;

int main()
{
    double income;
    int years;

    cout << "What is your annual income? ";
    cin >> income;

    cout << "How many years have you worked at "
         << "your current job? ";
    cin >> years;

    if (income >= 35000 || years > 5)
        cout << "You qualify.\n";
    else
    {
        cout << "You must earn at least $35,000 or have\n";
        cout << "been employed for more than 5 years.\n";
    }

    cin.get();
    return 0;
}

المخرجات:

اقتباس

What is your annual income? 40000[Enter]

How many years have you worked at your current job? 2[Enter]

You qualify

مرة اخرى

اقتباس

What is your annual income? 20000[Enter]

How many years have you worked at your current job? 7[Enter]

You qualify

مرة اخرى

اقتباس

What is your annual income? 30000[Enter]

How many years have you worked at your current job? 3[Enter]

You must earn at least $35,000 or have

been employed for more than 5 years.

الرسالة "You qualify.\n” تظهر عندما تكون واحدة فقد من الاثنان صحيح , اما اذا كان الاثنان خطاء فسوف يظهر انك لم يتم الموافقة عليك

العلامة !

علامة ! تعنى لا. هى تأخذ العلامة و تقلبها فمثلا هى صحيحة تقوم بتحويلها خطاء و العكس صحيح. مثال:

if (!(temperature > 100))
    cout << "You are below the maximum temperature.\n";

هنا يتم الاول تنفيذ (temperature > 100) و نرى هل هى صحيح او خطاء. من ثم تعمل العلامة ! لو كانت صحيحة فسوف يقلبها ال ! الى خطاء , و لو هى خطاء سوف يقلبها ال ! الى صحيح. هذا المثال يشبه السؤال ب : هل درجة الحرارة ليست اكبر من 100

الجدول التالى يرينا :

اقتباس

العلامة ---- التحويل

صحيح خطاء

خطاء صحيح

البرنامج التالى هو نفسه البرنامج الماضى لكن مع تغير فى العلامات العلامة ! تقوم بمعرفة هل المستخدم لم يقوم بعمل 35 الف دولار او لم يعمل فى عمل محدد على الاقل 5 سنين

المثال:

#include <iostream>
using namespace std;

int main()
{
    double income;
    int years;

    cout << "What is your annual income? ";
    cin >> income;

    cout << "How many years have you worked at "
        << "your current job? ";
        cin >> years;

        if (!(income >= 35000 || years > 5))
        {
            cout << "You must earn at least $35,000 or have\n";
            cout << "been employed for more than 5 years.\n";
        }
        else
            cout << "You qualify.\n";

    cin.get();
    return 0;
}

نفس مخرجات البرنامج الماضى بالظبط

التفضيل و التأخير فى العلامات المنطقية

الجدول التالى به العلامات من الاقوى للأضعف

!
&&
||

علامة ال ! هى الاقوى فى اغلبية العلامات فى السى++ كلها, لكى نتفادى مثل هذا , يجب عليك اغلاق الاختبارات الاخرى فى اقواس, الا لو انك تنوى ان تقوم بها على متغير واحد او جملة برمجية بسيطة . مثال:

!(x > 2)
!x>2

التعبير الاول يقوم بتفعيل ال ! للعملية x > 2. هى تسأل الان هل x ليس اكبر من 2 . الثانية , تقوم بالتفعيل على x فقط. هى فقط تقوم بتحويل اى رقم عدد الى 0 اى انه خطاء. لكى نتفادى كل هذا ضع الاقواس افضل.

العلامات && و || يأخذون مركزا اقل فى الترتيب و اقل من العلامات التقريبية, اذا فأن المشاكل التى تحدث مع ! اغلبيتها لا تحدث مع && او || ابدا , لن يؤذى ان اردت التطمئن و استخدمت الاقواس:

(a > b ) && (x < y)

هى تماما

a > b && x < y

و

(x == y) || (b > a)

هى تمام

x == y || b > a

العلامات المنطقية لديها الترتيب من اليسار الى اليمين , فى المثال التالى a < b سوف يت تنفيذها قبل y == z

a < b || y == z

لكن فى المثال التالى y==z سوف يتم تنفيذها اولا لأن ال && لديها الاولوية الاعلى عن ||

a < b || y == z && m > j

تساوى

(a < b) || ((y == z) && (m > j))

فى المشاركة القادمة سوف ندرس اختبار حدود الارقام مع العلامات التطبيقية

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#6

اختبار حدود الارقام مع العلامات التطبيقية

الملخص : العلامات التطبيقية مؤثرة فى معرفة هل الرقم موجود ام ليس موجود داخل حدود محددة.

عندما تريد معرفة هل الرقم داخل حدود , يُفضل استخدام علامة &&. مثال, البرنامج التالى تقوم بعمل اختبار ل x لمعرفة هل الرقم بين 20 ل 40 ام لاء:

if (x >= 20 && x <= 40)
    cout << x << " is in the acceptable range.\n";

هذه الحالة سوف تكون صحيحة فقط اذا كان ال x اكبر من او يساوى 20 و اقل من او يساوى 40. اى انه يجبان يكون بين 20 ل 40 حتى يكون صحيحا.

عندما تريد معرفة هل الرقم خارج الحدود فالأفضل هو استخدام ||. الجملة التالية تقوم بمعرفة هل ال x خارج الحدود من 20 ل 40

if (x < 20 || x > 40)
    cout << x << " is outside the acceptable range.\n";

من المهم ان لا تقوم بالتشتيت بين العلامتين, مثلا الجملة القادمة عمرها متكون صحيحة

if (x < 20 && x > 40)
    cout << x << " is outside the acceptable range.\n";

بالطبع, xلا تقدر ان تكون اقل من 20 و فى نفس الوقت اكبر من 40.

ملاحظة : السى++ لا تعطى لك القدرة فى معرفة الحدود الرقمية بطريقة:

5 < x < 20

يجب عليك ان تفعل كما درسنا فى هذا القسم( تصوروا اكثر قسم تعبت فيه...)

فى المشاركة القادة سوف ندرس تصحيح المدخلات من المستخدم

تصحيح مدخلات المستخدم

الملخص : كلما ادخل المستخدم مدخلات خطاء فأن المخرجات ايضا سوف تكون خطاء. يجب فى كتابة البرنامج ان تقوم بعمل فيلتر للمدخلات الخطاء هذا ما سنتعلمه الأن

البرنامج الجيد يجب ان يقوم بأعطاء الارشادات الصحيحة كاملا فى اعلام المستخدم كيف يقوم بالادخال, هنا بعض الارشادات :

1 – الارقام يجب ان يتم اختبارها لمعرفة الحدود المُجب ادخالها, مثال يوجد 168 ساعة فى الاسبوع, فمثلا لن يكون هناك شخص يعمل اكثر من 168 ساعة فى الاسبوع

2 – كما قولنا الاسبوع به 168 ساعة لكن مستحيل ان يعمل شخص ال 168 اذا فيجب ان يكون هناك "مساحة محددة" للتوقيتات

البرنامج التالى هو نفسه اول برنامج اخذناه فى if/else if لكنه مصحح لكى يكون اقوى و لا يقبل اى مدخلات خاطئة:

#include <iostream>
using namespace std;

int main()
{
    int testScore;

    cout << "Enter your numeric test score and I will\n";
    cout << "tell you the letter grade you earned: ";
    cin >> testScore;

    if (testScore < 0 || testScore > 100)
    {
        cout << testScore << " is an invalid score.\n";
        cout << "Run the program again and enter a value\n";
        cout << "in the range of 0 to 100.\n";
    }
    else
    {
    if (testScore <60)
        cout << "Your grade is F.\n";
    else if (testScore < 70)
        cout << "Your grade is D.\n";
    else if (testScore < 80)
        cout << "Your grade is C.\n";
    else if (testScore < 90)
        cout << "Your grade is B.\n";
    else if (testScore <= 100)
        cout << "Your grade is A.\n";
    }

    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter your test score and I will tell you

the letter grade you earned: -12[Enter]

-12 is an invalid score.

Run the program again and enter a value

in the range of 0 to 100

المخرجات مرة اخرى

اقتباس

enter your test score and I will tell you

the letter grade you earned: 81[Enter]

Your grade is B

سوف ندرس فى المشاركة التالية المزيد عن تعريفات المتغيرات و ال scope

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#7

المزيد عن تعريف المتغيرات

و الاماكن التى تعمل بها (scope)

الملخص : ال scope الخاص بالمتغيرات هو المكان المحدد الذى يعمل به المتغير.

السى++ تسمح لك بعمل المتغيرات فى اى مكان فى البرنامج. البرنامج التالى هو تعديل لبرنامج الخاص ب 35000 الف دولار و القرض ….. تم تغيير اماكن بعض المتغيرات :

#include <iostream>
using namespace std;

int main()
{

    cout << "What is your annual income? ";
    double income;
    cin >> income;

    cout << "How many years have you worked at "
        << "your current job? ";
        int years;
        cin >> years;

        if (!(income >= 35000 || years > 5))
        {
            cout << "You must earn at least $35,000 or have\n";
            cout << "been employed for more than 5 years.\n";
        }
        else
            cout << "You qualify.\n";

    cin.get();
    return 0;
}

اغلبية المبرمجين يقومون بتعريف المتغير فى اول البرنامج. لكن بعض الاوقات و خصوصا فى البرامج

الطويلة, فكرة جيدة انك تقوم بعمل المتغير بقرب المكان الذى ستستخدمه به

فى البرنامج الماضى ال scope الخاص ب income يعمل منذ بداية سطر التعريف حتى نهاية البرنامج

و ايضا ال scope الخاص ب years يعمل منذ تعريفه حتى اخر البرنامج

حسنا هذا هو ال scope اى استخدام المتغير منذ ان يتم تعريفه يعنى مش اقدر احط المتغير فى اى مكان فوق تعريف المتغير اساسا.

المتغير income و years تم تهيئتهم داخل الدوال main. المتغيرات التى يتم تهيئتها داخل قوسين لديها local scope اى المتغير يعمل فى اى قطعة فى البرنامج و لديها ايضا block scope اى انها تعمل فى قسم محدد. اى ينهم يعملون فى جزء محدد من البرنامج بين التعريف و اغلاق الاقواس

من الممكن ان تقوم بتعريف المتغير داخل اى block (مجموعة من الاكواد) مثال البرنامج التالى. هذا التعديل فى البرنامج الماضى تم تعريف المتغير years و ال scope الخاص به من داخل قسم ال if فقط حتى نهاية البرنامج:

#include <iostream>
using namespace std;

int main()
{
    cout << "What is your annual income? ";
    double income;
    cin >> income;

    if (income >= 35000)
    {
        cout << "How many years have you worked at "
             << "you current job? ";
        int years;
        cin >> years;

        if ( years > 5)
            cout << "You qualify.\n";
        else
        {
            cout << "You must have been employed for\n";
            cout << "more than 5 years to qualify.\n";
        }
    }
    else
    {
        cout << "You must earn at least $35,000 to\n";
        cout << "qualify.\n";
    }

    cin.get();
    return 0;
}

لاحظ ان ال scope الخاص ب years فقط يعمل داخل ال block الذى تم تهيئته به. المتغير لا يمكن استعماله قبل ان يتم تعريفه او بعض اغلاق القوس الخاص ب ال block.

ملاحظة: عندما يعمل برنامج و يدخل القسم الذى به ال scope الخاص بالمتغير , يقول ان المتغير comes into scope. هذه ببساطة تعنى ان المتغير الأن متاح و البرنامج سوف يتعرف عليه و من ناحية اخرى , عندما يغادر المتغير ال scope لن ينفع ان يتم العمل به

المتغيرات ذات نفس الاسم

عندما يوجد block داخل block اخر , المتغير الذى تم تعريفه داخل ال block الداخلى لديه نفس الاسم الخاص بالبلوك الخارجى. لكن اذا كان يتم استخدام المتغير الذى فى البلوك الداخلى فأن المتغير الذى بداخل البلوك الخارجى سوف يكون غائبا ولا يعمل و العكس بالعكس

البرنامج التالى يوضح ذلك:

#include <iostream>
using namespace std;

int main()
{
    int number;

    cout << "Enter a number greater than 0: ";
    cin >> number;
    if (number > 0)
    {
        int number;
        cout << "Now enter another number: ";
        cin >> number;
        cout << "The second number you entered was ";
        cout << number << endl;
    }
    cout << "Your first number was " << number << '\n';
    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter a number greater than 0: 2[Enter]

Now enter another number: 7[Enter]

The second number you entered was 7

Your first number was 2

لاحظ البرنامج الماضى به متغيرين بأسم number. ال cin و cout الذى بداخل البلوك الداخلى (الخاص ب if ) سوف يعمل فقط مع المتغير number الذى تم تهيئته بداخل البلوك. و عندما تغادر هذا البلوك يتم الرجوع ب ال scope الى المتغير الخارجى.

تحذير: على الرغم من انها ممتازة ان تقوم بعمل متغيرات بنفس الاسم داخل البلوكات الداخلية. لكن يجب عليك ان تتفادى مثل هذا. من الممكن ان يتم الاختلاط و التشتت بسبب مثل هذه الافعال

_____________

الى هنا نكون قد انتهينا من الجزء الثانى من هذا الشابتر

اتمنى منكم الدعاء لى بالهداء و المغفرة و ان يسامحنى الله و ان انجح هذا العام :D

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#8

الله يقويــك.. ^

إن شاءالله لي رجعـه

#9
mr.4one كتب:

الله يقويــك.. ^

إن شاءالله لي رجعـه

الله بعطيك العافيه

اذا ممكن مثال ربط قواعد البيانات مع النموذج

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#10

بانتظار تكمـله الدوره ... ^

#11

بانتظار تكمـله الدوره ... ^

#12

slam brother

I would like to thank you for your tutorial as a first year student in london and we start learning programming , i found it bit difecult to keep up with it but with your tutorial i start to improve myself many thanks

kind regards

mohamed

#13

و عليكم السلام اخى الكريم, اتمنى ان تُكمل معى حتى نهاية الدورة بأذن الله, ستجد فيها مرادك بأذن الله

تحياتى

احمد :)

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

مواضيع مشابهة