دورة c++ المستوى الأول 1 للمبتدئين

دورة c++ المستوى الأول هي شرح يتضمن كافة أمثلة المستوى الأول من لغة سي بلس بلس للمبتدئين.

حيث يتمكن المطور في هذه الدورة من تعلّم وإتقان أساسيّات البرمجة وآلية عملها في أجهزة الحاسوب.

وتوفر دورة c++ المستوى الأول القدرة على تطوير مهارات التّحليل في قراءة الشّيفرات البرمجيّة.

كل ذلك يأتي وفقاً لكافة البرامج التي يمكن العمل عليها فيما بعد.

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

معلومات عن لغة سي

لا شك بأن لغة سي تعتبر واحدة من أهمّ و أقدم اللّغات متعدّدة الأغراض والاستخدامات.

وخاصة في ظل دعمها المباشر لعمليات البرمجة الكائنيّة و الاستدعاء الذاتي للمتغيرات.

قام ببناء اللغة كلاً من Ken Thompson و Brian Kernighan و Dennis Ritchie.

وقد كان تمت طريقة بنائها تزامنًا مع تطوير نواة نظام التشغيل Linux.

تتضمّن سي استخداماً واسعاً في ظل إنتاج البرمجيّات المعاصرة.

والتي من شأنها تصدير البرمجيات لأشهر المنصّات الرقميّة.

بالإضافة إلى أنها لا تزال واحدةً من أقرب اللّغات وصولاً إلى عتاد الحاسوب.

 

متطلبات لغة c++

  • حاسوب بمعالج Intel Core 2 Duo على الأقل.
  • ذاكرة رام 4 جيجابايت.
  • 10 جيجابايت مساحة فارغة.
  • نظام ويندوز 10 (مُستحسن).
  • بيئة عمل Visual Studio.
  • ملفات اللغة (IDE).

1.جملة الطباعة في لغة سي

يمكن استخدام جمل الطباعة في لغة سي لـ طباعة سلسلة ما بواسطة printf أو scanf.

تقوم scanf في قراءة المدخلات وعرض السلسلة على التوالي.

بينما يكثر استخدام cout في لغة سي بلس بلس على الرغم من التشابه الكبير فيما بينهما.

توفر مكتبة C القياسية العديد من المزايا وأهمّها تفاعل المستخدم مع وحدات الإدخال والإخراج (IO) في أنظمة التشغيل.

أدوات C ++ القياسية تساعد في تكوين جملة الطباعة واستخراج المتغيرات لتظهر على شاشة المخرجات.

أنواع جملة الطّباعة

  • جملة توجيه الاستخدام.
  • الدالة cout.
  • دالة Printf.
  • الدوال الخاصة بالنظام.
  • دالة Endl للنزول إلى سطر جديد.
  • وظائف دالة setW.

كما هو الحال بالنّسبة لأي عنصر أو صف أو مصفوفة فإن جملة الطباعة في لغة سي ++ تمكّن من طباعة أي عنصر وإظهار نتائجه على الشاشة.

#include<iostream>
using namespace std; 
int main() 
{ 
  char z = \'h\'; std::cout << \"This is char z : \" << z << endl;
  return 0;
}

2.معادلات باقي القسمة modulus

يمثل عامل التشغيل modulo الرمز %  في كل من لغة سي و سي بلس بلس.

وبالتالي ما هو إلا عملية حسابية أساسية تقوم بعرض ناتج باقي القسمة بين رقمين.

تستخدم لغة C ++ معادلات باقي القسمة على نطاقٍ واسع ، وخاصةً في خوارزميّات الرياضيّات البسيطة منها والمعقدة.

ولا يتم الاستغناء نتائج باقي القسمة وخاصة أثناء معالجة الرسومات.

تعتمد النّسبة الباقية أساسًا على التحقّق من قبول قسمة رقم على آخر ، وما هو الفائض أو الباقي من القسمة بين الرقمين.

توفر دورة c ++ العديد من الأمثلة والشّروحات حول طريقة التّعامل مع هذا النوع من الوظائف.

حيث تشتمل على استخراج باقي القسمة من متغيرين.

 

استخدام باقي القسمة

عند قسمة عددين صحيحين ، على سبيل المثال: 4 مقسومة على 2 ، فإن فإن الناتج هو 2.

لكن باقي القسمة في هذه الحالة يساوي صفرًا. لأن الرقم 4 هو مضاعف 2 ولا يوجد باقٍ تنطبق عليه القسمة .

بينما في حال تم عكس العمليّة بحيث قمنا بقسمة 2 على 4 ، ولأن الرقم 2 غير قابل للقسمة على 4 في الأعداد الصحيحة.

فإن باقي القسمة يكون 2 وإن صح التعبير فإن باقي القسمة في الاعداد الصّحيحة على أعداد أصغر منها هو أمر غير ممكن.

يتم الإشارة إلى الباقي في لغة C بالرمز ٪  وهو علامة تدل على النّسبة المئوية في لغة C .

الآن يتم إعداد متغيّرين من النّوع الصّحيح مع وضع قيمة الباقي داخل متغير آخر من نفس النوع.

في المثال التالي تحديد لمتغيرين مع وضع قيمة في كل متغير.

#include<iostream> 
using namespace std;
 int main()
{ 
      int a = 5; int b = 13;
      return 0; 
 }

المثال التالي يقود إلى إضافة متغير آخر لحفظ باقي القسمة بعد تنفيذ البرنامج.

#include<iostream> 
using namespace std;
int main()
{ 
    int a = 5;
    int b = 13;
    int mod = a % b;
    return 0;
}

سوف يتم الآن عرض قيمة الباقي بعد وضعه في متغير mod على النحو التالي: 

#include<iostream> 
using namespace std; 
int main()
 { 
    int a = 5;
    int b = 13;
    int mod = a % b;
    std::cout << \"a modulus b = \" << mod << endl;
    return 0; 
}

بعد تنفيذ الكود السابق ، يكون باقي القسمة يساوي 5.

#include<iostream> using namespace std;
int main() 
{ 
    int a = 5;
    int b = 13;
    int mod = a % b;
    std::cout << \"value of a = \" << a << endl;
    std::cout << \"value of b = \" << b << endl;
    std::cout << \"a modulus b = \" << mod << endl;
    return 0;
}

3.التعليقات

يمكن وصف التعليق بأنه نص يتم تجاهله من قبل المترجم لكنه يفيد المبرمجين في تحليل الكود.

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

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

وبالتالي فإن التعليقات لها دور كبير في منح المطورين تعليمات وإرشادات حول مبدأ عمل الشيفرة.

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

أنواع التعليقات في لغة سي

  • علامتي / * تعليق * /: في C ++ ، تعد من أكثر علامات التعليق استخدامًا.
  • علامة واحدة بجانب التّعليق // : يجب تضمينها كلما استدعى وجود أكثر من سطر للتعليق.
#include<iostream> using namespace std;
/* welcome to c++ language */ // welcome to c++ language int main() { std::cout <<\"Hello World\"<< endl; return 0; }

4.استخدام Postfix و Prefix

تتمثّل باستخدام معاملات الزّيادة والنّقصان (++، -) في c ++. ما يعني إمّا قبل المتغيّر أو بعده.

عند استخدام المعاملات ، لا بد من استخدام المتغيرات الرقمية من النوع int أو float أو double.

وعادة ما تسمّى عملية وضع المعامل قبل المتغير بطريقة Prefix.

وأمّا معاملات ما بعد المتغير بطريقة postfix.

هناك العديد من عمليات postfix والبادئة في C ++.

 

أسلوب Prefix
تعتمد هذه الميزة على الأداء الحسابي والمنطق قبل ظهور النتائج على شاشة (الكونسول).

وذلك وفقًا  لــ عرض القيمة الظاهرة جراء تنفيذ العملية ، حيث يقوم المترجم بإحداث التغيير قبل ظهور المتغير على الشّاشة.

#include<iostream> using namespace std;
int main() 
{ int a = 5; 
    --a; 
    cout << a << endl;
    return 0;
}

طريقة Postfix

تعتمد هذه الميزة على أداء العمليّة الحسابيّة بعد إغلاق شاشة الكونسول.

سواء كانت تتصف بالزّيادة  أو النّقصان. وفي غالب الأمر لا يمكن رؤية النتيجة بعد عمليّة الإغلاق.

#include<iostream> using namespace std;
int main()
{ 
    int a = 5;
    a--;
    cout << a << endl;
    return 0;
}

دواعي استخدامات Prefix و Postfix

لا شك بأن أغراض استخدام إحدى الطريقتين متعدّدة.

ومع ذلك ، فإن العمل مع Prefix قد يأتي بنتائج جيّدة وخاصة في ظل برمجة الرسومات.

على سبيل المثال معاينة عمليّات الاستدعاء وإجراء مُعادلات باقي القسمة عليها.

#include<iostream> using namespace std;
int main()
{ 
    int a = 5;
    --a;
    cout <<\"This method is prefix : \"<< a << endl;
    a--;
    cout << \"This method is postfix : \" << a << endl;
    int a = 5;
    ++a;
    cout << \"This method is prefix : \" << a << endl;
    a++;
    cout << \"This method is postfix : \" << a << endl;
    return 0;
}

5.الدّوال في لغة سي

يتم الإشارة إلى الدالة على أنها كتلة من التعليمات البرمجية تؤدي بعض العمليات.

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

تترك الدالة أمر اختياري شائع في شأن إرجاع قيمة ما أو تنفيذ الكتلة دون إرجاعها حيث تعبر عنها على أنها مخرجات.

وبالتالي لا تزال فكرةُ استخدام الدّوال قائمة فهي تعمل على تجريد وفصل المتغيّرات المتكرّرة.

وغالباً ما يصحبُها خياراتٍ واسعة في تسمية المتغيرات ما يقود إلى استخدام نفس الأسماء في كل دالة مختلفة.

لا شك بأن الدالة تحتوي على خصائص تُظهر وظيفتها بوضوح وقد تستند إلى:

  • الإعلان عنها : هي طريقة تحديد عنوان الدالة وخصائصها مثل التحميل overloading وطبيعتها.
  • وغالبًا ما يتم الإعلان عن الوظيفة في الجزء العلوي من Main بهذه الطريقة.
#include<iostream> 
using namespace std;
void test();
int main()
{ 
    return 0;
}

  • التعريف : هو الجسم الداخلي للوظيفة ، المكون من كتلة الكود بداخله.
  • يحتوي التعريف على أشهر عمليّات اللغة الّتي يتم طلبها عند الحاجة.
#include<iostream> using namespace std;
void test();
int main()
{ 
    return 0;
} 
void test()
{
    std::cout << \"I am a function !\";
}

  • عمليّة الاتصال : تختلف طرق تعريف الدّوال حيث أن البعض من المبرمجين يبدأ بتعريف الدالة أولاً ثمّ تنفيذها رأساً.
  • أمّا البعض الآخر يقوم بالإعلان عنها ومعالجتها في أماكن أخرى وكلا الطريقتين تفِي بالغرض.
#include<iostream> using namespace std;
void test();
int main()
{ 
    test();
    return 0;
} 
void test()
{ 
    std::cout << \"I am a function !\";
}

6. دالة Main

يمكن أن نعتبرها الدّالة الرّئيسية لكلّ لغة كونها تعد عصب عملية التنفيذ.

أو بمعنى آخر هي المكان المخصص في استدعاء كلّ ما تمّ إنشاؤه في المشروع ( البرنامج ).

وفي الواقع يصعب العثور على دالّة main في المشاريع الكبيرة.

لكن عند البحث عن مصادر الشيفرة جيدًا يُمكن العثور عليها وتمييزها عن بقيّة الدّوال الأخرى.

استخدامات الدالة Main

في الواقع ، تشير دّالة Main بأنها ملتقىً تنفيذ البرنامج.

حيث لا يمكن تشغيل الشّيفرة دون أن يتخطى المترجم وجودها.

لا يمكن تكرار دالة main والقيام بتعريفها أكثر من مرة في البرنامج.

عوضًا عن ذلك يتمّ وضعها لمرة واحدة فقط داخل المشروع.

حينئذٍ يُدرك المترجم وجودها تلقائيًا ويتم تنفيذ الكود.

#include<iostream> 
using namespace std;
int main() 
{ 
    std::cout << \"This is returned function main\";
    return 0;
}

7.المتغيرات الثابتة

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

وعادةً ما يتم الإشارة إليه بكلمة static.

على سبيل المثال ، نقوم بإنشاء متغير من النوع static int val = 0.

وغالبا ما تشير هذه العلامة إلى أنّ المتغير محجوز في ذاكرةٍ مخصصة للمتغيرات الثابتة.

الاتصال بالمتغيرات الثابتة

قد تختلف لغات البرمجة في طرق الوصول إلى المتغيرات الثابتة من داخل الكائن.

وعادة ما يتم الوصول إلى المتغير الثابت عن طريق تضمين اسم الكائن (الفئة) ووضع علامتي :: النقاط الرأسية.

حينئذٍ يمكن أن يتم الاتصال به تلقائيًا.

يكثر استخدام المتغيرات الثابتة في القيم الرياضية أو حتى في وحدات الإدخال المتعلقة ببرامج الألعاب.

#include<iostream> 
using namespace std;
 class mut 
 { 
 private: static int count; int k;
 public: mut() { count++; k = count; } 
         int getcount() { return k; } 
 }; int mut::count = 0;
 int main()
 { 
     mut s1, s2, s3; cout << \"Count is : \" << s1.getcount() << endl; cout << \"Count Is : \" << s2.getcount() << endl; cout << \"Count is : \" << s3.getcount() << endl;
     return 0;
 }

8.أنواع المتغيرات

  • الأعداد الصحيحة int: الأعداد الصحيحة بدون كسور عشرية بقيمة 4 بايت في الذاكرة.
  • مزدوج Double: أعدادًا كبيرة تحتوي على كسور عشرية. مع حجز قيمة في الذاكرة تصل حتى 8 بايت.
  • الأحرف char: أحرفًا منفردة وحجمها في الذاكرة 1 بايت لكلّ حرف.
  • النصوص String: النص بداخله وحجمه في الذاكرة 1 بايت / حرف.
  • منطقي/ بوليان Boolean: يحتوي على قيمة. فهي إمّا صحيحة أو خاطئة وحجمها في الذاكرة 1 بايت.

 

int main()
{ 
    int a = 0;
    char b = \'h\';
    bool c = false;
    double d = 1.4;
    float e = 1.5555;
    std::cout << \"This is int : \" << a << endl;
    std::cout << \"This is char : \" << b << endl;
    std::cout << \"This is bool : \" << c << endl;
    std::cout << \"This is double : \" << d << endl;
    std::cout << \"This is float : \" << e << endl;
    return 0; 
}

9.الدالة void

هي دالة لا تمكنها خصائصها من إرجاع قيمة ما ولا يتم إسنادها لمتغيرات.

كما أنها تقوم بمعالجة القيم بداخلها دون إرجاع قيم ومن أشهر تسمياتها الدّالة الباطلة أو void.

لها أوجه استخدام عدّة في اللّغة حيث أنها تؤثر على القيم المحدّدة في الشيفرة.

كما تعمل على إدارة الذاكرة على نحو أفضل في حال عدم الحاجة لجلبِ القيم.

وبالتالي عند تعريف متغير من النوع int وإدراجه في دوال من نوع void.

فإنه يخضع لتأثيرها في قيمته وتنتهي من المعالجة دون إرجاع أي عنصر للمترجم.

 

/* static variable with Class */
#include<iostream>
using namespace std;
int val = 5;
void var() 
{ 
    val = 10;
}
int main()
{ 
    var();
    std::cout << \"Your Value is : \" << val << endl;
    return 0;
}

10.الدالة recursion

يصحّ تسميتها أيضا بدوال Retro وهي تشير إلى أغراض استخدام بالغة الأهمّية في لغة C.

حيث تمكن الدالة العودية من إرجاع قيمة ما تمّت معالجتها داخل الدّالة ومن ثمّ تمريرها إلى متغيّر آخر.

لا تختلف كثيرًا عن شاكلة الدّوال من نوع void ، إلاّ أن أهمّ الفروقات الناجمة عنها هي بذاتها إحدى خصائصها.

وغالبا ما تكون القيمة المرجعة من نوعها.

ولا شك بأن نجاح استخدام الدالة العودية يعتمد على مدى استخدام الحلقات التكرارية Loops.

  • int. إرجاع قيمة من نوع integer.
int var() { int var = 5; return var; }

  • Float. إرجاع قيمة من نوع  Float.
float var() { float var = 5; return var; }

  • Stringإرجاع قيمة من نوع string.
string var() { string var = \"test\"; return var; }

أنواع دوال الإرجاع حسب متغيرات C القياسية:

  • int.
  • Float.
  • String.
  • دالة من نفس نوع التعريف.

#include<iostream>
using namespace std;
int var() 
{
    int var = 10;
    return var;
} 
int main()
{
    int receive= var();
    std::cout<< \"Your Value is : \" << receive<< endl;
    return 0;
}

المراجع

  1. ^ Hardware Requirements.
  2. ^ How to Print String in C.
  3. ^ Types of Output: Ways To Print a String.
  4. ^ What does Modulo Operator do in C / C++?.
  5. ^ Comments (C++).
  6. ^ Functions (C++).

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *