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

شابتر 4 ( اتخاذ القرارات)

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

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

العلامات التقريبية

الملخص : العلامات التقريبية تجعلك قادر على المقارنة بين الارقام و الحروم و تعلم انيى اكبر, اصغر, او متساوى, او غير متساوى.

الى الان كل البرامج التى قمنا بعملها هى فى الفروع التالية:

الادخال من المستخدم

عمل المسائل الحسابية

عرض النتائج على الشاشة

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

البيانات الرقمية يتم مقارنتاه بأستخدام العلامات التقريبية. كل علامة تقريبية تقوم بمعرفة شئ محدد حسب استخدامها بين رقمين فقط ( اكثر من ذلك , فى الشباتر القادمة) مثال:

علامة الاكبر من (>) تعرف اذا كان العدد اكبر من الاخر ام لا. علامة المتساوى ( == ( تقارن لنا اذا كانت الارقام متساوية ام لا.

الجدول التالى به كل العلمات و معناها:

اقتباس

العلامة--------------------------------المعنى

اكبر من >

اصغر من <

اكبر من او يساوى >=

اصغر من او يساوى <=

يساوى ==

لا يساوى !=

كل هذه العلامات التقريبية تدعى binary اى انها تستخدم عمليتان, مثال على عملية اكبر من:

x>y

هذه العملية تسمى العملية التقريبية. هنا تقوم بمعرفة ايا من x ام y هو الاكبر . المثال التالى يقوم بمعرفة اي واحد هو الاصغر

x<y

الجدول التالى يرينا العمليات و ما معنى تلك العمليات بين متغيرين x,y

اقتباس

العملية---------------------المعنى

هل x اكبر من y x>y

هل x اصغر من y x<y

هل x اكبر من او متساوية مع y x>=y

هل ال x اصغر من او متساوية مع ال y x<=y

هل x تساوى y x==y

هل x لا تساوى y x!=y

ملاحظة : كل العلامات التقريبية تمتلك القدرة (من اليسار الى اليمين) اى انها تقوم بعمل ترتيب للعملياتا من اليسار الى اليمين.

العلاقة بين الارقام

اذا, فكيف تتم العمليات التقريبية فى البرنامج؟ تذكر كل العمليات التقريبية يجب ان يكون لها ارقام. ايضا تُعرف هذه العملية بأسم عمليات Boolean, التى تعنى انه يوجد صح او خطاء فقط . اذا كان x اكبر من y , فأن العملية x>y ستكون صحيحة اما العملية x==y فستكون خاطئة.

العلامة == تعنى اذا كان المتغيير الذى على اليسار يساوى الذى على اليمين. اذا كان الاثنان متساويات تكون true فلنقول ان a يساوى 4 ,اذا فالمثال التالى سوف يكون true:

a == 4

اما التالى فسوف يكون false:

a == 2

تحذير: لاحظ ان علامة يساوى هى 2 = سويا. لا تخلط بين علامة التهيئة = و هى 1= فقط و بين == التى تعنى انه اذا كان المتغير كذة يساوى كذة . لكن علامة = تقوم بعمل تهيئة للمتعير الذى على اليمين الى الذى على اليسار. سيكون هناك المزيد عن هذه المعلومات لاحقا فى هذا الشابتر.

اثنين من العلامات التقريبية فقط هم من يقومون بعمليتين مختلفتيين. علامة >= و هى تقوم بمعرفة اذا كان الرقم الذى على اليسار يساوى او اكبر من الرقم الى على اليمين. فلنفترض ان a يساوى 4 و ان b يساوى 6 و ان c يساوى 4 , كلا العمليتان التاليتان صحيحتان:

b >= a
a >= c

لكن القادم ليس صحيح

a >= 5

علامة <= تعنى ان اليسار اصغر من او يساوى الذى على اليمين. مرة اخرى فلنفترض ان a يساوى 4 و ان b يساوى 6 و ان c يساوى 4 المثالين التاليين صحيحان

:
a <= c
b <= 10

لكن القادم غير صحيح

b <= a

اخير علامة تقريبية هى != و التى تعنى لا تساوى هى تقوم بمقارنة الرقم الايسر الى الرقم الايمن لترى اذا كانوا متساويين. كالسابق فلنفترض ان a = 4 و b = 6, c=4 العمليتان القادمتان سيكونون صح

a != b
b != c

لكن العملية التالية غير صحيحة (

a !=c

الجدول التالى يقوم بعمل مقارنة بين

x = 10
y = 7

اقتباس

العملية-------------------------------الناتج

خطاء, لأن ال x ليست اكبر من y x<y

صحيح, لأن ال x اكبر من y x>y

صحيح, لأن ال x اكبر من او يساوى y x>=y

خطاء, لأن x ليست اقل او تساوى y x<=y

صحيح, لأن ال yلا تساوى x x!=y

ما هو الصحيح

السؤال " ما هو الصحيح " سؤال تجده فى كتاب الفيلسوف :D و ليس فى دورة برمجة , لكنه سؤال جيد لكى نفكر فيه, . لو ان عملية تقريبية فهى تكون يأما صح او خطاء, لكن كيف يتم استخدامهم فى البرامج, كيف يتم تخزين صح او خطاء فى الكمبيوتر ( رام )

فى السى++ المعادلات التقريبية تقوم بوضع صح كرقم 1 و خطاء كرقم 0

ملاحظة : 1 ليس الرقم الوحيد للصح , سوف ترى ذلك لاحقا فى الشابتر

مثال : لمعرفة الصح و الخطاء و ارقامهم

#include <iostream>
using namespace std;

int main() {
    bool trueValue, falseValue;
    int x = 5, y = 10;

    trueValue = x < y;
    falseValue = y == x;

    cout << “True is “ << trueValue << endl;
    cout << “False is “ << falseValue << endl;
    cin.get();
    return 0;
}

المخرجات:

اقتباس

True is 1

False is 0

لنشرح السطران الذان يحويا على علميات التقريبة

trueValue = x < y;
falseValue = y == x;

هذه الجمل ربنا يبدون قدام لأنه يتم العمل معهم من داخل المتغييرات. المتغير trueValue تم تم اعطائه الناتج x < y و بما ان هذا صحيح فأن ال boolean سوف يعطى له القيمةا 1 لانه صحيح. و من ثم تم اعطاء falseValue الناتج 0 لأنه خطاء او غير صحيح.

ملاحظة : العمليات التقريبية لديها قوة اكبر من العلامة التهيئية :

z = x < y;

فى البداية تتم عملية المقارنة لأنها الاقوى من ثم يتم تخزين الناتج الى z

جدول : فلنفترض ان x = 10 و ان y = 7 و ان z , a,b يكونو int او bool:

اقتباس

الجملة---------------------------------الناتج

z تم تهيئتها على انها 0 لان x ليست اقل من y z = x < y

اظهار 1 على الشاشة لأنه x اكبر من y cout << (x > y);

a تم اعطاء 1 لها لأن x اكبر من او يساوى y a = x >=y;

اظهار 0 على الشاشة لأن x ليست اقل من او تساوى y cout << (x <= y);

b تم اعطائها 1 لأن y لا تساوى x b = y != x;

عند كتابة جمل برمجية مثل هذه, من المفضل ادخالها بين اقواس مثال:

trueValue = (x < y);
falseValue = (y == x);

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

فى المشاركة التالية سوف نتحدث عن الجملة الشرطية 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

المخلص : الجملة if تقوم بجعل جمل اخر يتم تنفيذه فى حالات محددة.

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

الطريقة الخاصة بالكود الذى سوف ندرسه الان تسمى ب "بيانات ثابت" , لأنها يتم تنفيذها فى خطوات ثابتة , لكن غالبا البرامج تحتاج لأكثر من " طريق " . الكثير من الخوارزميات تتطلب ان يتم تنفيذ بعض الجمل البرمجية تحت حالة محددة و من الممكن ان نسم هذه ب " البيانات المتعددة "

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

البرنامج التالى :

#include <iostream>
using namespace std;

int main() {
    double length, width, area;

    cout << “Enter the length of the rectangle : “;
    cin >> length;
    cout << “Enter the width of the rectangle : “;
    cin >> width;
    area = length * width;
    cout << “The area is : “ << area << endl;
    cin.get();
    return 0;
}

F

الخطوة الاولى :

cout << “Enter the length of the rectangle: “;

الثانية :

cin >> length;

الثالثة

cout << “Enter the width of the rectangle: “;

الرابعة:

cin >> width;

الخامسة:

area = length * width;

السادسة:

cout << “The area is: “ << area << endl;

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

مثال عملى : سالتك سؤال: هل الجو بارد ؟ اجبتنى نعم , اذا فألبس معطف او اجبتنى لا اذا فسوف يتم تفادى ذلك الامر

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

من الممكن ايضا ان تكون هناك جمل اخرى مثل:

لو ان السيارة ليس بها بنزين , فأقف عند اقرب محطة و املء السيارة

لو انها تمطر فى الخارج , فأدخل البيت

لو انك جائع, أأكل شيئا ما

حسنا الان مثال به 3 حالات

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

اما اذا كان لا فسوف يتم اختصار هذه الجمل

الان ندخل الى الجد

الطريقة العامة للجملة الشرطية if

if (expression)
	statement;

الجملة الشرطية الماضية بسيطة جدا فداخل القوسيين ندخل نضع الالة التى نريدها فأذا كانت صحيحة يتم ادراج ما بعدها, البرنامج التالى يرينا مثال على الجملية الشرطية if فأذا كان المجموع النهائى للطالب اكبر من 95 فسوف يتم المباركة له و القول له انه من الطلاب المتفوقين

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int score1, score2, score3;
    double average;

    cout << “Enter 3 test scores and I Will average them : “;
    cin >> score1 >> score2 >> score3;

    average = (scpre1 + score2 + score3) / 3.0;
    cout << fixed << showpoint << setprecision(1);
    cout << “Your average is “ << average << endl;

    if (average > 95)
        cout << “Congratulations!That\s a high score!\n”;
    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter 3 test scores and I will average them: 80 90 70 [Enter]

Your average is 80.0

المخرجات لكن فى نتيجة اعلى من 95

اقتباس

Enter 3 test scores and I will average them: 100 100 100[Enter]

Your average is 100.0

Congratulations! That's a high score!

السطريين التاليين هم من تسببوا فى اظهار جملة المباركة:

if (average > 95)
cout << “Congratulations! That's a high score!\n

”;

الجملة cout فقط يتم تنفيذها اذا كانت النتيجة اكثر من 95 اذا لم تكن كذلك فأن هذه الجملة سوف يتم اختصارها.

الجدول التالى به بعض الجملة الشرطية + النتائج:

اقتباس

الجملة---------------------النتــــــــــــــــــــــــــــــــــــــــــــــــــــــــــائج

تقوم باعطاء صح الى المتغير من نوع bool فقط عندما تكون ال hours اكبر من 40 if ( hours > 40)

over Time = true;

اظهار رسالة "invalid number” عندما يكون ال value اكبر من 32 if(value>32)

cout << “invalid number\n”;

ضرب ال payRate ب 2 عندما يكون ال overtime صحيح if (overTime == true)

payRate *=2;

احذر من ال ;

ال ; لا تُضع فى نهاية السطر بل فى نهاية جملة سى++ برمجية كاملة. الجملة الشرطية لا تنتهى اذ لم يتم الامر فى الحالة المرادة. اذا فلا يجب ان تضع ال ; بعد

if (expression)


لكن بعد انتهائ الجمل اجمع. هكذا:
if (expression)
	statement;

اذا وضعت ; فى نهاية السطر if و ركز معى انا اقول سطر. فأن الكومبايلر سوف يعتقد انك واضع جملة null اى انها لا تقوم بعمل لا شئ و انه لا يوجد جملة شرطية من الاساس و من ثم يتم اتخاذ الاوامر التى بداخل الجملة الشرطية كل مرة دائما, مثال يوضح ذلك:

#include <iostream>
using namespace std;

int main() {
    int x = 0, y = 10;

    cout << “x is “ << x << “ and y is “ << y << endl;
    if (x > y); // خطاء لا تضع ال ;
    cout << “ x is greater than y\n”; //تُعرض دائما فهى جملة برمجية عادية
    cin.get();
    return 0;
}

المخراجت :

اقتباس

x is 0 and y is 10

x is greater than y

الستايل البرمجى و الجملة الشرطية

if

الجملة الشرطية if دائما تستغرق امثر من سطر واحد, دائما اكثر بكثر من جملة واجدة مثال على جملة برمجية مكونة من سطر واحد من الممكن استخدامها فى سطرين

if (a >= 100)
	cout << “The number is out of range.\n”;
if (a >= 100) cout << “The number is out of range.\n”;

فى كلا المثالييين الكومبايلر اخذ ال if و cout على انهم وحدة واحدة حتى تتم العملية الشرطية و لكى يعرف النهاية فأنه يتم اتخاذ ال ; فى نهاية الجمل الشرطية كاملة. اما المسافات و الذى منه فهو لسهولة القراءة لنا و بالطبع انا افضل الطريقة الاولى فى المثال فى الاتى شرطان مهمان حتى تكتب جمل شرطية

1 – يجب ان تكون الجملة التنفيذية للحالة فى السطر التالى لل if اذا فكما قولت نستخدم الطريقة الاولى افضل ( راعى اننى اتحدث عن الستايل)

2 – الحالة التى يتم تنفيذها يجب ان تكون بعد سطر واحد فقط من جملة if و ان تكون بعد الجملة if بمسافة tab

المقارنة بين الارقام

floating point

بسبب الطريقة التى يتم تخزين ارقام floating point فى الذاكرة, يحدث بعض الاخطاء . هذا بسبب ان الجزء الكسرى لا تتم تطابقته تمام بأستخدام ال binary. اذا فيجب عليك ان تكون حريص عند ااستخدام == لكى تقوم بعمل مقارنة بين ال floating point مثالالبرنامج التالى يستخدم 2 double متغيرات : a,b كل متغير منهم لديه الناتج اخذ الناتج 1.5 و ثم تمت اضافة الرقم 0.0000000000000001 الى a. هذه قامت بعمل تغير بسييط فىالمساواه بين الرقميين. لكن بسبب انه يحدث مشاكل عند الكومبايل فأنه سوف يظهر لك انهما نفس الرقم و تُدعى هذا الخطاء ب

round-off errors

المثال:

#include <iostream>
using namespace std;

int main() {
    double a = 1.5;
    double b = 1.5;

    a += 0.0000000000000001;
    if (a == b)
        cout << “Both a and b are the same.\n”;
    else
        cout << “a and b aren't the same.\n”;
            cin.get()
        return 0;
}

المخرجات:

اقتباس

Both a and b are the same.

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

floating point

الرجوع الى الصحيح :D

الأن انت دخلت فى اول خطوات العمليات التقريبية و الجمل الشرطية if, الان لنركز مجددا على موضوع صحيح او خطاء.انت رئيت ان العمليات التقريبية لديها رقم 1 لصح و 0 لخطاء. فى عالم الجمل الشرطية , مهما كان ناتج الصحيح فسوف يتبقى دائما الخطاء 0 و اى رقم اخر يُعتبر صح, حتى الارقام السلبية فهى ايضا تكون صحيح.

فى الحياة الواقعية, الصحيح يُعتبر شئ معقد. هنا المحتوى العام للقواعد التى مرت علينا:

1 – عندما يتم اعطاء الناتج 1 لأى عملية برمجية صح او خطاء فهذا يعنى صحيح

2 – عندما يتم اعطاء الناتج 0 لأى عملية برمجية صح او خطاء فهذا يعنى خطاء

3 – اى عملية لديها الناتج 0 تُتعبر خطاء بواسطة الجملة الشرطية if. و ضمن الجمل انواع البيانات bool اى رقم خطاء يُعتبر 0

4 – اى عملية لديها الرقم غير 0 تُتعبر صحيحة. و من ضمن الجمل ايضا جمل bool الصحيحة و تساوى رقم 1

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

if (value)
	cout << “It's True!”;

هذه الجملة الشرطية الماضية لا تختبر اى علاقة او اى حالة لكى يتم كتابة الجملة لكنها تختبر حالة المتغير المُسم

value

و اذا كان الناتج اى شئ غير 0 فسوف يتم طباعة الرسالة اما اذا كان 0 فلن يتم طباعته

مثال اخر:

if (x+y)
	cout << “It's True!”;

فى هذه الجملة المجموع الخاص ب x,y يتم اختباره فى جملة شرطية if و اذا كان المجموع 0 فسوف يكون خطاء اما اذا كان اى رقم اخر فسوف يكون صحيح. ايضا من الممكن استخدام اى عنصر من مكتبة الرياضيات مثال:

if (pow(a, b))
	cout << “It's True!”;

تم استخدام الدالة الخاصة ب pow لكى يتم ضرب a فى الاوس الخاص ب b. اذا كان الناتج اى شئ اخر غير 0 سوف يتم تنفيذ الجملة النصية سوف تتعلم عن ذلك اكثر فى شابتر 6

لا تتوه بين == و =

سابقا لقد قُمت بتحذير لكى لا تُدخل علامة متساوى (==) مع علامة التهيئة (=) كالمثال القادم:

if ( x = 2 )
cout << “It's True!”;

الجملة الماضية لا تقوم بعمل مقارنة بين ان x تساوى 2 لا هى تقوم باعطاء الناتج 2 الى ال x و من ثم يتم كتابة الجملة التالية لها لأنه هذه الحالة دائما صحيحة.

هذا يحدث بسبب الناتج الخاص بالتهيئة و الرقم الذى دخل للمتغير الان و بما انه 2 فأن ال 2 هذا رقم صحيح و تُعتبر الحالة صحيحة برنامج ماضى سوف نُعيد استخدامه لكننا سوف نضع = بدل من == لكى نرى الفرق

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int score1, score2, score3;
    double average;

    cout << “Enter 3 test scores and I Will average them : “;
    cin >> score1 >> score2 >> score3;

    average = (scpre1 + score2 + score3) / 3.0;
    cout << fixed << showpoint << setprecision(1);
    cout << “Your average is “ << average << endl;

    if (average = 100)
        cout << “Congratulations!That\'s a perfect score!\n”;
            cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter three test scores and I will average them: 80 90 70

Your average is 80.0

Congratulations! That's a perfect score!

فى المشاركة القادمة سوف ندرس ال Flag ( صح او خطاء)

Flags

الملخص: ال flag هو نوع متغير من bool, int و يتم التعامل معهم عند حدوث حالة محددة

ال flag هو متغير من نوع bool و يعمل فقط عند حدوث حالة محددة وُجدت فى البرنامج. عندما يكون المتغيير من نوع flag و يتم الوضع له الناتج خطاء.فهى تقوم بجعل الحالة ليست موجودة بعد. لكن اذا كان true فهذا يعنى انها موجودة.

مثال : فلنفترض ان برنامج شبيه بالبرنامج الماضى لدى متغير من نوع bool و سُمى highScore:

bool highScore = false;

عندما نقوم بعمل متغير من هذا النوع, نقوم باعطاءه خطاء لأننا لا نعرف اذا كان ال highScore يوُجد ام لا. بعض حسابة النسبة الخاصة بالمجموعة نقوم بوضع الكود التالى اذا كان المجموع اكبر من 95 يتم اعطاء highValue صح .

If (average > 95)
highScore = true;

لاحقا, فى نفس البرنامج سوف تستخدم الكود التالى حتى يتم كتابة الكود

if (highScore)
	cout << “Congratulations! That's a high score!”;

integer flags

ايضا من الممكن استخدام int ك flag. لأن فى السى++ رقم 0 يساوى خطاء و اى رقم غير صفرية يُحسب انه صحيح. فى البرنامج الخاص بحسابة النسب من الممكن ان نقوم بعمل متغير كالتالى لكى يكون خطاء

int highScore = 0;

كالسابق الرقم 0 هو خطاء و لا نعلم اذا كان ال highscore سيعمل ام لا. بعد ان تتم عملية النسبة. من الممكن ان نستخدم الكود التالى لو كان النسبة اكبر من 95 .لو ال highScore اخذ رقم غير 0 فسوف يكون صحيح

if (average > 95)
highScore = 1;

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

if (highScore)
	cout << “Congratulations! That's a high score!

ستجد ال flag مفيدة فى الكثير من الحالات . سوف نرجع لها لاحقا

ملاحظة: المتغيرات يتم صنها داخل الدوال مثل main , لكنها لم يت تهيئتها و تعريفها. لكى تضع للمتغير رقم ثابت يجب عليك عمل تعريف للمتغير.

فى المشاركة التالية سوف ندرس ال 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.

#3

الجملة الشرطية if فى اكثر من سطر

الملخص: الجملة الشرطية if من الممكن ان تكون اكثر من جملة واحدة

ماذا لو انك تريد جمل if لكى تقوم بتنفيذ جمل برمجية كثيرة, ليست سطر واحد فقط, ماذا لو ان البرنامج الماضى يحتاج لأكثر من جملة cout عندما نصل لنتيجة العالية (اكبر من 95) الجواب هو قفل كل الجمل التى نريدها داخل قوسين مثال:

if (expression)
{
	statement;
	statement;
	//اى جمل تانية
}

البرنامج التالى يقوم بعمل نفس البرنامج الماضى لكن فى الشكل الجديد

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int score1, score2, score3;
    double average;

    cout << “Enter 3 test scores and I Will average them : “;
    cin >> score1 >> score2 >> score3;

    average = (scpre1 + score2 + score3) / 3.0;
    cout << fixed << showpoint << setprecision(1);
    cout << “Your average is “ << average << endl;

    if (average > 95) {
        cout << “Congratulations!\n”;
        cout << “That\s a high score!\n”;
        cout << “You deserve a pat on back!
    }
    cin.get();
    return 0;
}

المخرجات:

اقتباس

Enter 3 test scores and I will average them: 100 100 100[Enter]

Your average is 100.0

Congratulations!

That's a high score.

You deserve a pat on back!

المخرجات فى نسبة اكبر

اقتباس

Enter 3 test scores and I will average them: 80 90 70[Enter]

Your average is 80.0

البرنامج الماضى يطبع اكثر من جملة اذا كانت النسبة اكبر من 95. جملة ال if تم تقسيمها الى 3 جمل cout عندما يكون ال highScore صحيح. وضع بعض الجمل داخل اقواس تقوم بعمل بلوك من الكود. جملة ال if سوف يتم تنفيذها كل الجمل فى الاقواس . لكى يظهروا عندما تكون النسبة اكبر من 95 و اذا لم تكن اكبر من 95 فسوف يتم اختصار هذه الكمل

لاحظ ا كل الجمل داخل الاقواس سوف يتم تنفيذهم.

ملاحظة : اى وقت البرنامج به بلوك من الاكواد . سوف يتم تنفيذ كل الجمل

لا تنس وضع الاقواس

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

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int score1, score2, score3;
    double average;

    cout << “Enter 3 test scores and I Will average them : “;
    cin >> score1 >> score2 >> score3;

    average = (scpre1 + score2 + score3) / 3.0;
    cout << fixed << showpoint << setprecision(1);
    cout << “Your average is “ << average << endl;

    if (average > 95)
        cout << “Congratulations!\n”;
    cout << “That\s a high score!\n”;
    cout << “You deserve a pat on back!
            cin.get();
    return 0;
}

المخرجات :

اقتباس

Enter 3 test scores and I will average them: 80 90 70[Enter]

Your average is 80.0

That's a high score.

You deserve a pat on back!

السطريين التاللين يتم تنفيذهم دائما مع البرنامج حتى لو النسبة ليست اكبر من 95

cout <<  “That\s a high score!\n”;
cout <<  “You deserve a pat on back!

ﻷن الاقواس تم حذهف سوف يتم التحكم فقط فى جملة

cout << “Congratulations!\n”;

ف المشاركة القادمة سوف ندرس if/else

2

.Everyone has a dream

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

...No Pain No Gain

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

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

#4

الجمل الشرطية

if/else

الجمل الشرطية if/else هى نفس شكل ال if

if (expression)
statement or block
else
statement or block

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

#include <iostream>
using namespace std;

int main() {
    int number;

    cout << “Enter an integer and I will tell you if it\n”;
    cout << ”is odd or even. “;
    cin >> number;
    if (number % 2 == 0)
        cout << number << “ is even, 'n:l
    else
        cout << number << “ is od.\n”;
    cin.get();
    return 0;
}

المخرجات :

اقتباس

Enter an integer and I will tell you if it

is odd or even. 17[Enter]

17 is odd.

1. الجزء الخاص ب else فى نهاية جملة if تقوم بتخصيص جملة يتم تنفيذها اذا كانت جملة if خاطئة. عندما تكون number% 2 لا تساوى 0, يتم طباعةفرد فقط. لاحظ ان البرنامج سوف يكون له طريقان فقط فى if/else سوف نتعرف على اكثر من ذلك قريبا.اذا كنت تُفكر ان برامج الكمبيوتر مقسمة كطريق . فأن if/else هى جزء صغير من الطريق.جمل if/else تقوم بتنفيذ البرنامج فى اكثر من طريق واحد الان سوف.

لاحظ ان الستايل الخاص بالبرمجة التى استعملناه

البرنامج التالى : ترينا كيفية القسمة بالزيرو فى if/else

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

#include<iostream>
using namespace std;

int main() {
    double num1, num2, quotient;

    cout << “Enter a number : “;
    cin >> num1;

    cout << “Enter another number : “;
    cin >> num2;

    if (num2 == 0) {
        cout << “Division by zero is not possible.\n”;
        cout << “Please run the program again and enter\n”;
        cout << “a number other than zero.\n”;
    } else {
        quotient = num1 / num2;
        cout << “The quotient of “ << num1 << “ divided by “;
        cout << num2 << “ is “ << quotient << “.\n”;
    }
    cin.get();
    return 0;
}

المخرجات:

(يدخل المستخدم 0 للرقم الثان)

اقتباس

Enter a number: 10[Enter]

Enter another number: 0[Enter]

Division by zero isn't possible.

Please run the program again and enter

a number other than zero

اذا ادخل المستخدم رقم 0 فى num2 يتم اختباره بواسطة 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.

#5

جمل if الداخلية

المخلص : لكى تختبر اكثر من حالة , ال if من الممكن ان تدخل داخل بعضها.

بعض الاحيان جملة if يجب ان تدخل داخل جملة if اخرى. مثال ,

برنامج بنكى يحسب هل العميل عميل خاص ام انه عميل عادى. لكى نعرف يوج حالتان يجب ان يكونا موجودين

1 – هل هو عميل خاص؟

2 – و ان يكون متخرج من الجامعة ( على الاقل من سنتين)

الخوارزمية القادمة توضح لنا ذلك:

___

هل انت عميل خاص؟ صح ام خطاء؟

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

اما اذا كان خطاء, فسوف يقول له يجب عليك ان تقوم بالتحويل الى عميل خاص.

___

لو اتبعنا هذه الخوارزمية . فسوف نرى سؤال هل انت عميل خاص؟ يتم ادخال 'y' اى نعم و نقوم باختبارها فى جمل if كالأتى

employed == 'y'

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

اذا فالسؤال هو هل انت متخرج من الجماعة

recentGrad == 'y'

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

المثال:

#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 employed ? “;
    cin >> employed;
    cout << “Have you graduated from college “;
    cout << “in the past two years ? “;
    cin >> recentGrad;

    if (employed == 'Y') {
        if (recentGrad == 'Y') // الداخلية
        {
            cou << “You qualify for the special “;
            cout << “interest rate.\n”;
        }
    }
    cin.get();
    return 0;
}

المخرجات:

اقتباس

Answer the following questions

with either Y for yes of 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.

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

اقتباس

Answer the following questions

with either Y for yes of N for no.

Are you employed? Y[Enter]

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

الشرح :

للنظر الى السطر

employed == 'Y'

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

لاحظ ان فى المخرجات الثانية للبرنامج الماضى عندما كتبنا N فلم يتم اظهار اى شئ يوضح للمستخدم انه ليس من الممكن ان يكون عميل خاص. لو ادخل المستخدم N فى كلا الجملتيين فلن يتم تنفيذ اى شئ او اى حرف غير Y

لكى نصحح ذلك سوف نقوم بعمل البرنامج التالى:

#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 employed ? “;
    cin >> employed;
    cout << “Have you graduated from college “;
    cout << “in the past two years ? “;
    cin >> recentGrad;

    if (employed == 'Y') {
        if (recentGrad == 'Y') // الداخلية
        {
            cout<< “You qualify for the special “;
            cout << “interest rate.\n”;
        } else {
            cout << “You must have graduated from “;
            cout << “college in the past two\n”;
            cout << “years to qualify.\n”;
        }
    } else {
        cout << “You must be employed to qualify.\n”;
        \\ ليس عميل خاص
    }

    cin.get();
    return 0;
}

المخرجات :

اقتباس

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 to qualify.

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

اقتباس

Answer the following questions

with either Y for Yes or N for No.

Are you employed? YEnter]

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

You must 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 interst rate.

فى هذه النسخة من البرنامج. كلا الجمل من if و else يقوم بسأل المستخدم اكثر من مرة حتى يظهر لنا الناتج الماضى.

ال if المدخلة و الستايل

لسهولة القراءة و الكومبايل , يجب علينا ان نكون حرصين على الستايل الخاص ب if المدخلة. هذه توضح اى جزء تبع الاخر بسهولة اكبر نفس الجزء الخاص ب if المدخلة الماضية سوف نكتبها هنا لكن بستايل سئ و سوف يكون صعب جدا للقراءة و الكومبايل

لا نكتب الكود كالتالى فهو غير منظم بالمرة

و صعب القراءة و التقسيم

if (employed == 'Y') {
if (recentGrad == 'Y') // الداخلية
{
cout<< “You qualify for the special “;
cout << “interest rate.\n”;
} else {
 cout << “You must have graduated from “;
 cout << “college in the past two\n”;
cout << “years to qualify.\n”;
}
} else {
 cout << “You must be employed to qualify.\n”;
\\ليس عميل خاص
 }

انتهينا الان من الدروس و الحمدلله انتظرونى فى الجزء الثانى من هذا الشابتر الجمعة القادمة ( ربما اتأخر) بسبب العيد

كل عام و انتم بخير بما ان عيد الاضحى المبارك على الابواب اعاده الله علينا و عليكم باليمن و البركات

اتمنى منكم الدعاء لى بالهداية و التوفيق

2

.Everyone has a dream

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

...No Pain No Gain

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

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

#6

ماشاء الله يا أحمد ....

#7
هويدي كتب:

ماشاء الله يا أحمد ....

تسلم يامحمد :) نورت الدورة :D

.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

اتمنى من الله ان تتم هذه الدورة على خير , ولا تؤثر على دراستى لأنها بدأت فى ذلك :S

.Everyone has a dream

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

...No Pain No Gain

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

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

#10

ركز فى دراستك بردو .

كلها شهرين و تخلص من الترم الاول .

--------------------------------------------------

شغل جميل جداً و مجهود قيم . بالتوفيق الدائم

#11

تم اضافة شابتر 4 (الجزء الثانى)

.Everyone has a dream

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

...No Pain No Gain

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

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

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