docs:cpp_tutorial

مدخلك إلى لغة سي++

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

ما هي لغة سي++؟

السي++ هي لغة برمجة رفيعة المستوى و كائنية التوجه و متعددة الاختصاصات, حيث انه يمكن عمل كل شيء بها اي لا توجد حدود لهذه اللغة. هي تطوير للغة السي c من طرف بيارن ستروستروب في مختبرات بيل سنة 1983, و هي من اللغات الاكثر استعمالا على انظمة GNU/Linux. المترجم الخاص بها هو ++g من حزمة التطوير GNU Compiler Collection و تتميز السي++ ب:

  1. الاصناف
  2. الوراثة
  3. تعدد الاشكال
  4. القوالب
  5. المؤشرات
  6. التحميل الزائد

اقل كود ممكن لبرنامج سي++

#include <iostream>
 
using namespace std;
 
int main()
{
    return 0;
}

السطر الاول فيه مكتبة iostream القياسية و هي تتضمن بعض الدوال الاساسية للسي++ كاادخال و الاخراج.

السطر الثاني فيه namespace سيتم شرحها في البرمجة الكائنية التوجه ان شاء الله.

السطر3 فيه تعريف للدالة الرئيسية main و كل ما يوجد داخل هذه الدالة يتم تنفيذه.

السطر الاخير في الدالة main هو return للدالة اي القيمة التي ترجعها و 0 تفيد انهاء البرنامج دون اخطاء.

بئيات التطوير المتكاملة المفتوحة المصدر للسي++

codeBlocks

اختر توزيعتك

eclipse

32bit

64bit

التنصيب سهل ان شاء الله

هناك بيئات تطوير اخرى لكن واحدة تكفي ان شاء الله :-D

اساسيات السي++

المتغيرات

المتغيرات هي اماكن في الذاكرة يتم تخزين القيم فيها حسب النوع اي ان قيمة من نوع1 تخزن في متغير من نوع1 و هذا المتغير يحجز له مكان في ذاكرة الحاسوب RAM عند تعريفه. و انواع المتغيرات الاساسية في السي++ هي :

  • int : للاعداد الصحيحة
  • double : للاعداد العشرية بعدة ارقام بعد الفاصلة
  • float : للاعداد العشرية ببعض الارقام بعد الفاصلة
  • char : للحروف

و يتم تعريف المتغيرات في السي++ بهذه الطريقة

Variable_type Variable_name;

مثال

int a;
double var1;
char chaine;

و يشترط في اسماء المتغيرات ان لا تبدا برمز كé,à,@ و لا برقم و ان لا تكون فيها فراغات و لا رموز كé,à,- يسمح باستعمال الرمز _ في البداية و الوسط و الاخر يسمح باستعمال الارقام في الوسط و في النهاية.

و يمكن ارسال قيمة للمتغير مباشرة عند تعريفه او بعد تعرفيه

int a = 100;
double var1 = 10.340;
char chaine;
chaine = 'A'

<color red>ملاحظة : السي++ حساسة للحروف اي ان الحرف الكبير ليس هو الحرف الصغير اي a ليست هي A لهذا يمكن تعريف متغير اسمه a و اخر اسمه A.</color>

الثوابث

هي مثل المتغيرات تخزن فيها القيم لكن تلك القيم لا يمكن تغيرها ابدا داخل البرنامج اي ان القيمة البدئية للثابث تظل هي نفسها في كل البرنامج.

و هذه القيمة تعطى له اثناء التصريح عنه.

لتعريف الثابت نتكتب :

const Constant_type Constant_name = value;

مثال

const int num = 100;
const char ch = 'A'

<color red> اي تغير في الثابث سيعطي رسالة خطا اثناء عمل البرنامج. </color>

التعليقات

التعليقات هي اسطر تضاف للكود سورس و لا تتم ترجمتها للغة الالة. اي لا يهتم بها المترجم اثناء ترجمة السورس كود.وجودها و عدمه لا يؤثر على البرنامج.

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

و هي تكون هكذا :

//هذا تعليق لسطر واحد
هذا تعليق */
لعدة سطور */

الادخال و الاخراج

