Lec-2-C++ - WordPress.com

Download Report

Transcript Lec-2-C++ - WordPress.com

‫المحاضرة الثانية‬
‫محتويات المحاضرة‬
‫‪ ‬مراحل عمل أي برنامج في لغة ‪C++‬‬
‫‪ ‬أنواع البيانات‬
‫‪ ‬اإلعالن عن المتغيرات‬
‫‪ ‬الثوابت‬
‫‪ ‬إسناد القيم إلى المتغيرات‬
‫‪ ‬واجهة برنامج ‪visual studio 2010‬‬
‫‪2‬‬
‫مراحل عمل أي برنامج في لغة‬
‫‪C++‬‬
‫تمر برامج لغة السي ‪ ++‬بعدة مراحل رئيسية قبل تنفيذها‪ ,‬ونستطيع القول بأنها تمر بـ ‪ 6‬مراحل رئيسية‪:‬‬
‫التنفيذ‬
‫تحميل‬
‫البرنامج‬
‫الربط‬
‫ترجمة‬
‫البرنامج‬
‫معالجة‬
‫البرنامج‬
‫إنشاء‬
‫برنامج‬
‫المرحلة األولى‪ :‬إنشاء البرنامج ‪Creating a Program‬‬
‫‪.‬‬
‫عند االنتهاء من كتابة البرنامج‬
‫نقوم بحفط الملف في ‪RAM‬‬
‫كتابة برنامج ‪ C++‬في اي ‪editor‬‬
‫( محرر ) وتعديل الكود‬
‫‪•nameOfFile.cpp‬‬
‫‪•nameOfFile.cxx‬‬
‫‪•nameOfFile.cc‬‬
‫‪•nameOfFile.C‬‬
‫أشهر الصيغ‬
‫تحفظ الملفات البرمجية ( ‪source‬‬
‫‪ )code‬في القرص (الهاردسيك)‬
‫المرحلة الثانية والثالثة ‪ :‬ترجمة ومعالجة البرنامج ‪Preprocessing and Compiling a C++‬‬
‫‪Program‬‬
‫‪010010‬‬
‫‪110111‬‬
‫‪101110‬‬
‫‪011111‬‬
‫‪compiling‬‬
‫‪Preprocessing‬‬
‫في هذه المرحلة عندما يقوم المبرمج بعميلة ‪compiling‬للبرنامج وهي العملية التي يقوم فيه المترجم ‪compiler‬‬
‫بتحويل البرنامج من اللغة عالية المستوى ‪ High Level Programming Language‬إلى لغة اآللة ‪machine code‬‬
‫قبل هذي المرحلة تنفذ مرحلة المعالجة‪ Preprocessing‬وهي عبارة عن مجموعة من االوامر تجعل الكومبايلر يقوم‬
‫بتحويل اجزاء من الكود الى لغة اآللة بناءاً على تلك االوامر وتسمى هذه االوامر بتوجيهات المعالج‬
‫المرحلة الرابعة ‪ :‬الربط ‪Linking‬‬
‫بداية يجب ان نعرف ان لكل البيانات ‪ data‬أوالدوال ‪ functions‬الموجودة في أي برنامج في ‪C ++‬لها مرجع‬
‫مُعرف في مكان ما‪.‬‬
‫إما مُعرفة عن طريق المكتبات المستخدمة في البرنامج او عن طريق المكتبات المنشأه من قبل المبرمجين انفسهم‪.‬‬
‫عندما يقوم المترجم بتحويل الكود من اللغة عالية المستوى الى لغة اآللة يقوم الواصل ‪ linker‬بربط الدوال‬
‫والبيانات بلـغة اآللة ‪ machine code‬من أجل انشاء البرنامج النهائي ‪executable image‬‬
‫بمعنى انه إذا تمت عميلة الترجمة ‪ Compiling‬بشكل صحيح باإلضافة إلى عميلة الربط‪ linking‬يتم انشاء‬
‫البرنامج النهائي ‪executable image‬‬
‫المرحلة الخامسة ‪ :‬التحميل ‪Loading‬‬
‫قبل مرحلة تشغيل اي برنامج يقوم المحمل ‪ Loader‬بسحب البرنامج النهائي‪ executable image‬من القرص‬
‫(‪ )Hard disk‬وإضافته إلى الذاكرة الرئيسية ‪RAM‬من اجل االستعداد لتشغيل البرنامج باإلضافة إلى إضافة جميع‬
‫المكتبات المستخدمة في البرنامج‪.‬‬
‫المرحلة السادسة ‪ :‬التنفيذ ‪Execution‬‬
‫في المرحلة األخيرة يقوم الكمبيوتر بتشغيل البرنامج عن طريق وحدة المعالجة المركزية ‪ CPU‬بتنفيذ أوامر‬
‫البرنامج‪ .‬أمر واحد في كل مره‪.‬‬
‫صورة‬
‫توضيحية‬
‫للمراحل‬
‫أنواع البيانات األساسية للغة الـ ‪C++‬‬
‫كلمات لغة الـ‬
‫‪C++‬‬
‫أسماء تعريفية‬
‫‪Identifiers‬‬
‫الكلمات‬
‫المحجوزة‬
‫األسماء التعريفية ‪:Identifiers‬‬
‫هي الكلمات‪ /‬األسماء التي ينتقيها المبرمج ليسمي بها المتغيرات والثوابت التي يحتاج إلى تعريفها داخل‬
‫البرنامج (البد من تعريف اي بيانات قبل استخدامها في ‪.)C++‬‬
‫وتطلق األسماء التعريفية على ‪:‬‬
‫•المتغيرات‪ :‬هي أسماء تحجز مواقع في الذاكرة لحفظ البيانات داخلها ‪.‬‬
‫•الدوال ‪.‬‬
‫•المؤشرات‪.‬‬
‫‪‬قواعد تسمية األسماء التعريفية في لغة ‪: C++‬‬
‫‪ -١‬أن يبدأ بحرف أو بخط تحتي "_” مثل ‪ int _new :‬و‪, int new‬وال يمكن أن يبدأ االسم برقم مثل ‪:‬‬
‫‪int 7new‬‬
‫‪ -٢‬أن ال يحتوى االسم على رموز خاصة مثل ‪ int age% :‬عدا الخط التحتي "_”‬
‫‪ -3‬ال يمكن أن يحتوي على فراغ مثل‪int a ge :‬‬
‫‪ -3‬أن ال يكون االسم إحدى الكلمات المحجوزة مثل ‪. char do :‬‬
‫‪‬بعض األمثلة الصحيحة على األسماء التعريفية ‪:‬‬
‫‪X_ray .b‬‬
‫‪B6 .a‬‬
‫‪Ok_ .d‬‬
‫‪Matrix .c‬‬
‫‪Soft_fine .f‬‬
‫‪A .e‬‬
‫‪Door12 .g‬‬
‫هل األسماء التعريفية التالية صحيحة أو خاطئة مع ذكر السبب ‪:‬‬
‫‪int 7_age‬‬
‫خاطئة ‪ ..‬ألنها بدأت برقم وليس بحرف‬
‫‪char Student‬‬
‫صحيحة‬
‫‪int Number#‬‬
‫خاطئة ‪ ..‬ألنها احتوت على رمز خاص وهو ‪#‬‬
‫‪int Student name‬‬
‫‪int StudentId‬‬
‫خاطئة ‪ ..‬ألنها احتوت على فراغ (مسافة)‬
‫صحيحة‬
‫ومن الجدير بالذكر‪ ،‬أن لغة ‪ C++‬تفرق بين الحروف األبجدية الصغيرة‬
‫والكبيرة‬
‫فمثال األسماء‪SYSTEM , system, System ,sySTem :‬‬
‫ُتعامل كأسماء مختلفة عن بعضها البعض بسبب اختالف معاملة المترجم‬
‫للحروف الصغيرة والكبيرة‪.‬‬
‫اختيار أسماء معبرة ذات داللة ومعنى واضح للمتغيرات يجعل البرنامج أكثر‬
‫تعبيرا ُ عن مضمونه أي أنه يصبح أكثر سهولة للفهم‪.‬‬
‫في لغة ‪ C++‬يجب أن يعلن عن المتغيرات مسبقا (أي قبل تخصيص أي قيمة لها ) واال فلن يتعرف لها‬
‫الكومبايلر‬
‫الصيغة العامة لإلعالن عن المتغيرات‪:‬‬
‫مثال‪:‬‬
‫;‪int a‬‬
‫;‪float MyNumber‬‬
‫;‪double b‬‬
‫ولإلعالن عن ع ّدة متغيرات من نوع واحد فيمكننا االعالن عنها بعبارة واحده ويُفصل بين كل متغير‬
‫واآلخر بعالمة فاصلة (‪: ),‬‬
‫;‪a,b,c‬‬
‫وهو اختصار للتالي ‪:‬‬
‫;‪a‬‬
‫;‪b‬‬
‫;‪c‬‬
‫‪int‬‬
‫‪int‬‬
‫‪int‬‬
‫‪int‬‬
‫‪ .1‬المتغيرات النصية ‪:‬‬
‫•المتغير من النوع ‪char‬‬
‫يتم تخزين األحرف في متغيرات من النوع ‪char‬‬
‫الحرف ‪ :‬هو حرف أو رمز أو رقم موضوع بين عالمتي التنصيص المفردة ( ‘‬
‫‘) مثل ’‪‘C‬‬
‫لتعريف متغير من النوع ‪:char‬‬
‫;‪char variable_name‬‬
‫مثال‪-:‬‬
‫;‪char ba‬‬
‫تنشئ مساحة من الذاكرة لحرف واحد فقط وتسميه ‪ .ba‬لتخزين حرف ما في هذا المتغير نكتب‬
‫‘‪ba='z‬‬
‫يمكن استعمال المتغيرات من النوع ‪ char‬لتخزين أرقام كاملة بدالً من أحرف ‪ ،‬فمثالً يمكننا كتابة‪:‬‬
‫;‪ba=2‬‬
‫لكن نطاق القيم الرقمية التي يمكن تخزينها في النوع ‪ char‬يتراوح بين ‪ –128‬إلى ‪ 127‬لذا فإن هذه‬
‫الطريقة تعمل مع األرقام الصغيرة فقط‪.‬‬
‫‪ .1‬المتغيرات النصية ‪:‬‬
‫•المتغير من النوع ‪string‬‬
‫يتم تخزين سلسلة من األحرف في متغيرات من النوع ‪string‬‬
‫الحرف ‪ :‬هو مجموعة من الحروف أو رموز أو أرقام موضوعة بين عالمتي التنصيص ( “‬
‫”‪“NAME‬‬
‫لتعريف متغير من النوع ‪:string‬‬
‫;‪String variable_name‬‬
‫مثال‪-:‬‬
‫;‪string NAME‬‬
‫تنشئ مساحة من الذاكرة وتسميه ‪ .NAME‬لتخزين قيمة ما في هذا المتغير نكتب‬
‫”‪NAME = “SARA‬‬
‫“) مثل‬
‫‪ .2‬المتغيرات الصحيحة ‪:‬‬
‫•المتغير من النوع ‪int‬‬
‫يوجد هناك انواع عديد لتعريف المتغيرات الصحيحة‪ ,‬و لكن االكثر استخدام هو المتغير ‪int‬الذي يحجز‬
‫مساحة قدرها ‪ byte-4‬في أنظمة ‪ 32-bit‬و‪ 2-byte‬في أنظمة ‪ 16-bit‬و هو يكفي الستخدامه في حلقات‬
‫التكرار و بعض العمليات الرياضية البسيطة‪.‬‬
‫لتعريف متغير صحيح من النوع ‪:int‬‬
‫ولتعريف عدّة متغيرات‪:‬‬
‫أو نستطيع اختصار ماسبق بتعريف المتغيرات بنفس السطر بهذه الطريقة ‪:‬‬
‫نفصل بين أسماء‬
‫المتغيرات بـ (‪),‬‬
‫•النوع ‪long‬و ‪short‬‬
‫باالضافة الى النوع ‪Int‬يوجد هناك ‪long‬و ‪short‬يمثالن االعداد الصحيحة ‪ .‬يعتمد حجم‬
‫الذاكرة المحجوزة لنوع ‪int‬على نوع النظام المستخدم‪ ,‬و ما يميز هذين النوعين هو ان حجمهما‬
‫ثابت تحت ظل أي نظام ‪.‬‬
‫لتعريف المتغير من هذه االنواع إليكِ هذا المثال ‪:‬‬
‫‪ -3‬المتغيرات الحقيقية‪:‬‬
‫•متغير من النوع ‪double‬‬
‫يتيح لكِ امكانية تعريف متغير حجمه ‪byte -8‬و القيم التي يحتويها خيالية ‪ .‬في الحقيقة يستخدم هذا النوع‬
‫لتعريف متغير يحمل ارقام كسرية و يخزنها بشكل كسري‪:‬‬
‫أي قيمة يتم تخزينها ُتحول إلى رقم كسري و إن كانت رقم صحيح‪ ,‬كمثال الرقم ‪ 29‬يخزنه المتغير‬
‫‪double‬بشكل ‪ 29.0‬و هكذا يتعامل مع باقي األرقام‪.‬‬
‫•المتغير من النوع ‪float‬‬
‫إن كنت تنوين استخدام ارقام كسرية بسيطة فأنصحك باستخدام النوع ‪float‬بدل ‪double‬‬
‫المشكلة التي تبرز مع النوع ‪double‬هو عند تعريف عشرات المتغيرات من هذا النوع‪ ,‬فإنها‬
‫تستهلك مساحة بالذاكرة مما يمنح برنامجك البطئ عند التنفيذ‪.‬‬
‫‪ -4‬النوع غير المعلّمة ‪unsigned‬‬
‫افتراضيا المتغيرات التي تحدثنا عنها قبل قليل تحمل األرقام الموجبة و السالبة معا ً‪ .‬إن اردت اجبارها على‬
‫حمل االرقام الموجبة فقط فما عليك سوى إدراج الكلمة المحجوزة ‪unsigned‬في بداية تعريف المتغير‪:‬‬
‫بعد إجبارك للمتغيرات على حمل القيم الموجبة‪ ,‬ال تحاولين وضع أي قيم سالبة مهما حدث‪:‬‬
‫‪ -5‬المتغيرات المنطقية ‪:‬‬
‫•المتغير المنطقي ‪bool‬‬
‫المتغير المنطقي ‪bool‬الذي يحتوي على قمتين اما ‪ true‬أو ‪ false‬وهذه القيمتين ما هي اال ارقام‬
‫صحيحة فالـ ‪ true‬تعني واحد ‪ 1‬أما الـ ‪ false‬تعني ‪ , 0‬يحجز هذا المتغير مساحة قدرها ‪1-byte‬‬
‫اسم النوع‬
‫يستعمل لتخزين‬
‫الحجم‬
‫أمثلة عن القيم المخزنة‬
‫‪char‬‬
‫أحرف‬
‫‪1 byte‬‬
‫’‪‘a‬‬
‫‪short‬‬
‫أرقام صحيحة قصيرة‬
‫‪2 bytes‬‬
‫‪222‬‬
‫‪int‬‬
‫أرقام صحيحة عادية الحجم‬
‫‪long‬‬
‫أرقام صحيحة طويلة‬
‫‪float‬‬
‫أرقام حقيقية قصيرة‬
‫‪double‬‬
‫أرقام حقيقية مزدوجة‬
‫‪long double‬‬
‫أرقام حقيقية ضخمة‬
‫‪2 bytes‬‬
‫‪4 bytes‬‬
‫‪4 bytes‬‬
‫‪8 bytes‬‬
‫‪10 bytes‬‬
‫‪153,406‬‬
‫‪123,456,789‬‬
‫‪3,7‬‬
‫‪7,533,039,395‬‬
‫‪9,176,321,236,01202,6‬‬
‫بعد تعريف المتغير يمكن ان نضع له قيمة تناسب نوعه و الفضل يعود الى المُعامل ( = ) الذي يقوم‬
‫بوضع القيم من اليمين الى المتغير الموجود على اليسار‪:‬‬
‫ال يقتصر االمر هنا على وضع قيمة بعد التعريف ‪ .‬بل ويمكن وضع قيم اثناء التعريف ‪ ,‬و تسمى‬
‫القيمة االبتدائية ‪:initial value‬‬
‫و لتعريف اكثر من متغير و وضع قيم لها‪:‬‬
‫الثوابت‬
‫‪‬الثوابت هي مواقع لحفظ البيانات كالمتغيرات لكن المتغير يمكن تبديل قيمته على عكس الثابت الذي‬
‫يثبت على قيمته األساسية ‪,‬وبالتالي فيمكن القول بأنها عبارة عن متغيرات تحمل قيم ثابته طيلة زمن تنفيذ‬
‫البرنامج ‪.‬‬
‫‪‬يتم االعالن عن الثوابت عن طريق استخدام الكلمة المحجوزة ‪const‬‬
‫‪‬الصيغة العامة لإلعالن عن الثوابت تأخذ شكلين وهما ‪:‬‬
‫مثال ‪:‬‬
‫;‪1. float const pi=3.14‬‬
‫;‪2. int const max= 5000‬‬
‫أو‬
‫;‪1. const float pi=3.14‬‬
‫;‪2. const int max= 5000‬‬
‫الكلمات المحجوزة‬
‫في أي لغة برمجية توجد كلمات ُتستخدم من قبل اللغة لتعريف دوالها او كائناتها الخاصة‪ ,‬لغة‬
‫‪ C++‬تحتوي أيضا على هذه الكلمات و ال تستطيع ان تستخدمها لتعريف متغيرات أو دوال أو‬
‫كائنات‪.‬‬
‫إذاً الكلمات المحجوزة هي‪:‬‬
‫معرفة مسبقا ً لمترجم الـ ‪ C++‬ولها معنى خاص وتؤدي وظيفة معينة و ال يجوز‬
‫هي كلمات ّ‬
‫إعادة تعريفها أو استعمالها في غير ما ُخصصت له‪.‬‬
‫‪ ‬بعض الكلمات المحجوزة في لغة الـ ‪:C++‬‬
‫‪Do‬‬
‫‪If‬‬
‫‪For‬‬
‫‪Main‬‬
‫‪else‬‬
‫‪While‬‬
‫‪Return‬‬
‫‪Include‬‬
‫‪Xor‬‬
‫‪Not‬‬
‫‪or‬‬
‫‪And‬‬
‫عرفي المتغيرات التالية ‪:‬‬
‫‪ X‬و ‪ y‬و ‪ z‬أرقام صحيحة‬
‫‪ n‬و ‪ m‬أرقام حقيقة‬
‫‪ cn‬حرف‬
‫;‪int x,y,z‬‬
‫;‪float m,n‬‬
‫;‪char cn‬‬
‫إلنشاء مشروع جديد‪:‬‬
‫‪file –> new -> Project‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪4‬‬
‫‪5‬‬
‫تسمية المشروع‬