Compilation
Compilation
1
تكتب سي بالس بالس باللغة العربية و هي لغة برمجة تجميعية ( ) Compiledو كائنية ( ) Object Orientedتضم
العديد من مميزات لغات البرمجة عالية المستوى ( ) High Levelو منخفضة المستوى ( ) Low Levelو هذا يعني أنك
بها. تشاء ما فعل على قادر
هذه اللغة الرائعة مصممة لتعمل على جميع أنظمة التشغيل المعروفة مثل ويندوز ,ماك ,لينكس ,إندرويد إلخ ..و هي
تعتبر من أقوى و أشهر لغات البرمجة على اإلطالق و يطلق عليها "أم اللغات" نظرًا ألنها لغة قوية و موجودة منذ زمن
طويل.
تم بناء هذه اللغة باألساس كتطوير للغة Cمن قبل Bjarne Stroustrupأثناء عمله في مختبرات Bellلتكون أطروحته
عام .1979 الدكتورا رسالة في
من ذلك الحين وحتى وقتنا الحالي تم تطوير هذه اللغة بشكل مستمر و اخر إصدار رسمي لها هو .C++ 17
ماذا يمكنني ان اطور بلغة ++c .2
برنامج. أي بناء على قادرة انها يعني
لغة ++Cتعتبر لغة عامة الهدف ( ) General Purposeمما
القوة الحقيقة لها تتجلى في المشاريع و البرامج الكبيرة مثل:
بناء و تطوير انظمة التشغيل ومن اشهر انظمة التشغيل المبنية بهذه اللغة Windows, Linux, MacOS, Andro
.id
بناء و تطوير البرامج الكبيرة مثل برامج أدوبي ( مثل Photoshopو ) Premierو المتصفح .Firefox
بناء و تطوير االلعاب و من أشهر األلعاب التي طورت بهذه اللغة .Counter Strike, MacOSDoom, Warcraft
بالنسبة للمطورين C++مميزات لغة
لها شعبية هائلة و هناك الكثير من المراجع لمن يريد تعلمها.
القدرة على التحكم باستخدام الذاكرة بشكل كبير.
خفيفة و سريعة وتستهلك موارد نظام أقل مقارنة بلغات أخرى مثل جافا و بايثون.
باالمكان تحويل كود مكتوب بلغة Cلكود بلغة ++Cبسهولة.
مميزات لغة ++cعن باقي اللغات .3
مفتوحة المصدر لن تدفع أي مبلغ لتعمل على لغة ,++Cفهي مصدر مفتوح و مجانية و ستبقى مجانية مدى .1
الحياة.
ًا ًا
خفيفة تستطيع البرمجة بها حتى و لو كان حاسوبك ضعيف أو قديم . .2
البساطة تعلمها سهل جدًا بعد أن تفهم برمجة الكائنات. .3
سرعة الترجمة ()compilationتتم ترجمة لغة ++Cإلى أوامر يفهمها الجهاز بشكل سريع جدًا. .4
لغة كائنية ( ) Object Orientedمع أن لغة ++Cصممت لتكون قريبة من عتاد الجهاز و قريبة للغات منخفضة .5
المستوى إال أنها تتيح لمستخدمها بناء الكالسات و التعامل معها بطرق منهجيات البرمجة الكائنية ( ) OOPمثل
الوراثة و تعدد األشكال و غيرها من المبادئ التي ستتعلمها الحقًا في الدورة.
متعددة النماذج تسمح لغة ++Cلمستخدمها باختيار الطريقة المناسبة له لكتابة الكود البرمجي من بين عدة .6
نماذج مختلفة مثل النموذج الهيكلي ( ) Structuralالشبيهة بلغة Cو النموذج الكائني ( Object
) Orientedالشبيه بلغة جافا.
الدعم الكبير لغة ++Cمن اللغات القديمة نسبيا و المنتشرة بشكل كبير مما جعل منها لغة ذات شعبية كبيرة .7
و مصادر تعلم مختلفة و متعددة و دعم كبير من قبل مجتمع المطورين.
طريقة عمل برنامج مكتوب بلغة ++C .4
الكود الذي تكتبه على الكمبيوتر ال يعمل بشكل مباشر بل يمر بعدة مراحل تباعًا حتى يعمل تمامًا كما في الصورة
التالية.
1
اذًا يمر الكود المكتوب بلغة ++Cبثالث مراحل حتى يصبح في النهاية برنامج يمكن تشغيله على الحاسوب.
في البداية يقوم الـ preprocessorبتشذيب وتجهيز الملفات النصية لتدخل بعدها في عملية
التجميع ( ) Compilingحيث يتم تحويل الملفات النصية الى ملفات ( نوعها ) Binaryيفهمها الحاسوب مع المحافظة
على بعض صفات الكود مثل أسماء المتغيرات والدوال ومن ثم يقوم الموصل ( ) Linkerبوصل كل أجزاء البرنامج
المختلفة ودمجها مع بعضها لتصبح ملف تنفيذي واحد ( نوعه ) EXEيمكن تشغيله في أي وقت مثل أي تطبيق عادي.
معلومة تقنية .5
الـ ,precompilationالـ compilationوالـ édition des lienهي مجرد عمليات تقوم بها برامج صغيرة تعمل مع بعضها
بشكل متناسق حتى تحول كل الكود الذي قمنا بكتابته في المشروع لبرنامج عادي يمكن تشغيله بنقرة واحدة.
الكود الذي يتنفذ مباشرًة عند تشغيل البرنامج هو الكود الذي نكتبه بداخل حدود الدالة )( mainو قبل األمر . return 0
2
أخيرا ،هل الحظت أن السطر يبدأ بالرمز #؟ وهذا ما يسمى توجيه المعالج المسبق .directive de preprocesseur
المعالج المسبق هو برنامج يبدأ تلقائيا في بداية التجميع ،compilationوال سيما الستيراد الملفات المطلوبة منه .ضع
في اعتبارك أن includeيسمح لنا باستيراد الملفات التي كتبها المبرمجون الخبراء قبلنا بالفعل.
الدالة )( mainالتي قمنا بتعريفها ابتداءًا من السطر الثالث يجب أن يكون نوعها intألنها تمثل نقطة البداية في
البرنامج.
وضع ; return 0في السطر السادس و كآخر أمر في الدالة )( mainهو أمر متعارف عليه ,و فكرته إرسال
الرقم 0لنظام التشغيل عند انتهاء أو إغالق البرنامج بشكل طبيعي .هكذا سيتمكن نظام التشغيل من التفريق بين
اإلنهاء الطبيعي للبرنامج واإلنهاء المفاجئ ( ) Crashالذي يحدث نتيجة خطأ ما.
لماذا أجد األمر ;using namespace stdموضوع ضمن كود المشروع إذا لم يكن .8
وجوده إجباريًا؟
في البداية هذا السطر معناه أنك تريد تضمين األشياء الموجودة بداخل المكتبة stdبشكل مباشر في المشروع.
في حال أردت إزالة هذا السطر ستكون مجبر على تحديد إسم المكتبة التي تستخدم منها األمر coutو cinو غيرها من
األوامر التي سنتعلمها في دروس الحقة.
اآلن سيكون شكل الكود كالتالي في حال أردت إزالة األمر ;using namespace stdمنه.
ثم نالحظ وجود عالمة أصغر < مما يسمح بحقن المحتوى وإرساله إلى الخارج /الشاشة .في كود المقدمة الخاص بنا،
نقوم بحقن شيئين.
-أوال ، "!Hello World" ،وهي الرسالة التي نراها على الشاشة.
-ثانيا ، std :: endlوالذي يسمح لك باالنتقال إلى السطر ،كما يوحي اسمه (".)"end line
التعليقات les commentaires .9
التعليق عبارة عن مالحظات يتم كتابتها من طرف المبرمج لشرح مقاطع صعبة من الكود المكتوب او وصف المقاطع
التي من الصعب فهمها او ببساطة لتقديم بعض المعلومات اإلضافية .يتم تجاهل التعليقات تماما من قبل المترجم
، compilateurويتم استخدامها فقط من قبل المبرمج.
يمكن كتابة التعليقات بأي لغة .يمكن كتابة التعليقات بطريقتين .أول واحد هو مع الشرطتين المائلتين .//يتوقف
التعليق الذي تم إنشاؤه بهذه الطريقة في نهاية السطر حيث تم إنشاؤه .يقال إنه تعليق من سطر واحد.
الطريقة الثانية تسمح بكتابة مجموعة تعليقات محددة جيدا بين الرموز */و * ./يمكن كتابة التعليقات على عدة أسطر،
أو حتى بين عدة تعليمات
3
المتغيرات les variables .10
المتغيرات ( ) variablesعبارة عن أماكن يتم حجزها في الذاكرة بحيث يكون لها اسم بهدف تخزين بيانات فيها أثناء
حاويات. أدراج، مغلفات، اعتبارها يمكن البرنامج.. تشغيل
النوع الذي نعطيه للمتغير يجعل نظام التشغيل يحدد نوع البيانات الذي يمكن تخزينه في المساحة المحجوزة لهذا
المتغير في الذاكرة.
على سبيل المثال ،إذا أردت تخزين رقم في متغير ،يجب أن يكون نوع المتغير في األساس مخصص لتخزين األرقام
بذلك. لك يسمح حتى
وإذا أردت تخزين نص في المتغير يجب أن يكون نوع المتغير في األساس مخصص لتخزين النصوص وهكذا.
لإلعالن عن متغير declarationفي لغة ++cنحتاج الى تطبيق ثالث اساسيات:
-1النوع ،le typeيشير إلى ما سيخزنه المتغير (عدد صحيح ،عدد طبيعي ،إلخ).
- 2المعرف ،أي االسم المرتبط بالمتغير.
-3يجب أن نعطي قيمة لتخزينها لمتغيرنا .يتم ذلك عن طريق تضمين هذه القيمة بين قوسين متعرجين {} او قوسين ()
او بعملية =
4
خصائص أنواع البيانات type .11
الجدول التالي يوضح المساحة التي يحتاجها كل نوع في الذاكرة و القيم التي يمكن تخزينها فيه سواء تم استخدام
النوع لوحده أو تم تحديد خصائصه.
Intيستخدم هذا النوع لتخزين عدد صحيح ,أي عدد ال يحتوي على فاصلة عشرية.
: Floatستخدم هذا النوع لتخزين عدد يمكن أن يحتوي على فاصلة عشرية .يمكن لهذا العدد أن يحتوي على 7أرقام
بعد الفاصلة.
: Doubleيستخدم هذا النوع لتخزين عدد يمكن أن يحتوي على فاصلة عشرية .يمكن لهذا العدد أن يحتوي على 15رقم
بعد الفاصلة لهذا يعتبر أكثر دقة من النوع floatفي العمليات الحسابية الدقيقة.
: Boolيستخدم هذا النوع لتخزين إما القيمة trueو إما القيمة . false
: Charيستخدم هذا النوع لتخزين حرف أجنبي أو لتخزين عدد صحيح قيمته تمثل حرف نسبًة لرقم اآلسكي
كود ( ) ASCII Codeالخاص به.
ًا
فمثًال ; char x = 65نفسها تمام إن كتبت . ;' char x = 'Aسبب تحول الرقم 65إلى الحرف ' ' Aفي الذاكرة هو أنه
في نظام ASCIIالرقم 65يمثل الحرف ' . ' A
5
قبل إعطاء اسم او معرف للمتغير يجب أن يتوافق مع قواعد محددة للغاية.
"-1يجب أن يبدأ بحرف "ال يمكنه البدء برقم ،إنه ممنوع .كما يجب أال تبدأ ب :_ underscoreاستخدامها يتبع قواعد
دقيقة ،لذلك من األسهل عدم استخدامها كحرف أول.
- 2المسافات وعالمات الترقيم ممنوعة (' ,?,وما إلى ذلك).
— 3ال يمكنك استخدام كلمة أساسية للغة les mot clefsكمعرف .على سبيل المثال ،يحظر استعمال الكلمات مثل int
، ..… – returnعلى سبيل المثال
لقد تكلمنا سابقا انه يجب ان نعطي قيمة في األقواس المتعرجة لتهيئة المتغير .ولكن ماذا لو كتبت فقط األقواس المج
دعونا نتناول نقطة أخيرة .أخبرتك أننا نعطي قيمة في األقواس المتعرجة لتهيئة المتغير .ولكن ماذا لو كتبت فقط
األقواس المجعدة ،بدون قيمة فيها؟ هل سيتم تجميع الكود دائما؟
اإلجابة نعم يقوم بتجميع الكود ويعطي قيمة صفر للمتغيرات
6
الثوابت .12
الثوابت .constيمنع أي تعديل للقيمة المعطاة له .نقول إننا نخلق ثابتا .وإذا حاولت تعديل ثابت ،فإن المترجم يرفض
بصوت عال وواضح.
7
8
المبرمجون كسالى بطبيعتهم ،لذلك ال يحبون التكرار .لذلك أنشأوا اختصارات للذهاب بشكل أسرع .لذا ،بدال من
كتابة ، a = a + bيمكننا كتابة a + = bمباشرة .ينطبق بناء الجملة الجديد هذا على عوامل الجمع +والطرح والضرب *
والقسمة /والنسبة % modulo
9
-3الرموز الخاصة les caracteres speciaux
لنقم بكتابة هذا الكود
نالحظ ان الرمز /ال يظهر .يوجد في لغة ++cرموز خاصة ال تظهر اال اذا قمنا بتسبيقها بالرمز /
-4األرقام
يمكننا بالفعل مالحظة أنه يمكننا استخدام األعداد السالبة دون أي مشكلة .ثانيا ،نظرا لألصل األمريكي ل ، ++ Cتتم
كتابة االعداد الحقيقية بنقطة وليس بفاصلة .حتى إذا لم نهتم باألرقام بعد الفاصلة العشرية ،فيجب أن نضع الرقم في
صورة عدد صحيح .وإال فإن ++ Cسوف يفسره على انه عدد طبيعي
11
les entrees المدخالت
Fiche TP n1
Exercice 1:
Dans une élection, I est le nombre d’inscrits, V le nombre de votants, P = 100V/I le pourcentage de votants, M =
V/2 le nombre de voix pour obtenir la majorité. Ecrire un programme qui demande à l’utilisateur de saisir I et V,
puis calcule et affiche P et M.
Exercice 2:
Saisir 3 réels, calculer et afficher leur moyenne.
12
Exercice 3
A, B et C sont des entiers. Quelles sont les valeurs finales de A, B et C?
A=2; A=A+2; B=A*2+A; C=4; C=B-C; C=C+A-B; A=B-C*A; A=(B-A) * C; B=(A+C)*B
Exercice 4
Comment inverser le contenu de deux variables a et b?
Comment faire sans utiliser une variable supplémentaire ?
Exercice 5
Soient A, B deux variables de types entiers, C, D deux variables de type réel, E, F deux variables de type booléen.
Quel est le type des variables suivants : A1, B1, C1, A2, B2, C2, D2, A3, B3, C3, D3
A1 =A+B ; B1 =A*B; C1= A/B; A2= C+D; B2 =C*D; C2 =C/D; D2 =A*C; A3 =E ou F; B3 =E et F; C3 =(A>B) ;
D3 =Faux ;
13