Learning language C++

Sort:
Avatar of mitto

lesson 1

Avatar of mitto

Lesson 2

 
حسناً دعونا نتعمق الآن بعض الشيء .. مع ادرس الثاني :
GO

http://www.chess.com/images/myframes/1.gif);" width="100%" align="center">
========= الدرس الثاني =========



العمليات الحسابية في لغة السي بلس بلس ..

في لغة السي بلس بلس نستخدم رموز معروفة للعمليات الحسابية مثل الجمع والطرح والضرب ....... إلخ .

http://www.chess.com/images/myframes/3_u.gif);" width="100%"> 
http://www.chess.com/images/myframes/3_r.gif);" width="1%">  http://www.chess.com/images/myframes/3.gif);" width="100%" align="center">
= = علامة المساوة
+ علامة الجمع .
- علامة الطرح .
* علامة الضرب .
/ علامة القسمة .
% علامة إيجاد الباقي من القسمة
.
http://www.chess.com/images/myframes/3_l.gif);" width="1%"> 
http://www.chess.com/images/myframes/3_d.gif);" width="100%"> 



فمثلاً .. لو أردنا كتابة المعادلة التالية بـ لغة البرمجة ..

R = 5 × 6 + ( y ÷ 4 ) -3


ستكون بالشكل التالي :


R = ( (5 * 6 ) + ( y / 4 ) -3 )


س / مالفرق إذا بين علامة المساواة الواحدة ( = ) وعلامة المساواة الثنائية ( = = ) ؟؟

إن علامة المساواة الواحد تستخدم لعملية وضع قيمة .. يعني نريد أن نضع قيمة x في y ،
على سبيل المثال ،

في البرنامج التالي :

كود:
# include <iostream.h>
 void main ( void )
   {
      int x = 5 ;
      int y = 6 ;
      int z ;

z = x + y ;
 cout << z ;

    }

سيقوم البرنامج بفتح 3 أماكن فارغة في الذاكرة للـ x و y و z ..

ثم سيقوم بوضع القيمة 5 في مكان x بالذاكرة ..
ويضع القيمة 6 في مكان y بالذاكرة ..



وأخيراً يقوم بجمع القيمة الموجودة داخل x مع القيمة الموجودة داخل y ويضع الناتج في مكان z بالذاكرة ..
ولذلك .. عندما نقوم بطباعة z سيكون الناتج 11 .

أما علامة المساواة الثنائية .. فإن أغلب استخداماتها في المقارنة .. فمثلاً عندما نقول أن

كود:
R = = x + y ;

فهذا يعني أن هناك قيمة في المتغير R وأن قيمة مجموع x + y ستكون مساوية للقيمة الموجودة في R أي نفس القيمة في المجموع .. ستكون موجودة في R ، ولا تعني أن مكان R فارغ كما كان مكان z في المثال سابق .

أتمنى أن يكون الأمر قد اتضح الآن .

دعونا نعود مرةً أخرى للبرنامج السابق :

كود:
# include <iostream.h>
 void main ( void )
   {
      int x = 5 ;
      int y = 6 ;
      int z ;

z = x + y ;
 cout << z ;

    }

 



عندما يأتي البرنامج لينفذ السطر التالي :
كود:
Z = x + y ;

 


فإنه سيقوم بـ ((( نسخ ))) القيمة الموجودة داخل x ونفس الأمر مع y ثم يجمعهما ويضع الناتج في مكان z بالذاكرة .
إذا يقوم البرنامج بنسخ القيم ، ولا ينقل القيم ، لأنه لو نقل القيم لأصبح بعد تنفيذ البرنامج مكان x و y فارغاً .. وبالتالي لو استخدمنا x مرة أخرى في نفس البرنامج فإن قيمتها ستكون صفر ، لذلك يقوم البرنامج بنسخ القيم وليس نقلها .

حسناً .. الآن لنتأمل الأربع الجمل التالية ..

كود:
1)	X = X + 1 ;
2)	X ++ ;
3)	++ X ;
4)	X+ =1 ;

انتهينا .. حسناً .. لنتأملهم مرة أخرى !!


..

كود:
5)	X = X + 1 ;
6)	X ++ ;
7)	++ X ;
8)	X+ =1 ;

 


إن تلك الجمل الأربعة معناها واحد في لغة سي بلس بلس ..
ومعناها .. أن نقوم بزيادة قيمة x بمقدار واحد 1 .

