تعلم سي بلس بلس

 

 

الدرس الاول

 

 

 اساسيات سي بلس بلس

 

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

1-  اذا لم تكن قد قرأت مقالي على هذه الصفحة عن كيف تتعلم لغة برمجة جديدة للمبتدئين فمن فضلك أقرأه الآن

2-  ارجو ان تغفر لي اي اخطاء املائيه فأنا اكتب بسرعة

3-  ارجو ألا تعتبر كتابتي لمصطلحات انجليزية بحروف عربية جهل او غباء مني ولكن فقط لاسباب خاصة بتحرير الصفحة فالسهل عندي كتابة كل شئ باللغة الانجليزيه ولكن لن تكون هذه الدروس مفيد – ألست معي في ذلك – ارجو ذلك

 

متطلبات العمل

1-  كومبايلر للغة ودعني اقول لك ماهو الكومبايلر حتى وان كنت تعرفه انه البرنامج الذي يحول البرنامج الذي تكتبه الى برنامج تنفيذي قابل للتشغيل والتوزيع والبيع الى آخر ذلك وهناك انواع كثيرة مثل

 

Borland C++

Microsoft Visual C++

Watcom C/386

DJGPP.

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

استعد انت الآن لبداية التعلم اما انا من ناحيتي فسوف اطفئ سيجارتي (ادعو لي بالاقلاع عن التدخين) لكي نبدء فورا

عن تعلم لغة كومبيوتر جديده اصبحت عادة ان تقوم بطبع رسالة هالو ورلد

Hello World

بالطبع هم يخاطبون العالم ولهم الحق في ذلك ولكن انا سوف اطبع رسالة هالو آراب

Hello Arab

مع عدم وجود اي عنصرية مني فأنا لست كذلك ولن أكون ولكن اسمحو لي بتحية من اكتب لهم لا تنزعج معي دائما قد اكون رغاي بعض الوقت ولكن ليس كل الوقت

 

 

// This is the 1st lesson

#include <iostream.h>

 

int main()

{

  cout<<"HEY, Hello ِArabs";

  return 0;   

}

 

دعونا نشرح ما كتبنا لقد بدأت بالعبارة الآتية

 

// This is the 1st lesson

عند كتابة // معناها انني اكتب ملاحظات وبالتالي كل ما يليها لايهم الكومبايلر عند الترجمة وفائدة الملاحظات عظيمة فكلما كتبت جزء من البرنامج وضحت هاتين العلامتين وبعدها ماتريد ان تقوله لنفسك او لمن يراجعون بعدك ماذا تفعل فاءذا عدت لتعديل البرنامج بعد فترة من الزمن سيكون ذلك رائع ان تتذكر افكارك في البرنامج موضع التعديل والآن الى التعليمة التالية لقد كتبنا

#include <iostream.h>

 

العلامة # يليها امر include هي من تعليمات المعالج المبدئي

 

Preprocessor directive

لاحظ ان اوامر اللغة تكتب بالحروف الانجليزية الصغيرة

 

يلي ذلك مابين القوسين <> اسم ملف ينتهي بالامتداد h

هذا النوع من الملفات يسمى header files

وهي ملفات تأتي مع كومبايلر اللغة وان كنت ستتعلم في مرحلة متقدمة من هذه الدروس عملية انشاء ملفاتك الخاصة وهي عبارة عن ملفات يوجد بها تعريف لاوامر اللغة المستخدمة داخل برنامجك وبالتالي لكل مجموعة اوامر ملفاتها الخاصة لا تقلق سوف تعرف كل ذلك قريبا

اذا الاوامر المستخدمة في مثالنا السابق يحتاج الملف iostream.h

وهذا الملف هام جدا ورئيسي دائما ضم هذا الملف باستخدام الامر

#include <iostream.h>

 

ملخص

#include

من اوامر لغة سي ++ (المعالج المبدئي)

iostream.h

ملف او هدير فايل لتعريف الاوامر المستخدمة

<>

اقواس لوضع الملف المطلوب ضمه او تحميله بينهما

ببساطة شديدة الامر cout  الذي سيلي شرحة يحتاج الملف

iostream.h

 

ننتقل الآن لشرح التعليمة التالية

 

int main()

ومعناها الاعلان عن الدالة او جسم البرنامج الرئيسي الذي من خلاله نستدعي كل شئ ونعمل كل شئ وسوف نضع بداخله الاوامر كلها

ولكن ما هو الامر int

انه من اوامر الاعلان عن نوع المتغيرات ودعني اوضح ذلك

 

امر اللغة الذي يعلن عن المتغير

نوع المتغير

int

الاعلان عن اعداد صحيحة

float

الاعلان عن اعداد عشرية

char

الاعلان عن حروف

void

لاشئ

 

وسوف نتعرض للانواع الاخرى فيما بعد وكمثال

 

 int  x = 5;

 int y = 65;

 float z = 4.677777;

 float q = 77.5443;

 char *b = “Mohamad Hasan”;

 char *c = "My Home Page”;

لقد اعلنا ان الدالة الرئيسية للبرنامج نوعها او ستعيد في نهاية عملياتها عدد صحيح فقد تحتاج مثلا لعمل دالة لضرب عددين في بعضهما والنتيجة تعيدها الدالة حسب نوع الاعلان

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

فمثلا لو انشأنا دالة لاعادة اعداد عشرية يجب ان تعيد في نهايتها اعداد عشرية مثلا

 

 float  NewFunc ()

{

float x , y , z;

x = 10.5;

y = 11.67887;

z = x * y;

return z;

}

لقد اعادت الدالة حاصل ضرب 10.5 * 11.67887 وحاصل الضرب هو عدد عشري لان نوع الدالة اعداد عشرية وهكذا دعنا نعود لبرنامجنا الاصلي

 

int

نوع الدالة تعيد اعداد صحيحة

main

اسم الدالة الرئيسية اساسي وهام

()

قوسين مغلقين لايوجد داخلهم شئ في هذه المرحلة

 

الى التعليمة التالية القوس  {

يجب ان يفتح به الدالة وتنتهي به ايضا لاحظ الاتجاه الى اليسار في بداية الدالة والى اليمين في نهايتها لتحديد بلوك الاوامر

والآن الى التعليمة التالية

 

 

  cout<<"HEY, Hello ِArabs";

 

الامر cout  يليه القوسين <<  مفتوحين الى اليمين معناها اخراج ما بين علامتي الاقتباس

 

Cout <<

امر طباعة على الشاشة

"   "

علامات اقتباس لطبع الرسالة التي بينهما كما هي

 

الى الامر الاخير

 

 

  return 0;   

 

وقد شرحناه اثناء تناولنا لموضوع انواع البيانات اخيرا ينتهي البلوك الرئيسي للبرنامج باعادة قيمة صفر وهو العدد الصحيح حسب الاعلان مع الدالة الرئيسيه بالامر int

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

 

والى الامر الاخير  }

انه قوس نهاية البلوك ولاحظ انه الى اليسار ليغلق البلوك الذي فتح بمثله ولكن الى اتجاه اليمين والآن انتهى برنامجنا الافتتاحي والى ملاحظاتنا

 

تذكر أن

 

1-  اوامر اللغة تكتب بحروف صغيرة small letters

2-  البرنامج يبدء بأوامر المعالج المبدئي لضم الملفات # include

3-  الدالة الرئيسية main  يجب ان تكون موجودة

4-  يفتتح البرنامج بالقوس}  ويغلق بالقوس{

5-  الملف الذي انشأته سيقوم برنامج التحرير بحفظه باسم ينتهي بالامتداد cpp

6-  جميع سطور البرنامج وبعد نهاية الاوامر والاعلانات نضع الفاصلة المنقوطة ;

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

ماذا لو اعلنا عن نوع الدالة الرئيسية بالامر void  ومعناه غير مطلوب منها اعادة شئ سيكون الامر return  بدون قيم بالطبع او كما يلي

 

// This a modification no. 1

#include <iostream.h>

 

void main()

{

  cout<<"HEY, Hello ِArabs";

  return ;   

}

لاحظ الامر return  لم يوضع بعده قيم

 

وتذكر ان مايلي // هي عبارة عن ملاحظات لسطر واحد فقط وكلما وضعت سطر ملاحظات ضع هاتين العلامتين في بداية السطر

// This is a remark no. 1

// And this is the remark no. 2

// It is no. 3

 

وهناك اسلوب اخر لكتابة الملاحظات في عدة سطور بأن تبدء بالعلامة /*

ثم تكتب ما شئت من ملاحظات في اي عدد من السطور ثم تنهيها بالعلامة */

مع ملاحظة الاتجاهات وتكون الملاحظات السابقة بالاسلوب الذي شرحناه كما يلي

 

/*

 This is a remark no. 1

 And this is the remark no. 2

 It is no. 3

*/

لاحظ الفرق لكي يتضح لك الشرح استخدم ايهما او ما تراه اسهل لك منهم اقصد من الاسلوبين السابقين

تعلم سي بلس بلس

الدرس الثاني

 

أوامر الاشتراطات

 

مساء الخير

من انتقلوا معنا الى الدرس الثاني يبدو انهم سوف يكملون المسيرة الى اخرها واتمنى انا ان اكملها معهم .

كما تحدثنا عن اللغات بصفة عامة وقلنا ان الاشتراطات من الامور الهامة في اي لغة والآن لانريد ان نعيد ما قلناه سابقا لندخل مباشرة في موضوع اليوم

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

انك ترى الشروط دائما وربما بدون ان تدري فأول شئ فعلته اليوم عند اتصالك بالانترنت هو ادخال كلمة السر – أليس كذلك – نعم هو كذلك ولا شئ غيره – ان برنامج الاتصال قد وضع شرط صحة كلمة السر لكي يمكنك من الدخول وربما اشياء اخرى مثل عدم انتهاء مدة الاشتراك وصحة اسم المستخدم وهكذا كلها شروط انها ايضا موضوعنا هذا اليوم ومعظم الشروط المستخدمه لقيمتين هي هل هما متساويتان ام احدهما اكبر او اصغر بالاضافة الى المعاملات البولينية Boolean operators

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

AND , OR , NOT

كمثال من الحياة اليومية

Ask  Mohamad AND Ali

يجب ان تسأل محمد وعلى وليس واحد منهم فقط بل يجب ان يكون السؤال للاثنين

Ask Mohamad OR ALI

اي يجب ان تسأل محمد او على يكفي فقط واحد منهم

Ask Mohamad NOT Ali

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

 

الجدول التالي يعبر عن طريقة صياغة المعاملات البولينية في لغة سي++

 

التعبير أو الصيغة

التفسير

||

OR

&&

AND

 

 

والجدول التالي يعبر عن العلاقات الشرطية وكيف تصاغ في لغة سي++

 

التعبير أو الصيغة

التفسير

>

اكبر من فتحة القوس في اتجاه الاكبر

<

اصغر من

==

يساوي (تذكر انهم علامتين متجاورتين

>=

اكبر من او يساوي

<=

اصغر من او يساوي

!=

لا يساوي

 

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

 

A=5;

B=A;

C=18;

اما في صياغة شرط فاءنك لابد ان تضع علامتين اذا اشترطت التساوي مثل

if (A==B)

if (A==18)

ارجو ان تنتبه لذلك

 

ولنأخذ مثال اليوم فقد تأخرنا كثيرا

 

// This is a remark do you remember ?

// It has no effection , just for you , is it?

 

 

#include <iostream.h>            

 

int main()                  

{

  int Num;                  

  cout<<"Please input a Number : ";  

 

  cin>>Num;                 

  if(Num < 50)              

  {

     cout<<"The Number is less than 50";    

  }

 

if(Num == 50)     

  {

     cout<<"The Number is equal to 50";        

  }

 

if(Num > 50)

  {

    cout<<"The Number is bigger than 50"; 

  }

  return 0;

}

 

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

 

لقد بدأت السطور الحمراء بالامر

cin<<Num;

 

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

وألآن الى الاوامر التالية موضع شرحنا اليوم

 

  if(Num < 50)              

  {

     cout<<"The Number is less than 50";     

  }

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

 

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

 

cout<<"The Number is less than 50";    

 

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

 

if(Num == 50)     

  {

     cout<<"The Number is equal to 50";        

  }

بنفس الاسلوب السابق يختبر الامر if  ماذا كان الرقم الذي ادخله المستخدم يساوي 50 فاذا كان ذلك صحيحا فسوف يقوم بتنفيذ الامر او الاوامر التي بداخل بلوك الشروط وهي

 

     cout<<"The Number is equal to 50";        

 

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

 

if(Num > 50)

  {

    cout<<"The Number is bigger than 50"; 

  }

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

 

    cout<<"The Number is bigger than 50"; 

 

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

 return 0;

}

حيث ينتهي البرنامج ويخرج وتذكر قوس اغلاق البلوك وهو البلوك الرئيسي للدالة main

 

 

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

 

·        الرقم اصغر من 50

·        الرقم يساوي 50

·        الرقم اكبر من 50

بالطبع سوف تحصل على اجابة واحدة من الثلاثه حسب المدخلات

 

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

 

if (A == 5 && B == 7)

{

نفذ هذه الاوامر عند تحقق الشرط

}

الشرط هو ان تكون قيمة المتغير A  تساوي خمسة وقيمة المتغير B  تساوي 7 لتنفيذ ما بداخل بلوك الشروط فاءذا كانت مدخلاتك كما يلي

 

A

B

مدى تحقق الشرط

3

2

لايتحقق الشرط

5

3

لايتحقق الشرط

3

7

لايتحقق الشرط

5

7

يتحقق الشرط

7

5

لايتحقق الشرط

1

2

لايتحقق الشرط

 

ولمثال آخر بلوك الشروط التالية

 

if (A > 5 || B <= 7)

{

نفذ هذه الاوامر عند تحقق الشرط

}

وقد كان الشرط السابق ان تكون قيمة A  اكبر من 5 أو قيمة B  اصغر من او تساوي

7 فلو كانت ادخالاتك كمايلي

 

A

B

مدى تحقق الشرط

3

2

لايتحقق الشرط

5

3

لايتحقق الشرط

3

7

لايتحقق الشرط

7

2

يتحقق الشرط

10

8

لايتحقق الشرط

10

7

يتحقق الشرط

 

دائما يكون امامك حالة من اثنين مهما كانت الشروط التي تضعها

·        الحالة الاولى تحقق الشرط او بمعنى آخر TRUE

·        الحالة البديلة عدم تحقق الشرط او بمعنى FALSE

 

ان مابداخل اقواس الشروط ولا اقصد بلوك الشروط هو عملية حسابية – دائما كل شئ بالنسبة للكومبيوتر هي عمليات حسابية كل شي في الدنيا يمكن ان يعبر عنه بارقام من اسمك الى صورتك مرورا بخريطة بلدك او نوع الفاكهة التي تحبها – كل شئ نعم كل شئ هو عمليات حسابية – ربما نتطرق الى ذلك لااحقا – لاادري قد يجبرنا احد الامثلة على شرح ذلك – وناتج العملية الشرطية بالنسبة للكومبيوتر هو اما TRUE  لينفذ مابداخل بلوك الشروط او FALSE  لينفذ شروط اخرى داخل بلوك else اذا كان موجودا او يستكمل باقي سطور البرنامج كما حدث مع المثال السابق هذا يقودنا الى امر آخر من اوامر الشروط وهو في لغة c++  ودائما يكون تابع للامر if  وهو الامر

 

else

 

انت لاتحتاج الآن لان اقول لك ان اوامر لغة سي في مجملها تكتب بحروف صغيرة ودعني اكمل شرح الامر السابق انه امر غير مستقل انه تابع بالطبع انت توافقني على ذلك انك لايمكن ان تسمع شخص يقول والا – الا اذا كان قد ذكر اشياء قبلها اذا هذا الامر تابع فاذا كنت تكره الاشخاص التابعين من ذوي الشخصيات الضعيفة فارجو الا يمتد بغضك هذا الى الامر else  لانه امر هام ويسهل خطوات كثيرة وان كان يسهل الاستغناء عنه ودعنا نعبر عن ذلك بعدة سطور

 

if(GiveMe >= 50)                 

  {

     cout<<"Thank you – I like to take more than or equal 50 Rayals";    

  }

else

{

   cout<<"I am very angry – I don’t like to take less than 50 Rayals";    

}

 

جزء البرنامج السابق يعبر عن رد فعل احد الشحاذين فاذا اعطيته مبلغ اكبر من او يساوي 50 ريالا سوف يتحقق الشرط والنتيجة تكون TRUE  لينفذ مابداخل بلوك الشروط لينفذ الامر الخاص بطبع رسالة شكر ليخبرك بأنه (الشحاذ ولست انا بالطبع) يقول لك شكرا انا دائما احب ان تعطيني مبلغ خمسون ريالا او اكثر واذا لم يتحقق الشرط اي ان نتيجة العملية الحسابية FALSE  كأن تكون قد اعطيته اقل من 50 ريالا فسوف ينتقل التنفيذ مباشرا الى البلوك التابع else  لينفذ مابداخل بلوكه وهي هنا رسالة ضيق وتبرم بأنه لايحب ان يأخذ اقل من خمسون ريالا حتى لوكانت المبلغ يقل بهللة واحدة فقط عن الخمسون ريالا انها عمليات حسابية ياصديقي العزيز وانا انصح من يمتهنون هذه المهنه ببرمجة روبوت بجزء البرنامج السابق مع مزيد من الشكر والادعية في حالة تحقق الشرط وتبرم وضيق ولامانع من سيل من الشتائم في حالة عدم تحقق الشرط . ياله من روبوت رائع وسوف يختزن بداخله مبالغ مالية كثيرة سواء لخفة دمه في حالة تحقق الشرط او لقلة ادبه في حالة عدم تحقق الشرط.

سوف نتختتم هذا الدرس بهذا الملخص الذي قد يقود الى قاعدة هامة

 

if(FALSE)

 

{

 

  Not executed if its false

 

}

 

else

 

{

 

  do all of this

 

}

FOLLOW US

 

Hosted by www.Geocities.ws

1