لكي تجيد البرمجة بلغة ++C فيجب عليك أولا التعرف على
نمط الب رمجة المرحلية Programmation procédurale
المعنى من نمط البرمجة المرحلية هو المراحل إلي يتم بيها جمع أولى عناصر الكود لكتابة برنامج بكل بساطة
من هدا المبدأ البسيط راح نتعمق في تحليل هدا النمط من البرمجة وبداية التنسيق بين مختلف المراحل إلي بتمر بيها لاستخلاص برنامج تكون أنت ساهمت بدور فعال في صياغة وفهم الأمثلة وبعدين إنشاء الله التمارين
الأصناف القاعدية Type
تقدم لك لغة البرمجة++C الاصناف التالية
- صنف القيم التامة ( 1, 2,3,...الخ ) // int
- صنف القيم العشرية (3.14 ,1.414, .....الخ ) // double
- صنف القيم المنطقية الصحيحة أو الخاطئة bool // true. false
هي الأصناف ألي بتوفرها لغة البرمجة - صنف قيم الحروف والرموز ( مثل char // ( answer
سنحاول شرحها باختصار لأننا سنتطرق إليها لاحقا عبر الدروس القادمة إنشاء الله
المعاملات الرياضية
مثل:
- معامل الزيادة // +
- معامل النقصان // -
- معامل الضرب // *
- معامل القسمة // \
بحيث يمكن لك استخدامها بكل سهولة
كدالك الأمر لمعاملات المقارنة إذ تستخدم بنفس الطريقة
- معامل المساواة // ==
- معامل عدم المساواة // = !
- معامل أكبر من // >
- معامل أصغر من // <
- معامل أكبر من أو يساوي // =>
- معامل أصغر من أو يساوي // =<
عند عملية التمثيل والعمليات الرياضية يقوم الـ ++C بكل عمليات التحويل المناسبة بين مختلف الأصناف ومعاملات المقارنة أو المعاملات الرياضية بكل كفاءة بطريقة تسمح لك بجمعها في جسم واحد
كود:
void une_fonction() // عملية لاترجع أي قيمة { double d = 2,2; //تعيين القيمة العشرية int i = 7; // تعيين القيمة التامة d = d+i; // dإرسال الثمن إلى الممثل i = d*i; // iإرسال المنتوج إلى }
فالرمز = هو رمز التمثيل أما الرمز == فهو رمز المساواة C مثل ما هو معمول به في لغة
المقارنة وتشكيل الحلقات Les tests et les boucles
مجموع متجانس فيما بينه من التعليمات تساعدك على إجراء المقارنة والاختيار وأيضا تشكيل الحلقات
هذه عملية على سبيل المثال تقوم بسؤال المستخدم وبعدها ترجع قيمة منطقية تبين الإجابة:
كود:
bool accept(){ cout<<" Voulez-vous continuer (o ou n)?\n"; // طرح السؤال على المستخدم char answer = 0; // القيمة المنطقية البدائية هي 0 cin>>answer; if (answer ==’o’) returne true; // معناه صحيح أي 1 else returne false; // معناه خاطئ أي 0 }
الصنف القاعدي bool يمكن له إرجاع قيمة منطقية صحيحة أو خاطئة أي false أوtrue
وهنا راح نعمل بيه عملية ونخلي اسم العملية هو() bool accept
بحيث الاسم راح يكون ممثل للصنف القاعدي accept بينوب عنه بكل المجالات الممسوحة لهدا الصنف القاعديbool
في إطار العمليات طبعا وبإمكانه أخد القيم المنطقية بدل عنه ودالك من ميزات سهولة هده اللغة
رمز الحاضنة الأولى أي ( }) هو تصريح لبداية جسم العملية كما يمكن لنا أيضا تسميته بداية حلقة() bool accept
الجملة إلي بين النقطتين وعلامة الاستفهام سيتم طباعتها على شاشة المستخدم وترجمتها بكل بساطة بالعربية هي "هل تريد المواصلة ( نعم أو لا )"
" Voulez-vous continuer (o ou n)? \n"
الرمز زائد الحرف n\هو أمر للرجوع للانتقال للسطر الرمز
والرمز نقطة فاصلة ( ; )هي علامة نهاية السطر
الرمز>> (معناه أكتب في) هو معامل الإخراج و التعليمة cout هو مجال الإخراج القياسي flux de sorti standard
( فيما يخص مجال الإخراج القياسي راح نشرح في مراحل متقدمة من الدروس القادمة إنشاء الله ألان عليك أن تكتفي فقط بتعريف دوره من خلال هدا المال )
العمليات التي يمكن للصنف القاعدي هدا char تحملها ككتابة وتخزين حرف أو رمز أو عبارة
كمان عملنا ليه ممثل وسميناه الصنف القاعدي answer
وجعلنا لممثل الصنف القاعديanswer قيمة مبدئية يمكن لها أن تتغير وضعنا هنا الصفر كقيمة بدائية منطقية للممثل
الرمز<< (إقراء ابتداء من) هو معامل الإدخال والتعليمة cin هي مجال الإدخال القياسي flux d’entrée standard
نخلي سطر فارغ وننتقل لسطر جديد
لكن قبل ما نكمل بدنا نوضح الأمور شوي
تكون قيمته المنطقية 1 أو 0 لكن إحنا خليناه عملية وتكون القيمة إلي يتحصل عليها من خلالboolالصنف القاعدي
جسم العملية وراح نشرك المستخدم كدالك في العملية ألي بدي ياك تفهمو هو أن التلاعب بالقيم المنطقية من خلال البرمجة بلغة ++C مسموح بيه وسهل للغاية
السؤال المطروح على المستخدم راح يكتبو معامل الإخراج الي هوالرمز >> في مجال الإخراج القياسي cout
مجال الإخراج هدا بيطبع السؤال بشاشة المستخدم
أما معامل الإدخال أي الرمز<< راح يقرا الإجابة إلي المستخدم أجاب بيها كقيمة منطقية من خلال الممثل answer
وبدالك يكون مجال الإدخال القياسي تحصل على قيمة بيوضفها بعدين في تحصيل القيمة النهائية للعملية () bool accept ويحطها في مجال الإدخال القاسي cin
راح نستغلها هنا كشرط في هده العملية بمعنى القيمة المقبولة من خلال الشرط وهي هي الحرف 'o ' التعليمة ()if
على أساس الشرط answer يعني ربطنا القيمة المنطقية لهدا الحرف بـ 1 أي صحيحة أي true
( رمز المساواة هو الرمز ==, ورمز التمثيل هو = )
في هده الحالة سيتم إرجاع returnقيمة منطقية صحيحة أي true للعملية () bool accept
كي تتخذ هي الأخرى هده القيمة كإجابة من المستخدم بالقبول وتصبح صحيحة أي ( نعم ) يمكن أن نفسرها في حالة إدا ما كانت القيمة المرسلة من المستخدم غير قيمة الحرف ‘o’ التعليمة else
فسيتم إرجاع return قيمة منطقية خاطئة أي false للعملية () bool accept
كي تتخذ هي الأخرى هده القيمة كإجابة من المستخدم بالرفض وتصبح سالبة
الرمز // هو بداية التعليق أو إبداء ملاحظة في سطر واحد أو على امتداد عدة سطور
فهو رمز نهاية حلقة جسم العملية }أما رمز الحاضنة الأخير أي الرمز
الأمر سهل جدا لو حاولنا فهم المثال على أساس منطقي
و الآن راح نحاول نوسع الفهم ونطور المثال هدا يعني راح نسمح للمستخدم التعبير عن عدم الرغبة في المواصلة فنكتب:
كود:
bool accept2(){ cout<<" Voulez-vous continuer (o ou n)?\n"; // طرح السؤال على المستخدم char answer = 0; // القيمة المنطقية البدائية هي 0 cin>>answer; // مجال الإخراج راح يقرا شو أنكتب على الممثل switch (answer) { case ‘o’: return true; // أرسل صحيح case ‘n’: return false; // أرسل خطئ default cout<<" Considérant que la response est non.\n"; // طبع سؤال من جديد return false; إرسال خطئ // } }
شوفو البرنامج كيف يقوم بكل التحويلات المنابة بدون أي تدخل منك بين الأصناف القاعدية والتعليمات وغير دالك من الكود المكتوب بهدا المثال
ثابتة هده الأخيرة والتي تقارن قيمة من مجموع قيم switch() الجديد بهدا المثال الطور للمثال الأول هو التعليمة
أي القيم يجب أن تكون مبينة بشكل واضح يمنع الشبه لتفادي الأخطاء
وبتشوف كمان أن هده التعليمة أدخلت حلقة داخل الحلقة الأولى بدون أي مشكل
فيما طباعة لو أن المستخدم أجاب بغير قيمة الحرفين ‘n’ أو’o’ راح تنطبق التعليمة default أي
التعليمةعبر مجال الإخراج cout " نعتبر إجابتك هي لا." Considérant que la response est non.\n"
ثم الانتقال إلى السطر التالي بواسطة \n لتنفيذ التعليمة
كقيمة نهائية لهده العملية بكل بساطة false وبدالك إرجاع return
كما يمكنا ألان إتاحة إمكانية الخطىء للمستخدم فنكتب
كود:
bool accept2(){ int tries =1 ; wihle (tries<4) { cout<<" Voulez-vous continuer (o ou n)?\n"; // طرح السؤال على المستخدم char answer = 0; // القيمة المنطقية البدائية هي 0 cin>>answer; // مجال الإخراج راح يقرا شو أنكتب على الممثل switch (answer) { case ‘o’: return true; // أرسل صحيح case ‘n’: return false; // أرسل خطئ default cout<<" Désolé, nous ne comprenons pas cette réponse.\n"; // طبع من جديد tries = trie+1 ; // إرسال خطئ } } cout<<" Considérant que la response est non.\n"; // طبع سؤال من جديد return false ; // إرسال خطئ }
هنا التعليمة ()wihleراح تقوم بنفس الشيء تقارن وتحدد القيمة الي راح يتم إرسالها للعملية لكن نسمح بمجال الخطأ يعني أن حلقة التعليمة هده ستعاد حتى يتم استوفاء الشرط (wihle(trie<4 مش أكثر من الشرط إلي هو
وأحب الفت انتباهكم أن العملية الآن أصبح بها ثلاث حلقات حلقة العملية وحلقة التعليمتين وكل شيء بيسير على ما يرام
راح تتطبق التعليمة ()wihle حتى يصير الشرط وكمان false
المؤشرات والجداول Les pointeurs et les tableaux
يمكن التصريح بجدول على الطريقة التالية
كود:
Char v[10] ; // جدول من عشر خانت حروف أو رموز
بطريقة مماثلة يمكن التصريح بمؤشر كالتالي
كود:
char* p; // مؤشر حرف أو رمز
الرمز [ ] يعبر عن جدولـ , و الرمز * يعبر عن مؤشر لـ في التصريحات
يمتلك الجداول v عشر خانت إدا الجدول يمتلك نقطة انطلاق [9]v[0]............ v
بحيث يستطيع مؤشر متغير احتواء عنوان شي ما من صنف قاعدي مخصص مثل
كود:
يؤشرالحرف pعلى الخانة رقم 3 للجدول P = &v[3]; // v
رمز التوحيد & هو رمز معامل العنونة
في المثال التالي سوف نقوم بنسخ عشرة خانت لجدول و وضعها بجدول أخر
كود:
void another_fonctio();{ int v1[10]; int v2[10]; //…. for (int 1=0;i<10;++i) vl[i]=v2[i];}
اما في هده الحالة التعليمة for ستكون بالمعنى التالي
اجعل i منطلق من الصفر 0 بحيث كلما كان i أصغر من 10انقل العنصر الأول وأعد عملية النسخ من جديد
عندما يتم استخدامه على المتغيرات التامة معامل الزيادة أي الرمز ++ يضيف فقط 1
ويهدا نكون قد استوفينا بقدرة الله تعالى الدرس الأول للتعريف بلغة البرمجة ++C
ملاحظة
" اعتمدت كثير على اللغة الفرنسية بمحاولة كتابته بالغة العربية لدالك لوي اي حدى شاف اخطاء في التعبير يعلمني لاني بحرص على ان يكون النص مترجم بصورة دقيقة واسفة مرى اخرى "
وسيكون درسنا الثاني نمط البرمج المحورية Programmation moduler
ونحاول نفهم الربط بين نمط البرمجة المرحلية أي Programmation procédurale
نمط البرمجة المحورية أي Programmation moduler
وشروح ومنشقة معمقة لكل ما تم ألحكي عنو في هدا الدرس