يعني لو كانت x تساوي خمسة .. بعد تنفيذ أيٍ من الجمل الأربعة السابقة .. ستكون قيمة x تساوي ستة .

لكن .. هناك اختلاف بسيط بين الجملتين الثانية والثالثة .. قد يؤدي هذا الإختلاف إلى قلب المعنى تماماً .. ولكني لن أتطرق إلى شرح ذلك الإختلاف .. لأن شرحه صعب وفهمه أصعب بكثير جداً .. وما زلنا في البداية ، ولا أريد أن ينصدم الأعضاء بأشياء لا يفهمونها ، لكن من يريد مني شرح هذه النقطة سأشرحها له وله فقط ، وهي ضرورية مثلاً للطالب في الجامعة حيث يتفنن بعض الأسلتذة أو الدكاترة بتلك الأسئلة في الإمتحانات !!

لذلك سنعبر تلك النقطة إلى ما بعدها ..


أولويات العمليات الحسابية ..





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

ملاحظة : إذا تعارضت عمليتان حسابيتان لهما نفس الأولوية فإننا نقوم بتنفيذ العملية الأقرب لليسار ..

فمثلاً .. لو جاءت عملية تحتوي على ضرب وقسمة .. فسنقوم بتنفيذ العملية الأقرب لليسار لأن الضرب والقسمة لهما نفس الأولوية .


عمليات المقارنة ..

تعتبر من أهم العمليات .. وتحتوي على رموز سهلة وبسيطة :
كود:
>          أكبر  من 
<          أصغر من 
<=        أكبر من أو يساوي
>=        أصغر من أو يساوي
= =       يساوي
=!         لا يساوي

 



ونستخدم عمليات المقارنة كثيراً في أدوات الشرط ..



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

الجمل والأوامر الشرطية .. تعني أننا نعطي للبرنامج شرط ، وإذا تحقق هذا الشرط ينفذ البرنامج شيء معين ، أما إذا لم يتحقق ينفذ شيء آخر ..

ومن أشهر الجمل الشرطية اللتي سنستخدمها بإذن الله ..

جملة if ... else ...
وجملة SWITCH


الأمر
If …. Else ….


هذا الأمر بمعنى : لو حدث كذا ( ونعطيه الشرط المطلوب ) افعل كذا ( ونعطيه ما ينبغي فعله في حالة حدوث الشرط ) وإلا كذا ( فإن لم يتحقق الشرط يفعل شيء آخر )

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

مثال : اكتب برنامج اختبار لدرجة الطلاب .. بحث يدخل المستخدم الدرجة ، ولو كات هذه الدرجة أكبر من أو تساوي الخمسين فإن البرنامج يخبرنا بأن الطالب ناجح ، وإذا كانت أقل من 50 يخبرنا البرنامج بأن الطالب راسب .
كود:
# include <iostream.h>
  void main ()
{
   float k ;

cout << " Pleas Enter the mark ? " ;
cin >> k ;

if ( k >= 50 )
cout << "
the student Sucsseful" ; else cout << "
the student Filled " ; }

 


شرح المثال :

• في البداية قمنا بتعريف المتغير اللذي سيفتح مكان في الذاكرة ليمكننا من إدخال الدرجة .
• بعد ذلك سنطبع على شاشة عبارة يفهم منها المستخدم أن المطلوب منه إدخال الدرجة .
• استخدمنا cin لبدأ إدخال الدرجة ووضعها في الذاكرة في مكان المتغير k .
• الآن لاحظ التالي :
استخدمنا if لكي نقارن الدرجة المدخلة هل هي أكبر من أو تساوي الخمسين أم أصغر ؟ ...
وضغنا الدرجة k ثم علامة المقارنة أكبر من أو يساوي ثم رقم 50 وهو الرقم الفاصل اللذي سيحدد لنا .
لاحظ .. أننا لم نضع فاصلة منقوطة بعد عبارة if لأنها من الإستثنائيات اللتي تحدثنا عنها في الدرس الأول .
• نعود لبرنامجنا .. إذا تحقق الشرط .. أي كانت الدرجة أكبر من أو تساوي الخمسين سنقوم بطباعة الأمر ما بعد if وإن لم يتحقق سنقوم بفعل ما بعد else .
• وهكذا انتهى البرنامج بإغلاق القوس .


ملاحظات عامة :
1 -
لا يشترط كتابة else في جملة if فالبرنامج السابق مثلاً يمكن كتابته على الشكل التالي :
كود:
# include <iostream.h>
  void main ()
{
   float k ;

cout << " Pleas Enter the mark ? " ;
cin >> k ;

if ( k >= 50 )
cout << "
the student Sucsseful" ; if ( k< 50 ) cout << "
the student Filled " ; }

 


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

2-
من الممكن تنفيذ عدة أوامر في حال تحقق شرط if ولا يشترط أمر واحد .. القاعدة التالية مع شرحها ستوضح الكثير بإذن الله ..
في الأسطر التالية :

كود:
If ( K >= 3 )
Cout << "
you typed " ; جملة 1 Cout << " Yassmean " ; جملة 2

 




لاحظ الآتي :• لو تحقق شرط جملة if سيقوم البرنامج بتنفيذ الجملتين .
• لو لم يتحقق الشرط سيقوم البرنامج بتنفيذ الجملة الثانية وترك الجملة الأولى .
• لجعل البرنامج لا ينفذ الجملتين في حالة عدم تحقق الشرط يتم وضع أقواس على الشكل التالي :
كود:
{ cout<<"
………. cout ……....."Yassmean"; }

أتمنى أن يكون كل شيء قد اتصح الآن .

قاعدة : ( و – أو )
ماذا لو أردنا وضع أكثر من شرط في جملة if حينها يجب أن نستخدم أحد الأداتين and أو الأداة or ...
الفرق بين الأداتين :
And : ورمزها && و تشترط أن يتحقق كل الشروط الموجودة في جملة if .
Or : ورمزها || و تشترط تحقق واحد على الأقل من الشروط الموجودة داخل جملة if .



مثال : لو أردنا كتابة برنامج يقوم بحساب تقدير طالب جامعي بحيث يطبع لنا تقدير A المحصور بين الدرجات من 95 وحتى 100

كود:
# include <iostream.h>
   void main ( void )
      {
          float x ;
cin >> x ;
if ( ( x >= 95 ) && ( x < 100 ))
    { cout<< " A " ; }
           }

 



لاحظ : استخدمنا هنا الأداة and لأنه يجب أن يتحقق الشرطان حتى نتمكن من طباعة التقدير A .

==========

الأمر switch

يعتبر من أسهل الأوامر .. وسنأخذه في آواخر دروس الدورة بإذن المولى عز وجل .

===============


إلى هنا يكون درسنا الثاني قد انتهى .. موعدنا في الدرس القادم مع أوامر التكرار ( LooP ) وهي مهمة جداً ..

صحيح ... عشان منساش برضه .. لازم أديكم واجب .. وواجب صعب كمان ..

هاهاها .. لا مش صعب ولا حاجة .. لكن هيكون محتاج مننا إن إحنا نشغل مخنا شوية
الواجب عبارة عن سؤالين :

السؤال الأول : اكتب برنامج بلغة C++ يقوم بحساب مربع العدد N بحيث يخرج ناتج البرنام على الشكل التالي : مربعه ............... العدد

السؤال الثاني : اكتب برنامج يقوم بالتحويل من الإنش إلى السنتيمتر والعكس حسب ما يطلب المستخدم ، مع العلم أن كل إنش واحد يحتوي على 2.54 سم .

السؤال التاني فيه فكرة بسيطة ، بس اللى يفكر هيجيبها بسهولة إن شاء الله ..

أترككم في أمان الله .. موعدنا في الدرس القادم بإذن الله .. الدورة تعمل على نفس القواعد اللتي ذكرناها سابقاً .. باب الأسئلة مفتوح .. الواجبات تكون في ملف مرفق txt أو cpp .. من الأمانة عدم تحميل واجب ليس واجبك .

============ نهاية الدرس الثاني ============




Avatar of mitto
الدرس الثالث


إستخدام الـ ( LOOP ) :
اللوب .. باختصار .. هو عملية التكرار .. عند الحاجة إلى تكرار سطر معين من سطور البرنامج لعمل شيء يتكرر مثل كتابة برنامج يقوم بجمع الأعداد الزوجية ، وهو يوفر الكثير من الجهد والوقت .
سندرس 3 أوامر من أوامر اللوب في لغة C++ وهي :

for … statement

while … statement

Do … while … statement


أولاً : جملة for


تكون جملة الـ for بالشكل التالي :




• الخطوة رقم 1 تنفذ في البداية فقط ، يعني تنفذ مرة واحدة فقط عندما يبدأ البرنامج بقرائة جملة for .
• يتم بعد ذلك تنفيذ الخطوة 2 ثم 3 ثم 4 على التوالي .
• الخطوة رقم 2 هي جملة الشرط .. ويتوقف البرنامج عندما يعطي الشرط 2 نتيجة خاطئة False .


ثانياً : استخدام while



وهذا مثال مبسط عن كيفية استخدام جملة while


كود:
i = 100 ;
while ( i <= 10 )
  { cout << i ;
     i ++ ;
}


ثالثاً : استخدام do … while


وهذا مثال مبسط عن كيفية استخدام جملة do … while


كود:
i = 100 ;
do
  { cout << i ;
     i ++ ;  }
whil  ( i <= 10 ) ;


لاحظ .. الفرق بين while و do while : لا يوجد ; بعد جملة الـ while بينما توجد بعد جملة do whil .
كما أنه في جملة while إذا تحقق الشرط ( ما بعد while ) يتم تنفيذ بقية الجمل ، أما في do while فإن الجمل قبل while تُنفذ قبل سؤال الشرط ، ثم بعد ذلك ينظر البرنامج في الشرط فإن تحقق أُخرجت نواتج الجمل وإلا لا .

========
الدرس لم يكتمل بعد
========
Avatar of mitto
أمثلة تطبيقية

نريد كتابة برنامج يقوم بجمع الأعداد الزوجية من 1 وحتى 20 .

كود:
# include < iostream . h >
   void main ( void )
  {
     int I , sum = 0 ;
for  ( I = 2 ; I <= 20 ; I = I + 2 )
{ sum = sum + I ;
cout << "
" << sum ; } cout << "


Summation = " << sum ; }

الشرح :
بعد الأقواس :
الجملة الأولى : قمنا بتعريف متغيرين I و sum ووضعنا في صفر في المتغير sum .
الجملة الثانية : جملة الـ for
الجزء الأول : وضعنا قيمة 2 في المتغير I ( لماذا ؟ )
لأن أول عدد زوجي سيمر علينا هو 2 .
الجزء الثاني : وضعنا الشرط .. يجب أن تكون قيمة I أصغر من أو تساوي 20 لأن المطلوب مجموع الأعداد الزوجية من صفر و حتى 20 .
الجزء الثالث : حددنا مقدار الزيادة والنقصان بزيادة 2 ، لأننا نريد أن يزيد البرنامج في كل مرة 2 ، لأننا سنجمع الأعداد الزوجية فقط .


وبذلك انتهت جزئيات جملة for .

ثم سنأتي للجملة اللتي بعد جملة for وهي ما سينفذه البرنامج في كل مرة يقرأ فيها حلقة for ما دام الشرط متحققاً . > راجع الصورة في بداية الدرس < .
كتبنا جملتين بعد حلقة for واستخدمنا الأقواس لجعلها ككتلة واحدة يتم تنفيذها إذا تحقق شرط جملة for " الجزئية الثانية " .

السطر الأخير : سيطبع عبارة " المجموع = " ثم سيطبع ناتج العمليات السابقة وهي مجموع الأعداد الزوجية من 2 وحتى 20 .
وبذلك انتهى البرنامج ..

ملاحظة / ممكن أن تضع أكثر من متغير للتكرار و أكثر من شرط و أكثر من عملية على متغيرات التكرار.. بحيث تضيف فاصلة فقط ( , ) في كل قسم لكي تضيف متحول آخر أو عملية أخرى .. بينما في القسم الثاني تضيف && أو || لكي نضيف أكثر من شرط
( لفهم هذه الملاحظة راجع قاعدة " و – أو" في الدرس الثاني )
مثال /
كود:
for(  i=1, j=5; i!=j || j >=0; i++, j-- )

استخدام أمر الإنتقال goto

أمر الإنتقال go to يسهل علينا الإنتقال بين أسطر البرنامج المختلفة أثناء تنفيذ البرنامج ، وسنوضح كيفية استخدامه في الصورة التالية :



لاحظ : المثال في الصورة .. في حالة تحقق شرط if سينتقل البرنامج عدة أسطر للأعلى وسيتكرر حتى تحدث حالة عدم تحقق شرط if ، وحينها لن يقرأ أمر الإنتقال goto وبالتالي سيكمل بقية أسطر البرنامج ، وبذلك أنشانا حلقة تكرارية مثل حلقة for .

وبذلك نصل إلى نهاية درسنا
========= نهاية الدرس الثالث ========