حصريا سلسلة دروس ++c

الموضوع في 'أرشيف المنتدى التعليمي' بواسطة wissem_benali, بتاريخ ‏19 ديسمبر 2008.

  1. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 15:25
    تعاريف



    المحول (Compiler): برنامج يترجم نص البرنامج المكتوب بلغة ++Source Code) C) إلى لغه يفهمها الكمبيوتر ألا و هي لغة الأله (Machine Language).

    التركيب (compile) : عملية قراءة و ترجمة النص المكتوب بلغة ++C . هذه العمليه يقوم بها المحول (Compiler) .

    التابع (Function): مجموعه من الأوامر محصوره داخل أقواس كبيره تأتي مباشرة بعد إسم ما هو إسم التابع . هذه الأوامر تستدعى (بضم التاء) باستدعاء إسم التابع.
    (ليست مشكله إذا لم تفهم ما المقصود ، مع مرور الوقت ستفهم ذلك).
    متعاقبات الهروب



    (Escape-Sequences): " n\ " سطر جديد (new line) .
    " r\ " عوده إلى بدايه السطر(Carriage Return) .
    " t\ " مسافه بمقدار 8 خانات فراغ أفقياً (Tabulator) .
    " v\ " مسافة بمقدار 8 خانات فراغ عمودياً (Vertical Tabulator).
    " b\ " رجوع بمقدار خانه واحده (Backspace) . .
    " f\ " صفحه جديده (Formfeed) .
    " \\ " خط مائل (Backslash) .
    " '\ " نقطه مبتدئه (Apostroph) .
    " "\ " إشارة حصر .
    " a\ " إنذار (Alarm) .
    المتسلسله (String) : مجموعه من الأحرف أو الأرقام أو كليهما .
    المتغير المتقدم (Object) : عباره عن متغير يملك خصائص أكثر من المتغير ​
     
  2. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 15:26
    :besmellah1:

    تعاريف
    المحول (Compiler): برنامج يترجم نص البرنامج المكتوب بلغة ++Source Code) C) إلى لغه يفهمها الكمبيوتر ألا و هي لغة الأله (Machine Language).

    التركيب (compile) : عملية قراءة و ترجمة النص المكتوب بلغة ++C . هذه العمليه يقوم بها المحول (Compiler) .

    التابع (Function): مجموعه من الأوامر محصوره داخل أقواس كبيره تأتي مباشرة بعد إسم ما هو إسم التابع . هذه الأوامر تستدعى (بضم التاء) باستدعاء إسم التابع.

    (ليست مشكله إذا لم تفهم ما المقصود ، مع مرور الوقت ستفهم ذلك).


    متعاقبات الهروب
    (Escape-Sequences): " n\ " سطر جديد (new line) .
    " r\ " عوده إلى بدايه السطر(Carriage Return) .
    " t\ " مسافه بمقدار 8 خانات فراغ أفقياً (Tabulator) .
    " v\ " مسافة بمقدار 8 خانات فراغ عمودياً (Vertical Tabulator).
    " b\ " رجوع بمقدار خانه واحده (Backspace) . .
    " f\ " صفحه جديده (Formfeed) .
    " \\ " خط مائل (Backslash) .
    " '\ " نقطه مبتدئه (Apostroph) .
    " "\ " إشارة حصر .
    " a\ " إنذار (Alarm) .

    المتسلسله (String) : مجموعه من الأحرف أو الأرقام أو كليهما .
    المتغير المتقدم (Object) : عباره عن متغير يملك خصائص أكثر من المتغير العادي ، سنقوم بشرح هذا الموضوع في فصل قادم .
     
  3. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 15:39

    لنأتي الأن إلى برنامجنا الأول في لغة ++C:


    [​IMG]


    عندما تقوم بتنفيذ هذا البرنامج ، سوف تظهر النتيجه التاليه على الشاشه:



    This Text will be
    writen in two Lines!
    Five + eleven =16


    لكي نستطيع في المستقبل أن نتتبع الأسطر في كل مثال نكتبه، سنزود هذه الأسطر بأرقام إضافيه(مثال /*5*/).
    هذه الأرقام ستكون على شكل تعليق ، و لهذا سيتم تجاهلها من المحول.
    عند كتابتك البرنامج تستطيع أن تتجاهلها و لا تكتبها ، فهي فقط لأغراض التوضيح ، و ليس لها مفعول على البرنامج.
    عندما نريد أن نكتب تعليقاً في برنامج ما ، نستعمل الإشارتين */ كبدايه للتعليق و /* كنهايه لهذا التعليق.
    طريقة التعليق هذه تجعل أجزاء البرنامج الموجوده بين بداية التعليق (أي */) و نهايته (أي /*) غير فعاله ، و نستطيع
    حتى أن نكتب تعليقاً من عدة أسطر بهذه الطريقه.



    [​IMG]


    سنقوم الأن بشرح البرنامج بشكل تفصيلي:

    السطر 1: في لغة ++C تقوم الإشارتان // ببدأ تعليق. هذا يعني أن كل ما تتم كتابته على نفس السطر يقوم المحول بتجاهله.
    إذا أردنا أن نكتب تعليقاً لأكثر من سطر ، نقوم باستعمال /* ... */ .

    ملاحظه: لاحظ أن // تأتي بشكل مفرد ، بينما يتم إستعمال /*...*/ سويه.


    // This is a Comment
    // the way C++ uses
    /* This Text is a Comment
    the way the Langauge C
    uses */

    إسم أي برنامج ++C ينتهي دائماً ب CPP.

    السطر 2: التعليمه include# ليست جزءاً من مجموعة كلمات اللغه ++C ، بل هي تعليمه يفهمها ما يسمى بالمعالج الأولي.
    المعالج الأولي هو برنامج يقوم بقراءة نص البرنامج - قبل التركيب الفعلي للبرنامج- باحثاً عن تعليمات تبدأ بإشارة # ، هذه
    التعليمات تخبر المعالج الأولي ما يجب فعله.
    التعليمه <include <iostream.h# مثلاً تعني أن الملف IOSTREAM.H يجب أن يضاف إلى البرنامج (في هذا الموقع من البرنامج بالتحديد).
    سنمر على المعنى الفعلي لهذه العمليه بالتفصيل في فصل قادم إن شاء الله.

    السطر 4: في هذا السطر تتوضح الكثير من صفات اللغه ++C . مثلاً أن اللغه ++C تتألف في الواقع فقط من توابع ( Functions).
    يتألف التابع من إسم ما يأتي بعده دائماً قوسان دائريان ( ) . في مثالنا يدعى التابع main . هذا التابع له صفات خاصه ،
    لأنه الوحيد الذي يجب أن يظهر في كل برنامج ++C مره واحده . إنه نقطة البدايه الذي يبدأ تنفيذ البرنامج عنده .
    سنتكلم عن المصطلح void في قسم آخر قادم إن شاء الله . المهم أن تتذكر أن التابع main يأتي في كل برنامج ++C و لمره واحده تماماً .

    الأسطر 8+5: للأقواس الكبيره { ** (لا أدري ما اسمها الحقيقي بالعربيه) في ++C مهمة تشكيل كتله من التعليمات . يوجد في باسكال شيء مشابه
    و ذلك باستعمال BEGIN و END . نبدأ كل تابع دائماً بقوس بدايه "**" و ننهيه بقوس نهايه "{" .

    الأسطر 7+6: تقدم ++C إمكانية سهله و مريحه لعرض البيانات على الشاشه ، و ذلك باستعمال cout .
    نستعمل الإشارتان ">>" لإرسال متسلسلات إلى cout .
    كما نلاحظ هناك بعض الإشارات التي لم تظهر على الشاشه ، وهي في مثالنا "n\" . هذه الإشارات تدعى متعاقبات الهروب (Escape-Sequences) .
    نبدأ متعاقبات الهروب دائماً بخط مائل "\" (backslash) ، يتبعه إشاره أو حرف أو عدة إشارات أو أحرف .
    نستطيع أن نضع متعاقبات الهروب في أي مكان من المتسلسله ، و بأي كمية نريد .

    ملاحظه: نستطيع أن نكتب متعاقبات الهروب بهذا الشكل "n\" أو بهذا الشكل 'n\' .
    السطر 7: بواسطة cout نستطيع أيضاً أن نظهر عدة متسلسلات على الشاشه وراء بعضها . من أجل ذلك نقوم بربط
    المتسلسلات بعضها ببعض بواسطة >> . و لا يقتصر عمل cout على إظهار المتسلسلات ، بل يتعداها إلى العمليات الحسابيه أيضاً (11+5) .

     
  4. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 15:44
    إعطاء البيانات


    كمقابل ل cout نستطيع في ++C إستعمال cin . بواسطة cin نستطيع أن نعطي بيانات في برنامج ما .
    المثال التالي يوضح ذلك :

    [​IMG]

    عندما نعطي البرنامج القيمه 49 مثلاً ، نحصل على النتيجه التاليه :
    The 2 Times Value of xyz is 98


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

    السطر 6: قبل أن نستعمل متغيراً ما في ++C يجب أن نخبر المحول أي نوع من أنواع البيانات نريد أن نخزن في هذا المتغير ، و كذلك ما إسم هذا المتغير .
    لهذا الغرض تقدم ++C الأنواع المعروفه في لغات أخرى أيضاً مثل int أو float .
    هذه العمليه -أي إطلاق إسم على متغير ما و إخبار المحول لأي نوع ينتمي- سنطلق عليها إسم التعريف (Declaration) .
    يجب أن نقوم بتعريف المتغير دائماً في سطر يسبق السطر الذي نقوم باستعمال هذا المتغير فيه لأول مره .
    هناك فرق بين C و ++C في هذه الناحيه ، ففي C كان يجب أن نقوم بالتعريفات دائماً في بداية كتلة التابع ،
    بينما في ++C يمكن أن نضع التعريفات في أي مكان طالما أنه قبل المكان الذي نستعمل فيه المتغير . مثال على ذلك :

    [​IMG]

    ولكن من المفضل دائماً أن نجمع التعريفات دائماً مع بعضها و ذلك لكي يكون شكل البرنامج واضحاً ، فلا نضيع عندما نريد أن نعدل هذا البرنامج في المستقبل .

    السطر 9: نستعمل cin مع الإشارتين "<<" وكما في cout نستطيع أن نتعامل مع جميع أنواع البيانات باستعمال cin ،
    أي أننا نستطيع أن نعطي أنواعاً مختلفه من الأرقام و النصوص أيضاً باستعمال cin .

    السطر 10: نرى هنا إحدى الإشارات العديده التي تحويها ++C ألا و هي إشارة الضرب " * " . تقدم ++C للعمليات الحسابيه الأساسيه أيضاً
    الإشارات " + " للجمع و " - " للطرح و " / " للتقسيم ، و لكن لا توجد في ++C إشارة " قوه أو أس " (مثال : 2 قوه 3 = 8) ، لهذا الغرض
    يستعمل التابع pow .
     
  5. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 15:56
    بنية برنامج ال ++C


    شكل البرنامج الظاهري في ++C بشكل عام ليس له قاعده عامه . فنحن نستطيع مثلاً أن نكتب البرنامج السابق PRG01_1 كما يلي
    و لن يؤثر ذلك على عمل البرنامج :


    [​IMG]

    ربما تعتقد أن البرنامج إختلف و لكن في الواقع هو نفس البرنامج و لكن بطريقة كتابه ظاهريه مختلفه .
    يقوم المحول بترجمة هذا البرنامج أيضاً بدون مشاكل و ينفذه . إذاً يقودنا هذا إلى الإفتراض أن المحول لا يقرأ بطريقة سطر سطر ،
    بل أن له طريقة مختلفه للقراءه ، فهو يستدل على نهايه تعليمه ما بواسطة الفاصله المنقوطه "
    ;
    " .
    و بهذا نأتي إلى صفة أخرى من صفات ++
    [FONT=impact,times new roman]C ++ [/FONT]:C[FONT=impact,times new roman] لغه غير متعلقه بالشكل الظاهري لبرنامج ما [/FONT]
    .
    هذا يعني أننا نستطيع أن نتحكم بالشكل الظاهري للبرنامج كما نريد . ولكن من المفضل أن نكتب البرنامج بطريقة واضحه ليس فيها مجال لسوء الفهم .
    كقاعدة ذهبيه حاول أن تلتزم بكتابة تعليمه واحده في كل سطر ، و أن تكون أسطر كل " كتله محتواة " أبعد بخانتين عن طرف الصفحه مقارنة ب " الكتله الحاويه " .
    مثال على ذلك :



    [​IMG]

    لاحظ أنها ليست شطاره أن تري العالم أنك مبرمج رائع و تستطيع أن تكتب برنامجك بشكل مضغوط ! ما يميز المبرمج الجيد هو برنامج
    نظيف و واضح و مرتب بشكل لا يدعو لسوء الفهم أو الإلتباس . و لا تنسى إستعمال التعليقات داخل البرنامج ، فأمر جميل أن تأتي في اليوم
    التالي و تفهم برنامجك . نحن لم نستعمل التعليقات في برامجنا التي كتبناها لغاية الأن لصغرها نسبياً أولاً ، و لأننا قمنا بشرحها بشكل مفصل لاحقاً .
    و أخيراً إنتبه إلى أن ++Case Sensitive" C" ، أي أنها تفرق بين الأحرف الكبيره و الصغيره ، فمثلاً main لا تساوي Main أو MAIN ،
    و number لا تساوي Number .


     
  6. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 15:59
    وظيفة المعالج الأولي هي البحث في نص برنامج ++C عن مصطلحات معينه ، أو أننا نستطيع القول أنه يتولى مهمة تحديد أقسام البرنامج التي
    يتم تركيبها ، و الأقسام التي لا يتم تركيبها .
    نخبر المعالج الأولي ما يجب عليه عمله بواسطة أوامر معينه . هذه الأوامر تبدأ دائماً

    بإشارة " # " يتبعها إحدى الكلمات التاليه :

    #define #elif #else
    #endif #error #if
    #ifdef #ifndef #include
    #line #pragma #undef




    ملاحظه: يمكن أن تكون هناك مصطلحات أخرى موجوده ، و ذلك يعتمد على المحول الذي تستعمله .



    include# :
    لقد تعرفنا حتى الآن على مهمة include# ، ألا و هي إدخال ملف ما إلى الموقع الموجوده فيه .
    تدعى هذه الملفات بالملفات المترأسه (Header-Files) ، و هي تحتوي على تعريفات تحتاجها توابع أو متغيرات متقدمه معينه .
    هناك الكثير من هذه الملفات و كل منها متخصص في مجال معين . فهناك مثلاً الملف STRING.H الذي يجب أن ندخله إلى
    برنامجنا عندما نود إستعمال توابع المتسلسلات (Stringfunctions) مثال : strcpy ، strcat
    ...إلخ .
    كل محول يحوي مثل هذه الملفات ، وهي موجوده عادةً في مصنف (Directory) يدعى INCLUDE . بإستطاعتك رؤية هذه الملفات
    باستعمال أي محرر نصوص (Editor) إذا أردت . ولكن إنتبه أن لا تغير فيها شيئاً ! فقد لا يقوم المحول بتنفيذ أي من برامجك .
    المثال التالي يوضح كيفية عمل include
    :

    #include <iostream.h>
    #include "my_inc.h"

    void main(void)
    {
    cout << "\n" << TEST;
    **
     
  7. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 16:03
    نقوم بكتابة إسم الملف الذي نريد إدخاله إلى البرنامج بعد المصطلحinclude . عادةً يكون إسم الملف بين إشارتي ( < > ) ،
    و هذا يعني أن هذا الملف موجود في المصنف الذي يحوي عادةً هذه الملفات
    (في العاده المصنف INCLUDE) ، ولكن إذا تم
    إستعمال إشارتي ( " " ) فهذا يعني أنه يجب أن يتم البحث أولاً في المصنف الذي يتواجد فيه برنامجنا الحالي ،
    ثم إذا لم يكن الملف موجوداً هناك يتم البحث في المكان المعتاد لتواجد هذه الملفات ألا و هو المصنف INCLUDE .
    الهدف من إستعمال هذ الطريقه ( طريقة " " ) هو تجنب حدوث أخطاء عندما تريد أن تكتب ملف مترأس خاص ببرنامجك ،
    فلا يحدث إلتباس مع الملفات الأساسيه الموجوده في المصنف INCLUDE .
    في مثالنا السابق يحوي الملف " my_inc.h " السطر التالي فقط :


    #define TEST 5



    في هذا الملف نخبر البرنامج أن هناك ثابتاً يدعى TEST قيمته 5 . عندما نقوم بتنفيذ برنامجنا يظهر على الشاشه الرقم 5
    بالرغم من أن 5 ليست موجوده في برنامجنا ، ولكن هذا العدد موجود في الملف MY_INC.H .



    define# :
    بإستعمال define# نستطيع أن نعطي ثابتاً ما إسماً ، و من ثم إعطاء هذا الثابت قيمه عدديه . الجيد في هذا الأمر
    أننا إذا أردنا تغيير هذه القيمه يوماً ما فلن نحتاج إلا إلى تغيير هذه القيمه مره واحده بدل أن نغير القيمه في كل مره
    تظهر فيها هذه القيمه في البرنامج .
    #define MAXVALUE 100

    نقوم بكتابة إسم الثابت (هنا يدعى MAXVALUE) بعد define# ، يتبعه خانة فراغ ثم القيمه التي سيأخذها هذا الثابت .
    عادةً تتم كتابة الثوابت التي يتم تعريفها بإستعمال define# باستعمال أحرف كبيره ، وذلك لتفريقها عن المتغيرات .

    ملاحظه: هذه الطريقه لتعريف الثوابت هي طريقه موروثه عن C ، تقدم ++C طريقه أفضل لتعريف الثوابت بإستعمال const .





    if ، #elif ، #else ، #endif# :
    بإستعمال if# نستطيع أن نجعل أجزاء معينه فقط من البرنامج يتم تركيبها ، المثال التالي يوضح ذلك :


    #include <iostream.h>

    #define TEST 12

    #if TEST == 10
    #define MAXVALUE 99
    #elif TEST==11
    #define MAXVALUE 100
    #elif TEST==12
    #define MAXVALUE 101
    #else
    #define MAXVALUE 50
    #endif

    void main(void)
    {
    cout << "\nMAXVALUE = " << MAXVALUE;
    **





    نتيجة البرنامج هي 101 .




    ifdef ، #ifndef# :
    بهذه التعليمات تستطيع أن تعرف إذا تم تعريف ثابت ما في البرنامج باستخدام define# أم لا .

    #include <iostream.h>

    #define DEMO 0

    #ifdef DEMO
    #define VERSION 0.9
    #else
    #define VERSION 1.0
    #endif

    void main(void)
    {
    cout << VERSION;
    **





    نتيجة البرنامج هي 0.9 . لاحظ أن ifdef# تقوم بفحص ما إذا كان الثابت معرفاً أم لا و لا تقوم بفحص قيمته !
    لن نتطرق لباقي مصطلحات المعالج الأولي لأنها نادراً ما تستخدم .
     

    الملفات المرفقة:

    • wissem.txt
      wissem.txt
      حجم الملف:
      687 بايت
      المشاهدات:
      3
  8. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 16:14
    تدريبات



    التمرين الأول :
    This is
    a very
    short
    Text






    أي برنامج من البرامج التاليه أعطى النتيجه السابقه :


    [​IMG]









    التمرين الثاني :

    ما نتيجة البرنامج التالي :



    [​IMG]




    التمرين الثالث :

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




    التمرين الرابع :

    في البرنامج التالي ثلاثة أخطاء ، ما هي ؟
    // exercise01_5.cpp
    #include <iostream.h>
    // Attention! This Program is incorrect

    void Main(void)
    {
    int one;
    cout << "\nGive a Number please:"
    cin << one;
    cout << "The number is " << one;
    **






    التمرين الخامس :

    أية قيمه سيعطينا البرنامج التالي ؟


    #include <iostream.h>

    #define LEVEL 1

    #ifdef PLAIN
    #define TEST 1000
    #else
    #define TEST 99
    #endif


    void main(void)
    {
    cout << TEST;
    **




     
  9. wissem_benali

    wissem_benali عضو

    إنضم إلينا في:
    ‏10 نوفمبر 2006
    المشاركات:
    1.673
    الإعجابات المتلقاة:
    2.793
      19-12-2008 16:23
    و إنشاالله سأكمل بقية الدروس في الأيام القادمة
     

مشاركة هذه الصفحة

جاري تحميل الصفحة...