الاخراج output هو اظهار رسالة او كتابة في شاشة الكونسول console و الادخال input هو اخذ قيمة من المستعمال و استعمالها في البرنامج.

  • الدالةالاساسية للاخراج في السي++ هي cout و هي موجودة في مكتبة iostream

و يتم استعمالها كالتالي:

cout << "Assalamo 3alaikom" << endl;

endl تفيد العودة للسطر و يمكن تعوضها بالرمز

\n

مثال

cout << "Assalamo 3alaikom\n"; 
  • الدالة الاساسية للدخال في السي++ هي cin و هي ايضا موجودة في iostream

و يتم استعمالها كالاتي :

cin >> variable;

variable هو المتغير الذي نريد ان تدخل اليه القيمة.

الشروط conditions

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

الشروط في السي++ نواعان if…else و switch…case.

الاولى تكون بهذا الشكل

if (الشرط)
{
الاوامر في حال تحقق الشرط
}
else
{
الاوامر في حال عدم تحقق الشرط
}

مثال

if (age < 10)
{
cout << "you are a kid"<<endl;
}
else
{
cout << "you are not a kid\n";
 }

و يمكن عمل عدة شروط بelse if هكذا

if(condition1)
{
inst1
}
else if (condition2)
{
inst2
}
else if (condition3)
{
inst3
}
...
else if(conditionN)
{
instN
 }
else
{
inst
}

النوع الثاني يكون هكذا

switch(variable)
{
case value1 :
instruction1
break;
case value2 :
instruction2
break;
...
case valueN:
instructionN
break;
}

مثال

#include <iostream>
 
using namespace std;
 
int main()
{
cout << "num1 = \n";
double num1,num2,result;
cin >> num1;
cout << "num2 = \n";
cin >> num2;
cout << "choise operation +or * or - or /" << endl;
char op;
cin >> op;
switch(op)
{
case '+':
result = num1 + num2;
break;
case '*':
result = num1 * num2;
break;
case '-':
result = num1 - num2;
break;
case '/':
result = num1 / num2;
break;
}
cout << "result = " << result << endl;
return 0;
}

<color red> اذا لم تكن break فان الاوامر ستتداخل مع بعضها.

</color>

عوامل المقارنة

  • a == b :تعني هل a يساوي b تعيد true اذا كان نعم و false اذا لم يكن ذلك.
  • a != b : تعني هل a لا يساوي b .
  • a < b : اصغر
  • a< = b : اصغر او يساوي
  • a > b : اكبر
  • a >= b : اكبر او يساوي

الحلقات loop

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

هناك ثلاث حلقات رئيسية في السي++ هي while و do…while و for.

الحلقة while

تكون هكذا :

while(الشرط)
}
الاوامر التي تريد تكريرها في حال تحقق الشرط
}

مثال

 int b = 129;
int a = 1;
while (a<=b)
{
if(b%a == 0)
{
cout << "a/b" << endl;
a = a + 1;
}
}

الحلقة do...While

تكون هكذا:

do
}
الاوامر التي تريد تكريرها
}
while(الشرط)

مثال:

int a = 0;
do
{
cout << a << endl;
a++;

تعني ++a زادة واحد لa و

a--;

نقاصن واحد من a .

الحلقة for

تكون هكذا:

for(الخطوة;الشرط;المتغير)
}
الاوامر التي تريد تكريرها
}

مثال :

for(int i = 0;i<=9;i++)
{
cout << i << "* 5 = " << i*5 <<"\n";//1
}

في البداية تكون قيمة i هي 0 (يمكن ان تبدا باي قيمة تريدها), ثم تنفذ العملية 1, ثم في نهاية الحلقة يضاف 1 ل i (اي i = i + 1 ) لاننا اخترنا ++i لو كتبنا –i لنقص من i واحد و يمكن ايضا كتابة i = i + n او i = i - n مع n العدد الذي تريد ان يضاف و ينقص من i في كل مرة. لكن الحلقة مقيدة بشرط فعندما تصل قيمة i في المثال السابق الى 9 لن تضاف لها 1 و ستنتهي الحلقة.

هذا مثال اخر لكن باضافة 3 و ليس واحد:

المصفوفات

المصفوفات هي مجموعة تتكون من قيم من نفس النوع يتم الوصول لكل قيمة برقم ترتيبي index. يتم تعريف مصفوفة في سي++ هكذا :

array_type array_name[array_lenght];

array_type نوع المصفوفة و هو مثل المتغيرات اما يكون int او char او double او…

array_name اسم المصفوفة و له نفس شروط اسم المتغيرات.

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

في سي++ ترتيب القيم يبدا ب0 اي ان مصفوفة حجمها 3 تبدا ب0 ثم 1 ثم 2.

مثال:

int nums[3];
nums[0] = 31;
nums[1] = 326;
nums[2] = 1;
for (int i = 0;i<3;i++)
{
cout << nums[i] << endl;
}

الدوال

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

function_type function_name(param1_type parm1,...,paramN_type paramN)
{
هنا تكتب الاوامر
return return_value;
}

function_type هو نوع الدالة و هو نوع القيمة التي سترجعها الدالة. النوع مثل المتغيرات int و double و char و… لكن يضاف نوع جديد هو void و هو يعني ان الدالة لا تعيد شيء و يجب حذف return في هذه الحالة. function_name و هو اسم الدالة التي تريد له نفس شروط المتغيرات. param_type param هي البارامترات التي سترسل للدالة و هي عبارة عن متغيرات. return_value هي القيمة التي تريد ان ترجعها الدالة طبعا الدالة التي من نوع void لا تحتاج لreturn, و القيمة يمكن ان تكون عدد او متغير او حرف حسب عمل الدالة. مثال بسيط ان شاء الله :

#inclue <iostream>
using namespace std;
 
int main()
{
cout << addition(1,2) << endl;
int num1 = 10;
int num2 = 100;
int c = addition(num1,num2);
cout << c << endl; 
return 0
}
int addition(int a,int b)
{
int c = a + b;
return c;
}

و هذا مثال لدالة من نوع void

void salam()
{
cout << "salam" << endl;
}
int main()
{
cout << salam() << endl;
return 0;
}

(لم يكتمل)

نقاش

شطناوي, 2010/02/17 11:13

اولا شكر لكم على هذا الدرس ارائع

“c++و هي من اللغات الاكثر استعمالا على انظمة GNU/Linux ”

كثير ما نسمع هذه العباره لاكن لم اجد ولا شرح واحد يشرح لنا كيف نعدل على برنامج مفتوح المصدر وليكن على سبيل المثال مصنوع بلغه c++

غسان لطفي, 2010/02/17 12:01

العفو اخي


لم افهم سؤالك جيدا اظن لتعديل برنامج مفتوح مبرمج بالسي++ يكفي وجود دراية باللغة و فهم عمل البرنامج

محمد عبدالجليل, 2010/07/10 07:09

يارت كمان دوروس عن المصفوفات كيف ترتيب الاعداد تصاعدياً

Geraldine, 2011/07/30 00:51

God help me, I put aside a whole atfreonon to figure this out.

Prottay, 2012/02/22 09:40

My problem was a wall until I read this, then I samhsed it.

سجى, 2012/04/03 07:04

اشكركم كثيراً على هذه المعلومات لاني احتاجها لامر ضروري جزيتم ير

Maranda, 2012/08/30 02:34

Felt so hopeless looking for aneswrs to my questions…until now.

Berlynn, 2012/09/04 03:30

That's a quick-wtited answer to a difficult question

znhjfcqgv, 2015/04/24 16:27

مدخلك إلى لغة سي [أعجوبة] <a href=“http://www.g986z22wj8u6ze04s2rk5q0u29mk0mg5s.org/”>aznhjfcqgv</a> [url=http://www.g986z22wj8u6ze04s2rk5q0u29mk0mg5s.org/]uznhjfcqgv[/url] znhjfcqgv http://www.g986z22wj8u6ze04s2rk5q0u29mk0mg5s.org/

محمد, 2015/11/24 08:27
السلام عليكم :

بالله أريد حل هذا السؤال:-

مصفوفة من 5 عناصر رتبها تصاعديا و تنازليا؟

بارك الله فيكم
أدخل تعليقك:
 
آخر تعديل:: 23 نيسان 2015 الساعة 00:19 (تحرير خارجي)