صفحة 2 من 2 الأولىالأولى 12
النتائج 21 إلى 34 من 34

الموضوع: دروس في (++C)

  1. #21
    عضو مميز الصورة الرمزية صالح
    تاريخ التسجيل
    Oct 2001
    الدولة
    الرياض
    المشاركات
    2,032
    معدل تقييم المستوى
    0
    الله يعطيك العافية يا ابو عبدالله... تحياتي

  2. #22
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24
    برمجة الكائنات الموجهة ولغة C++

    تعتبر برمجة الكائنات الموجهة من أحدث أساليب البرمجة، وليست بالأسلوب الوحيد حيث سبقتها أسلوب عرف بالبرمجة المنهجية ( Procedural programming ) والتي تعتمد على الدوال كوحدات بناء للبرنامج .
    إذ يتكون البرنامج من مجموعة من الدوال التي تؤدي كل منها وظيفة محددة، وتقوم الدالة الرئيسية باستدعاء تلك الدوال وتنظيم العمل بينها.

    أما أسلوب برمجة الكائنات الموجهة فيعتمد الفصيلة ( class ) كوحدة بناء البرنامج، وتتكون الفصيلة من مجموعة من البيانات والدوال التي تعمل على هذه البيانات.

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

    عناصر برمجة الكائنات الموجهة :

    الفصائل ( classes ):
    الفصيلة كما ذكرنا ما هي إلا بناء يتكون من بعض البيانات بالإضافة إلى دوال تتعامل مع هذه البيانات،


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

    الكائنات ( Objects):
    الكائن هو صورة من الفصيلة يتعامل معها المبرمج، فكما نعرف متغيرات من النوع الصحيح مثلا يمكننا باستخدام أسلوب برمجة الكائنات الموجهة أن نعرف كائنات من فصائل موجودة لدينا لنتعامل معها.

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


  3. #23
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24

    مميزات لغة C++ عن لغة C


    مميزات لغة C++ عن لغة C:

    تدعم لغة C++ أسلوب برمجة الكائنات الموجهة وبالإضافة لذلك تمتاز لغة C++ بالعديد من المزايا والتي سنتناولها فيما يلي بشيء من التفصيل.


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

    حيث يعطى اسم الفصيلة بعد الكلمة المحجوزة ( class )ويتوالى بعد ذلك تعريف البيانات والدوال.

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

    تتيح لغة C++ تحديد درجات لحماية البيانات وذلك على مستوى الفصيلة، وتتحدد درجة الحماية باستخدام الكلمات ( public , private , protected )

    و بالتقدم في البرمجة سنألف استخدام محددات الحماية، وسنتعرض لها بشيء من التفصيل عند الحديث عن الفصائل والكائنات.


    دوال البناء والهدم ( constructors and destructors ):

    كما ذكرنا سابقا فالفصيلة تتكون من بيانات و دوال تتعامل مع هذه البيانات، وتتيح لغة C++ للمبرمج أن ينشئ دالتين خاصتين تسمى إحداهما دالة البناء ( constructor ) وهي دالة تنفذ تلقائيا عند الإعلان عن كائن من هذه الفصيلة. وتظهر فائدة هذه الدالة عندما نرغب في تخصيص قيم ابتدائية لبيانات الفصيلة.


    أما الدالة الأخرى فهي دالة الهدم ( destructor ) وتنفذ تلقائيا عند انتهاء استخدام الفصيلة وتستخدم هذه الدالة لتحرير أجزاء من الذاكرة كنا نستخدمها أثناء استعمال الفصيلة ولم نعد بحاجة إليها، أو لتنفيذ سطور معينة عند الانتهاء من استخدام الفصيلة.
    ودالة البناء تحمل نفس اسم الفصيلة، فمثلا لو كان اسم الفصيلة ( Ball) كانت دالة البناء تحمل الاسم ( Ball ).
    أما دالة الهدم فتأتي بنفس اسم الفصيلة مسبوقا بالعلامة( ~ ) فللفصيلة السابقة دالة الهدم تحمل الاسم ( ~Ball ).

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

    الدوال الصديقة( friend functions ):
    عندما تعلن فصيلة عن دالة صديقة أو عدة دوال صديقة فإنها تسمح لهذه الدوال باستعمال البيانات الأعضاء فيها ولا تسمح لغير هذه الدوال بذلك.
    وكذلك الحال عندما تعلن فصيلة عن فصيلة صديقة، فإنها تسمح لجميع دوال الفصيلة الصديقة باستخدام بيانات الفصيلة الأساسية.
    وسيأتي الحديث بالتفصيل عن الدوال الصديقة في فصل الفصائل والكائنات.

  4. #24
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24

    الدوال-عبارات الاخراج -الموجات


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

    والدالة لها اسمها ويليه قوسين توضع بينهما معاملات الدالة، ونلاحظ أن الدالة الرئيسية في هذا المثال ليس لها معاملات.
    أما الكلمة المحجوزة ( void ) والتي تسبق اسم الدالة فتوضح أن الدالة ليس لها قيمة ترجع بها ، بخلاف بعض الدوال التي نخصص لها نوعا من البيانات بحيث ترجع قيمة من نوع هذا البيان.

    وعبارات الدالة نفسها تحاط بقوسين خاصين" } " ، " { " يسميان بقوسي البلوكات.
    و الدالة الرئيسية هي أول ما ينفذه الكمبيوتر عند تنفيذ البرنامج.



    عبارات الإخراج
    في البرنامج السابق نلاحظ أننا قد استخدمنا عبارة لطباعة الحرفيات، وتختلف هذه العبارة عن العبارات التي تعودنا عليها عند استخدام اللغات الأخرى فهنا لم نستخدم دالة خاصة لتطبع الخرج على الشاشة، بل قمنا بكتابة الحرفي بين علامتي تنصيص واستخدمنا الكلمة المحجوزة ( cout) والمعامل ( << ) والعبارة التي استخدمناها للطباعة يفهمها الكمبيوتر بكما هو موضح بالشكل التالي



    موجهات ما قبل المعالجة( preprocessor directives ):
    العبارة التي بدأ بها البرنامج ( #include <iostream.h>) ليست في الواقع جزءا منه بل هي إعلان عن ملف يحتوي على تعريفات العديد من الدوال التي نحتاجها أثناء البرمجة.
    وتبدأ العبارة بما يسمى بموجه قبل المعالجة وهو الرمز ( #) والأمر الذي يليه موجه للمعالج مباشرة وهناك جزء من المعالج يتعامل مع مثل هذة الأوامر.
    ويقوم بتنفيذ الأوامر الصادرة إلية لتتم عملية المعالجة اعتمادا على المعلومات التي وفرها للمعالج.


  5. #25
    عضو مميز الصورة الرمزية صالح
    تاريخ التسجيل
    Oct 2001
    الدولة
    الرياض
    المشاركات
    2,032
    معدل تقييم المستوى
    0
    وفقك الله يا ابو عبدالله دروسك رائعة وشرحك وافي اتمنى لك التوفيق ...تحياتي لك

  6. #26
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24

    .


    المتغيرات في لغة C++

    تمثل المتغيرات الجزء الأهم من أي لغة، والمتغيرات ليست إلا أسماء رمزية لأوعية اختزان البيانات في الذاكرة. وحسب أنواع البيانات المختزنة تنقسم المتغيرات إلى أنواع عديدة، ويخضع اختيار أسماء المتغيرات لقواعد هي:
    1- ألا يكون اسم المتغير أحد الكلمات المحجوزة باللغة ( Reserved words ) أو الكلمات التي تحمل معنى خاصا مثل( main ) ويمكن التعرف على الكلمات المحجوزة باللغة من دفتر التشغيل المصاحب للمترجم.
    2- يمكن أن يحتوي الاسم على أى حرف من الحروف الأبجدية ( A-Z) سواء صغيرة كانت أم كبيرة، وأي رقم من الأرقام (0-9 ) كما يمكن أن تحتوي على علامة الشرطة السفلى ( _ ) ولكن لا يجوز أن يبدأ الاسم برقم.
    3- لا قيود على طول الاسم ، وتتيح هذه الميزة استخدام أسماء معبرة عن مضمونها، ومن الأفضل دائما استخدام الاسم المعبر عن محتوى المتغير لتسهيل عملية فحص البرنامج في حالة الخطأ من جهة، ولتسهيل عملية الإضافة والتعديل للبرنامج.
    4- الحروف الكبيرة و الصغيرة ليست متكافئة في لغة C++ فمثلا اسم المتغير(MY_NUMBER) يختلف عن الاسم ( my_number) وكلاهما يختلف عن الاسم ( My_Number).

    وسنتناول هنا بالشرح بعض الأنواع الأساسية من المتغيرات التي لا غنى للمبرمج عنها.
    المتغيرات العددية الصحيحة ( integer variables ):
    لنتعرف على كيفية تعريف المتغيرات العددية الصحيحة نلقي نظرة على البرنامج

    قمنا في هذا البرنامج بتعريف متغيرين من النوع الصحيح بالاسمين " var1" و " var2" .
    ولتعريف المتغير نستخدم الكلمة المحجوزة " int" وهي اختصار " integer" أو عدد صحيح، متبوعة باسم المتغير والذي يتبع القواعد المحددة السابق ذكرها لاختيار أسماء المتغيرات.

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

    وبعد عبارة الإعلان عن المتغيرين ننتقل إلى عبارة أخرى وهي عبارة تخصيص القيم للمتغيرات ، حيث نخزن قيما فعلية في الأماكن التي حجزناها سالفا .
    وفي هذا البرنامج نخزن القيمة " 20" في المتغير الأول، والعبارة المستخدمة لتخصيص قيمة المتغير الثاني ليست مباشرة، إذ يقوم المعالج بأداء عملية حسابية قبل تخصيص القيمة، حيث يجمع القيمة " 10" على المتغير الأول.
    ولإخراج قيمة المتغيرات على الشاشة نستخدم العبارتين الأخيرتين .
    المتغيرات الرمزية ( char variables ):
    المتغير الرمزي هو المتغير الذي يسمح بتخزين رمز فيه، والرمز في لغة الكمبيوتر هو كل ما يرد في جدول الكود آسكي والذي يحدد الرموز التي يمكن للكمبيوتر التعامل معها.
    والرموز تحتوي الحروف الكبيرة والصغيرة والأعداد بالإضافة إلى العديد من رموز التحكم.

    ولتعريف متغير رمزي نستخدم العبارة
    char variable_name;
    حيث ( variable_name) هو اسم المتغير الرمزي، ويخضع أيضا للقواعد العامة لتسمية المتغيرات.

    وعند تخصيص قيمة لمتغير رمزي نستخدم علامتي اقتباس مفردتين كما بالعبارة التالية
    variable = ‘A’;
    وهذه العبارة تخصص الرمز ( A) للمتغير ( variable )

    تتابعات الهروب ( escape sequences ) :
    من إمكانيات لغة C++ استخدام بعض رموز الحروف لأداء مهام خاصة ولنلق نظرة على البرنامج
    في هذا البرنامج نعلن عن ثلاثة متغيرات من النوع الرمزي ونخصص الرمز ( A) للمتغير الأول.
    أما المتغيرين الثاني و الثالث فنخصص لكل منهما رمز جديد مكون من علامة الشرطة المائلة العكسية ( back slash ) والتي تعني للمترجم أن الرمز الذي يليها ليس رمزا عاديا بل يحمل دلالة خاصة، والرمز الذي يلي علامة الشرطة المائلة العكسية يقوم بأداء عملية خاصة ، فمثلا إذا جاء بعد علامة الشرطة المائلة العكسية الرمز (n) كانت النتيجة الانتقال لسطر جديد.
    ولو جاء الحرف ( t) كانت النتيجة طباعة عدد من المسافات الفارغة و مماثلة للتي تنتج من استخدام المفتاح ( tab ).

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

    وتعريف المتغيرات الحقيقية لا يختلف عن المتغيرات الأخرى إذ يتم بنفس الطريقة وباستخدام الكلمة المحجوزة ( float) وهي اختصار لكلمة ( floating point ) والتي تعني علامة عشرية، وهي ما يميز الأعداد الحقيقية.

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


    المؤشرات:

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

    والمؤشر هو متغير يحمل العنوان، ويمكننا تعريف مؤشرات لكل أنواع المتغيرات في لغة C++ .

    ولتعريف مؤشر ما يذكر نوعه أولا ثم اسم المتغير مسبوقا بالعلامة ( *)
    وذلك كما في العبارة
    float *ptr;
    وفي هذه العبارة قمنا بتعريف مؤشر لعدد حقيقي، واسم المؤشر هو ptr.

    ويمكننا بنفس الطريقة تعريف مؤشرات لكل أنواع البيانات التي توجد في لغة C++

    عبارات الإدخال باستخدام cin
    تعرفنا على العبارة المستخدمة في الإخراج ونتناول الآن العبارة التي تستخدم للإدخال. والمثال التالي يوضح العبارة قيد الاستخدام
    والإدخال في هذا البرنامج يتم بالعبارة التي تحوي الكلمة المحجوزة ( cin) ويليها المؤثر ( >>) ثم اسم المتغير الذي سنحتفظ فيه بالقيمة المدخلة.

    وتنتظر عبارة الإدخال المستخدم ليضغط على الرمز المراد إدخاله متبوعا بالمفتاح ( Enter ) ليضع القيمة في المتغير المحجوز سابقا.

    السجلات ( Structures):
    السجل عبارة عن مجموعة مترابطة من البيانات كما في المصفوفات ولكن السجل يحتوي بيانات مختلفة الأنواع وليست من نوع واحد كما في المصفوفة.
    والسجل يتكون من عدة حقول ( fields ) تحوي البيانات المختلفة ويستخدم السجل لتخزين بيانات مترابطة متكررة، كما في قاعدة البيانات حيث تتكون قاعدة البيانات من سجلات بكل سجل منها نفس الحقول، ولكن قيم تلك الحقول تختلف من سجل لآخر.

    حيث ( stucture_name) هو اسم السجل وبداخل السجل تتوالى الحقول المختلفة الأنواع ( field1, field2,….. ) ولكل حقل نوعه الخاص.

    وبتعريفنا للسجل يمكننا بعد ذلك تعريف متغيرات من نوع هذا السجل لاستخدامها في البرنامج حسب الحاجة
    ويتم تعريف المتغيرات من السجل كما هو موضح بالشكل التالي الذي يوضح تعريف متغير (var1) من نوع السجل ( structure1)
    ويمكننا تعريف أي عدد من المتغيرات من نوع هذا السجل كما يتطلب البرنامج.

    والآن كيف نتعامل مع السجلات؟؟
    إننا نحتاج مثلا لتخزين قيمة معينة في أحد الحقول، وفي هذه الحالة نستخدم المؤثر (.) والمثال التالي يوضح عمل سجل باسم ( Student) وتخصيص اسم (Mohammed) لحقل الاسم ( name)

    وعند تنفيذ البرنامج تقوم العبارة الأخيرة بطباعة الاسم " Mohammed" وهو الذي قمنا بتخزينه في الحقل (name) من المتغير ( Std1).

    اتخاذ القرارات

    تعرضنا حتى الآن لبرامج متتالية الأوامر، حيث ينفذ الكمبيوتر العبارات الموجودة في البرنامج بالترتيب الذي وردت به .

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

    وسنتعرض هنا لطرق اتخاذ القرار في لغة C++ كيفية تغيير تسلسل التنفيذ تبعا للشروط الموضوعة.

    العبارة الشرطية البسيطة ( if statement):

    تكوين العبارة الشرطية البسيطة كما هو موضح بالشكل التالي

    حيث ( condition ) هو الشرط و ( statement ) هو القرار المراد اتخاذه عند تحقق الشرط المعطى.
    وعندما ترغب في تنفيذ أكثر من عبارة بتحقق الشرط نستبدل العبارة التي تمثل القرار المراد اتخاذه ببلوك به العبارات المراد تنفيذها.
    وفي هذا البرنامج يطبع الكمبيوتر رسالة ليسأل المستخدم عن مجموع الطالب وبعد ذلك يقوم بمقارنتها بالشرط اللازم للتأكد من النجاح ( وهو تجاوز المجموع 50 )فإذا تحقق الشرط يطبع الكمبيوتر رسالة للمستخدم يعلمه أن الطالب ناجح،

    العبارة الشرطية الكاملة ( if ……. else statement)

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

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

    حيث أن ( condition ) هو الشرط
    و ( statement -1 ) هي عبارة النتيجة الأصلية.
    و (statement -2 ) هي عبارة النتيجة البديلة.

    ومنطق اتخاذ القرار هنا هو : " لو تحقق الشرط يقوم الكمبيوتر بتنفيذ عبارة النتيجة الأصلية أما لو لم يتحقق الشرط فيقوم الكمبيوتر بتنفيذ عبارة النتيجة البديلة"

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


    العبارة الشرطية الكاملة باستخدام بلوكات للنتائج

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

    العبارة الشرطية المتدرجة ( if-else- if Ladder ):

    لو افترضنا انه قد طلب منك - كمبرمج - عمل برنامج يمكنه احتساب التقديرات اعتمادا على مجموع الطالب، في هذه الحالة نستخدم عبارة شرطية أيضا ولكن بها عدد من الشروط وعدد مناظر من النتائج. أو ما يطلق علية العبارة الشرطية المتدرجة.

    العبارة الشرطية المتدرجة


    الاختيار متعدد البدائل ( statement switch )
    يعتبر الاختيار المتعدد البدائل بديلا للعبارة الشرطية المتدرجة التي تعرضنا لها سابقا، والواقع أن الاختيار المتعدد البدائل أعد خصيصا ليكون أسهل استخداما من العبارة الشرطية المتدرجة.ويتميز عنها بأنه أفضل توضيحا.


    وكما نرى فإن الاختيار المتعدد البدائل يبدأ بكلمة ( switch) يليها متغير الاختيار والذي تحدد قيمته الاختيار الذي سيتم تنفيذه، ويلي ذلك قوس بلوك كبير يحتوي داخله بلوكات صغيرة كل منها يمثل اختيارا من البدائل المطروحة و كل بلوك من بلوكات البدائل يبدأ بكلمة ( case ) متبوعة بقيمة لمتغير الاختيار - والتي تمثل الشرط - وبعد ذلك تأتي عبارة النتيجة.

    ويختتم بلوك البديل بكلمة ( break) والغرض من هذه الكلمة هو منع الكمبيوتر من تنفيذ عبارة النتيجة التالية!!!
    وقد تبدو هذه العبارة غريبة للوهلة الأولى ويتبادر للذهن سؤال ملح : ألم يتحقق الشرط الأول مثلا فماذا يدفع الكمبيوتر لتنفيذ بقية عبارات النتائج؟؟
    والإجابة عن هذا السؤال هي أن عبارة الاختيار متعدد البدائل لا ترسل للكمبيوتر أمرا بالتوقف بعد تحقق أي شرط فيها، لذا لزم الاستعانة بكلمة (break )

    وبعد نهاية بلوكات البدائل تأتي كلمة (default ) متبوعة بعبارة أو بعبارات ينفذها الكمبيوتر في حالة عدم تحقق أي من الشروط السابقة.


    الحلقات التكرارية

    كثيرا ما نحتاج في البرامج إلى تكرار أمر موجه للكمبيوتر عددا من المرات، وتوفر لغة C++ عدة وسائل تمكن المبرمج من أداء هذا التكرار.
    وعادة ما تسمى هذه الوسائل " الحلقات التكرارية "، ويوجد العديد من الحلقات التكرارية في لغة C سنتناول منها هنا
    1- الحلقة for ( for loop ).
    2- الحلقة while ( while loop ).
    3- الحلقة do…. while ( do-while loop).
    وفيما يلي سنتناول كل حلقة بالدراسة من حيث الشكل العام و أسلوب الاستخدام وأمثلة توضيحية.

    الحلقة for ( for loop):
    تستخدم الحلقة for لتكرار أمر معين ( أو مجموعة من الأوامر) عددا من المرات وتحتاج الحلقة إلي ثلاث عناصر أساسية كما هو موضح بالشكل التالي

    و هذه العناصر هي:
    1- العداد ( counter ) : وظيفة العداد هي تسجيل عدد مرات التكرار.
    2- الشرط ( condition): والشرط الذي يحدد نهاية التكرار إذ يظل التكرار قائما حتى ينتفي الشرط.
    3- الخطوة(step) : وهي القيمة التي تحدد عدد مرات التكرار.


    ومن البرنامج السابق نجد أن الحلقة for بدأت بكلمة ( for ) متبوعة بقوسين بينهما ثلاثة عبارات تفصل بينها علامة الفاصلة المنقوطة.
    العبارة الأولى تخزن القيمة الابتدائية في العداد.
    والعبارة الثانية هي الشرط وهنا الشرط أن قيمة العداد أقل من أو تساوي 20.
    أما العبارة الثالثة فهي تحدد الخطوة، وفي هذا البرنامج يزاد العداد بمقدار 1 كل مرة تنفذ فيها الحلقة.

    والبرنامج السابق ينتج عنه طباعة الأرقام من 1 إلى 20.

    ملاحظات:
    1- العبارات الثلاثة المكونة لحلقة for يجب أن تفصل عن بعضها بالفاصلة المنقوطة، وهذا الخطأ من الأخطاء الشهيرة جدا في عالم البرمجة لذا وجب توخي الحذر.
    2- في حالة تكرار أكثر من أمر يتم استبدال العبارة التي تلي بداية الحلقة for (في المثال السابق هي العبارة ( cout << counter ببلوك يحتوي العبارات المراد تنفيذها.



  7. #27
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24

    .

    معاملات الدوال:
    بعض الدوال تحتاج عند استدعائها إلى متغيرات مثل الدالة ( sum ) في المثال 2
    والمعاملات هي القيم التي تحتاجها الدالة لأداء مهمتها عليها ، في هذه الحالة جمع المعاملين.
    وعلى العكس من ذلك توجد دوال لا تأخذ معاملات مثل الدالة ( DrawLine ) التي استخدمناها في المثال 1

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

    ولحساب القيمة يقوم البرنامج باستدعاء الماكرو ( في الجزء الملون من آخر عبارة من البرنامج )

    والماكرو يشبه الدالة إلى حد ما وإن كان هناك اختلاف بينهما نتناوله الآن بالتفصيل.

    يمر البرنامج بعدة مراحل قبل الحصول على النسخة القابلة للتنفيذ منه وهذه المراحل هي:
    1- كتابة البرنامج وحفظة باستخدام أحد برامج التحرير ( Editors) وتسمى هذه العملية بكتابة الكود ( coding ) ويحتفظ بالملف في هذه الحالة بالإمتداد " .cpp" ويسمى بالملف المصدر ( source file).
    2- عملية الترجمة ( compilation ) وينتج عن هذه العملية البرنامج الهدف الذي يحمل عادة الأمتداد " OBJ" .
    3- عملية الربط بمكتبة اللغة ( Linking) وينتج عن هذة العملية البرنامج التنفيذي الذي يحمل الأمتداد "EXE". والبرنامج التنفيذي هو البرنامج الذي يتم تنفيذه بمجرد إدخال اسمه .

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

    ويمتاز الماكرو عن الدالة بالسرعة والسهولة في الكتابة بالإضافة لاستخدامه أنواعا محايدة من البيانات ( فلم نشترط نوعا معينا من المتغيرات في تعريفنا للماكرو ( SQUARE(A) ) فهو لا يحتاج إلى تحديد النوع كما في الدوال.
    وذلك بالإضافة إلى حصولنا على ملف تنفيذي أصغر في حالة استعمال الماكرو.

    وبصفة عامة يوصى باستخدام الماكرو في العمليات القصيرة التي لا تتعدى سطرا واحدا.

    مصفوفات البعد الواحد

    المصفوفة ذات البعد الواحد هي مجموعة من العناصر مرتبة بحيث يمكن الوصول إلى أى عنصر فيها باستخدام ترتيبه بالنسبة لأول عنصر في المصفوفة
    وفي لغة C++ يأخذ أول عنصر الرقم صفر.
    وعناصر المصفوفة مرتبة بدءا من العنصر الأول والذي يأخذ الرقم صفر
    ويكون العنصر الأول A[0] مساويا للقيمة 2.
    وبالمثل يكون A[1] = 3 ، A[2] = 4 ، وهكذا…


    مصفوفات ذات بعدين
    المصفوفة ذات البعدين تحتوي على عناصر من نفس النوع، ولكنها مرتبة في صفوف و أعمدة .
    وبالتالي تختلف طريقة الوصول للعناصر إذ يلزم لتحديد العنصر استخدام رقم الصف و رقم العمود و الشكل التالي يوضح مصفوفة ذات بعدين
    وعناصر المصفوفة في هذه الحالة كما ذكرنا تحدد باستخدام رقمين رقم الصف ورقم العمود، فالعنصر 12 يقع في العمود الأول والصف الأول أو بلغة الكمبيوتر
    B[0][0]=12. لاحظ أن الترقيم في المصفوفة يبدأ بالرقم صفر دائما.
    وبالمثل يمكن تحديد العناصر المختلفة ، ويذكر رقم الصف أولا ثم رقم العمود، وسنتناول فيما يلي كيفية التعامل مع المصفوفات من خلال لغة C++ والإعلان عنها وتخصيص قيم للعناصر وطباعة العناصر وغيرها من اساليب معالجة المصفوفات.

    مصفوفة البعد الواحد في لغة C++
    المثال الموضح بالشكل التالي يوضح كيفية التعامل مع مصفوفة ذات بعد واحد بالاسم A
    ويقوم المثال بعد ذلك بعدة عمليات نتناولها بالتفصيل
    السطر المشار إليه بالرقم 1 يعلن عن المصفوفة وعناصر المصفوفة من النوع العددي الصحيح ( int) وعدد العناصر أربعة.
    والإعلان عن المصفوفة كالإعلان عن المتغيرات العادية يذكر نوع المتغيرات أولا ثم اسم المصفوفة متبوعا بعدد العناصر بين قوسين مربعين.

    والحلقة for الأولى تقوم بتعبئة المصفوفة بالبيانات التي يدخلها المستخدم واحدا بعد الآخر، ويلحظ أنه لا بد لنا من حلقة تكرارية لإدخال البيانات في المصفوفة.

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

    الفصائل والكائنات ( Classes & Objects )

    سنتناول في هذا الفصل بشيء من التفصيل الفصائل والكائنات لنتعرف عن قرب على برمجة الكائنات الموجهة .
    الفصيلة تتكون من بينات ودوال تتعامل مع هذه البيانات

    والإعلان عن الفصيلة يتكون من:

    أولا : الكلمة المحجوزة ( class ) يليها اسم الفصيلة ( class_name) ويخضع اسم الفصيلة لقواعد عامة هي:

    -ألا يكون اسم الفصيلة أحد الكلمات المحجوزة باللغة ( Reserved words ) أو الكلمات التي تحمل معنى خاصا مثل( main ) ويمكن التعرف على الكلمات المحجوزة باللغة من دفتر التشغيل المصاحب للمترجم.

    - يمكن أن يحتوي الاسم على أى حرف من الحروف الأبجدية ( A-Z) سواء صغيرة كانت أم كبيرة، وأي رقم من الأرقام (0-9 ) كما يمكن أن تحتوي على علامة الشرطة السفلى ( _ ) ولكن لا يجوز أن يبدأ الاسم برقم.

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

    -الحروف الكبيرة و الصغيرة ليست متكافئة في لغة C++ فمثلا اسم البيان(MY_CLASS) يختلف عن الاسم ( my_class) وكلاهما يختلف عن الاسم ( My_Class).

    ثانيا: تحديد درجة الحماية ، ونبدأ عادة بدرجة الحماية الخاصة ( private ) وتلي هذه الكلمة البيانات و الدوال الخاصة بالفصيلة.

    ثالثا: تحديد درجة حماية أخرى ، وفي هذا المثال استخدمنا الدرجة العامة ( public ) وسنتعرف على درجات الحماية بالتفصيل في وقت لاحق.

    يبدأ البرنامج بالتوجيه في السطر الأول ، وفائدة هذا التوجيه إخبار المترجم بمكان الملف المحتوي على تعريفات الدوال الأساسية والتي سنستخدمها في البرنامج.
    وتتابع السطور بعد ذلك كالآتي:

    السطر 02 : تعريف فصيلة جديدة تحمل الاسم ( smallobj) ويلاحظ التعليق المكتوب بعد العلامة " //" ، وهذة الميزة لم تسمح بها لغة C .

    السطرين 04 و 05: تعلنان عن بيان من النوع الصحيح.

    السطر 06: يعلن درجة الحماية العامة، بمعنى أن ما سيأتي بعد ذلك سيكون عاما فيمكن للفصائل المشتقة أن تتعامل معه.

    السطور من 07 إلى 10 فيهما تعريف الدالتين الوحيدتين في الفصيلة.
    ويلاحظ في السطر 10 كيفية الطباعة على الشاشة وهو أسلوب جديد لم يكن مستعملا من قبل في لغة C. وسنتعرض للأساليب الجديدة في فصل مستقل.

    وبداية من السطر 12 يبدأ البرنامج فعليا كالعادة بالدالة main() .

    وفي السطر 14 نعرف كائنين من الفصيلة السابقة، ويلاحظ أن تعريف الكائنات يتم كتعريف المتغيرات العادية.

    السطر 15 يستدعي الدالة ( setdata() ) للكائن الأول، وتجب ملاحظة طريقة الاستدعاء باستخدام المؤثر ( .)، حيث يذكر اسم الكائن متبوعا بالمؤثر ( .) ثم اسم الدالة المراد تنفيذها مع تخصيص قيم لمتغيرات الدالة.

    السطرين 17 و18 يتم فيهما استدعاء الدالة ( showdata() ) لكل من الكائنين ( s1,s2).



  8. #28
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24

    .

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

    و المثال التالي يوضح برنامجا قمنا فيه بالإعلان عن فصيلة ودالة البناء تقوم بعملية تخصيص القيم التي تأخذها لبيانات الفصيلة ( a , b ) نلاحظ في هذا المثال أن الإعلان عن الكائن من الفصيلة ( MyClass ) لم يتم بالطريقة المعتادة حيث قمنا باستخدام قوسين بعد اسم الكائن وبينهما قيمتين عدديتين.
    والإعلان هنا قام باستدعاء دالة البناء الخاصة بالفصيلة والتي بدورها تأخذ القيم المعطاة وتخصصها للبيانين ( a,b) الموجودين بالفصيلة.
    وعند استدعاء دالة ( Show() ) والتي تعرض قيم المتغيرين ( a,b ) نجد أنها تعرض القيم التي تم تخصيصها عند الإعلان عن الكائن ( C1 )

    مصفوفة الكائنات:
    المصفوفة هي مجموعة من العناصر من نفس النوع، وجرت العادة أن نعرف مصفوفات من أنواع المتغيرات المتاحة في اللغة.
    و مع لغة C++ يتمكن المبرمج من الإعلان عن مصفوفة من الكائنات أيضا بنفس الكيفية التي يستخدمها للإعلان عن مصفوفة من المتغيرات العادية.

    ونلاحظ من هذا المثال أننا أعلنا عن مصفوفة كائنات من نوع ( Date ) وهي الفصيلة التي أعلنا عنها قبل الدالة الرئيسية مباشرة.
    ونتعامل مع عناصر مصفوفة الكائنات بطريقة مماثلة لتعاملنا مع عناصر المصفوفات الأخرى، والسطر الثاني يوضح مثلا كيفية استدعاء الدالة ( set_date ) للعنصر الأول من عناصر المصفوفة.

    استعمال المؤشرات مع الكائنات
    المؤشرات ( pointers ) في لغات البرمجة لها أهميتها القصوي ( والتي قد لا يدركها المبتدئ ) ونتيجة لهذة الأهمية ظهرت الحاجة لاستخدام المؤشرات مع الكائنات.
    وتدعم لغة C++ استخدام المؤشرات مع الكائنات، ويتم الإعلان عن مؤشر لكائن ما وللإعلان عن مؤشر لكائن من الفصيلة ( Date ) الموضحة في المثال السابق نستخدم العبارة ( Date *dptr; ) ويلاحظ أنه في هذا المثال قد تم الإعلان عن كائن ( date ) ومؤشر إلى كائن ( dptr) ، ومعاملة كل منهما تختلف عن الآخر حيث نستخدم المؤثر ( -> ) مع المؤشر للكائن للوصول إلى البيان ( day ) فيه بينما استخدمنا المؤثر ( .) مع الكائن ( date ).

    ويجب توخي الحرص دائما عند التعامل مع المؤشرات لتلافي الأخطاء التي يمكن أن تحدث.


  9. #29
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24
    [poet font="Arial,20,white,bold ,normal" bkcolor="black" bkimage="" border="double,10,green" type=0 line=200% align=center use=ex char="" num="0,black"]
    اتمنى انني قدمت الشي المُفيد
    في هذه الدروس التي هي جهد
    مقل وان شاء الله تعالى يكون
    هناك لي فرصة جديدة لنشر
    بعض الأمثلة العكلية في عملية
    فك تشفير المواقع عن طريق لغةc
    وفي الختام اشكر المشرفين والاعضاء
    القائمين على هذا المنتدى والى اللقاء
    [/poet]

  10. #30
    عضو مميز الصورة الرمزية صالح
    تاريخ التسجيل
    Oct 2001
    الدولة
    الرياض
    المشاركات
    2,032
    معدل تقييم المستوى
    0
    الله يعطيك العافيه يا ابو عبدالله جهودك ملموسه من الجميع وتستحق الشكر الجزيل وقد قدمت الشي المفيد والنافع جعله الله في ميزان حسناتك ونحن بانتظار المزيد من جديدك ومفيدك ...تقبل تحياتي

  11. #31
    شاعر
    تاريخ التسجيل
    Mar 2002
    الدولة
    الباحة
    المشاركات
    1,136
    معدل تقييم المستوى
    24

    .

    [poet font="Arial,22,white,bold ,normal" bkcolor="black" bkimage="http://www.zahrani.com.sa/vb//backgrounds/14.gif" border="double,4,gray" type=0 line=200% align=center use=ex char="" num="0,black"]
    شكر الله لك يا استاذ صالح هذه
    المتابعة المستمرة وهي تدل
    على حرصك التام لكل مشاركة
    في هذا المنتدى جعلها الله
    في موازين اعمالك الصالحة
    وتقبل خالص شكري وتقديري
    اخوك ( أبو عبدالله )
    [/poet]

  12. #32
    عضو مميز
    تاريخ التسجيل
    Mar 2002
    الدولة
    الدمام
    المشاركات
    1,346
    معدل تقييم المستوى
    26

    ســــــــــؤال؟

    عندي سؤال للاخ/ابوعبدالله
    س/ اكتب برنامج بلغة c يقوم بطباعة نتائج الجدول التالي :
    a b c a&b&c a||b||c
    --------------------------------------------------------------------------------
    1 1 1
    0 0 1
    0 1 1
    1 1 0
    1 0 0
    1 0 1
    0 0 0
    ولك مني كل الشكر ؟
    اخوك/جار القمر

  13. #33
    عضو مميز
    تاريخ التسجيل
    Mar 2002
    الدولة
    الدمام
    المشاركات
    1,346
    معدل تقييم المستوى
    26

    عفوا

    للاسف الجدول لم يكتب بالصورة المطلوبة ولكن اود ان اوضح ان الجدول هو عبارة عن جدول يتكون من a,b,c ولكل منهم قيمة ثم نحسب aوbوc ثم نحسب a او b اوc
    اتمنى ان الصورة اتضحت

  14. #34
    عضو مشارك
    تاريخ التسجيل
    Feb 2002
    المشاركات
    111
    معدل تقييم المستوى
    0
    مجهود جبار ويعطيك الف عافيه

معلومات الموضوع

الأعضاء الذين يشاهدون هذا الموضوع

الذين يشاهدون الموضوع الآن: 1 (0 من الأعضاء و 1 زائر)

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •