محاضرات لغة سي الفصل الاول PDF

Summary

هذه المحاضرات من قسم تكنولوجيا المعلومات والاتصالات في السنة الأولى، تقدم نظرة عامة على لغة البرمجة C++، بما في ذلك مقدمة في البرمجة أنواع البرامج، مستويات البرمجة، ومستويات لغات البرمجة.

Full Transcript

‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫الجزء النظري ) المحاضرة رقم ‪( ٠١‬‬ ‫البرمجة بلغة )...

‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫الجزء النظري ) المحاضرة رقم ‪( ٠١‬‬ ‫البرمجة بلغة )‪(C ++‬‬ ‫مقدمة عن البرمجة‬ ‫‪Introduction‬‬ ‫البرمجة )‪:(Programming‬‬ ‫عبارة عن مجموعة من اﻷسس والمبادئ والنظريات التي تتﻼئم مع البيئات العملية "مبادئ علم الحاسوب"‪.‬‬ ‫البرنامج )‪:(Program‬‬ ‫تعريف عام ‪ :‬هو مجموعة من التعليمات "‪ "Codes‬واﻻوامر المرتبة لحل مشكلة معينة‪.‬‬ ‫تعريف اخر ‪ :‬مجموعة من اﻻكواد المكتوبة بلغة من لغات البرمجة ‪.‬‬ ‫الحزم ) ‪: ( package‬‬ ‫مجموعة من البرامج الجاهزة والمترابطة فيما بينها والتي تؤدي وظائف متعددة وتعمل تحت بيئة واحدة ‪.‬‬ ‫البرامج الجاهزة‪ :‬يعني ﻻيتم التعديل عليها فهي صيغة نهائية مثل ) ‪. ( windows , office package‬‬ ‫‪١‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫‪ ‬أنواع البرامج )‪:(program type‬‬ ‫أنظمة التشغيل )‪.(operating system – OS‬‬ ‫‪(١‬‬ ‫لغات البرمجة )‪.(Programing Languages‬‬ ‫‪(٢‬‬ ‫التطبيقات )‪.(Application‬‬ ‫‪(٣‬‬ ‫المفسرات ‪ /‬المترجمات )‪.(Compilers‬‬ ‫‪(٤‬‬ ‫‪ ‬مستويات البرمجة‪:‬‬ ‫وهي مستويات يمر عليها المبرمج خﻼل رحلته التعليمية البرمجية‪:‬‬ ‫‪ (١‬التقليديــــة‪ :‬وهي مرحلة كتابة برامجه بطريقة عشوائية ﻻتعتمد علﻰ أساس ونظريات وهيكلة ‪ ،‬فما يهم‬ ‫المبرمج هو الوصول لحل المشكلة فقط ‪.‬‬ ‫عيوب هذه الطريقة ‪:‬‬ ‫‪ ‬ﻻ يمكن اكتشاف الخطأ في البرنامج‪.‬‬ ‫‪ ‬ﻻ يمكن تطوير البرنامج بسهولة‪.‬‬ ‫‪ ‬تطوير البرنامج يزيد حجم البرنامج بشكل كبير‪.‬‬ ‫‪ (٢‬الهيكلـــــة‪ :‬وهي مرحلة يقوم فيها المبرمج بتقسيم برنامجه الﻰ هياكل تساعد علﻰ اكتشاف اﻷخطاء‬ ‫والتطوير كما أعطت إمكانيات كثيرة‪.‬‬ ‫‪ (٣‬الكائنيــــة‪ :‬وهي مرحلة يقوم فيها المبرمج بهيكلة برنامجه الﻰ كائنات كل كائن يتخصص في حل مشكﻼت‬ ‫في مجال معين‪ ،‬ويحتوي الكائن علﻰ طرق " دوال " مترابطة تجعل من الكائن يمتلك ذكاء في تحديد‬ ‫اﻻستجابة المطلوبة تلقائيا‪.‬‬ ‫مستويات البرمجة‬ ‫‪٢‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫‪ ‬مستويات لغات البرمجة )‪:(Programming Language Level‬‬ ‫‪ (١‬المستوى اﻷدنﻰ ) ‪: Lowest Language Level ( L.L.L‬‬ ‫‪L.L.L‬‬ ‫يتعامل هذا المستوى مع الدوائر المنطقية ويتكون من ‪:‬‬ ‫‪ ‬لغة اﻻلة )‪.(Assembler‬‬ ‫‪ ‬لغة التجميع )‪.(Micro Assembly‬‬ ‫عيوبه‪:‬‬ ‫‪ ‬صعوبة كتابة البرمجيات او فهمها ﻻنها تتعامل مع رموز النظام الثنائي ‪.( 0/1 )Binary Code‬‬ ‫‪ ‬لغة قريبة من اﻻلة وبعيدة عن اﻻنسان‪.‬‬ ‫‪ ‬تحتاج الى متخصصين في الحاسوب‪.‬‬ ‫من هذا نستنتج ان هذا المستوى يحتاج الﻰ )نظام ادخال – ثنائي( ويكون نظام الحفظ )النظام العشري( ونظام‬ ‫العرض )سادس عشر(‪.‬‬ ‫‪٣‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫‪ (٢‬المستوى المتوسط ) ‪: Midst Language Level ( M.L.L‬‬ ‫ظهر هذ ا المستوى ثم اختفﻰ بسرعة بسبب سرعة التطوير الﻰ المستويات العليا حيث دمجت وصنفت لغاته في‬ ‫المستوى العالي ويتكون من اللغات التالية‪:‬‬ ‫‪C ‬‬ ‫‪C++ ‬‬ ‫ومن مميزاته‪ :‬هي انه قريب من الحاسوب ومن اﻻنسان‪.‬‬ ‫‪ (٣‬المستوى العالي ) ‪: Highest Language Level ( H.L.L‬‬ ‫تتكون من التالي‪:‬‬ ‫‪Basic ‬‬ ‫‪) Pascal ‬ومن استخداماتها في المجاﻻت العلمية(‪.‬‬ ‫‪) Fortran ‬تستخدم في المجاﻻت الفيزيائية والرياضيات(‪.‬‬ ‫‪) Cobol ‬تستخدم في المجال التجاري(‪.‬‬ ‫‪) Java ‬تدخل في عدة مجاﻻت ومنا المواقع واﻷنظمة التفاعلية(‪.‬‬ ‫المميزات‪:‬‬ ‫‪ (١‬قريبة جدا من لغة اﻻنسان )مما ساعد علﻰ انتشارها(‪.‬‬ ‫‪ (٢‬سهلة الفهم والكتابة‪.‬‬ ‫‪ (٣‬لغات هيكلية‪.‬‬ ‫‪ (٤‬لغات متخصصة )كل لغة تهتم بجانب معين‪ ،‬وبالتالي يمكن اﻻستفادة من اللغات المختلفة بحسب نوع المشكلة‬ ‫المراد حلها‪.‬‬ ‫‪٤‬‬ ‫ﻣﺪﺭﺱ ﺍﳌﺎﺩﺓ ‪ :‬ﻋﻼء ﻋﺒﺪ ﻋﻠﻲ ﻫﺎﺩﻱ‬ ‫ﻗﺴﻢ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻭﺍﻻﺗﺼﺎﻻﺕ ‪ -‬ﺍﻟﺴﻨﺔ ﺍﻻﻭﱃ ‪-‬ﻣﺎﺩﺓ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ‪C++‬‬ ‫الجزء النظري ) المحاضرة رقم ‪(٠٢‬‬ ‫ما هي لغة البرمجة ) ‪( C++‬‬ ‫من منا لم يفكر يو ًما بينما يعمل على أحد التطبيقات أو يستخدم أحد مواقع اﻹنترنت عن مقدار العمل الذي استغرق ﻹنجاز هذا التطبيق؟!‬ ‫محتارا بين اللغات المتعددة‪ ،‬هل‬ ‫ً‬ ‫ً‬ ‫طويﻼ‬ ‫من منا لم يشغل تفكيره ولو للحظة أن يغامر بدخول هذا العالم الواسع؟! أكثرنا أمضى وقت ًا‬ ‫ً‬ ‫يستحسن أن أتعلم الجافا ‪ Java‬أم سي بلس بلس‪ C++‬؟ ربما تكون لغة سي شارب ‪ C#‬أكثر متعة! ما ميزات كل لغةٍ؟!‬ ‫سنقوم هنا بالحديث عن إحدى هذه اللغات التي شكلت حجر اﻷساس في الكثير من التطبيقات التي نعتمد عليها في حياتنا اليومية‪ ،‬سندرس‬ ‫لغة البرمجة سي بلس بلس ‪. C++‬‬ ‫تعريف لغة البرمجة سي بلس بلس‪: C++‬‬ ‫هي لغة برمجة كائني ٍة متعددة اﻷغراض‪ ،‬ومهيكلة‪.‬اخترعت من قبل العالم ) برايان ستروستروب( في مختبرات بيل ‪.‬وهي لغةٌ مماثلةٌ‬ ‫للغة البرمجة السي ‪ C‬التي قام باختراعها العالم ) دينيس ريتشي ( في أوائل سبعينيات القرن الماضي‪ ،‬إﻻ أنها أكثر أمانًا من سابقتها‬ ‫وتتضمن العديد من التقنيات الحديثة كالبرمجة كائنية التوجه ) ‪.( Object Oriented programming - OOP‬‬ ‫تاريخ سي بلس بلس ‪: C++‬‬ ‫يعود تاريخ هذه اللغة إلى عام ‪ ، ١٩٧٩‬إذ قام بإنشائها برايان ستروستروب أثناء عمله في مختبرات بيل‪.‬في الواقع عمل عليها كنسخ ٍة‬ ‫مطور ٍة من لغة سي ‪ c‬وسميت بدايةً سي مع الصفوف )‪ ، ( C with classes‬وكانت ‪ % ٩٩‬من برامج سي تعمل عليها دون تغيير في‬ ‫الشيفرة المصدرية‪.‬‬ ‫تم تغيير اسم اللغة عام ‪ ١٩٨٣‬إلى اﻻسم المعروف حال ًيا وهو سي بلس بلس ‪) C++‬دﻻلة على معامل الزيادة في اللغة وهو ‪.(++‬ومع‬ ‫الوقت تم إضافة العديد من الميزات حتى تطورت ووصلت إلى شهرتها الحالية‪.‬‬ ‫مزايا لغة سي بلس بلس ‪: C++‬‬ ‫نتيجة الى اﻻهتمام الذي حظيت به اللغة منذ نشأتها فقد تميزت عن سابقتها بالعديد من المزايا التي جعلت منها لغةً مرموقةً بين أشباهها‪.‬‬ ‫وسنذكر بعض مزاياها تلك‪:‬‬ ‫لغة كائنية التوجه‪.‬‬ ‫‪(١‬‬ ‫محمولة‪.‬‬ ‫‪(٢‬‬ ‫متعددة المهام‪.‬‬ ‫‪(٣‬‬ ‫شاملة‪.‬‬ ‫‪(٤‬‬ ‫قوية ‪ ،‬إذ تستعمل في العديد من أنظمة التشغيل‪.‬‬ ‫‪(٥‬‬ ‫تعتبر من اللغات الرائدة في تطوير المشاريع الكبيرة والمعقدة‪.‬‬ ‫‪(٦‬‬ ‫لغة ) ‪ ( C++‬ورثت مزايا لغة سي إﻻ أنها أضافت العديد من اﻷنماط البرمجية الهامة‪ ،‬كالتغليف ‪ ، Encapsulation‬الوراثة‬ ‫‪ ،Inheritance‬تعددية اﻷشكال ‪ ، Polymorphism‬التجريد ‪ abstraction‬والصفوف ‪. classes‬‬ ‫تدعم لغة ‪ C++‬المقومات اﻷربعة للبرمجة الكائنية ‪.‬التغليف ‪ -‬إخفاء البيانات ‪ -‬الوراثة ‪ -‬تعددية اﻷشكال ‪.‬‬ ‫‪ (١‬التغليف ‪ Encapsulation‬وإخفاء البيانات ‪:‬‬ ‫تدعم ‪ C++‬صفة التغليف و إخفاء البيانات عبر إنشاء أنواع جديدة تسمى بالصفوف ‪ Classes‬و من ثم يقوم الصف المحدد بالعمل‬ ‫ككائن مغلف تماما و يستعمل كوحدة متكاملة بحيث يبقى عمله الداخلي مخفيا و ﻻ يحتاج المستعمل إلى فهم هذا العمل المخبأ ‪ ،‬وانما‬ ‫ينبغي أن يعرف كيفية استعماله فقط ‪.‬‬ ‫‪ (٢‬الوراثة و إعادة اﻻستعمال ‪: Inheritance‬‬ ‫توفر ‪ C++‬دعما فعاﻻ ﻹعادة اﻻستعمال من خﻼل الوراثة ‪. inheritance‬يمكن إعﻼن نموذج جديد يكون امتدادا لصف موجود و‬ ‫اشتقاقا منه ‪.‬ونسمي الصف الجديد صفا مشتقا أحيانا ‪.‬‬ ‫‪٥‬‬ ‫ﻣﺪﺭﺱ ﺍﳌﺎﺩﺓ ‪ :‬ﻋﻼء ﻋﺒﺪ ﻋﻠﻲ ﻫﺎﺩﻱ‬ ‫ﻗﺴﻢ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻭﺍﻻﺗﺼﺎﻻﺕ ‪ -‬ﺍﻟﺴﻨﺔ ﺍﻻﻭﱃ ‪-‬ﻣﺎﺩﺓ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ‪C++‬‬ ‫‪ (٣‬التعددية الشكلية ‪: Polymorphism‬‬ ‫إن دالة الرسم واحدة ‪ ،‬و لكن أطوارها متعددة بحسب نوع الفصيلة ‪.‬و هذا هو أحد المبادئ اﻻقتصادية في لغة سي‪ ++‬لتوفير الوقت‬ ‫و الجهد ‪ :‬استخدام نفس الدالة لتحقيق مهام مختلفة ‪.‬‬ ‫عيوب لغة سي بلس بلس‪: C++‬‬ ‫ﻻ تخلو أي لغ ٍة من بعض نقاط الضعف أو العيوب البسيطة ربما‪ ،‬لذا يجب علينا التنويه لها‪:‬‬ ‫‪ (١‬تعتبر لغة سي بلس بلس غير آمنة‪.‬‬ ‫‪ (٢‬معقدة بالنسبة للمتعلمين حديثًا‪.‬‬ ‫‪ (٣‬صعبة التعامل والتصحيح عند استخدامها في تطبيقات الويب‪.‬‬ ‫‪ (٤‬ﻻ تدعم استعادة الموارد ‪. Garbage collection‬‬ ‫‪ (٥‬ﻻ توفر الكثير من الدعم للمبرمج‪.‬‬ ‫‪ (٦‬ﻻ يوجد مكتباتٌ افتراضيةٌ خاصةٌ بها لتصميم الواجهات الرسومية‪.‬‬ ‫بعض التطبيقات التي استخدمت سي بلس بلس ‪ C++‬في تصميمها‪:‬‬ ‫كبير‪ ،‬ومنها‬ ‫ي ٍ اﻵن‪ ،‬فمنها ما اعتمد على اللغة بشك ٍل ٍ‬ ‫استخدمت هذه اللغة في العديد من البرامج والتطبيقات التي نستخدمها بشك ٍل يوم ّ‬ ‫ت مجتمع ٍة في تطويره‪.‬لكن القوة التي تتمتع بها هذه اللغة جعلتها تحتل مكانًا في برمجة معظم البرامج الناجحة والقوية‬ ‫ما دخلت عدة لغا ٍ‬ ‫منها‪:‬‬ ‫‪ Firmware‬برامج أنظمة اﻵﻻت والهواتف المحمولة‪.‬‬ ‫‪‬‬ ‫أنظمة التشغيل مثل ‪ Windows‬و‪. Apple‬‬ ‫‪‬‬ ‫معظم برامج ‪ Adobe‬مثل الفوتوشوب ‪ photoshop‬وأليستريتور ‪ Illustrator‬والبريمير ‪. Premier‬‬ ‫‪‬‬ ‫تطبيقات غوغل ‪ Google Applications:‬تمت كتابة بعض تطبيقات غوغل بواسطة ‪ C++‬مثل نظام الملفات وغوغل كروم‬ ‫‪‬‬ ‫‪.Google Chrome.‬‬ ‫متصفح اﻹنترنت ‪. Mozila – Firefox‬‬ ‫‪‬‬ ‫برنامج النمذجة ثﻼثية اﻷبعاد ‪. Autodesk Maya‬‬ ‫‪‬‬ ‫أمازون ‪. Amazon‬‬ ‫‪‬‬ ‫البريد اﻹلكتروني) ‪.( Email‬‬ ‫‪‬‬ ‫هل لغة البرمجة ‪ C++‬هي مفتوحة المصدر ‪. open sources‬‬ ‫نتيجة انتشارها الكبير والتطويرات التي قام بها العديد من المبرمجين فقد توافرت منها العديد من البرمجيات المفتوحة المصدر‪ ،‬ويمكن‬ ‫ي ٍ كان اﻻطﻼع على الشيفرة المصدرية للعديد من التطبيقات بسهولةٍ‪.‬‬ ‫ﻷ ّ‬ ‫** مراحل حياة البرنامج **‬ ‫حينما ن كتب برنامجا في السي فإنك تمر بعدة مراحل لكي ترى نتيجة البرنامج ‪،‬وهذه المراحل ثابتة وهي تمثل كالتالي‪:‬‬ ‫‪ (١‬ﻣرحلة التحرير ‪:editing‬‬ ‫في هذه المرحلة تقوم أنت بكتابة البرنامج وتحريره ‪.‬‬ ‫‪ (٢‬ﻣرحلة التجميع‪:‬‬ ‫وهي تضم ﻣرحلتين تعتبر أساسا هما‪:‬‬ ‫‪ -‬ترﺟمة ‪compiling‬‬ ‫‪ -‬ربط البرناﻣج ‪linking‬‬ ‫‪ (٣‬ﻣرحلة التنفيذ ‪:executing‬‬ ‫وتلك كانت المراحل اﻷساسية التي يمر بها البرنامج لكي يظهر النتيجة ولكن هنالك مرحلة رابعة تتم فقط في حالة وجود أخطاء في‬ ‫البرنامج وهي‬ ‫‪ (٤‬ﻣرحلة اكتشاف اﻷخطاء ‪: debugging‬‬ ‫‪٦‬‬ ‫ﻣﺪﺭﺱ ﺍﳌﺎﺩﺓ ‪ :‬ﻋﻼء ﻋﺒﺪ ﻋﻠﻲ ﻫﺎﺩﻱ‬ ‫ﻗﺴﻢ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻭﺍﻻﺗﺼﺎﻻﺕ ‪ -‬ﺍﻟﺴﻨﺔ ﺍﻻﻭﱃ ‪-‬ﻣﺎﺩﺓ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ‪C++‬‬ ‫وﻻ يوجد داعي لشرح هذه المرحلة ‪ ،‬فأنت بالطبع سوف تكتشفها عند كتابة برنامج ‪ ،‬ليس معنى كﻼمي هو التأكيد على وجود اﻷخطاء‬ ‫في كتابة البرامج ولكن هذا شيء طبيعي ما دمت تتعلم لغة السي ………فأنت ستواجهك أخطاء كثيرة عند كتابة البرامج فأنت في‬ ‫طور تعلم لغة السي فمع تطبيق البرامج واكتشاف اﻷخطاء وتصحيحها سوف تتعود مع مرور الوقت على اكتشاف أخطائك بنفسك لكي‬ ‫تتجنبها مستقبﻼ‪.‬‬ ‫‪ ‬الخوارزﻣيات ‪:Algorithm‬‬ ‫ما هي الخوارزميات ‪Algorithms -‬؟‬ ‫الخوارزميات تعرف باللغة اﻹنجليزية )‪ ،(Algorithms‬وتعرف أيضا بـ حل المشكﻼت ‪ ،Problem Solving -‬ومن خﻼل هذا المسمى‬ ‫يمكنك تعريف الخوارزمية بأنها مجموعة من الخطوات التي يتم تطبيقها على مجموعة من البيانات المتاحة والتي تعرف بـ المدخﻼت ‪-‬‬ ‫‪ ،Inputs‬لتحصل منها على نتيجة )حل المشكلة( وهو ما يعرف بـ المخرجات ‪ ،Output -‬وهذه الخطوات ببساطة هي الخوارزمية‪،‬‬ ‫والشكل التالي يوضح الفكرة أكثر‪:‬‬ ‫ما هي طرق ‪ /‬خطوات كتابة الخوارزمية؟‬ ‫يتم حل أي مشكلة )تصميم الخوارزمية( في أربع خطوات رئيسية‪ ،‬ولكي تتمكن من فهم كل خطوة جيدا سوف أطرح مشكلة برمجية‬ ‫بسيطة ونقوم بحل المشكلة من خﻼل تطبيق خطوات كتابة الخوارزمية ‪:‬‬ ‫‪ (١‬تعريف المشكلة‬ ‫‪ (٢‬كتابة الخوارزمية‬ ‫‪ (٣‬مراجعة الخوارزمية‬ ‫‪ (٤‬تحويل الخوارزمية الى برنامج‬ ‫السؤال ‪ //‬اكتب خوارزمية للحصول على المتوسط الحسابي لرقمين وقم بطباعة النتيجة‬ ‫‪ (١‬تعريف المشكلة ‪:Problem Definition -‬‬ ‫يعتبر تعريف أو تحديد المشكلة هو أولى خطوات الحل للمشكلة‪ ،‬حيث يتم تحديد المدخﻼت والمخرجات بكل دقة ووضوح على شكل‬ ‫متغيرات ‪ ،Variables -‬فيتوجب عليك كمبرمج أن تقوم بتحديد المفاهيم الخاصة بالمشكلة على هيئة متغيرات ذات إسم محدد ونوع‬ ‫بيانات محدد‪ ،‬حيث يتم اﻹشارة إلى هذه البيانات في الخوارزمية من خﻼل اﻹسم ‪ ،‬ونوع البيانات يحدد العمليات التي يمكن إجراؤها على‬ ‫البيانات‪ ،‬يوجد العديد من أنواع البيانات ولكن يمكنك أن تصنف البيانات في نوعين رئيسيين وهم البيانات الرقمية والبيانات النصية‪.‬‬ ‫في هذه الخطوة عادة ما يتم إنشاء جدول بالبيانات ‪ ،Data Table -‬بحيث يحتوي هذا الجدول على تصنيفين رئيسيين وهم متغيرات‬ ‫المدخﻼت ‪ ،Input Variables -‬متغيرات النتيجة ‪.Output Variables -‬‬ ‫وبتطبيق هذه الخطوة على المثال‪ ،‬نحصل على جدول البيانات التالي‬ ‫المدخﻼت‪:‬‬ ‫‪ X‬الرقم اﻷول‬ ‫‪ Y‬الرقم الثاني‬ ‫المخرجات‪:‬‬ ‫‪ average‬المتوسط الحسابي للرقمين‬ ‫‪٧‬‬ ‫ﻣﺪﺭﺱ ﺍﳌﺎﺩﺓ ‪ :‬ﻋﻼء ﻋﺒﺪ ﻋﻠﻲ ﻫﺎﺩﻱ‬ ‫ﻗﺴﻢ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻭﺍﻻﺗﺼﺎﻻﺕ ‪ -‬ﺍﻟﺴﻨﺔ ﺍﻻﻭﱃ ‪-‬ﻣﺎﺩﺓ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ‪C++‬‬ ‫‪ (٢‬تصميم ‪ /‬كتابة الخوارزمية ‪Writing an Algorithm -‬‬ ‫في هذه الخطوة يجب على المبرمج التفكير في طريقة حل المشكلة‪ ،‬ثم تقسيم هذه الطريقة على مجموعة خطوات‪ ،‬بحيث تقوم كل خطوة‬ ‫بإجراء عملية واحدة فقط‪ ،‬ويجب اﻷخذ في اﻻعتبار ترتيب هذه الخطوات‪ ،‬ﻷن الكمبيوتر يقوم بتنفيذ هذه الخطوات واحدة تلو اﻷخرى‬ ‫بالترتيب الذي يقوم بكتابته المبرمج‪ ،‬ويجوز للمبرمج أن يقوم بتعريف متغيرات جديدة لتساعده في حل المشكلة‪ ،‬وفي هذه الحالة تسمى‬ ‫هذه المتغيرات بـ متغيرات البرنامج ‪ ،Program Variables -‬وهذه المتغيرات ﻻ تعد من المدخﻼت وﻻ من المخرجات‪.‬وقبل أن نبدأ‬ ‫في كتابة الخوارزمية يجب أن تعلم أن هناك طريقتين لكتابة الخوارزمية‪ ،‬وهم كالتالي‪:‬‬ ‫الطريقة الكتابية ‪ -‬شبيهة الكود ‪: Pseudo Code -‬‬ ‫وفي هذه الطريقة يقوم المبرمج بكتابة خطوات حل المشكلة )الخوارزمية( في تسلسل مرقم أو غير مرقم‪ ،‬وتكتب كل خطوة في سطر‬ ‫مستقل‪ ،‬ويستخدم المبرمج اللغة التي يتحدث بها سواء كانت العربية أو اﻹنجليزية لكتابة تسلسل الخطوات‪ ،‬ومن أهم مميزات هذه‬ ‫الطريقة هي المرونة‪ ،‬حيث يمكن للمبرمج كتابة أفكارة على شكل خطوات باللغة اﻷساسية التي يستخدمها في حياته اليومية‪ ،‬وعادة‬ ‫الخوارزميات المكتوبة جيدا بهذه الطريقة يسهل تحويلها إلى أكواد أو أوامر للكمبيوتر‪ ،‬والعيب الرئيسي في هذه الطريقة أنه مع كبر‬ ‫حجم الخوارزمية يصبح من الصعب تتبع خطواتها ومراجعتها‪ ،‬وأيضا من عيوب هذه الطريقة أنها ﻻ تمكن المبرمجين الذين يتحدثون‬ ‫بلغة مختلفة عن التي كتبت بها الخوارزمية من فهمها‪.‬وبتطبيق هذه الطريقة على المثال نحصل على الخوارزمية التالية‪:‬‬ ‫‪Start‬‬ ‫إبدأ‬ ‫‪Read: X, Y‬‬ ‫إقرأ المدخﻼت‪: X, Y‬‬ ‫‪sum = X + Y‬‬ ‫‪sum = X + Y‬‬ ‫‪average = sum / 2‬‬ ‫‪average = sum / 2‬‬ ‫‪Write: average‬‬ ‫إطبع المتغير‪: average‬‬ ‫‪End‬‬ ‫النهاية‬ ‫المخطط اﻹنسيابي ‪ -‬خريطة التدفق ‪:Program Flowchart -‬‬ ‫وفي هذه الطريقة أيضا يقوم المبرمج بكتابة خطوات حل الخوارزمية ولكن بإستخدام مجموعة من اﻷشكال الهندسية اﻷساسية بحيث كل‬ ‫شكل يمثل خطوة من خطوات حل المشكلة‪ ،‬ويوجد معيار سائد ومتبع ﻹستخدام هذه اﻷشكال‪.‬‬ ‫من مميزات استخدام هذه الطريقة أنها مباشرة وبسيطة ويسهل فيها تتبع خطوات الخوارزمية‪ ،‬وأيضا يمكن فهم الخوارزمية المكتوبة‬ ‫بهذه الطريقة من أي مبرمج أي كانت اللغة التي يتحدث بها‪ ،‬ومن أهم عيوب هذه الطريقة أنه يصعب تحويلها إلى أكواد إذا كنت تستخدم‬ ‫لغات برمجة مثل الـ ‪ ،C‬ويصعب كتابة الخوارزميات المعقدة بهذه الطريقة‪.‬‬ ‫‪٨‬‬ ‫ﻣﺪﺭﺱ ﺍﳌﺎﺩﺓ ‪ :‬ﻋﻼء ﻋﺒﺪ ﻋﻠﻲ ﻫﺎﺩﻱ‬ ‫ﻗﺴﻢ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻭﺍﻻﺗﺼﺎﻻﺕ ‪ -‬ﺍﻟﺴﻨﺔ ﺍﻻﻭﱃ ‪-‬ﻣﺎﺩﺓ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ‪C++‬‬ ‫المخطط اﻻنسيابي‬ ‫لخوارزمية المتوسط الحسابي لرقمين‬ ‫‪ (٣‬مراجعة الخوارزمية ‪Tracing the Algorithm -‬‬ ‫في هذه الخطوة نقوم باختبار الخوارزمية التي قمنا بكتابتها‪ ،‬وذلك من خﻼل إدخال بيانات معروفة النتيجة مسبقا‪ ،‬خطوة بخطوة لقياس‬ ‫مدى صحة وكفاءة الخوارزمية‪ ،‬وبتطبيق ذلك على المثال سوف نستخدم الرقمين ‪ ٧‬و ‪ ٣‬حيث معروف أن المتوسط الحسابي الخاص‬ ‫بهم هو الرقم ‪ ،٥‬ويتم ذلك على خطوات منفصلة كالتالي‬ ‫‪ (١‬إدخال البيانات بحيث يصبح المتغير ‪ X‬يساوي الرقم ‪ ،٧‬والمتغير ‪ Y‬يساوي الرقم ‪. ٣‬‬ ‫‪ (٢‬حساب حاصل جمع الرقمين ‪ X‬و ‪ Y‬وتخزين نتيجة الجمع في المتغير ‪ ،sum‬لتصبح قيمته تساوي الرقم ‪.١٠‬‬ ‫‪ (٣‬حساب قيمة المتوسط الحسابي وذلك بقسمة قيمة المتغير ‪ sum‬على العدد ‪ ٢‬وهو مجموع البيانات التي تم إدخالها‪ ،‬ثم‬ ‫تخزين النتيجة في المتغير ‪ ،average‬والتي سوف تصبح ‪ ٥‬وهو حاصل قسمة الرقم ‪ ١٠‬على الرقم ‪. ٢‬‬ ‫‪ (٤‬طباعة قيمة المتغير ‪.average‬‬ ‫‪ (٥‬إنهاء البرنامج‪.‬‬ ‫عند قراءة الخطوات السابقة قد تشعر ببعض الملل وذلك ﻷنك كإنسان بمجرد أن يطلب منك حساب المتوسط الحسابي للرقمين ‪ ٧‬و ‪ ٣‬قد‬ ‫تجيب مباشرة بأن النتيجة هي ‪ ،٥‬ولكن القاعدة اﻷساسية لتعلم الخوارزميات‪ ) ،‬هي فكر مثل الكمبيوتر ( ‪ ،‬الكمبيوتر يجب إعطاؤه‬ ‫التعليمات واحدة تلو اﻷخرى بالترتيب وبالتفصيل حتى يتمكن من حساب أو حل أو تطبيق أي خوارزمية‪ ،‬وذلك هو الهدف اﻷساسي من‬ ‫تعلم الخوارزميات للبرمجة‪.‬‬ ‫‪ (٤‬تحويل الخوارزمية إلى برنامج للحاسوب ‪Writing Code -‬‬ ‫لكي يتم عمل البرنامج يجب تحويل الخوارزمية الى برنامج بلغة ) ‪ ( C++‬وحسب ما سوف نتعلمه ﻻحقا ‪.‬‬ ‫‪٩‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫الجزء النظري ) المحاضرة رقم ‪(٠٣‬‬ ‫المخططات اﻻنسيابية‬ ‫‪Flowchart‬‬ ‫المخططات اﻻنسيابية )‪ (Flowchart‬وجدت كضرورة لتسهيل عمل المبرمج عندما تتعقد الخوارزمية أي تزداد خطواتها ومقارناتها ‪،‬‬ ‫يتم استخدام المخططات اﻻنسيابية لزيادة التوضيح بالنسبة للخوارزمية حيث تصف المخططات طريقة الحل بصورة اسهل وبتسلسل‬ ‫أوضح خاصة عندما تكون المشكلة معقدة نسبيا ‪ ،‬حيث ان كتابة الخوارزمية بجمل متعاقبة يكون صعب واحتمال الخطأ فيها كبير لذلك‬ ‫يستخدم المخطط اﻻنسيابي ‪.‬‬ ‫المخطط اﻻنسيابي )‪:(Flowchart‬‬ ‫هو وصف تصويري )او تمثيل صوري( للخوارزمية يوضح حل المشكلة )السؤال( من البداية الى النهاية بشكل أكثر وضوحا وأسهل‬ ‫فهما مع إخفاء التفاصيل ﻹعطاء الصورة العامة للحل‪ ،‬والمخطط اﻻنسيابي يتكون نتيجة استخدام مجموعة من اﻻشكال كل شكل يوضح‬ ‫عملية معينة وتربط هذه اﻻشكال بخطوط واسهم توضح اتجاه سير تنفيذ العمليات‪.‬‬ ‫ويطلق على المخططات اﻻنسيابية تسميات أخرى مثل )خرائط سير العمليات او خرائط التتابع(‪.‬‬ ‫فوائد استخدام المخططات اﻻنسيابية‪:‬‬ ‫تمكن المبرمج من اﻻلمام الكامل بالمسألة المراد حلها والسيطرة على كل اجزائها بحيث تساعده على اكتشاف اﻷخطاء المنطقية‬ ‫‪(١‬‬ ‫)‪ (Logic error‬والتي تعتبر من اهم اﻷخطاء التي تجهد المبرمج ومن ثم تصحيحها‪.‬‬ ‫توضيح سير العمليات وتسلسل تنفيذها‪.‬‬ ‫‪(٢‬‬ ‫تعتبر المخططات اﻻنسيابية وسيلة مناسبة ومساعدة في كتابة ومتابعة البرامج ذات التفرعات الكثيرة‪.‬‬ ‫‪(٣‬‬ ‫تساعد المبرمج وبسهولة على تعديل برنامج ما‪ ،‬فبمجرد النظر الى المخطط اﻻنسيابي نظرة سريعة يدرك ماهية المسألة وإمكانية‬ ‫‪(٤‬‬ ‫التعديل‪.‬‬ ‫يعتبر اﻻحتفاظ برسوم المخططات اﻻنسيابية لحلول مسائل معينة امرا مهما اذ يعتبر مرجعا مهما يمكن استخدامه لحل مسائل أخرى‬ ‫‪(٥‬‬ ‫مشابهة دون الحاجة الى الرجوع الى المبرمج اﻷول باعتبار ان الحلول اﻷولى قد صيغت في خطوات واضحة بسيطة ومفهومة‪.‬‬ ‫تعتبر المخططات اﻻنسيابية من الوسائل واﻷدوات الهامة لتوثيق البرنامج‪.‬‬ ‫‪(٦‬‬ ‫‪١٠‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫اﻻشكال المستخدمة في رسم المخططات اﻻنسيابية‪:‬‬ ‫‪١١‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫أنواع المخططات اﻻنسيابية‪:‬‬ ‫‪ (١‬المخططات اﻻنسيابية البسيطة )‪(Simple flow chart‬‬ ‫‪ (٢‬المخططات اﻻنسيابية المتفرعة )‪(Branched flow chart‬‬ ‫‪ (٣‬المخططات اﻻنسيابية ذات الحلقات )‪(Loop flow chart‬‬ ‫المخططات اﻻنسيابية البسيطة )‪(Simple flow chart‬‬ ‫يخلو هذا النوع من التفرعات والتكرار وانما يحتوي على مجموعة أوامر واحداث متسلسلة‪ ،‬ويكون الشكل العام لهذا النوع كما في‬ ‫ادناه‪:‬‬ ‫مثال‪ :‬اوجد مجموع عددين واطبع ناتج الجمع ممثل ذلك‬ ‫باستخدام الخوارزمية والمخطط اﻻنسيابي؟‬ ‫المخططات اﻻنسيابية المتفرعة )‪:(Branched flow chart‬‬ ‫يتضمن هذا النوع اتخاذ القرارات او مفاضلة بين خيارين او أكثر وهناك اسلوبين في تنفيذ القرار‪:‬‬ ‫أ( قرار ذو تفرعين‬ ‫ب( قرار ذو ثﻼث تفرعات‬ ‫وتمثل التفرعات في اﻻشكال اﻻنسيابية كما في ادناه‪:‬‬ ‫‪١٢‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫مثال‪ :‬ارسم مخطط انسيابي لقراءة قيمتين معلومتين واختيار اكبرهما؟‬ ‫المخططات اﻻنسيابية ذات الحلقات )‪(Loop flow chart‬‬ ‫نحتاج لهذا النوع من المخططات ﻻعادة تنفيذ عملية او مجموعة من العمليات في مسألة معينة )البرنامج( عددا محددا او غير محدد من المرات‪،‬‬ ‫ويكون الشكل العام لمثل هذه المخططات كما يلي‪:‬‬ ‫مثال‪ :‬اكتب خوارزمية وارسم مخطط انسيابي ﻹيجاد حاصل مجموع اﻻعداد الزوجية لغاية )‪ (n‬من اﻻعداد؟‬ ‫واجب ) ‪ : ( ١‬اكتب خوارزمية وارسم المخطط اﻻنسيابي لترتيب قيمتين ترتيبا تصاعديا ؟‬ ‫‪١٣‬‬ ‫مدرس اﳌادة ‪ :‬عﻼء عبد علي هادي‬ ‫قسم تكنولوجيا اﳌعلومات واﻻتصاﻻت ‪ -‬السنة اﻻوﱃ ‪-‬مادة الﱪﳎة بلغة ‪C++‬‬ ‫الجزء النظري )المحاضرة رقم ‪(٠٤‬‬ ‫ماذا يجري فعليا في الحاسوب‬ ‫)كيف يقوم الحاسوب بتمثيل وتنفيذ الجملة البرمجية داخل الحاسوب(‬ ‫يتكون البرنامج في لغة البرمجة ‪ C++‬من المكونات التالية‪:‬‬ ‫‪ (١‬الملفات الرأسية‬ ‫‪ (٢‬المتغيرات واﻻعﻼنات‬ ‫‪ (٣‬جسم البرنامج‬ ‫لغة سي‪ ++‬هي من اللغات عالية المستوى وتستخدم كلمات انجليزية تقريبا ً بمعناها اﻷصلي ولهذا تتطلب برنامجا ً يسمى مترجم‬ ‫"‪ "Compiler‬ليقوم بتحويل اﻷوامر في ‪ C++‬إلى لغة اﻵلة فالكمبيوتر ﻻيفهم اللغات عالية المستوى بشكل مباشر ‪ ,‬وهناك أداة اخرى‬ ‫نحتاج إليها وهي المربط أو ‪ Linker‬وهو أداة تقوم بتجميع ملفات ‪ obj.‬الناتج من عملية الترجمة إلى ملف تنفيذي ويكون عادة باﻻمتداد‬ ‫‪.exe‬أو مكتبات الربط الديناميكية ‪ , dll.‬وأداة أخرى وهي محرر النصوص والذي سنكتب فيه السطور البرمجية مثل برنامج المفكرة‬ ‫الموجود على نظام الويندوز‪ ،‬في الماضي كانت هذه البرامج متوفرة كل واحد على حدة ويتم ربط البرنامج وترجمته عن طريق أسطر‬ ‫أوامر ‪ ، console‬أما اليوم فهي موجودة في برنامج واحد يحتوي على محرر النصوص والمترجم والمربط في آن واحد ولهذا يسمونه‬ ‫بيئة التطوير المتكاملة أو ‪) Integrated Development Environment‬اختصارا ً ‪ , (IDE‬ومن أشهرها بيئة الفيجوال ستوديو‬ ‫‪ Microsoft Visual Studio‬المقدمة من شركة ميكروسوفت ‪ ,‬كذلك يمكنك استخدام برنامج ‪. Code block‬‬ ‫ادناه مثال لبرنامج مكتوب بلغة البرمجة ) ‪: ( C++‬‬ ‫>‪#include number; /‬‬ ‫‪ */‬هل ‪ number‬يساوي ‪if (number == 5) /* 5‬‬ ‫{‬ ‫;"‪cout