Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ++C من البداية الى البرمجة الكيانية

++C من البداية الى البرمجة الكيانية

Published by Abedalrhman Hazem, 2021-04-10 14:35:05

Description: ++C من البداية الى البرمجة الكيانية

Search

Read the Text Version

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫الى من أستمد منها الدعم والتشجيع ‪ ...‬زوجتي‬ ‫الى هبة الله لي ‪ ...‬أبنائي‬ ‫نقاء‪ ...‬احمد‪ ...‬زينب‪ ...‬زيد‬ ‫الى أعز الأبناء ‪ ...‬حفيدتي‬ ‫دانيه‪ ...‬تقوى‬ ‫‪6‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪7‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫المحتويات‬ ‫المقدمة ‪...................................................................................‬‬ ‫الفصل الأول‬ ‫تمهيد للغة ‪C++‬‬ ‫‪ 1.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 1.2‬بعض الصفات العامة للبرنامج ‪..................................................‬‬ ‫‪ 1.3‬مدخل للبرمجة ‪.....................................................................‬‬ ‫‪ 1.4‬الحاسوب وحل المشاكل ‪..........................................................‬‬ ‫‪ 1.5‬نمذجة كيانات العالم الحقيقي ‪.....................................................‬‬ ‫‪.................................................................................C++ 1.6‬‬ ‫‪ 1.6.1‬لماذا لغة ‪...............................................................C++‬‬ ‫‪ 1.7‬أوامر المعالج الأولي‪..............................................................‬‬ ‫‪ 1.7.1‬الموجهة‪......................................................................‬‬ ‫‪ 1.8‬المعرفات ‪...........................................................................‬‬ ‫‪ 1.9‬البيانات‪..............................................................................‬‬ ‫‪ 1.9.1‬الأعداد الصحيحة‪...........................................................‬‬ ‫‪ 1.9.2‬الأعداد الحقيقية ‪.............................................................‬‬ ‫‪ 1.9.3‬الرموز ‪.......................................................................‬‬ ‫‪ 1.9.3.1‬رموز الدلالة ‪...........................................................‬‬ ‫‪ 1.9.4‬النوع المنطقي‪...............................................................‬‬ ‫‪ 1.11‬التعابير المنطقية ‪.................................................................‬‬ ‫‪ 1.11.1‬العمليات المنطقية‪..........................................................‬‬ ‫‪8‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪ 1.11‬الأعلان عن المتغيرات ‪.........................................................‬‬ ‫‪ 1.12‬الثوابت ‪............................................................................‬‬ ‫‪ 1.12.1‬أسباب استخدام الثوابت‪...................................................‬‬ ‫‪ 1.13‬العوامل ‪...........................................................................‬‬ ‫‪ 1.13.1‬المساواة ) = (‪.............................................................‬‬ ‫‪ 1.13.2‬العمليات الرياضية ) ‪................................... ( =, -, *, /, %‬‬ ‫‪ 1.13.3‬المساواة المركبة‪...........................................................‬‬ ‫‪ 1.13.4‬الفاصلة ( ‪ ) ,‬كأداة ‪........................................................‬‬ ‫‪ 1.14‬التعبير ‪.............................................................................‬‬ ‫‪ 1.15‬توليد الأرقام العشوائي ‪..........................................................‬‬ ‫‪ 1.16‬التعليقات ‪..........................................................................‬‬ ‫‪ 1.17‬عامل الزيادة‪......................................................................‬‬ ‫‪ 1.18‬بعض المحددات الخاصة ‪.......................................................‬‬ ‫‪ 1.18.1‬المحدد ( متطايرة ) ‪.......................................................‬‬ ‫‪ 1.18.2‬المحدد ( المسجل )‪........................................................‬‬ ‫‪ 1.19‬الأدوات الدقيقة‪...................................................................‬‬ ‫‪ 1.21‬تحويل نوع البيانات‪..............................................................‬‬ ‫‪ 1.21‬حجم البيانات ‪.....................................................................‬‬ ‫‪ 1.21.1‬عامل تحويل النوع الخارجي ‪............................................‬‬ ‫‪ 1.22‬الأخطاء التي ترافق البرامج‪....................................................‬‬ ‫‪ 1.23‬موجهات التضمين وفضاء الأسماء‪............................................‬‬ ‫‪9‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫الفصل الثاني‬ ‫أوامر الأدخال والأخراج‬ ‫المقدمة ‪...................................................................................‬‬ ‫‪ 2.1‬هيكليه البرنامج ‪....................................................................‬‬ ‫‪ 2.2‬المخرجات والمدخلات ‪...........................................................‬‬ ‫‪ 2.2.1‬الحالة الأولى‪.................................................................‬‬ ‫‪ 2.2.2‬الحالة الثانية ‪.................................................................‬‬ ‫‪ 2.4‬بعض الصيغ المهمة في عمليات الأدخال والأخراج‪..........................‬‬ ‫‪ 2.5‬التعامل مع البتات ‪..................................................................‬‬ ‫‪ 2.5.1‬عمليات البتات‪ :‬العامل ~ ‪..................................................‬‬ ‫‪ 2.5.2‬عامل مقارنة البتات (و)‪....................................................‬‬ ‫‪ 2.5.3‬عامل المقارنة او‪............................................................‬‬ ‫‪ 2.5.4‬مقارنة البتات باستخدام العامل ‪.................................... XOR‬‬ ‫‪ 2.5.5‬عامل تزحيف البتات لليسار << ‪..........................................‬‬ ‫‪ 2.5.6‬عامل تزحيف البتات لليمين >>‪...........................................‬‬ ‫‪ 2.6‬أمثله محلولة‪........................................................................‬‬ ‫الفصل الثالث‬ ‫ايعازات القرار والتكرار‬ ‫‪ 3.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 3.2‬عبارة أذا ‪............................................................................‬‬ ‫‪ 3.2.1‬عامل الشرط الثلاثي )‪.................................................. (?:‬‬ ‫‪ 3.3‬أذا المركبة‪..........................................................................‬‬ ‫‪11‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪ 3.4‬عبارة التكرار ‪......................................................................‬‬ ‫‪ 3.5‬عبارة التكرار ‪......................................................................‬‬ ‫‪ 3.6‬أيعاز التكرار ‪.......................................................................‬‬ ‫‪ 3.7‬استخدام ) ‪ ( for‬المتداخلة‪.........................................................‬‬ ‫‪ 3.8‬عبارة أختيار الحالة ‪...............................................................‬‬ ‫‪ 3.9‬أمثلة محلولة ‪........................................................................‬‬ ‫الفصل الرابع‬ ‫الدوال‬ ‫‪ 4.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 4.2‬الدوال ‪...............................................................................‬‬ ‫‪ 4.2.1‬فوائد استخدام الدوال ‪....................................................................‬‬ ‫‪ 4.2.2‬تعريف الدالة ‪.............................................................................‬‬ ‫‪ 4.3‬الدالة الرئيسة‪.......................................................................‬‬ ‫‪ 4.4‬أعادة القيم ‪..........................................................................‬‬ ‫‪ 4.5‬اين تكتب الدالة في البرنامج ‪.....................................................‬‬ ‫‪ 4.6‬المتغيرات‪...........................................................................‬‬ ‫‪ 4.7‬استدعاء الدالة ‪......................................................................‬‬ ‫‪ 4.7.1‬الوسائط والعوامل ‪..........................................................‬‬ ‫‪ 4.7.2‬تمرير الوسائط‪..............................................................‬‬ ‫‪ 4.7.3‬الاعادة بالمرجعية‪...........................................................‬‬ ‫‪ 4.8‬الدالة ‪........................................................................inline‬‬ ‫‪ 4.9‬الوسائط الافتراضية‪...............................................................‬‬ ‫‪ 4.11‬الوسائط الثابتة‪....................................................................‬‬ ‫‪11‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 4.11‬تطابق الدوال ‪.....................................................................‬‬ ‫‪ 1.12‬الاستدعاء الذاتي ‪.................................................................‬‬ ‫‪ 1.13‬دوال خاصة ‪......................................................................‬‬ ‫‪ 1.14‬الاعلان عن الدالة ‪...............................................................‬‬ ‫‪ 1.15‬الاجراءات المجردة‪..............................................................‬‬ ‫‪ 1.16‬مختصرات التصريح‪............................................................‬‬ ‫‪ 1.17‬الدوال والمتغيرات المستقرة‪....................................................‬‬ ‫الفصل الخامس‬ ‫المصفوفات‬ ‫‪ 5.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 5.2‬المصفوفات‪.........................................................................‬‬ ‫‪ 5.3‬المصفوفات الاحادية ‪..............................................................‬‬ ‫‪ 5.4‬أنشاء المصفوفة‪....................................................................‬‬ ‫‪ 5.5‬الوصول الى عناصر المصفوفة ‪.................................................‬‬ ‫‪ 5.6‬المصفوفات المتعددة الابعاد ‪......................................................‬‬ ‫‪ 5.6.1‬الاعلان عن المصفوفة الثنائية ‪............................................‬‬ ‫‪ 5.6.2‬الوصول لعناصر المصفوفة الثنائية ‪......................................‬‬ ‫‪ 5.6.3‬ابتداء المصفوفة الثنائية ‪....................................................‬‬ ‫‪ 5.6.4‬طباعة المصفوفة‪............................................................‬‬ ‫‪ 5.7‬مصفوفات الأحرف ‪..............................................................‬‬ ‫‪ 5.8‬استخدام المصفوفات كوسائط ‪....................................................‬‬ ‫‪12‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫الفصل السادس‬ ‫المؤشرات‬ ‫‪ 6.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 6.2‬المؤشرات ‪..........................................................................‬‬ ‫‪ 6.3‬أداة العنونه )*( ‪.................................................................. (&) and‬‬ ‫‪ 6.4‬أهمية المؤشرات‪...................................................................‬‬ ‫‪ 6.5‬أبتداء المؤشرات‪...................................................................‬‬ ‫‪ 6.6‬رياضيات المؤشرات ‪.............................................................‬‬ ‫‪ 6.7‬المصفوفات والمؤشرات‪..........................................................‬‬ ‫‪ 6.8‬مصفوفة المؤشرات ‪...............................................................‬‬ ‫‪ 6.9‬أخطاء بسبب أحتمال استخدام خاطيء للمؤشر‪................................‬‬ ‫‪ 6.11‬دوال تخصيص الذاكرة الالي ‪..................................................‬‬ ‫‪ 6.11‬العناوين والارقام ‪................................................................‬‬ ‫الفصل السابع‬ ‫متواليات الرموز‪ -‬السلاسل الرمزية‬ ‫‪ 7.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 7.2‬ابتداء سلسلة الرموز المنتهية برمز النهاية‪.....................................‬‬ ‫‪ 7.3‬استخدام متواليات الحروف المنتهية برمز النهاية ‪.............................‬‬ ‫‪ 7.4‬قراءة سلسلة حرفية من لوحة المفاتيح ‪..........................................‬‬ ‫‪ 7.4.1‬الدالة )(‪............................................................................gets‬‬ ‫‪ 7.4.2‬الدالة ‪.......................................................................... getline‬‬ ‫‪ 7.4.3‬قراءة اسطر متعددة ‪..................................................................‬‬ ‫‪ 7.5‬بعض دوال مكتبة السلاسل الرمزية ‪............................................‬‬ ‫‪13‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 7.6‬مصفوفات السلاسل الرمزية ‪.....................................................‬‬ ‫‪ 7.6.1‬مثال لاستخدام مصفوفة السلاسل الرمزية ‪................................. s‬‬ ‫‪ 7.7‬المؤشرات والسلاسل الرمزية ‪...................................................‬‬ ‫‪ 7.8‬مقدمة الى صنف السلاسل الرمزية ‪.............................................‬‬ ‫‪ 7.9‬استخدام )== ‪ (= and‬مع السلاسل الرمزية في ‪.............................C‬‬ ‫‪ 7.11‬تحويل السلاسل الرمزية الى ارقام ‪............................................‬‬ ‫الفصل الثامن‬ ‫التراكيب‪ ،‬الأتحاد‪ ،‬وحقول البتات‬ ‫‪ 8.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 8.2‬التراكيب ‪............................................................................‬‬ ‫‪ 8.3‬مقارنة بين التركيب والمصفوفة ‪.................................................‬‬ ‫‪ 8.4‬الأعلان عن التركيب ‪.............................................................‬‬ ‫‪ 8.5‬الوصول الى حقول التركيب ‪.....................................................‬‬ ‫‪ 8.6‬التركيب البسيط ‪....................................................................‬‬ ‫‪ 8.7‬تهيئة التركيب ‪......................................................................‬‬ ‫‪ 8.8‬الدوال والتراكيب ‪..................................................................‬‬ ‫‪ 8.9‬مصفوفة من التراكيب ‪............................................................‬‬ ‫‪ 8.9.1‬التهيئة لمصفوفة تركيب ‪...................................................‬‬ ‫‪ 8.11‬مصفوفات داخل التركيب‪.......................................................‬‬ ‫‪ 8.11‬التراكيب المتداخلة‪...............................................................‬‬ ‫‪ 8.12‬المؤشرات والتراكيب ‪...........................................................‬‬ ‫‪ 8.12.1‬التعامل مع الاتحاد ‪.................................................................‬‬ ‫‪14‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪ 8.12.2‬تهيأة أو أبتداء الأتحاد ‪..............................................................‬‬ ‫‪ 8.13‬الأتحاد المجهول ‪.................................................................‬‬ ‫‪ 8.14‬حقول البتات ‪......................................................................‬‬ ‫‪..........................................................................Typedef 8.15‬‬ ‫‪ 8.16‬التراكيب والمصفوفات ‪..........................................................‬‬ ‫‪ 8.17‬الوراثة في التراكيب‪.............................................................‬‬ ‫‪ 8.18‬مصفوفات التراكيب ‪.............................................................‬‬ ‫الفصل التاسع‬ ‫الصنوف‬ ‫‪ 9.1‬المقدمة ‪..............................................................................‬‬ ‫‪ 9.2‬لماذا نخلق انواع جديدة ‪...........................................................‬‬ ‫‪ 9.3‬الصنوف‪............................................................................‬‬ ‫‪ 9.4‬مفهوم الكيان ‪.......................................................................‬‬ ‫‪ 9.5‬تخصيص الذاكرة للكيانات ‪.......................................................‬‬ ‫‪ 9.6‬الصنوف والكيانات‪................................................................‬‬ ‫‪ 9.7‬الصنف والاعضاء ‪................................................................‬‬ ‫‪ 9.8‬الأعلان عن الصنف ‪..............................................................‬‬ ‫‪ 9.8.1‬أتفاقيات التسميه ‪.............................................................‬‬ ‫‪ 9.9‬تعريف الكيان ‪......................................................................‬‬ ‫‪ 9.11‬الوصول الى اعضاء الصنف ‪..................................................‬‬ ‫‪ 9.11‬الخاص والعام ‪...................................................................‬‬ ‫‪ 9.12‬تعريف دوال الصنف‪............................................................‬‬ ‫‪ 9.13‬استدعاء دوال العضويه‪.........................................................‬‬ ‫‪15‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 9.14‬جعل البيانات الاعضاء خاصة ‪.................................................‬‬ ‫‪ 9.15‬البيانات الأعضاء الساكنة‪.......................................................‬‬ ‫‪ 9.16‬الدوال الأعضاء الساكنة ‪........................................................‬‬ ‫‪ 9.17‬تداخل الدوال الأعضاء‪..........................................................‬‬ ‫‪ 9.18‬أعادة الكيانات ‪....................................................................‬‬ ‫‪ 9.19‬دوال البناء والهدم‪................................................................‬‬ ‫‪ 9.19.1‬دالة البناء والهدم الافتراضية ‪............................................‬‬ ‫‪ 9.19.2‬دوال البناء المتعددة في الصنف ‪.........................................‬‬ ‫‪ 9.19.3‬استنساخ دالة البناء ‪........................................................‬‬ ‫‪ 9.21‬الدوال الاعضاء الثابتة ‪..........................................................‬‬ ‫‪ 9.21‬مصفوفة الكيانات ‪................................................................‬‬ ‫‪ 9.22‬الكيان كوسيط في دالة‪...........................................................‬‬ ‫‪ 9.23‬استخدام المصفوفات مع الصنوف‪.............................................‬‬ ‫‪ 9.24‬الواجهات البينية مقابل التعريف‪................................................‬‬ ‫‪ 9.25‬تنفيذ الدوال ‪............................................................... inline‬‬ ‫‪ 9.26‬الدوال الصديقة‪...................................................................‬‬ ‫‪ 9.27‬الاصناف الصديقة ‪...............................................................‬‬ ‫‪ 9.28‬المؤشرات‪ ,‬الدوال والاشكال المتعددة‪.........................................‬‬ ‫‪ 9.29‬عوامل ادارة الذاكرة‪.............................................................‬‬ ‫‪ 9.31‬التأشير الى الاعضاء‪............................................................‬‬ ‫‪ 9.31‬دالة الاستنساخ ‪...................................................................‬‬ ‫‪ 9.32‬عوامل التطابق ‪...................................................................‬‬ ‫‪16‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪ 9.33‬الكلمة المفتاحية ‪...........................................................This‬‬ ‫الفصل العاشر‬ ‫الوراثة‬ ‫‪ 11.1‬ماهي الوراثة ‪.....................................................................‬‬ ‫‪ 11.2‬الصيغة القواعدية لاشتقاق صنف ‪..............................................‬‬ ‫‪ 11.3‬الوراثة المتعددة ‪..................................................................‬‬ ‫‪ 11.4‬دوال البناء‪ ،‬الهدم‪ ،‬والوراثة‪....................................................‬‬ ‫‪ 11.4.1‬تمرير وسائط لدوال البناء في الصنف الاساس‪.......................‬‬ ‫‪ 11.5‬الدوال التي لاتورث اليا ‪.........................................................‬‬ ‫‪ 11.6‬دوال التجاوز ‪....................................................................‬‬ ‫‪ 11.7‬تعدد الأشكال ‪.....................................................................‬‬ ‫‪ 11.7.1‬المؤشرات الى الصنف الأساس ‪.........................................‬‬ ‫‪ 11.8‬الاعضاء الافتراضية‪............................................................‬‬ ‫‪ 11.9‬تجريد الاصناف الاساس‪........................................................‬‬ ‫الفصل الحادي عشر‬ ‫القوالب‬ ‫‪ 11.1‬تعريف القوالب‪...................................................................‬‬ ‫‪ 11.2‬وسائط القالب ‪.....................................................................‬‬ ‫‪ 11.2.1‬الصيغة العامة للاعلان عن قوالب الدالة مع وسائط القالب‪..........‬‬ ‫‪ 11.3‬قوالب الدوال ‪.....................................................................‬‬ ‫‪ 11.4‬القوالب ‪............................................................................‬‬ ‫‪ 11.5‬قالب الصنف ‪.....................................................................‬‬ ‫‪ 11.6‬التعامل مع الاستثناءات ‪.........................................................‬‬ ‫‪17‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 11.7‬وسيط كتلة ‪............................................................... catch‬‬ ‫‪ 11.8‬الاستثناءات ‪.............................................try – throw – catch‬‬ ‫‪ 11.9‬تعريف اصناف استثناء خاصة بك ‪............................................‬‬ ‫‪ 11.11‬تحديات تنفيذ معالج الاستثناء ‪.................................................‬‬ ‫‪ 11.11.1‬الاستثناءات اثناء بناء وهدم الكيانات‪..................................‬‬ ‫‪ 11.11.2‬تفعيل استثناءات من دوال الهدم خطر ‪................................‬‬ ‫‪ 11.11‬التمييز بين اسم النوع والصنف ‪..............................................‬‬ ‫‪ 11.12‬اخطاء وقت الترجمة اثناء وقت الربط ‪......................................‬‬ ‫‪ 11.13‬أعلان الصداقة في قوالب الصنف ‪...........................................‬‬ ‫‪ 11.13.1‬الصداقات الاعتيادية‪.....................................................‬‬ ‫‪ 11.13.2‬صداقة القوالب العامة ‪...................................................‬‬ ‫‪ 11.13.3‬علاقة صداقة القوالب الخاصة‪.........................................‬‬ ‫‪ 11.13.4‬اعتماديات الاعلان ‪......................................................‬‬ ‫الفصل الثاني عشر‬ ‫عمليات الملف‬ ‫‪ 12.1‬المقدمة ‪............................................................................‬‬ ‫‪ 12.2‬الملف‪..............................................................................‬‬ ‫‪ 12.3‬معالجة الملفات ‪...................................................................‬‬ ‫‪ 12.4‬الاعلان عن الملف ‪.............................................................‬‬ ‫‪ 12.4.1‬الدالة العضو )(‪......................................................open‬‬ ‫‪ 12.4.1.1‬قراءة وكتابة رمز من ‪ /‬او في ملف ‪............................‬‬ ‫‪ 12.4.2‬الدالة العضو ) (‪.................................................... close‬‬ ‫‪ 12.5‬دوال اعضاء لبعض حالات حزمة البيانات ‪..................................‬‬ ‫‪18‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪ 12.5.1‬الدالة العضو )(‪........................................................eof‬‬ ‫‪................................................................................. fail ( ) 12.5.2‬‬ ‫‪...................................................................... bad( ) 12.5.3‬‬ ‫‪............................................................................... good( ) 12.5.4‬‬ ‫‪ 12.6‬امثله محلولة ‪......................................................................‬‬ ‫‪ 12.7‬عمليات الملف الثنائي ‪...........................................................‬‬ ‫‪ 12.8‬الهياكل وعمليات الملف‪.........................................................‬‬ ‫‪ 12.9‬الصنف وعمليات الملف ‪........................................................‬‬ ‫‪ 12.11‬مصفوفة من كيانات صنف وعمليات الملف‪................................‬‬ ‫‪ 12.11‬الاصناف المتداخلة وعمليات الملف‪.........................................‬‬ ‫‪ 12.12‬معالجة ملفات الوصول العشوائي‪............................................‬‬ ‫‪ 12.13‬الوصول العشوائي ‪.............................................................‬‬ ‫‪ 12.14‬فحص حالات الادخال والاخراج ‪............................................‬‬ ‫‪ 12.15‬القراءة والكتابة في الملف النصي‪............................................‬‬ ‫‪ 12.16‬الأدخال والأخراج الثنائي غير المنسق‪......................................‬‬ ‫‪ 12.16.1‬استخدام )(‪...............................................get() and put‬‬ ‫‪ 12.16.2‬قراءة وكتابة كتل من البيانات ‪..........................................‬‬ ‫الملاحق ‪..................................................................................‬‬ ‫المصادر ‪.................................................................................‬‬ ‫‪19‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫المقدمة‬ ‫أَ ّماا بَ َدا َد َح َما لد الل له الَا لل َج َدا َ ال َح َما َد مَ َمنَاان للنَ َد َما لئا لهَ َو َمداا ان لما َن بَ ئلا لهَ‬ ‫َو َو لسااي ن ىلااى لجنانلاا لهَ َو َساابَبَان لل لزيااا َد له ى َحاااانل لهَ َوال ََاا له َعَااى َسااو لل له نَ لبااي‬ ‫ال َر َح َما لةَ وىمااللأ الأَ لئ َما لةَ َو لسارا لة الأ َما لةَ الم َنتَ َطا لب لما َن لمينَا لة ال َِا َرللأَ َوسا لَ لة‬ ‫ال َم َج لد الأَ َق َدللأَ َو َم َغ َر لس ال لفطا ل الم َد لر لقَ َوفَ َر لع ال َد لء الم َث لما لر الماو ل لقَ َو َعَاى‬ ‫أَ َها ل بَ َي لتا له َمَاا لبيلُ لّ ال‪ََ،‬ا لمَ َو لع ََا لم الأ َما لمَ َو َمناا ل الادي لن الوا ليا َح لةَ َو َمثا لقيا ل‬ ‫الفَ َضاا ل ال َرا لج َحاا لةَ اللَهااََى الله َعََاا َي له َم أَ َج َم لدااي َنَ اللَهاا هن تَِااوإ ىزا نء للفَ َضاا لَ له َمَ‬ ‫َومِافأهن لل َد َم لَ له َمَ و لكفا نء لل لطي لب فَ َر لع له َم َوأَاللَهَل له َمَ ماا أَناا َ فَ َجا ار ساا لم اعَ َو َ اوى‬ ‫نَ َج ام مالل اع‪.‬‬ ‫لغات البرمجة تسمح للمبررمج باسرتخدام اللغرة بشركل مشرابهة لتلرك التري‬ ‫تكتب بشكل طبيعي وهي تستند على توليد ايعازات تعتمد على الحاسوب لتنفيذ‬ ‫البرنرامج‪ .‬هنرا العديرد مرن لغرات البرمجرة مثرل ‪،Cobol ،Fortran ،Pascal ،C‬‬ ‫‪ Basic‬وغيرهرا الكثيرر وجميرع هرذ اللغرات تهردف الرى انجراز مهمرة خاصرة‪،‬‬ ‫تسهيل التعامل مع الحاسوب لحل المشكلات‪ ،‬وتنفيذ العديد من التطبيقات التري‬ ‫نحتاج اليها بشكل يومي ودوري‪.‬‬ ‫لغرة البرمجرة ‪ C++‬هري اضرافة جديردة لقائمرة كبيررة مرن لغرات البرمجرة‬ ‫المتوفرة حاليا‪ .‬فهي لغة قوية ومرنة لها مالانهاية من التطبيقات‪.‬‬ ‫تدعى لغة ‪ C++‬لغة مترجمرة‪ ،‬حير لريب بمقردور كتابرة برنرامج ‪C++‬‬ ‫وتنفيذة على حاسبتك مالم يكن لديك مترجم ‪ ،C++‬هذا المترجم يسرتلم ايعرازات‬ ‫لغة ‪ C++‬الخاصة بك ويحولها الى شكل يمكن لحاسربتك قرائتهرا‪ ،‬متررجم ‪C++‬‬ ‫هو الاداة التي يستخدمها حاسوبك لفهم ايعازات لغة ‪ C++‬في برنامجك‪.‬‬ ‫‪21‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫أمكانيرة تنمريم ومعالجرة البيانرات هرو مفتراا النجراا فري الحيراة الحديثرة‪.‬‬ ‫صمم الحاسوب لحمل ومعالجة كميات كبيرة مرن المعلومرات بسررعة وكفراء ‪.‬‬ ‫بشكل عام فران الحاسروب لايمكنرة عمرل أي شريء مرالم يرتم أخبرارة مايجرب أن‬ ‫يقروم بره‪ .‬لرذلك وجردت ‪ C++ .C++‬هري لغرة برمجرة عليرا (أي قريبرة مرن لغرة‬ ‫الأنسرران وفهمررة) والترري تسررمح لمهنرردس البرامجيررات بالتواصررل بكفرراءة مررع‬ ‫الحاسروب‪ .‬وتعرد لغرة ‪ C++‬مرن اللغرات ذات المرونرة العاليرة والقابلرة للتكيرف‪.‬‬ ‫ومنررذ أختراعهررا فرري عررام ‪ 1981‬فقررد تررم اسررتخدامها لبرررامج واسررعة ومختلفررة‬ ‫تضررمنت تعليمررات مخزنررة علررى الحاسرروب للمسرريطرات الدقيقررة ( ‪micro‬‬ ‫‪ ،)controller‬أنممة التشرغيل (‪ ،)operating systems‬التطبيقرات‪(applications) ،‬‬ ‫وبرامج الرسروم (‪ .)graphics programs‬وأصربحت ‪ C++‬بسررعة لغرة البرمجرة‬ ‫يتم أختيارها‪.‬‬ ‫التي‬ ‫ومرن خرلال تدريسري لمرادة البرمجرة والبرمجرة الكيانيرة باسرتخدام لغرة‬ ‫البرمجرة ‪ C++‬شرعرت بوجرود الحاجرة الملحرة لكتراب يبسرط المفراهيم والافكرار‬ ‫التي تساعد الطالب والقاريء على تعلم البرمجرة وتطروير مهاراترة وامكانياترة‬ ‫في مجال البرمجة الكيانية‪ ،‬ومن الملاحظ افتقار المكتبرة العربيرة الرى مصرادر‬ ‫علميرة متخصصرة مكتوبرة باللغرة العربيرة ممرا يمطرر القراريء الرى الاسرتعانة‬ ‫بالمصادر الاجنبية والتى تفقدة الكثير مرن المهرارات والمعرارف نمررا للرنقص‬ ‫الكبير باللغة الاجنبية التي كتب بها الكتاب‪.‬‬ ‫من هذا شرعت بكتابة هرذا الكتراب الرذي يركرز علرى لغرة البرمجرة ‪C++‬‬ ‫ومايتعلق بها فضلا عن البرمجة الكيانية‪ ،‬وحاولت جاهدا ان يكون هذا الكتاب‬ ‫بسيط يسهب بشرا المفاهيم وقواعد اللغة فضلا عن احتوائة الى اكثر من ‪231‬‬ ‫مثرالا محلرولا‪ ،‬وهرو يفيرد الاشرخاص الرذين لريب لرديهم فكررة عرن البرمجرة او‬ ‫‪21‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫هرؤلاء الرراغبين بتطروير امكانيراتهم البرمجيرة وحترى المختصرين ومحترفري‬ ‫البرمجة‪.‬‬ ‫ولابد من الاشارة هنا الى ان غالبية حلول البرامج التي وضعت في هذا‬ ‫الكتاب لم تراعي ان يكون البرنامج برنامج احتراف ومثالي وذلك لان الهردف‬ ‫من الامثلة المحلولة هو توضيح افكار ومفاهيم معينة لذلك تم التركيز على هذا‬ ‫المبدأ مبتعدين بعض الشريء عرن المثاليرة وعرن اختصرار بعرض الشرفرات فري‬ ‫كتابة البرامج او ان يكون البرنامج ذات وقت اقصر بالتنفيذ‪.‬‬ ‫الكتاب نمم وفقا لفصول عددها اثنا عشرة فصلا وكل فصرل ركرز علرى‬ ‫موضوع او مواضيع معينة وكما يأتي‪:‬‬ ‫الفَ الاول ركز على اعطاء القاريء فكرة عامة عن البرمجة وبعض‬ ‫المصرطلحات كثيررة الاسرتخدام وهرو يعتبرر مردخلا للبرمجرة ولرذلك فلابرد لمرن‬ ‫يرغب الولوج الى عالم البرمجة ان يفهم ماورد بهذا الفصل قبل ان ينتقرل الرى‬ ‫الفصول الاخرى‪.‬‬ ‫الفَا الثااني يبردأ براولى خطروات البرمجرة والتري تعتمرد علرى اوامرر‬ ‫الادخرال والاخرراج ويوضرح هرذا الفصرل كيفيرة التعامرل مرع اوامرر الادخرال‬ ‫والاخراج وتم ايراد عدد من الامثلة التي توضح ذلك‪.‬‬ ‫فري الفَا الثالا ترم الانتقرال الرى شررا الايعرازات التري تتعامرل مرع‬ ‫القرارات في البرمجة وهي حجر الزاوية في الكثير من البرامج‪.‬‬ ‫اما الاساس الذي تبنرى عليره لغرة البرمجرة ‪ C++‬الا وهري الردوال فقرد ترم‬ ‫تخصيص الفَ الرابع لها ليتم التعامل معها بشكل موسع‪ ،‬هذا الفصل توسرع‬ ‫بشررا كرل مالره علاقرة بالردوال وكيفيرة اسرتخدامها والضروابط التري تحكمهرا‬ ‫وميزات استخدام الدوال‪.‬‬ ‫‪22‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫المصفوفات خصص لها الفَ الطامس‪ ،‬والمصفوفات لهرا الكثيرر مرن‬ ‫التطبيقرات وهري تسراعد بشركل او اخرر علرى تسره‪-‬يرل حرل المشركلات‪ .‬وقرد ترم‬ ‫خلال هذا الفصل التعامل مع المصرفوفات الاحاديرة والثنائيرة ويحتروي الفصرل‬ ‫على الكثير من الامثلة المحلولة‪.‬‬ ‫بعرد هرذ الفصرول التري تعرد اساسرية للرراغبين بتطروير امكانيراتهم فري‬ ‫البرمجة يتم التقدم باتجاة المؤشررات التري خصرص لهرا الفَا الااادس وترم‬ ‫خلال هذا الفصل التركيز على المؤشرات والمرجعية وينتقل الفصل مرن بيران‬ ‫اهمية المؤشرات‪ ،‬واستخدام المؤشرات مع المصفوفات الى التخصيص الالري‬ ‫للذاكرة وتوضيح الكثير من خواص المؤشرات باستخدام امثلة مختلفة‪.‬‬ ‫ونمرا لاهمية الرموز والتعامل معها فقرد افررز لهرا الفَا الااابع ولرم‬ ‫توضع مع المصفوفات كما هرو معتراد وذلرك لاهميتهرا‪ ،‬ولرذلك فقرد ترم التركيرز‬ ‫علرى كيفيرة التعامرل مرع الرمروز وتوضريح الردوال التري تتعامرل مرع الرمروز‬ ‫وعلاقرة الرمرروز بالمصررفوفات وماهيرة الاعمررال الترري يمكرن ان تطبررق علررى‬ ‫الرموز بشكل عام‪.‬‬ ‫الفَا الثاامن هرو مرحلرة انتقاليرة مرن البرمجرة المهيكلرة الرى البرمجرة‬ ‫الكيانية وقد توسع هذا الفصرل بتوضريح التراكيرب والاتحرادات وكيفيرة التعامرل‬ ‫مع البتات‪ ،‬وكيفية تعامل التراكيب مع المؤشرات‪.‬‬ ‫الفصل الاول في البرمجة الكيانية هو شرا الصنوف والذي كان الفَ‬ ‫التاساع مخصرص لره حير ترم الشررا باسرهاب عرن مفراهيم الصرنوف وماهيرة‬ ‫الكيانات والبرمجة الكيانية‪ ،‬وفي هذا الفصل ترم شررا الكثيرر مرن الردوال التري‬ ‫لها اهمية في البرمجة الكيانية‪ .‬لابد ان اشير الى ان هذا الفصرل ترم التوسرع بره‬ ‫بشكل كبير لتوضيح الكثير من مفاهيم البرمجة الكيانية وبما يتناسب مع اهميرة‬ ‫هذا الموضوع‪.‬‬ ‫‪23‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫الفَا الدا ار تطرقنرا بره الرى مفهروم اخرر مهرم مرن مفراهيم البرمجرة‬ ‫الكيانية وهو الوراثة وحاولنا شرحها بشكل مبسرط وكيفيرة الاسرتفادة مرن فكررة‬ ‫الوراثة‪ ،‬وكيفية تاثيرها على البرمجة الكيانية‪.‬‬ ‫ومن صفات البرمجة الكيانيرة موضروع القوالرب والرذي افررد لره الفَا‬ ‫الحااد عشار وترم التطررق للقوالرب بشركل عرام وقوالرب الصرنف وكرذلك ترم‬ ‫التطرق الى الاستثناءات لما لها اهمية كبيرة في البرمجة بشكل عام‪.‬‬ ‫اخيرا كان الفَ الثاني عشر الذي ركزنا فيه على التعامل مع الملفات‬ ‫بكرل انواعهرا والتركيرز علرى كيفيرة اسرتخدام العديرد مرن الردوال الخاصرة التري‬ ‫تتعامل مع الملفات‪.‬‬ ‫واذا كان لابد من كلمة اخيرة فاني اقول اني برذلت جهردا كبيررا لاخرراج‬ ‫هذا الكتاب بشكل يساعد جميع المهتمين بالبرمجة على الاستفادة منه واذا كران‬ ‫هنا نقص او ملاحمة فانرا علرى اسرتعداد لسرماعها عسرى ان تنفعنرا فري وقرت‬ ‫لاحق لتنقيح الكتاب وسراكون سرعيد بكرل مرايردني مرن ملاحمرات‪ ..‬فقرد اردت‬ ‫من هذا الكتاب مرضاة الله‪ ،‬واسال الله عز وجل ان يحسبه في ميزان حسناتي‪.‬‬ ‫نضال الدباد‬ ‫النجف الأ رف‪ /‬الدراق ‪1122‬‬ ‫‪[email protected]‬‬ ‫‪24‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪25‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫الفصل الأول‬ ‫تمهيد للغة‬ ‫‪C++‬‬ ‫‪ 2.2‬المقدمة‬ ‫البرنامج هو سلسلة متتالية من الايعازات‪ ،‬يمكننا تشبيهها بوصفة أعداد وجبرة‬ ‫غذائية‪ ،‬النوتة الموسيقية‪ ،‬أو نموذج حياكة‪ .‬وتتميز عنها برامج الحاسوب بشكل عام‬ ‫بأنها أطول أمتدادا وكتابتهرا تسرتدعي دقرة وعنايرة فرائقتين‪ .‬وقبرل الشرروع والخرو‬ ‫في موضوع البرمجة لابد من تعريف بعض المصطلحات التي تحتاجها لاحقا‪.‬‬ ‫‪ 1.2‬بعض الصفات العامة للبرنامج‬ ‫• يحتاج البرنامج بصورة عامة الى من يكتبة وهوو المبورمج )‪ ،)Programmer‬والوى‬ ‫المعوالج (‪ )Processor‬لتفسوير وتنفيو (‪ )Execution OR Running‬الايعوازات أو‬ ‫الأوامور (‪ ،)Instructions OR Commands‬وتسومى عمليوة تنفيو كامول البرنوامج‬ ‫(المعالجة) (‪.)Process‬‬ ‫• أن تنفي البرنامج يوت بصوورة متتاليوة (أي أيعواز (‪ )instruction‬بعود الأخور حسوب‬ ‫تسلسلها)‪ ،‬مال يت الأخبار خارجيا عن غير ذلو ‪ .‬هو ا يعنوي أن نبودأ بوأول أيعواز‬ ‫وينف ث الثاني والثالث وهك ا لحوين الوووول الوى الأيعواز الأخيور‪ .‬هو ا النمووذج‬ ‫ممكن أن يتغير بطريقة محددة مسبقا بشكل جيد من قبول المبورمج‪ ,‬كموا يمكون أن‬ ‫يوت تكورار جوزء مون البرنوامج وحسوب تحديودات المبورمج (مثول عمليوة تكورار‬ ‫مقطع من نوتة موسيقية)‪.‬‬ ‫• كل برنامج يجب أن يكون له تأثير‪ ..‬مثلا فوي القطعوة الموسويقية يكوون هو ا التوأثير‬ ‫عبووارة عوون ووووت‪ ،‬أمووا فووي بوورامج الحاسوووأ هوو ا التووأثير يكووون علووى شووكل‬ ‫مخرجات‪ ،‬أما مطبوعة أو معروضة على الشاشة‪.‬‬ ‫‪26‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫• كل برنامج يعمل على أشياء محددة (تدعى كيانات) للووول الى التأثير المطلووأ‬ ‫(مثلا في ووفة أعداد الطعام فان ه ه الاشياء ممكن أن تكون اللحوم‪ ،‬الخضار‪،‬‬ ‫وغيرها)‪ ،‬أما في البرامج فأن ه ه الاشياء تكون متغيرات‪.‬‬ ‫• فوي العديود مون البورامج يجوب أن يوت الأعولان المسوبك عون الكيانوات (المتغيورات)‬ ‫التوي سويت اسوتخدامها‪ ،‬وماهيوة أنواعهوا (هو ا مشوابهة لعمليوة اعوداد وجبوة عوام‬ ‫حيث يجب أن تحتوي الووفة ابتداءا تحديد المواد التي ستستخدم وكمياتها)‪.‬‬ ‫• في بعض الايعازات ربما تكون هناك حاجة أن يترك أتخاذ قرار تنفي الأيعاز الى‬ ‫المعالج وفقا لشر أو شرو معينة تحدد مسبقا‪ ..‬فمثلا (عندالقيام بالحياكة يكتب‬ ‫في الووفة مثلا ما يلي \"عند توفر خيو حياكة بيضاء تستخدم فوي خولاف ذلو‬ ‫استخدم الخيو الصفراء\")‪.‬‬ ‫• ربما تكوون هنواك حاجوة لتنفيو أيعواز أو مجموعوة مون الايعوازات لأكثور مون مورة‪.‬‬ ‫عليه الما هناك أيعاز يراد تكراره فأن عدد مورات التكورار يجوب ان تحودد‪ .‬مون‬ ‫ممكن أنجاز ذل أما بتحديد عدد مرات التكرار بشكل دقيك أو تحديد عدد مورات‬ ‫التكرار اعتمادا على شر محدد مسبقا (مثلا في الحياكه نقول نستخدم الخيط ذو‬ ‫اللون الأبيض بقدر ثلاثين نف ة) أو بفحو حالوة تكوون مون ضومن العمليوة (موثلا‬ ‫يستخدم الخيط الأبيض لحين أن تنتهي من رس دائرة أو شكل معين)‪.‬‬ ‫‪ 2.3‬مدخل للبرمجة‬ ‫الحاسرروب هررو أداة أو ماكنررة لحررل المشرراكل‪ ،‬حيرر يسررتلم البيانررات المدخلررة‪،‬‬ ‫ويجري عليها عمليات حساب بسرعة كبيرة ليوفر مخرجات كنتائج لعملية الحساب‪.‬‬ ‫تررتم السرريطرة علررى عمررل الحاسرروب بواسررطة سلسررلة مررن الايعررازات أو الأوامررر‬ ‫(‪ )Instructions OR Commands‬تسمى بمجموعها برنامج (‪.)Program‬‬ ‫يتعامل الناس مع مهام مختلفة لغر أنجازها‪ ،‬مثل ضبط الوقرت فري السراعة‬ ‫أو تشغيل جهاز التلفزيون وهنا أمور أكثر تعقيدا مثل عمل قالب مرن الكيرك‪ ،‬ابردال‬ ‫حنفية ماء‪ ،‬بناء فناء في الدار وهرذ الأمرور الأكثرر تعقيردا تحتراج الرى مهرارات أكثرر‬ ‫‪27‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫لحل المشاكل‪ .‬فمثلا أن المشاكل الواجب عليك حلها عند أعداد قالرب مرن الكيرك تبردأ‬ ‫من اعداد الوصفة التي تتضمن ماهية المواد التي تدخل في صرناعتة وكمياتهرا‪ ،‬نروع‬ ‫القالب الذي يجرب أن يسرتخدم وكرذلك الخطروات الواجرب اتباعهرا لاعرداد هرذا القالرب‬ ‫والتي تتضمن أسبقية المواد التي تضاف وكيفية خلطهرا ودرجرة الحررارة‪ ...‬الر ‪ ،‬اذاً‬ ‫عليك أن تحلل المشكلة وتجد الحلول‪ .‬لنبدل المطرب بعمرل أكثرر تعقيردا وهرو معالجرة‬ ‫مشكلة في حنفية ماء مثلا‪ ،‬هنا لا توجد وصفة تتبع لأنجاز هذا العمل‪ ،‬حي لا توجد‬ ‫وصفة تتبع لتحديد الأجزاء الواجب ابدالها والأدوات الواجرب اسرتخدامها‪ ،‬ولا يوجرد‬ ‫دليل عمل يمثل الخطوات الواجب أتباعهرا لانجراز مثرل هكرذا عمرل‪ ،‬مثرل هرذا العمرل‬ ‫يحتاج من الشخص الذي يقوم بالعمل (السبا ) بربعض التحضريرات المهمرة المسربقة‬ ‫وبعدها يقرر ما هي المرواد المطلوبرة ومرا هرو العمرل المطلروب قبرل الشرروع بالعمرل‬ ‫فمثلا هل المطلوب ربط الماء الحار مع البارد او يكونان منفصرلين وكيفيرة السريطرة‬ ‫على درجة حرارة الماء وكيفية الربط بمصادر الميا وغيرها من التفاصيل الواجرب‬ ‫معرفتها مسبقا وجميع ذلك يعتبر جزء من تحَي المشَِة الابتدائيَ بعدها يجرب أن‬ ‫يقرر ما هي الأدوات الواجب اسرتخدامها مثرل قراطع الأنابيرب‪ ،‬مفراتيح الرربط والفرتح‬ ‫وهررل تكررون مسررننة أم ملسرراء وهكررذا‪ .‬أمررا الخطرروات الواجررب أتباعهررا فهرري تمثررل‬ ‫الخطوات اللازمة لفتح الحنفية القديمة وإبدالها بالجديدة‪.‬‬ ‫أن المكونات (‪ )components‬التي تستخدم في حل المشراكل تسرمى (‪)objects‬‬ ‫(أشررياء أو كيانااا )‪ .‬وهرري تمثررل كتررل البنرراء والادوات الترري تتفاعررل لانترراج المنررتج‬ ‫النهائي‪ .‬نحن نرى الأشياء أو الكيانات بدلالة مواصفاتها التري تبرين ماهيتهرا‪ ،‬وكرذلك‬ ‫الأفعرال التري تصرف مرا يمكرن أن تقروم بره هرذ الكيانرات‪ .‬فمرثلا لرو عردنا الرى أمثلتنرا‬ ‫السابقة‪ ..‬أولا أعداد قالب الكيك‪ ..‬فأن قالب الكيك الذي يسرتخدم للشرواء هرو كيران لره‬ ‫مواصفات مثل الشكل (دائري‪ ،‬مستطيل‪...‬الر )‪ ،‬عمرق القالرب (\"‪ ،)6\" ،3\" ,2‬المرادة‬ ‫المصرنوع منهرا القالرب (المنيروم‪ ،‬تفلرون‪ ،‬زجراج)‪ .‬كرذلك الفررن هرو كيران مرع أفعرال‬ ‫للسريطرة علرى الحررارة ومصردر الحررارة‪ ،‬هرذا الكيران لره مواصرفات مرثلا الحجرم‪،‬‬ ‫مستوى الحرارة‪ ،‬مصدر الحرارة (الأعلرى للشروي والأسرفل للتسرخين)‪ ،‬أمرا الأفعرال‬ ‫‪28‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫فهررري مررررثلا تشررررغيل وأطفرررراء الفرررررن‪ ،‬أختيررررار مصرررردر الحرررررارة‪ ،‬ضرررربط درجررررة‬ ‫الحرارة‪...‬ال ‪.‬‬ ‫أمرا المثرال الخراص بمعالجرة مشركلة حنفيرة المراء فهنرا كيانرات مثرل روابرط‬ ‫الأنابيب‪ ،‬المفك‪ ،‬الحنفية‪ ...‬وكل منها له خواص وصفات خاصة وكذلك أفعال فمرثلا‬ ‫المفك له قياس‪ ،‬مثل طول القبضة‪ ،‬حجم الفكو وهكذا‪ ،‬أما أفعالها فأن فتحة فكوكها‬ ‫ممكن أن تنمم لتلائم حجوم مختلف الأنابيب‪.‬‬ ‫عندما نحدد الكيانات فأن حل المشكلة يجب أن يعررف الوسريط (‪ )agent‬الرذي‬ ‫يرنمم عمليرة التفاعرل برين الكيانرات لأنجراز المهمرة‪ .‬فمرثلا الطبراخ الرذي يقروم بأعرداد‬ ‫قالب الكيك هو الوسيط فهو يقوم بمزج المرواد‪ ،‬دهرن القالرب‪ ،‬تسرخين الفررن‪ ،‬ويحردد‬ ‫الوقت اللازم لبقاء قالب الكيك في الفرن‪.‬‬ ‫كررذلك فررأن السرربا هررو الوسرريط الررذي يزيررل الحنفيررة القديمررة‪ ،‬يقطررع ويصررل‬ ‫الأنابيب‪ ،‬ويركب الجزء الجديد مع الواشرات أو اللحيم أو أي وسيلة أخرى‪.‬‬ ‫أن تكنولوجيرا الكيانرات تنمرر الرى حرل المشركلة مرن منمرار الكيانرات‪ .‬التحليرل‬ ‫الأولي يعرف الكيانات كعناصر لعملية حل المشكلة‪ ،‬أما التحليرل النهرائي فأنره يخلرق‬ ‫خطة رئيسية أو وصفة تسمح للوسيط بترتيب أفعال الكيانات‪.‬‬ ‫دعنا ننمر الى حالات حقيقية تتضمن كيانات وحل لمشكلة‪:‬‬ ‫• نفرض أن في غرفت في وقوت متوأخر مون الليول وقوررت أن تقورأ كتابوا‪ ،‬تتطلوب‬ ‫المشكلة مجموعة من الكيانات‪ ..‬فيجب أن يكون لدي كتاأ‪ ،‬وسيلة أنارة‪ ،‬وربما‬ ‫تحتاج الوى أورا وقلو ‪ .‬انوت الوسويط الو ي ينيور ويطفويء الضووء‪ ،‬يفوت الكتواأ‬ ‫وينظ كتابة الملاحظات‪.‬‬ ‫• جهاز التحك عن بعد يحل الكثير من مشاكل مشاهدة برامج التلفزيون‪ .‬ه ا الجهاز‬ ‫يحتوي على لوحة مفاتي وهو كيان بينما مشاهد التلفزيون هو الوسويط المسوؤول‬ ‫عن تشغيل المنظ ‪ ،‬أختيار القناة‪ ،‬وينظ الصوت‪.‬‬ ‫‪29‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 2.4‬الحاسوأ وحل المشاكل‬ ‫الوسيط في عالم حل المشاكل الحقيقي يتعامل ماديا مع الكيانات‪ .‬ولكرن عنردما‬ ‫يتدخل الحاسوب فأن العملية تتغيرر لرتلائم طبيعرة الماكنرة‪ .‬الحاسروب هرو أداة حسراب‬ ‫تعمل مع بيانات الأرقام والأحرف‪ ،‬فهو يتصف بوجود ذاكرة لخزن البيانرات ونترائج‬ ‫الحسرابات‪ ،‬لوحرة المفراتيح لأدخرال البيانرات‪ ،‬أزرار للتعامرل مرع العمليرات‪ ،‬وشاشرة‬ ‫لعر النتائج‪ .‬الحاسوب لا يشبة الحاسبة الجيبية البسيطة فهو جهاز من الممكن أن‬ ‫يررنمم باسرررتخدام الايعررازات المصرررممة للتعامررل مرررع حررالات مختلفرررة‪ .‬أن عمليرررات‬ ‫الحاسروب مصرممة للتعامرل مرع سريل مرن المعلومرات حير أن البيانرات تردخل الرى‬ ‫الذاكرة‪ ،‬اجراء عمليات الحساب‪ ،‬تجهيز النتائج كمخرجات‪.‬‬ ‫عنردما تسرتخدم الحاسروب لحرل المشركلة فأنرك تحتراج الرى أن تركرز أنتباهرك‬ ‫على الكيانات (وهي بيانات) والتي لها خرواص ولهرا أفعرال تتمثرل بعمليرات الوصرول‬ ‫ومعالجة البيانات‪.‬‬ ‫الشفرة الحقيقية لبرنامجك تتكون من جزئين‪ :‬المتغيرات (الكيانات) وايعرازات‬ ‫التنفيررذ‪ ،‬المتغيرررات تسررتخدم للتعامررل مررع البيانررات المسررتخدمة بواسررطة برنامجررك‪.‬‬ ‫ايعازات التنفيذ تخبر الحاسوب مراذا يعمرل بالبيانرات‪ ..‬توضرع المتغيررات (الكيانرات)‬ ‫في ذاكرة الحاسوب المخصصة للقيم‪ C++ ،‬يحدد هذ المواقع من خلال أسم المتغير‬ ‫ويفضل استخدام الاحرف الصغيرة للمتغيرات بينما الأحرف الكبيرة للثوابت‪.‬‬ ‫‪ 2.5‬نم جة كيانات العال الحقيقي‬ ‫كيانات الحاسوب تمثل ملخص لنماذج العالم الحقيقري‪ .‬فري العرالم الحقيقري فرأن‬ ‫الطالب يعتبر كيان معقد مع خواص ماديرة مختلفرة مثرل (الجرنب‪ ،‬لرون البشررة‪ ،‬لرون‬ ‫العرررين‪ ،‬لرررون الشرررعر‪..‬الررر ) ومعلومرررات عرررن السررركن (العنررروان الحرررالي‪ ،‬مسرررقط‬ ‫الرررأس‪..‬الرر )‪ .‬وعنرردما يقبررل الطالررب فرري الجامعررة فأنرره يراجررع دائرررة التسررجيل‪،‬‬ ‫الحسابات‪ ،‬القسم المقبول فيه وربما الرابطة الطلابية‪ ،‬وكل اتصال مع الدوائر أعلا‬ ‫يتضمن التعامل مرع بيانرات مختلفرة ومشراكل مختلفرة للحاسروب‪ .‬كرل أتصرال يتضرمن‬ ‫‪31‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫بيانات خاصرة ويحتراج منرا الرى خلرق نمراذج مختلفرة للطالرب داخرل الحاسروب‪ .‬فمرثلا‬ ‫دائرة الحسابات لا تهتم بعمر الطالب‪ ،‬عنوان السكن‪ ،‬الجرنب‪ ..‬لكرن هرذ المعلومرات‬ ‫مهمررة مررثلا لرردائرة الأقسررام الداخليررة بينمررا دائرررة الحسررابات تهررتم بررالرقم التعريفرري‬ ‫للطالب‪ ،‬طريقة دفع الأقساط أن كانت هنا أقساط‪...‬ال ‪.‬‬ ‫الكيانات هي قوالب تتضمن الصفات والعمليات المتوفرة لرذلك الكيران‪ .‬بررامج‬ ‫الحاسوب هي أدوات قويرة لحرل المشركلة‪ .‬تبردأ بتحليرل المشركلة‪ ،‬ثرم خلرق سلسرلة مرن‬ ‫الخطرروات الترري تقررود الررى الحررل‪ ،‬هررذ السلسررلة مررن الخطرروات ترردعى خوارزميررة‬ ‫(‪ ،)Algorithm‬والخوارزميررة هرري سلسررلة مررن الأفعررال والخطرروات تقررود الررى حررل‬ ‫للمشكلة في وقت محدد‪ .‬حل المشكلة بالحاسوب يتم بواسطة الخوارزميات التي تنفرذ‬ ‫بواسررطة البرررامج‪ ،‬ولتصررميم برنررامج يجررب أولا أن تعرررف الكيانررات الترري تخررزن‬ ‫وتتعامرل مرع البيانرات‪ ،‬فعنردما يرتم اختيرار الكيران فأنرك تحتراج الرى تطروير برنرامج‬ ‫رئيب‪ ،‬لره خوارزميرات تروفر المردخلات الضررورية‪ ،‬وكرذلك ترترب أو ترنمم عمليرة‬ ‫التفاعرل برين الكيانرات وتكترب المخرجرات علرى الشاشرة‪ .‬هرذا البرنرامج الررئيب هرو‬ ‫الوسيط لانجاز عمليات الحساب للمهام‪.‬‬ ‫‪C++ 1.6‬‬ ‫أمكانيرة تنمريم ومعالجرة البيانرات هرو مفتراا النجراا فري الحيراة الحديثرة‪ .‬صرمم‬ ‫الحاسوب لحمل ومعالجرة كميرات كبيررة مرن المعلومرات بسررعة وكفراءة‪ .‬بشركل عرام‬ ‫فران الحاسروب لايمكنرة عمرل أي شريء مرالم يرتم أخبرارة مايجرب أن يقروم بره‪ .‬لرذلك‬ ‫وجدت ‪ C++ .C++‬هي لغة برمجة عليا (أي قريبرة مرن لغرة الأنسران وفهمرة) والتري‬ ‫تسرمح لمهنردس البرامجيرات بالتواصرل بكفراءة مرع الحاسروب‪ .‬وتعرد لغرة ‪ C++‬مرن‬ ‫اللغات ذات المرونرة العاليرة والقابلرة للتكيرف‪ .‬ومنرذ اختراعهرا فري عرام ‪ 1981‬فقرد ترم‬ ‫اسررتخدامها لبرررامج واسررعة ومختلفررة تضرررمنت تعليمررات مخزنررة علررى الحاسررروب‬ ‫للمسريطرات الدقيقرة (‪ ،)micro controller‬أنممرة التشرغيل (‪،)operating systems‬‬ ‫التطبيقررات (‪ ،)applications‬وبرررامج الرسرروم (‪ .)graphics programs‬وأصرربحت‬ ‫‪ C++‬بسرعة لغة البرمجة التي يتم أختيارها‪.‬‬ ‫‪31‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫صممت ‪ C++‬كجسرر برين المبررمج والحاسروب‪ .‬الفكررة بجعرل المبررمج يرنمم‬ ‫البرنامج بطريقة (هو‪ /‬هي( يفهمة بسهولة‪ .‬بعدها يقروم المتررجم (هرو برنرامج واجبره‬ ‫تحويل اللغة العليا الرى اللغرة التري يتعامرل بهرا الحاسروب) بنقرل اللغرة (البرنرامج) الرى‬ ‫صريغة تسرتطيع الماكنرة اسرتخدامها (التعامرل معهرا)‪ .‬برنرامج الحاسروب يتكرون مرن‬ ‫جزئين‪ :‬هيكل البيانات والايعازات‪ .‬يفر الحاسوب او لايفر القليل مرن التنمريم‬ ‫علرى هرذين الجرزئين‪ .‬بعرد هرذا كلره فران الحواسريب مصرممة لان تكرون عامرة قردر‬ ‫الأمكرران‪ .‬البيانررات فرري الحاسرروب تخررزن كسلسررلة مررن البايتررات و ‪ C++‬تررنمم هررذ‬ ‫البايترات ببيانرات مفيردة‪ .‬الأعرلان عرن البيانرات تسرتخدم مرن قبرل المبررمج لوصرف‬ ‫المعلومات التي (هو‪/‬هي) يتعامل معها‪.‬‬ ‫برامج ‪ C++‬تكتب بلغة عليرا باسرتخدام الأحررف‪ ،‬الأرقرام‪ ،‬والرمروز الأخررى‬ ‫التي نجدها على لوحة المفاتيح‪ .‬واقعا فان الحواسيب تنفذ البرامج المكتوبة بلغرة دنيرا‬ ‫تدعى لغة الماكنرة (‪( )machine code‬والتري هري سلسرلة مرن الأرقرام ممثلرة بطريقرة‬ ‫الصفر‪ ،‬واحد)‪ .‬لذلك‪ ،‬وقبل ان يتم استخدام البرنامج يجرب أن يكرون هنرا عردد مرن‬ ‫التحويلات‪ .‬البرامج تبدأ كفكرة فري رأس المبررمج‪ .‬يقروم المبررمج بكتابرة افكرارة فري‬ ‫ملف‪ ،‬يردعى ملرف المصردر (‪ )source file or source code‬مسرتخدما محررر اللغرة‪.‬‬ ‫هررذا الملررف يحررول بواسررطة المترررجم الررى (الملررف الهرردف) (‪ .)object file‬بعرردها‬ ‫يستدعي البرنامج الررابط (‪ )linker‬حير ياخرذ الملرف الهردف ليربطرة أو يشرركة مرع‬ ‫روتينات معرفة مسبقا مرن المكتبرة القياسرية (‪ )standard library‬لينرتج برنرامج قابرل‬ ‫للتنفيذ (والذي هو عبارة عن مجموعة من ايعازات لغة الماكنرة)‪ .‬الشركل (‪ )1.1‬يبرين‬ ‫خطوات تحويل البرنامج المكتوب بلغة عليا إلى برنامج قابل للتنفيذ‪.‬‬ ‫فري لغرة البرمجرة ‪ C++‬فرأن البرنرامج هرو تجمياع لَادوال‪ .‬والبررامج البسريطة‬ ‫تحتوي على دالة واحدة فقط هي ((‪ ))main‬وعادة فأن التنفيذ يبدأ عنرد (‪ )main‬حير‬ ‫أن جميع البرامج بلغة ‪ C++‬يجب أن تحتوي على الدالة ((‪.))main‬‬ ‫‪32‬‬

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ Program File name Source code Compile Debug Library Compi programs ler Data Errors Object code file Link Linker Errors Executab le code file Run Run time errors Results ‫ خطوات تنفيذ البرنامج‬:) 2.2 ( ‫شكل‬ 33

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫ملاحظة‪//:‬‬ ‫كل عبارة في لغرة ‪ C++‬يجرب أن تنتهري بفرارزة منقوطرة عردا بعرض الحرالات‬ ‫الأستثنائية التي سيشار اليها في حينها‪.‬‬ ‫ملاحظة‪//:‬‬ ‫‪ -‬الايعررازات (الأوامررر أو العبررارات ‪ :)statements‬تبرردو مختلفررة فرري لغررات‬ ‫البرمجة المختلفة‪ ،‬ولكن هنا وظائف أو دوال اساسية قليلرة تمهرر فري كرل البررامج‬ ‫تقريبا منها‪:‬‬ ‫الأدخرال ‪ input‬وهري عمليررة الحصرول علررى البيانرات مررن لوحرة المفرراتيح او‬ ‫الملفات او الأجهز الاخرى‪.‬‬ ‫الأخررراج ‪ output‬عررر البيانررات علررى الشاشررة او ارسررالها الررى ملررف او‬ ‫الأجهزة الأخرى‪.‬‬ ‫الرياضيات ‪ math‬أنجاز العمليات الرياضية الاساسية مثل الجمع والضرب‪.‬‬ ‫الاختبار ‪ testing‬أختبار بعض الشروط وتنفيذ بعض العبارات وفقا لذلك‪.‬‬ ‫التكرررررار ‪ repetition‬أنجرررراز بعررررض الاعمررررال بشرررركل متكرررررر‪ ،‬عررررادة مررررع‬ ‫بعض التغيرات‪.‬‬ ‫‪ 2.6.2‬لماذا لغة ‪C++‬‬ ‫‪ C++‬هي اللغة الاكثر استخداما في العرالم‪ .‬هرذ اللغرة لهرا صرفات وخصرائص‬ ‫تميزها عن لغات البرمجة الاخرى‪ ،‬واكثر هذ الصفات هي‪:‬‬ ‫• البرمجة الكيانية‬ ‫‪34‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫امكانيرة تنمريم البرنرامج علرى شركل كيانرات تسرمح للمبررمج تصرميم تطبيقاتره‪،‬‬ ‫لتكرون اكثرر اتصرال برين الكيانرات بردلا مرن هيكرل الشرفرة المتتاليرة‪ .‬فضرلا عرن انهرا‬ ‫تسمح بامكانيه كبيرة الى اعادة استخدام الشفرة بطرق اكثر منطقية وانتاجيه‪.‬‬ ‫• النقل‬ ‫بامكانرك عمليررا ان تترررجم نفرب شررفرة ‪ C++‬علررى الاغلرب فرري اي نرروع مررن‬ ‫الحواسيب وانممة التشغيل دون اجراء تغييرات صعبة‪.‬‬ ‫• الأيجاز‬ ‫الشفرة التي تكتب بلغة ‪ C++‬هي قصريرة جردا بالمقارنرة مرع اللغرات الاخررى‪،‬‬ ‫حي يفضل استخدام الرموز الخاصة للكلمات المفتاحية‪ ،‬وهذ تخترزل بعرض الجهرد‬ ‫المبذول من المبرمج‪.‬‬ ‫• برمجة الاجزاء‬ ‫مرن الممكرن ان تكرون تطبيقرات ‪ C++‬مرن عردد مرن الملفرات لشرفرة المصردر‬ ‫والتي تترجم بشكل منفصل‪ ،‬ثم يتم ربطها مع بعرض‪ ،‬هرذا يسراعد علرى تقليرل الوقرت‬ ‫وليب من الضروري اعادة ترجمة كامل التطبيق عندما يتم عمرل تغييرر مفررد ولكرن‬ ‫فقط الملف الذي يحتوية‪ .‬بالاضافة لذلك‪ ،‬فان هذ الخاصية تسرمح لرربط شرفرة ‪C++‬‬ ‫مع الشفرة الناتجة بلغات اخرى مثل المجمع (‪ )assembler‬او ‪.C‬‬ ‫• التوافك مع لغة ‪C‬‬ ‫‪ C++‬هي البوابة الخلفية للتوافرق مرع لغرة ‪ ،C‬اي شرفرة تكترب بلغرة ‪ C‬سريكون‬ ‫من السهولة تضمينها في برنامج ‪ C++‬دون الحاجة لاي تغييرات صعبة‪.‬‬ ‫• السرعة‬ ‫الشفرة الناتجة من تجميع ‪ C++‬هي كفوءة جدا‪ ،‬وذلك بسبب كونها لغة ثنائية‪،‬‬ ‫فهي تعد من اللغات ذات المستوى العالي ومن اللغات ذات المستوى الواطيء فضلا‬ ‫عن صغر حجم اللغة نفسها‪.‬‬ ‫‪35‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 2.7‬أوامر المعالج الأولي ‪The C++ Preprocessor Commands‬‬ ‫‪ 2.7.2‬الموجة ‪#include‬‬ ‫تعد هرذ التعليمرة الأشرهر والأوسرع أسرتعمالا بعرد التعليمرة (‪ )#define‬فري لغرة‬ ‫‪ ،C++‬عمل هذا الموجة هو أنره يطلرب مرن المعرالج الاولري (‪ )preprocessor‬اضرافة‬ ‫محتويرات الملرف المطلروب مرع هرذ التعليمرة (يرذكر أسرم هرذا الملرف بعرد ‪#include‬‬ ‫مباشرة ويكون محدد بين العلامتين (> <)) وحشرة في الملف المصدر‪ ،‬حير يرتم‬ ‫ضرم وأحترواء هرذا الملرف مرع ملرف البرنرامج عنرد التنفيرذ‪ ،‬هرذا الملرف يردعى ملرف‬ ‫التعليمات‪ ،‬ويعود السبب في ذلك الى ان بعض الايعازات داخل البرنامج تحتاج الرى‬ ‫تعاريف ودوال يتضمنها هذا الملف‪.‬‬ ‫‪ 2.8‬المعرفات ‪Identifires‬‬ ‫كل البرامج تحتوي على نوعين من الرموز‪:‬‬ ‫الناوع الاول‪ ..‬وهري الرماوز التاي تداود الاى الَغاة‪ ..‬تسرتخدم هرذ الرمروز‬ ‫بطريقتين أما أن تكون على شكل رمز واحد أو أثنين مثل (‪)- َ+ َ() َ; َ:‬‬ ‫أو علررى شرركل كلمررات تسررمى الكلمررات المحجرروز او الكلمررات المفتاحيررة‬ ‫(‪ )KeyWords‬مثل‪)inline َdo َwhile َelse َif( :‬‬ ‫النوع الثاني‪ ..‬هي المدرفا وهي عبارة عن رموز تستخدم في البرامج فأمرا‬ ‫أن تكرون معرفرات قياسرية مثرل (‪ ,)char, int, float… etc‬أو أن تكرون‬ ‫معرفات يتم أختيارها مرن قبرل المبررمج‪ ،‬وهرذ المعرفرات الأخيررة نسرميها‬ ‫أيضرا المتغيررات (‪ ،)Variables‬والمتغيار هرو رمرز أو أكثرر يسرتخدم فري‬ ‫البرنامج ليشير الى محتوى موقع في الذاكرة‪.‬‬ ‫ملاحظة‪//:‬‬ ‫المتغياار‪ ..‬فرري أغلررب لغررات البرمجررة فررأن المتغيررر هررو مكرران لتخررزين‬ ‫المعلومات‪ ،‬المتغير هو مكان أو موقع في ذاكرة الجهاز حي يمكن تخرزين قيمرة‬ ‫‪36‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫بداخلة ثم أمكانية أستعادة هذ القيمة فيما بعد‪.‬‬ ‫والمتغيرر هرو أسرم يمثرل بررقم أو سلسرلة حرفيرة ( وممكرن حررف واحرد أو‬ ‫تعبير منطقي)‪.‬‬ ‫من الممكن تصور ذاكرة الجهاز على أنهرا مجموعرة مرن المواقرع التري تخرزن‬ ‫فيها المعلومات‪ ،‬هذ المواقرع مرقمرة بشركل متسلسرل تبردأ مرن الصرفر وتنتهري بحجرم‬ ‫الذاكرة‪ ،‬تدعى هذ الأرقام عناوين الذاكرة (‪ ،)Addresses‬يمثل أسم المتغيرر (بطاقرة‬ ‫عنونة) ملصقة على أحرد المواقرع بحير تسرتطيع الوصرول اليره سرريعا دون الحاجرة‬ ‫الرى معرفرة العنراوين الحقيقيرة فري الرذاكرة (لرذا فران المتغيرر سيشرير الرى أحرد هرذ‬ ‫العناوين‪ ،‬وعند حاجتك وضع قيمة في الموقع الذي يشير له هذا المتغير فان المعالج‬ ‫(‪ )processor‬سيذهب الى العنروان الرذي يشرير لره المتغيرر ويضرع فيره القيمرة وكرذلك‬ ‫عندما تريد أن تعرف قيمة المتغيرر فرأن المعرالج يرذهب الرى العنروان الرذي يشرير لره‬ ‫المتغير ويقرأ القيمة التي فيه)‪ .‬يعرر الشركل الترالي هرذ الفكررة والتري تبرين بعرض‬ ‫المواقع في الذاكرة والتي من الممكن ان يشير اليها المتغير‪.‬‬ ‫شكل رقم (‪ :.(2.2‬بعض مواقع الذاكرة المنطقية‬ ‫ملاحظة‪//:‬‬ ‫لغرة ‪ C++‬تعرد حساسرة لحالرة الأحررف ( أي أنهرا تميرز برين الأحررف الكبيررة‬ ‫والصغيرة)‪ ،‬لذلك فأن الحرف الصرغير يعرد معرفرا غيرر مسراوي لشركلة الكبيرر ( أي‬ ‫أن (‪ )a‬لا يساوي (‪ .))A‬علما ان بعض لغات البرمجة لاتميز بين حالات الاحرف‪.‬‬ ‫‪37‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫تتكرون أسرماء المتغيررات مرن \" حررف واحرد‪ ،‬مجموعرة حرروف‪ ،‬أو حرروف‬ ‫وأرقرام ومررن الممكررن اسررتخدام الشررارحة \"‪ ..‬علررى أن يكررون دائمررا أول مااز باساام‬ ‫المتغير حرف او ا حة حتما مثل‪:‬‬ ‫)‪(x, ad, _count, endofpoint, end_of_point, Saad6, x345‬‬ ‫هذ جميعا متغيرات مقبولة‪.‬‬ ‫أما المتغيرات التالية فهي متغيرات غير مقبولة‪:‬‬ ‫)‪(first name, next.word, 15may, Ten%‬‬ ‫والسبب هو أن المتغير الأول يحتوي علرى فررا ‪ ،‬الثراني يحتروي علرى نقطرة‪،‬‬ ‫الثال يبدأ برقم‪ ،‬أما الأخيرر فيحتروي علرى رمرز لايمكرن اسرتخدامة مرع المتغيررات‪..‬‬ ‫وهرذ جميعهرا غيرر مقبولرة فري البرنرامج‪ .‬أن أختيرار المتغيرر مرن قبرل المبررمج تعرد‬ ‫مسرألة مهمرة ويفضرل أن يعكرب المتغيرر المعنرى الرذي يسرتخدم لأجلرة المتغيرر فمرثلا‬ ‫يفضل استخدام المتغير (‪ )sum‬مع الجمع وأذا ما استخدم متغير أخر فان ذلك سروف‬ ‫لا يررؤدي الررى أي خطررأ‪ ،‬وكررذلك يفضررل أن لا يكررون المتغيررر طويررل فمررثلا يفضررل‬ ‫استخدام متغير متكون من حرف واحد عندما نستخدمة في برنامج قصير ولا يتكرر‬ ‫كثيرا‪ ،‬أما استخدام متغير من حرف واحد ويستخدم بشركل متكررر وبرأجزاء متكرررة‬ ‫في برنامج طويل فأنه يعد أختيارا سيئا بالرغم من أنه لا يعيق عمل البرنامج‪.‬‬ ‫‪ 2.9‬البيانات ‪Data‬‬ ‫كل عنصر من البيانات في البرنامج أما أن تكون قيمتة ثابتة أو متغيرة ( قيمة‬ ‫المتغيررر ربمررا تتغيررر خررلال تنفيررذ البرنررامج)‪ .‬كررل متغيررر (والررذي هررو بيانررات) فرري‬ ‫البرنامج يجب أن يكون لره نروع وبموجرب هرذا النروع سريتم تحديرد المسراحة الخزنيرة‬ ‫اللازمرة لقيمرة هرذا المتغيرر‪ ،‬وكرذلك تحردد العمليرات التري ممكرن أجرااهرا علرى هرذا‬ ‫المتغير (تحدد لكل نوع عدد البايتات فري الرذاكرة التري تحجرز لخرزن قريم ذلرك النروع‬ ‫وعنرد الكتابرة فري هرذا الموقرع فران الكتابرة سرتحدد بعردد بايترات هرذا النروع أي لا يرتم‬ ‫تجاوز هذا العدد من البايتات حتى وان كانت القيمة تتجاوز الحدود العليا والدنيا لهذا‬ ‫‪38‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫النروع‪ ،‬وعنرد القرراءة فانره سريتم قرراءة القريم الموجرودة فري هرذ البايترات فقرط وبرذلك‬ ‫تتجنرب الخطرأ فري القرراءة والكتابرة)‪ .‬والأنرواع القياسرية التري تسرتخدم فري لغرة ‪C++‬‬ ‫هي‪:‬‬ ‫‪ 2.9.2‬الاعداد الصحيحة ‪Integers‬‬ ‫الأعرداد الصرحيحة هري كرل الأعرداد الموجبرة والسرالبة التري لا تحتروي علرى‬ ‫كسر‪ .‬فالصفر عدد صحيح و ‪ 123‬هرو عردد صرحيح و ‪ -45‬أيضرا عردد صرحيح‪ .‬أمرا‬ ‫(‪ 123.345‬و ‪ )-1.45‬فهي ليست أعداد صحيحة‪.‬‬ ‫أن أي محاولررة لاسررتخدام قرريم خررارج نطرراق الحرردود العليررا والرردنيا ل عررداد‬ ‫الصحيحة سريؤدي الرى حردوث خطرأ‪ .‬وبشركل عرام فرأن المتغيررات مرن نروع الأعرداد‬ ‫الصحيحة تستخدم اضافة الى العمليات الرياضية في العدادات والفهارس‪.‬‬ ‫العلاقات الرياضية التي تستخدم مع الأعداد الصحيحة هي)‪( + , - , * , / , %‬‬ ‫وهي على التوالي (الجمع‪ ،‬الطرا‪ ،‬الضرب‪ ،‬القسمة‪ ،‬وحساب باقي القسمة)‪.‬‬ ‫أمثَه‪//:‬‬ ‫‪21 / 3 = 7‬‬ ‫‪9/2=4‬‬ ‫‪2+3*4 = 14‬‬ ‫هنا ينفذ داخل القوس أولا‬ ‫‪(2+3) * 4 = 20‬‬ ‫‪5%2=1‬‬ ‫‪7%4=3‬‬ ‫ويصرا عن الأعداد الصحيحة بلغة ‪ C++‬في أي مكان داخل جسرم البرنرامج‬ ‫بالمعرف (‪ )int‬والتي تعني (‪ )integer‬وهي تكتب قبل المتغيرات‪ ،‬مثال‬ ‫; ‪int x‬‬ ‫‪39‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫ملاحظة‪//:‬‬ ‫نتيجة قسمة عدد صحيح على عدد صحيح أخر هو عدد صحيح‪.‬‬ ‫أما أذا كان أحد العددين هو حقيقي فأن النتيجة ستكون عددا حقيقيا‪ ،‬مثال‬ ‫‪2.0 / 3 = 0.66666667‬‬ ‫‪50 / 2.0 = 25.0‬‬ ‫ملاحظة‪//:‬‬ ‫فضرلا عرن الارقرام العشررية ( وهري التري أساسرها عشررة والتري تسرتخدم‬ ‫بالأعمال الأعتيادية (‪ ،))1 ..9‬فران ‪ C++‬تسرمح لرك باسرتخدام ثوابرت مرن الأرقرام‬ ‫وفرق النمرام الثمراني )‪ ( (octal numbers‬أساسرها ‪ )8‬وكرذلك أرقرام وفرق النمرام‬ ‫السادس عشرر )‪( (hexadecimal‬أساسرها ‪ .)16‬ولتنفيرذ ذلرك فراذا أردت تمثيرل رقرم‬ ‫بالنمام الثماني فضع ( ‪ ( )1‬صرفر) أمرام الررقم للدلالرة علرى أنره بالنمرام الثمراني‪،‬‬ ‫أما أذا وضعت (‪ ( ) 0x‬صفر ثم ‪ )x‬أمام الرقم فذلك يعني أن الرقم ممثل بالنمرام‬ ‫السرادس عشرر‪ .‬المثرال اللاحرق يمثرل ثوابرت بالانممرة الثلاثرة وكرل منهرا مكرافيء‬ ‫ل خر (جميعا تمثل الرقم ‪ 75‬خمب وسبعون)‪:‬‬ ‫نظام عشري ‪75 //‬‬ ‫نظام ثماني ‪1113 //‬‬ ‫نظام سادس عشر ‪1x4b //‬‬ ‫جدول (‪ :)1.2‬أنواع الأعداد الصحيحة وحجمها بالبتات‬ ‫انواع البيانا‬ ‫المــــــــــــــــدى‬ ‫الحجم بالبتا‬ ‫‪short‬‬ ‫‪-32767...32767‬‬ ‫‪16‬‬ ‫‪41‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪int‬‬ ‫‪-32767...32767‬‬ ‫‪16‬‬ ‫‪long‬‬ ‫‪-2147483647... 2147483647‬‬ ‫‪32‬‬ ‫‪unsigned short‬‬ ‫‪16‬‬ ‫‪unsigned‬‬ ‫‪0...65535‬‬ ‫‪16‬‬ ‫‪unsigned long‬‬ ‫‪0...65535‬‬ ‫‪32‬‬ ‫‪0...4294967295‬‬ ‫‪ 2.9.1‬الأعداد الحقيقية ‪Real Numbers‬‬ ‫وهي الأعداد التي تحتوي على كسور مثل‬ ‫)‪ .( 0.03 , 12.5 , -356.67890 , 10.0‬الأعداد الحقيقية ممكن أن تمثل بعدد صحيح‬ ‫وفرارزة (تسرتخدم نقطرة لتفصرل العردد الصرحيح عرن الجرزء الكسرري)‪ ،‬وممكرن أن‬ ‫تستخدم الرمز (‪ )e‬والذي يمثل الرقم عشرة مرفوعا الى أس معرين (الأس هرو الررقم‬ ‫الذي يلي الحرف (‪( ))e‬الرقم الذي يلي الحرف (‪ )e‬يجب ان يكرون عرددا صرحيحا)‪،‬‬ ‫مثال‬ ‫‪3.14159‬‬ ‫‪// = 3 .14159‬‬ ‫‪6.02e23‬‬ ‫‪// = 6.02 x 10^23‬‬ ‫‪1.6e-19‬‬ ‫‪// = 1.6 x 10^ -19‬‬ ‫‪3.0 // = 3.0‬‬ ‫المثال أعلا يحتوي على أربعة نماذج من الأرقام الحقيقية المقبولة فري ‪.C++‬‬ ‫العدد الاول يمثل (‪( )PI‬النسربه الثابترة) امرا الثراني فهرو يمثرل عردد افوكرادرو‪ ،‬الثالر‬ ‫يمثل الشرحنة الكهربائيرة ل لكتررون (وهرو عردد صرغير جردا) وكرل هرذ الاعرداد هري‬ ‫تقريبية‪ ،‬اما العدد الأخير فهو يمثل الرقم (‪ )3‬ولكن كعدد حقيقي‪.‬‬ ‫أمررا العمليررات الرياضررية الترري ممكررن أجرااهررا علررى الأعررداد الحقيقيررة فهرري‬ ‫) ‪ (+ , - , * , /‬وهي على التوالي (الجمع‪ ،‬الطرا‪ ،‬الضرب‪ ،‬القسمة)‪ .‬ويصرا عرن‬ ‫الأعداد الحقيقية في لغة البرمجة ‪ C++‬في أي مكان داخل جسرم البرنرامج برالمعرف‬ ‫(‪ )float‬التي تسبق المتغيرات‪ ،‬مثال‬ ‫;‪float x‬‬ ‫‪41‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫ملاحظة‪//:‬‬ ‫تمثل الأرقرام بطرريقتين فأمرا أرقرام صرحيحة بردون كسرر أو أرقرام كسررية‪.‬‬ ‫القواعد التالية تطبق عند كتابة أرقام في الحاسوب‪:‬‬ ‫‪ .1‬الفارزة ( ‪ ),‬لا يمكن أن تمهر في أي مكان في الرقم‪.‬‬ ‫‪ .2‬ممكن أن تسبق الأرقام أحد العلامتين ( ‪ )+ ، -‬للدلالة على كون الرقم موجب‬ ‫أو سالب ( يعد الرقم موجبا أذا لم تمهر أي من العلامتين على يسارة)‪.‬‬ ‫‪ .3‬يمكرن تمثيرل الأرقررام بطريقرة العلامرة العلميررة (وذلرك بأسرتبدال الرررقم ( ‪)11‬‬ ‫برالحرف (‪ .))e‬مرثلا الررقم ( ‪ ( 2.7 x 10 -6‬يكترب حسرب العلامرة العلميرة كمرا‬ ‫يلي )‪ .(2.7 e -6‬كرذلك فرأن العردد (‪ (6 x 10 12‬يمكرن ان يمثرل حسرب العلامرة‬ ‫العلمية كما يلي )‪ ,(6 e 12‬وكما وضح اعلا ‪.‬‬ ‫ملاحظة‪//:‬‬ ‫يفضل عند استخدام التعريف (‪ ) long‬وضع حرف (‪ ) L‬بعد القيمة فمثلا ‪:‬‬ ‫; ‪long SunDistance = 93000000‬‬ ‫هنا ستنتج قيمة مقدارها (‪ ) -12544‬ويعطي المترجم رسرالة تحرذير ولتجنرب ذلرك‬ ‫تكتب كما يلي ‪:‬‬ ‫; ‪long SunDistance = 93000000L‬‬ ‫ملاحظة‪//:‬‬ ‫أدنررا بعررض القواعررد المهمررة الترري يجررب أن تراعررى عنررد كتابررة العلاقررات‬ ‫الرياضية ‪:‬‬ ‫أن وضرع أشرارة السرالب قبرل المتغيررات هري مكافرأة لضررب المتغيرر بالقيمرة‬ ‫‪42‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫(‪ .)-1‬مثلا المتغيرات (‪ - ) x+y‬من الممكن أن تكتب )) ‪.)-1 * (x+y‬‬ ‫يجب أن تكترب العلاقرات الرياضرية وفقرا للطريقرة التري تحرددها لغرة البرمجرة‬ ‫‪ C++‬بحي تذكر كل العلامات الرياضية دون أختصرار‪ .‬مثرال ‪ :‬العلاقره الرياضرية‬ ‫الأتيرة غيرر مقبولرة ()‪ ) 2 ( x1 + 3x2‬هرذ العلاقره لكري تكرون مقبولرة فري لغرة‬ ‫البرمجرة ‪ C++‬يجرب أن تكترب بالشركل الترالي‪ ) (2 * x1 + 3 * x2) ( :‬العلاقرة‬ ‫الأولى هي التي تعودنا على استخدامها في الرياضيات‪.‬‬ ‫العدد المرفوع الى قيمة معينة سيضرب بنفسة عدد من المرات بقدر الأس اذا‬ ‫كان الاس عددا صحيحا ولا يهم فيما اذا كان الأساس سالبا أو موجبا‪.‬‬ ‫لايجروز رفرع القيمرة السرالبة الرى أس كسرري ( وذلرك لأن حسراب نراتج الررقم‬ ‫المرفوع الى أس كسري يتم بحساب اللوغراريثم ل سراس‪ ،‬ويضررب هرذا اللوغراريثم‬ ‫برالأس‪ ،‬وعنردها يحسرب معكروس اللوغراريثم‪ ،‬وأن اللوغراريثم للررقم السرالب غيرر‬ ‫معرف لذا لايمكن أيجاد النتيجة)‪.‬‬ ‫العمليات الرياضية لايمكن أجرااها على السلاسرل الرمزيرة‪ .‬مثرال‬ ‫(‪ ) \"xyz\" + 34‬هذا غير مقبرول وذلرك لأن (‪ )xyz‬هرو سلسرلة حرفيرة ولريب عرددا أو‬ ‫متغيرا رقمي (لاحظ أنه محصور بين علامتري أقتبراس (‪ ) quotation mark‬للدلالرة‬ ‫على أنه سلسلة حرفية)‪.‬‬ ‫جدول (‪ :)2.2‬أنواع الأعداد الحقيقية وحجومها بالبتات‬ ‫نوع البيانات‬ ‫المـــــــــــــــــــــــدى‬ ‫الحجم بالبتات‬ ‫‪float‬‬ ‫‪3.4x10-38.. 3.4x10+38‬‬ ‫‪32‬‬ ‫‪double‬‬ ‫‪1.7x10-308.. 1.7x10+308‬‬ ‫‪64‬‬ ‫‪long double‬‬ ‫‪3.4x10-4932.. 1.1x10+4932‬‬ ‫‪80‬‬ ‫‪43‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 2.9.3‬الرموز ‪Characters‬‬ ‫وهري كافرة الرمروز التري تسرتخدم فري الحاسروب والتري غالبرا مرا نجردها علرى‬ ‫لوحة المفاتيح والتي تشمل الحروف الأبجدية سرواء كانرت حرروف كبيررة (‪ )A..Z‬أو‬ ‫حروفرا صرغيرة (‪ ،)a..z‬الأرقرام (‪ ،)1..9‬الرمروز الاخررى التري نراهرا علرى لوحرة‬ ‫المفاتيح مثرل )‪ (. , / , + , ! , % , & , ? … etc‬وتسرتخدم بشركل مفررد‪ .‬ويصررا عرن‬ ‫الرموز بلغة البرمجة ‪ C++‬في أي مكان داخل جسم البرنامج برالمعرف (‪ )char‬التري‬ ‫تسبق المتغيرات‪.‬‬ ‫أن أكثر مجاميع الحروف استخداما هما أثنان‪:‬‬ ‫‪ASCII‬‬ ‫(‪(American Standard Code for Information International‬‬ ‫‪EBCDIC‬‬ ‫)‪(Extended Binary Coded Decimal Information Code‬‬ ‫وكل مرنهم لره صرفاتة الخاصرة بره (لمزيرد مرن المعلومرات راجرع الملاحرق فري‬ ‫نهاية الكتاب)‪.‬‬ ‫ملاحظة‪//:‬‬ ‫تكتب الحروف بين علامتي أقتباس مفردة ( ' ' )‪.‬‬ ‫‪ ‬عمليات الأحرف‬ ‫الأحرف تمثل داخل الحاسروب بواسرطة أرقرام صرحيحة وفقرا لنمرام (‪)ASCII‬‬ ‫تسمى الأعداد الترتيبية (‪ ،)ordinal numbers‬لذا فأن المبرمج بأمكانة أن يمرزج برين‬ ‫الرموز والأعداد الصحيحة بتعابير رياضية لتؤدي غاية معينة‪ ،‬فمثلا‬ ‫‪44‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫أذا فرضرنا أن المتغيرر الرمرزي (‪ )ch‬هرو متغيرر مرن نروع حرروف وترم أسرناد‬ ‫قيمة له كما يأتي‬ ‫)'‪(ch = 'S‬‬ ‫عليه فأن التعبير التالي ; ‪ch = ch + 1‬‬ ‫سريؤدي الرى أن تكرون قيمرة المتغيرر الرمرزي (‪ )ch‬تسراوي الرمرز (' ‪،)' T‬‬ ‫وكذلك فأن التعبير التالي ‪ch = ch – 3‬‬ ‫سيؤدي الى أن تكون قيمرة المتغيرر الرمرزي (‪ )ch‬تسراوي الرمرز (' ‪ )' P‬وهرذا‬ ‫يعتمد على القيم الرقمية التي تمثل الاحرف بنمام (‪.)ASCII‬‬ ‫ملاحظة‪//:‬‬ ‫الفررق العرددي برين تمثيرل الأرقرام الكبيررة والأرقرام الصرغيرة هرو (‪( )32‬اي ان‬ ‫الحرف الصغير اكبر من الحرف الكبير بالقيمة ‪.)32‬‬ ‫فمثلا أن قيمرة الرمرز (‪ )A = 65‬حسرب نمرام (‪ )ASCII‬بينمرا قيمرة الرمرز‬ ‫(‪ )a = 97‬وفقا لنفب النمام‪ .‬عليه فأذا كانت‬ ‫; ' ‪ch = ' E‬‬ ‫أذن‬ ‫ستؤدي الى أن تكون قيمة المتغير الرمزي‬ ‫; ‪ch = ch + 32‬‬ ‫وكذلك أذا كانت قيمة المتغير الرمزي‬ ‫(' ‪) ch = ' e‬‬ ‫فأن‬ ‫; ' ‪ch = ' d‬‬ ‫ستؤدي الى أن تكون قيمة المتغير الرمزي‬ ‫;‪ch = ch – 32‬‬ ‫(' ‪) ch = ' D‬‬ ‫العدد الترتيبي للصفر هو (‪ )48‬لذا فأن الاعداد (‪ )1..9‬تأخرذ الأعرداد الترتيبيرة‬ ‫) ‪( 48 – 57‬‬ ‫ملاحظة‪//:‬‬ ‫‪45‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫الرموز تحدد بعلامة اقتباس مفرردة مثرل (‘ ‪ ) ‘ 5‬او (‘ } ‘ ) امرا السلاسرل الرمزيرة‬ ‫فهري تحردد بعلامرة اقتبراس مزدوجرة مثرل (“ ‪ ) “ 51‬او (“ ‪ ) “ good‬بينمرا الارقرام‬ ‫لاتحدد باي علامة مثل (‪ ) 5‬او (‪.) 456‬‬ ‫‪ 2.9.3.2‬رموز الدلالة ‪Directing Characters‬‬ ‫وهري حرروف خاصرة عرادة تسرتخدم مرع الشررطة العكسرية (‪ )/‬لاعطراء ترأثير‬ ‫معين يلاحظ ضمن مخرجات البرنامج‪ .‬الجدول (‪ )1.3‬يبرين هرذ الرمروز مرع التراثير‬ ‫الذي تحدثة‪.‬‬ ‫وهرررذ تسرررمى ايضرررا سلاسرررل الهرررروب ‪ .Escape Sequences‬فالشرررارطة‬ ‫المعكوسة (\\) التي تسبق بعض الاحررف تخبرر المتررجم بران هرذا الحررف الرذي يلري‬ ‫الشرارطة المعكوسرة لريب لره نفرب المعنرى كمرا لرو ظهرر الحررف بنفسرة دون هرذ‬ ‫الشارطة المعكوسة (\\)‪ .‬هذ السلاسل يتم كتابتها كرمرزين دون وجرود فررا بينهمرا‪.‬‬ ‫بعض هذ السلاسل معرفة في ‪.C++‬‬ ‫اذا وضعت (\\) او (“) في سلسلة حرفية ثابتة‪ ،‬فانك يجب ان تهرب مرن قردرة‬ ‫(“) علررى انهرراء سلسررلة حرفيررة ثابتررة وذلررك باسررتخدام (”\\)‪ ،‬او قرردرة (\\) للهرررب‬ ‫باسرتخدام (\\\\)‪ .‬ان اسرتخدام (\\\\) تخبرر المتررجم بانرك تعنري شرارطة معكوسرة حقيقيرة‬ ‫(\\)‪ ،‬وليست شارطة معكوسة لسلسلة هروب‪ ،‬وان (”\\) تعني حاصرة حقيقيرة ولريب‬ ‫نهاية سلسلة ثابتة‪.‬‬ ‫لاحظ دائما تستخدم سلاسل الهروب مع حاصرتين مزدوجتين مثل (”‪.)“\\n‬‬ ‫جدول (‪ :)2.3‬رموز الدلالة في لغة ‪C++‬‬ ‫الناتج (التأثير على المخرجات) الرمز‬ ‫(‪ )Beep‬صوت أو صفير ‪\\a‬‬ ‫‪46‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫(‪ )Backspace‬الترجيع خطوة واحدة للخلف ‪\\b‬‬ ‫(‪ )form feed‬التغذية ‪\\f‬‬ ‫(‪ )new line‬سطر جديد ‪\\n‬‬ ‫(‪ )carriage return‬الاعادة او الرجوع ‪\\r‬‬ ‫(‪ )horizontal tabulator‬الازاحة الأفقية ‪\\t‬‬ ‫(‪ )vertical tabulator‬الازاحة العمودية ‪\\v‬‬ ‫(‪ )Backslash‬الشرطة المعكوسة \\\\‬ ‫(‪)single quota‬حاصرة مفردة '\\‬ ‫(‪)double quota‬حاصرة مزدوجة \"\\‬ ‫‪ 2.9.4‬النوع المنطقي )‪(Boolean‬‬ ‫النوع الاخر هرو النروع المنطقري والرذي يرمرز لره (‪ .)bool‬هرذا النروع اضريف‬ ‫حديثا الى لغة ‪ C++‬بواسطة هيئة (‪( )ISO\\ANSI‬منممرة المقراييب العالميرة‪ /‬منممرة‬ ‫المقاييب الامريكية الوطنية)‪.‬‬ ‫التعابير المنطقية تشير الى واحردة مرن القريم وهري (صرح‪ ،‬او خطرأ)‪ .‬التعرابير‬ ‫المنطقية تستخدم في التفرع او حلقات التكرار والتي سندرسها لاحقا‪.‬‬ ‫‪ 2.21‬التعابير المنطقية ‪The Boolean Expressions‬‬ ‫وهي التعابير التي تمثل نتيجتها بحالة واحدة من أثنترين وهمرا (صرح أو خطرأ)‬ ‫(‪ َ)true OR false‬وهنا ثلاث عوامل منطقية وهي (‪.)Notَ Orَ And‬‬ ‫التعبير المنطقي يعيرد القيمرة (‪ )1‬عنردما يكرون التعبيرر (‪ )TRUE‬والقيمرة (‪)1‬‬ ‫عندما يكون التعبير (‪ .)FALSE‬وهي تسرتخدم لوصرف أي تعبيرر فيمرا أذا كران صرح‬ ‫أو خطرأ‪ .‬أن أنرواع المتغيررات التري تسرتخدم لهرذا الغرر يصررا عنهرا فري حقرل‬ ‫المتغيررات بالدالرة (‪( )bool‬هرذ عرادة لاتجردها فري جميرع نسر ‪ C++‬وانمرا النسر‬ ‫الحديثة فقط)‪.‬‬ ‫فمثلا عندما نعرف العبارة التالية على أنها من نوع القيم المنطقية كمايأتي‬ ‫‪47‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫; )‪bool c = (a= =b‬‬ ‫نلاحظ هنا اننا استخدمنا علامة المساواة للدلالة على ان نتيجة الطرف الايمن‬ ‫ستؤول الى المتغير في الطرف الأيسر بينما اسرتخدمنا العلامرة (==) وهري تسرتخدم‬ ‫لعمليات فحص المااواه‪ ,‬فاذا كان (‪ )b ، a‬متساويان فان (‪ )c‬ستكون قيمتها تسراوي‬ ‫(‪ )true‬وبخلاف ذلك تكون قيمتها تساوي (‪.)false‬‬ ‫‪ 2.22.2‬العمليات المنطقية ‪Logical Operators‬‬ ‫هنرا ثلاثرة أنرواع مرن العمليرات المنطقيرة وهري (‪ )NOT َ OR َ AND‬كرل‬ ‫منهرا يتعامرل مرع التعرابير الشررطية (أي التري تحتروي شررط)‪ .‬كرل واحرد مرن هرذ‬ ‫التعابير له تأثير مختلف على التعابير الشرطية‪ .‬أدنا أمثلرة تبرين كيفيرة اسرتخدام هرذ‬ ‫التعابير والتي من الممكن أن تستخدم بين تعبيرين أو أكثر من التعابير الشرطية‪.‬‬ ‫‪AND‬‬ ‫العامل (&&) يستخدم للدلالة على العامل المنطقي (‪ )and‬فري لغرة ‪ C++‬وهرو‬ ‫يستخدم لمقارنة تعبيرين لتحصل علرى نتيجرة منطقيرة مفرردة‪ ،‬والنتيجرة التري تحصرل‬ ‫عليها تحدد بجدول الصدق (‪ )1.4‬ادناة‬ ‫جدول (‪ :)2.4‬جدول الصدق للعامل (و) (&&( )‪)And‬‬ ‫‪A B A && B‬‬ ‫‪48‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪A B A && B‬‬ ‫‪true true‬‬ ‫‪True‬‬ ‫‪true false‬‬ ‫‪false‬‬ ‫‪false true‬‬ ‫‪false‬‬ ‫‪false false‬‬ ‫‪false‬‬ ‫‪OR‬‬ ‫العامرل ( || ) يسرتخدم للدلالرة علرى العامرل المنطقري (‪ )or‬فري لغرة ‪ C++‬وهرو‬ ‫يستخدم لمقارنة تعبيرين لتحصل علرى نتيجرة منطقيرة مفرردة‪ ،‬والنتيجرة التري تحصرل‬ ‫عليها تحدد بجدول الصدق (‪ )1.5‬ادنا ‪:‬‬ ‫جدول (‪ :)2.5‬جدول الصدق للعامل (أو) (||( )‪)Or‬‬ ‫‪A B A || B‬‬ ‫‪true true‬‬ ‫‪True‬‬ ‫‪true false‬‬ ‫‪True‬‬ ‫‪false true‬‬ ‫‪True‬‬ ‫‪false false‬‬ ‫‪False‬‬ ‫النتيجة خطأ (صح && خطأ) ‪( (5 = = 5) && (3 > 6)) //‬‬ ‫النتيجة صح (صح || خطأ) ‪( (5 = = 5) || (3 > 6)) //‬‬ ‫‪NOT‬‬ ‫لاحظ في لغة ‪ C++‬فان العامل ( ! ) يمثل العامل (لا) )‪ (not‬وهو يأخذ معامل‬ ‫واحد يتواجد في يمينة والعمل الوحيد الذي يقروم بره هرو عكرب قيمترة (قيمرة المعامرل‬ ‫الذي على يمينة) فاذا كانت قيمتة (صح) تصربح خطرأ واذا كانرت خطرأ تصربح صرح‪.‬‬ ‫نتيجة استخدام العامل (لا) موضحه بالجدول (‪)1.6‬‬ ‫جدول (‪ :( 2.6‬جدول الصدق للعامل (لا) (!( )‪)Not‬‬ ‫‪49‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪A !A‬‬ ‫مثال‪//:‬‬ ‫‪true False‬‬ ‫‪false True‬‬ ‫النتيجة تصبح خطأ لان التعبير )‪ (5==5‬هو صح ‪!(5==5) //‬‬ ‫النتيجة تصبح صح لان )‪ (6<=4‬هي خطأ ‪!(6<=4 ) //‬‬ ‫النتيجة تصبح خطأ ‪!true //‬‬ ‫النتيجة تصبح صح ‪!false //‬‬ ‫ملاحظة‪//:‬‬ ‫مرن الممكرن ان تسررتخدم عوامرل العلاقررات المنطقيرة للمقارنرة بررين قيمترين ومررن‬ ‫الممكن ان تكون هذ القيم من أي نوع من أنواع البيانات مثل‬ ‫(‪ ،)float, int, char…etc‬او ممكن أن تكون ( كما سنرى لاحقا) اصرنافا معرفرة‬ ‫من المستخدم‪.‬‬ ‫أن نتيجرة المقارنرة أمرا أن تكرون ( صرح او خطرا) (‪ .)true ،false‬فمرثلا العبرارة‬ ‫التالية‬ ‫; ‪cout << 5 < 23‬‬ ‫ستطبع القيمة (‪ )1‬لان العبارة صحيحة‪ ..‬اما العبارة التالية‬ ‫; ‪cout << 45 > 60‬‬ ‫ستطبع القيمة (‪ )1‬لان النتيجة خاطئة‬ ‫ملاحظة‪//:‬‬ ‫‪51‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫العامل (‪ ) NOT‬يختلف عرن العراملين السرابقين اذ أنره يتقبرل مردخلا واحردا ودائمرا‬ ‫يعكرب حالرة العبرارة التري يردخل عليهرا فرأذا كانرت صرحيحة يجعلهرا خاطئره وأن‬ ‫كانت خاطئة يجعلها صحيحة‪.‬‬ ‫ملاحظة‪//:‬‬ ‫أن أسناد قيمة لمتغير من نوع معرين خرارج المردى المحردد لره سريؤدي الرى‬ ‫حردوث خطرأ‪ ،‬هرذا الخطرأ أمرا أن يوقرف التنفيرذ أو يرؤدي الرى ظهرور نترائج غيرر‬ ‫متوقعة‪.‬‬ ‫‪ 2.22‬الأعلان عن المتغيرات ‪Declarations‬‬ ‫يرتم الاعرلان عرن المتغيرر وذلرك بران يرتم كتابرة النروع أولا ثرم يتبرع ذلرك اسرم‬ ‫المتغير والذي يجب ان يخضع للقواعد المذكور‪ m‬انفا فمثلا‪:‬‬ ‫;‪int a‬‬ ‫; ‪float mynum‬‬ ‫وبالأمكان الأعلان عن أكثر مرن متغيرر مرن ذات النروع برنفب الطريقرة أعرلا‬ ‫على أن تفصل فارزة بين أسم متغير وأخر‪ ،‬مثال‪:‬‬ ‫; ‪int x ،y ،z‬‬ ‫وهذ تكافيء الأعلان التالي‬ ‫; ‪int x‬‬ ‫; ‪int y‬‬ ‫; ‪int z‬‬ ‫الطريقتان صحيحتان والفرق هو ان الأولى أكثر اختصارا‪.‬‬ ‫ملاحظة‪//:‬‬ ‫‪51‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫بالامكران اسرتخدام (‪ )unsigned ،signed‬لوحردهم‪ ،‬وتعنري انهرا مرن نروع الاعرداد‬ ‫الصحيحة مثال‬ ‫; ‪unsigned nextpage‬‬ ‫; ‪unsigned int nextpage‬‬ ‫العبارتان متكافأتان‬ ‫‪ 2.21‬الثوابت ‪Constants‬‬ ‫في بعض البرامج تحتاج الى استخدام قيم ربما تكون معروفة مسبقا قبل تنفيذ‬ ‫البرنامج ولا يمكرن أن تتغيرر داخرل البرنرامج مثرل النسربة الثابترة (‪ )Л‬والتري قيمتهرا‬ ‫)‪ (3.1415926585‬هذ القيم الثابتة سواء كانت ذات قيمة معروفة مسبقا أو أي قيمرة‬ ‫ممكرن أن تسرند الرى متغيرر‪ ،‬جميعهرا ممكرن أن يعلرن عنهرا فري أي مكران مرن جسرم‬ ‫البرنامج وباحدى الطرق التالية‪ ،‬الأعلان عنها (باستخدام الكلمة المفتاحيرة (‪،)const‬‬ ‫اسرتخدام الكلمرة المفتاحيرة (‪ ،)enum‬أو باسرتخدام الموجرة (‪ ))#define‬والتري تسربق‬ ‫أنواع البيانات للمعرف المراد تعريف قيمتة على انها ثابتة‪.‬‬ ‫ملاحظة‪//:‬‬ ‫المعرفات التي تعرف على أنها ثوابت لا يمكرن ان تتغيرر قيمهرا أثنراء تنفيرذ‬ ‫البرنامج بأي شكل من الأشكال‪.‬‬ ‫‪const ‬‬ ‫وهي تسبق انواع البيانات لتعرف واحد او أكثر من المتغيرات على أنها ثابترة‬ ‫وفقا للصيغة القواعدية التالية‪:‬‬ ‫; ‪const TYPE variable_name = value‬‬ ‫مثال‪:‬‬ ‫; ‪const float Pi = 3.1413926535‬‬ ‫‪52‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫; ' ‪const string Error = ' Run_Time Error‬‬ ‫‪Enum ‬‬ ‫وهري تسرتخدم لتعريرف قائمرة مرن المتغيررات علرى أنهرا ثابترة وفقرا للصريغة‬ ‫القواعدية التالية‪:‬‬ ‫;}‪enum TYPE {CONSTANT1=value ،CONSTANT2 = value,...‬‬ ‫وسناتي عليها لاحقا لتوضيح عملها بشكل اكثر تفصيلا‬ ‫‪ ‬الموجة (التدَيمة) ‪#define‬‬ ‫وهري تقروم بتعريرف رمروز كثوابرت‪ ،‬وبرالرغم مرن عردم شريوع اسرتخدام هرذا‬ ‫الهيكررل فرري لغررة )‪ ،(C++‬ولكررن بالامكرران اسررتخدامة لتعريررف المتغيرررات الحسررابية‬ ‫أو الرمزيرة فري بدايرة البرنرامج وتعرو قيمتهرا الحسرابية أو الرمزيرة فري أي مكران‬ ‫تذكر فيه هذ الأسماء في البرنامج وتستخدم الحروف الأبجدية الكبيرة عادة لتعريف‬ ‫أسماء هذ المتغيرات‪ .‬مثال‪:‬‬ ‫‪#define TRUE 1‬‬ ‫‪#define PI 3.1415927‬‬ ‫‪#define EOF -1‬‬ ‫ملاحظة‪//:‬‬ ‫هذا الهيكل شائع في لغة (‪ ،)C‬وان كل ما موجود فري لغرة (‪ )C‬ممكرن اسرتخدامة‬ ‫في لغة ‪ .. C++‬العكب ليب صحيح‬ ‫ملاحظة‪//:‬‬ ‫من الممكن الأستعاضة عن )‪ ( #define‬بالكلمة المفتاحية (‪ ( const‬مثال‬ ‫‪53‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪const TRUE = 1‬‬ ‫‪const PI = 3.1415927‬‬ ‫مع ملاحمة استخدام علامة المساواة‬ ‫‪ 2.21.2‬أسباأ استخدام الثوابت‪:‬‬ ‫• أذا كان هناك عدد يستخدم بشكل متكورر داخول البرنوامج فوأن المبورمج يفضول أن‬ ‫يصفة بأس يشار اليه على أنه يحمل قيمة ثابتة‪.‬‬ ‫• من الممكن اسوتخدام الثوابوت لتسومية متغيورات مون نووع السلاسول الرمزيوة والتوي‬ ‫تستخدم بشكل متكورر فوي مخرجوات البرنوامج وهوي فوي جميوع الأحووال تسوتخدم‬ ‫لتسهيل العمل البرمجي‪.‬‬ ‫مثال‪:‬‬ ‫نفر أننا نحتاج الى طباعرة أسرم جامعرة مرثلا بشركل متكررر فري البرنرامج‪،‬‬ ‫ممكن أن نقوم بمايأتي‪:‬‬ ‫; “ ‪const string University = “Al _ Kufa University‬‬ ‫; “‪const string Underline = “---------------------------‬‬ ‫الأن من الممكن استخدام الأسماء المعرفة كثوابت في البرنامج وكما يأتي‪:‬‬ ‫; ‪cout << University << endl‬‬ ‫; ‪cout << Underline‬‬ ‫‪54‬‬


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook