الدرس الثاني: مبادي البرمجة بلغة السي بلس بلس ++C


#1

بسم الله الرحمن الرحيم
الحمد لله رب العالمين والصلاة والسلام على أشرف المرسلين، بفضل الله وتوفيقه نقدم لكم

الدرس الثاني بدورة أساسيات البرمجة بلغة السي بلس بلس ++C

بعنوان

مبادي البرمجة بلغة السي بلس بلس ++C

لقد قمنا في الدرس السابق بعمل مشروع جديد بلغة السي++ وكان فيه مثال لبرنامج جهاز يقوم بطباعة عبارة !!!Hello World!!! سنتعرف الان على هذا البرنامج بالتفصيل وسنقوم بدراسة كل سطر فيه.

//============================================================================
// Name        : Hellow_World.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
	return 0;
}

السطور الاتية

//============================================================================
// Name        : Hellow_World.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

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

مثال

/* 
	This multiple lines comment 
	Always add comments at the beginning of each file 
	and for every line of code, explain what you are doing
*/

يمكن ايضا اضافة التعليقات في اكلبس عن طريق تظليل النص أولا ومن ثم الذهاب الي قائمة Source واختار Toggle comment للتبديل بين النص العادي او النص الذى تم تحويله لتعليق يمكن ايضا استخدام Add comment block أو Remove comment block .

السطر التالي هو

#include <iostream>

وهذا الامر يسمي preprocessor directive وهو أحد العمليات التي تتم قبل بناء البرنامج وأي سطر يبدأ بالرمز # هو preprocessor ويعتبر أمر موجه للمعالج المبدئي يتم تنفيذه قبل عملية بناء البرنامج.

والامر #include يستعمل لارفاق ملفات خارجية الي البرنامج ففي برنامجنا نقوم بارفاق الملف iostream وهو المسئول عن عمليات الادخال والاخراج فمثلا اذا اردنا اظهار نصوص على شاشة الكمبيوتر او الحصول على نصوص من لوحة المفاتيح فيجب علينا ارفاق iostream

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

والسطر الاتي

using namespace std;

للدلالة على اننا سوف اسماء معينة تنتمي الي مجموعة الاسماء std ومن هذه الاسماء cout. وإذا لم نقوم بالتعريف اننا سنتخدم اسماء من هذه المجموعة فلابد من اضافة اسم المجموعة قبل كل استخدام فمثلا عندما نستخدم الامر cout سيكون بالشكل الاتي

std::cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!!

والان ننتقل الي السطر التالي وهو

int main() {

الدالة main لابد أي تكون موجودة في أي برنامج بلغة السي++ لأنها التي تبدأ منها تشغيل البرنامج، ومحتوى الدالة يجب ان يوضع بين قوسين كما موضح في المثال

int main() {

} 

وكلمة int قبل اسم الدالة تعني ان هذه الدالة ترجع قيمة عددية integer والاقواس الفارغة () تعني ان هذه الدالة لن تتلقى أي مدخلات

السطر التالي

cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

هو أمر للكمبيوتر للقيام بوظيفة معينة وهنا الوظيفة هي cout أي اظهار نص على الشاشة وهو الموجود بين علامات التنصيص “!!!Hello World!!!” أما العلامة >> فهي تحدد نوع العملية المطلوبة وهذه العلامة تستخدم في عمليات الادخال والاخراج والفاصلة المنقوطة في النهاية ; فهي هامة جدا وتحدد انتهاء السطر ولابد من استخدامها مع كل سطور الاوامر في لغة السي++ ماعدا الاوامر التي تتم قبل بناء البرنامج مثل

#include <iostream>

وعند استخدام أي من العلامات الموجودة في هذه اللغة فان قيمة الجزء التي على اليمين ستنتقل الي الاسم الموجود في اليسار

في هذا المثال العبارة “!!!Hello World!!!” الموجودة على يمين العلامة >> سوف توضع في الاسم او المتغير cout الموجودة في المجموعة std

مثلا

x = y;

هنا قيمة المتغير y الموجود على يسار العلامة = سوف توضع في المتغير x الموجود على يسار العلامة.

وفى النهاية endl فهو يحدد انتهاء هذ١ السطر واذا لم نستخدمه واردنا طباعة سطر جديد فسيظهر في نهاية السطر الحالي

مثلا

std::cout<<"!!!Hello World!!!"<<std::endl;
std::cout<<"My name is Ahmed"<<std::endl;

ستكون النتيجة

اما

std::cout<<"!!!Hello World!!!";
std::cout<<"My name is Ahmed";

سيعطي النتيجة الاتية

يمكن استخدام بعض العلامات الخاصة لتنسيق النص فمثلا \n تدل على بداية سطر جديد

مثلا

std::cout<<"!!!Hello World!!! \n";
std::cout<<"This text will in a new line";

يعطي النتيجة الاتية

وهذه بعض العلامة المستخدمة بكثرة في لغة السي++

\n 

لعمل سطر جديد

\t 

لعمل مسافة tab عرضية

\r 

لوضع مؤشر الشاشة في نهاية السطر

\a 

لعمل صوت

\\ 

يستخدم لطباعة هذه العلامة \

\' 

يستخدم لطباعة هذه العلامة ’

\" 

يستخدم لطباعة هذه العلامة "

وفى النهاية الامر

return 0;

يستخدم للخروج من هذه الدالة وارجاع القيمة 0 وهذه القيمة او المتغير الذي سنقوم بإرجاعه لابد ان يكون متوافق مع تعريف الدالة في الاعلى، في حالة عدم استخدام return سيتم انهاء الدالة عند الوصول لأخر سطر بها.

سنقوم الان بعمل برنامج بسيط يعمل بعملية جمع، عند تشغيل البرنامج سيطلب من المستخدم ادخال الرقم الاول والضغط على enter ثم سيطلب منه ادخال الرقم الثاني والضغط على enter وبعدها سيظهر نتيجة الجمع.

أولا سنقوم بعمل ملف جديد في اكلبس عن طريق الدخول لقائمة file ثم New ثم source file

ثم نقوم باختيار اسم الملف ويجب ان يحتوي على الامتداد cpp ومن ثم نضغط على finish

سنستخدم في هذا البرنامج الاسم cin وهو تابع للمجموعة std مثل cout ولكن cin يستخدم لإدخال نصوص من لوحة المفاتيح الي برنامجنا، ويستخدم مع cin العلامة << وهي عكس العلامة المستخدمة مع cout وهنا الاتجاه مختلف فالقيمة ستنتقل من اليسار الي اليمين.

وسيكون البرنامج بالصورة الاتية

#include <iostream>

int main()
{
   int firstNumber;
   int secondNumber;
   int sum;

   std::cout << "Enter first number: ";
   std::cin >> firstNumber;

   std::cout << "Enter second number: ";
   std::cin >> secondNumber;

   sum = firstNumber + secondNumber;

   std::cout << "Sum is " << sum << std::endl;

   return 0;

}

وعند تنفيذه يعطي النتيجة الاتية

قبل عملية البناء يجب حذف الملف الاخر Hellow_World.cpp لأنه يحتوي على الدالة main وهذه الدالة يجب ان تكون موجودة في ملف واحد فقط.

وبديلا عن حذفه يمكننا تجاهله اثناء عملية البناء عن طريق الضغط عليه ثم كليك يمين بالماوس ومن على اليسار نختار C/C++ build ثم نضع علامة عند Exclude resource from build

ونلاحظ الان انه قد تم تظليله في متصفح المشروع

نرى في هذا المثال اننا قمنا بتعريف ٣ متغيرات

   int firstNumber;
   int secondNumber;
   int sum;

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

والمتغيرات هي عبارة عن اماكن محجوزة في الذاكرة اثناء التنفيذ ويمكن للبرنامج بالكتابة فيها والقراءة منها.

يمكن ايضا تعريف أكثر من متغير في نفس السطر

مثلا

int firstNumber, secondNumber, sum;

وللمتغيرات التي تحتوي على علامة عشرية يمكن تعريفها باستخدام double اما المتغيرات النصية فتعريفها يكون باستخدام char.

وهذه الانواع int و double و char تسمى الانواع الاساسية وهناك ايضا العديد من الانواع الاخرى كما يمكن للمستخدم تعريف الانواع الخاصة به.

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

std::cout << "Sum is " << sum << std::endl;

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

 std::cout << "Sum is " << firstNumber + secondNumber << std::endl;

وبناء على هذا يمكننا الاستغناء عن المتغير sum

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

والعمليات الحسابية المستخدمة في لغة السي++ هي كالاتي

الجمع +
الطرح -
الضرب *
القسمة /
باقي القسمة %

ونلاحظ ان عملية القسمة تعتمد على نوع المتغير فلو كان من النوع int فانه سيتم تجاهل الارقام بعد العلامة العشرية.

مثلا

   std::cout << "Integer division is " << firstNumber / secondNumber << std::endl;
   std::cout << "Integer division remainder is " << firstNumber % secondNumber << std::endl;

يعطي النتيجة الاتية

يرجى الانتباه ان العلامة % تستخدم فقط مع المتغيرات العددية من النوع int .

تمرين ١
مطلوب عمل برنامج يطلب من المستخدم ادخال خمس حروف، سيقوم المستخدم بالضغط على enter بعد كل حرف وعند الانتهاء سيقوم البرنامج بعرض الخمس حروف بدون مسافات بيهم ليكون الكلمة المطلوبة. يرجى فقط ارفاق الملف التنفيذي وطباعة اسمك وتعليمات الاستخدام عند تشغيل البرنامج.

العمليات المنطقية

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

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

x > y
x اكبر من y

x < y
x أقل من y

x >= y
x أكبر من او تساوي y

x <= y
x أقل من او تساوي y

x == y
x مساوية y

x != y
x ليست مساوية y

سنقوم الان بعمل برنامج بسيط يطلب من المستخدم ادخال رقمين ومن ثم يقوم بمقارنة الرقمين ويعرض على الشاشة نتيجة المقارنة

#include <iostream>

using namespace std;

int main()
{
   int number1;
   int number2;

   cout << "Enter two integers to compare: ";
   cin >> number1 >> number2;

   if (number1 == number2)
      cout << number1 << " == " << number2 << endl;

   if (number1 != number2)
      cout << number1 << " != " << number2 << endl;

   if (number1 < number2)
      cout << number1 << " < " << number2 << endl;

   if (number1 > number2)
      cout << number1 << " > " << number2 << endl;

   if (number1 <= number2)
      cout << number1 << " <= " << number2 << endl;

   if (number1 >= number2)
      cout << number1 << " >= " << number2 << endl;

   return 0;

}

في حالة كتابة امر الدالة if بالصورة الموضحة في المثال السابق

   if (number1 == number2)
      cout << number1 << " == " << number2 << endl;

فان السطر الذي يلي IF سيتم تنفيذه اذا كانت نتيجة المقارنة صحيحيه ولن يتم تنفيذه اذا كانت نتيجة المقارنة خطأ

واذا اردنا تنفيذ المزيد من الاوامر في حالة كانت المقارنة صحيحيه يمكننا كتابة الامر كالاتي

   if (number1 == number2)
   {
      cout << number1 << " == " << number2 << endl;
      // here we can add more statements
      // ....
   }

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

   if (number1 == number2)
   {
      cout << number1 << " == " << number2 << endl;
   }
   else
   {
      cout << number1 << " != " << number2 << endl;
   }

تمرين ٢
قم بعمل برنامج يطلب من المستخدم ادخال خمس ارقام عشوائية وبعدها يطلب من المستخدم طريقة الترتيب المطلوبة تصاعدي او تنازلي، إذا ادخل المستخدم الحرف a فتعني ان الترتيب سيكون تصاعدي و d تعني ان الترتيب سيكون تنازلي، وبعدها سيعرض البرنامج الارقام بالترتيب المطلوب على شاشة الكمبيوتر. يرجى فقط ارفاق الملف التنفيذي وطباعة اسمك وتعليمات الاستخدام عند تشغيل البرنامج.

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

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

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

وإلي اللقاء في الدرس القادم


دورة أساسيات البرمجة بلغة السي بلس بلس
اعلان عن عقد دورة أساسيات البرمجة بلغة السي بلس بلس ++C
سؤال علي التمرين 2 و 3 في دورة البرمجة بلغة السي بلس بلس
#2

تحميل الدرس فى صورة PDF
الدرس الثاني مبادي البرمجة بلغة السي بلس بلس C.pdf (1.3% u)


(Ahmed Diab) #3

السلام عليكم أخينا في الله احمد الديب
تمرين 1
تم اضافة الملف التنفيذي Hello_World ومعه ملف One_Word2.cpp

Hello_World - Ahmed Diab.zip (48.2% u)


#4

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

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


(Ahmed Diab) #5

السلام عليكم اخي احمد

بعد ما خلصت برنامج (one Word) عملت ملف جديد لبرنامج المقارنة وكنت بحضر لعمل التمرين التاني والتالت
بس ظهرتلي مشكلة في (Exclude resource from build) ومبقاش عايز يظلل برنامج one word ومشغلش برنامج مقارنة رقمين وجابلي error وعلامة حمراء علي البرنامجين
وحالياً انا مش لاقي قائمة المشاريع علي شمال الشاشة
ياريت النصيحة … وشكراً مقدماً


#6

#7

وعليكم السلام

لقد قمت بدمج مشاركات مع موضوع الدرس الثاني ربما قد تواجه احد المشاركين ويجد الحل هنا

واضح من الصورة انك تستخدم برنامج اكلبس مع البيئة الخاصة بلغة الجافا وليس السي++

كما شرحت فى تكملة الدرس الاول اننا نقوم بتسطيب اكلبس الخاص بلغة السي++

يمكنك الضغط على الزر الاتي فى اعلي اليمين واختيار سي++

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


(Ahmed Diab) #8

تم

انا انزلت eclipse للجافا لاني اريد تجربته مع نسخة الجافا بدل من NetBeans