Uploaded by Tawfek Reda

3-لغات برمجة الحاسب

advertisement
‫الفصل األول‬
‫الطريق إلى برمجة الحاسب اآللى‬
‫‪The Art of Computer Programming‬‬
‫‪.1‬‬
‫المقدمة‬
‫سيتم التعرف في هذه الوحدة على مبادئ برمجة الحاسب اآللى‪ .‬وتضيف البرمجة إلى الحاسب‬
‫اآللى عناصر قوة جيدة‪ ،‬حيث أنه بدون وجود البرمجة فى أجهزة الحاسب اآللى فإن أجهزة‬
‫الكمبيوتر ال تعتبر أجهزة مفيدة‪ .‬فالبرمجة هي العمليات التى يتم تنفيذها بإستخدام الحاسب اآللى‪.‬‬
‫وبشكل عام‪ ,‬وكما هو موضح فى الشكل (‪ )1‬فإن نظام الحاسب اآللى يتكون من العناصر اآلتية‪:‬‬
‫‪Users‬‬
‫‪Software Applications‬‬
‫‪Operating System‬‬
‫‪Hardware‬‬
‫شكل (‪ : )1‬نظام الحاسب اآللى‬
‫‪ .1‬األجهزة ‪ Hardware‬وهي عبارة عن مجموعة من المكونات المادية التي يتكون منها‬
‫الحاسب وتشمل جهاز الحاسب واألجهزة الملحقة به مثل ( أجهزة اإلدخال ‪ -‬أجهزة‬
‫اإلخراج – الذاكرة األولية والذاكرة الثانوية وأجهزة التخزين الثانوي وغيرها ) ‪.‬‬
‫‪ .2‬البرمجيات ‪ Software‬وهي تمثل البرامج والبيانات ‪ ،‬والمعلومات ‪ ,‬والمعرفة‪.‬‬
‫أ‪ .‬البرامج ‪ Programs‬هي مجموعة من التعليمات التي يتم إدخالها إلى الحاسب اآللى‬
‫إلجراء العمليات المختلفة على البيانات ولتنفيذ الوظائف المختلفة ‪.‬‬
‫ب‪ .‬البيانات ‪ Data‬فهي مجموعة الحقائق التي يغذى بها الحاسب بغرض إجراء العمليات‬
‫الحسابية المنطقية أو أي عمليات أخرى عليها تبعا ً لتوجيهات تعليمات البرنامج وذلك‬
‫للحصول على معلومات نافعة ومفيدة ‪ .‬وتمثل البيانات الوصف األولى لألشياء ‪،‬‬
‫واألحداث ‪ ،‬واألنشطة ‪ ،‬والمعامالت التي يتم تسجيلها وتصنيفها وتخزينها‪.‬‬
‫ت‪ .‬المعلومات ‪:Information‬‬
‫ث‪ .‬المعرفة ‪ :Knowledge‬تتكون من البيانات و‪ /‬أو المعلومات التي تم تنظيمها‬
‫ومعالجتها لنقل الفهم والخبرة والتعلم المتراكم والخبرات والتى تم تطبيقها لحل مشاكل‬
‫المؤسسات المختلفة‪.‬‬
‫ومثال على ذلك برنامج يستخدم لحل المعادلة التربيعية ‪ , y = ax2 + bx + c‬فهو عبارة من‬
‫مجموعة األوامر التى تشمل إرسال رسالة إلى المستخدم إلدخال المعامالت المختلفة ( ‪,)a,b,c‬‬
‫أما البيانات فهى متمثلة فى المعامالت التى إدخالها عن طريق المستخدم ‪ a , b , c‬إلجراء العمليات‬
‫الحسابية عليها وحساب قيمة ‪.y‬‬
‫‪ .3‬المستخدمين ‪ :Users‬وهم مجموعة األفراد العاملين في مجال الحاسب والمستفيدين من‬
‫تشغيله ‪.‬‬
‫‪ .4‬اإلجراءات ‪ : Procedures‬وهي مجموعة التعليمات التي تحكم العالقة بين عناصر‬
‫نظام الحاسب ‪ ،‬فهي توضح كيفية إستخدام النظام وتشغيله وما هي البرامج التي يجب‬
‫تشغيلها وفي أي وقت ‪ ،‬كذلك اإلجراءات التي يجب إتباعها عند حدوث أي‬
‫عطل ‪.‬‬
‫‪.2‬‬
‫برنامج الحاسب اآللى ‪Computer Program‬‬
‫يتكون برنامج الحاسب اآللى من سلسلة من األوامر التى يتم تنفيذها خطوة بخطوة والتي‬
‫توفر حالً ما لمشكلة معينة ( مثل‪ ,‬حل المعادالت التربيعية ‪ ,‬حساب نتيجة الطالب ‪ ,‬حساب‬
‫راتب الموظف فى مؤسسة ما ‪ )...... ,‬وتوجه الكمبيوتر إلى ما يجب القيام به بالضبط‪ .‬و‪.‬‬
‫هناك نوعين رئيسيين من البرامج‪:‬‬
‫أ‪ .‬برامج النظام ‪:System Programming‬‬
‫وتمثل برامج النظام نقطة القوة الرئيسية فى إدارة نظام الحاسب اآللى‪ ,‬حيث يتم‬
‫تصميمها خصيصا لتسهيل إستخدام المكونات المادية للحاسب اآللى لكي يتم تنفيذ‬
‫البرامج بشكل سريع وبدقة وبكفاءة‪.‬‬
‫فمنذ بدء إستخدام الحاسب اآللى‪ ,‬فإن الدور األساسى لمشغلى الحاسب هو مراقبة‬
‫العمليات الخاصة به وترتيب هذه العمليات وتجهيز البيانات المطلوب إدخالها إلى‬
‫الحاسب اآللى عن طريق وحدات اإلدخال (‪ )Input Devices‬وإستقبال المعلومات‬
‫الناتجة عن هذه العمليات من خالل (‪ .)Output Devices‬ومع إزدياد إمكانيات‬
‫وحدات المعالجة المركزية (‪ , )Central Processing Unites CPUs‬فإنه مازال‬
‫هناك تأخير وأخطاء بشرية تعوق عملية تطور الحاسب اآللى الناتجة عن الثورة‬
‫التكنلوجية الهائلة‪ ,‬وهذه األخطاء البشريةهي السبب األساسى للكثير من األخطاء التى‬
‫تحدث فى أنظمة الحاسب اآللى‪ .‬وبناءا عليه كانت هناك ضرورة ملحة لتطوير برنامج‬
‫للنظام لمعالجة هذه األخطاء مما أدى إلى ظهور أنظمة تشغيل الحاسب اآللى‬
‫‪.Operating Systems‬‬
‫ نظم التشغيل ‪Operating Systems‬‬‫هي عبارة عن مجموعة من برامج النظام (‪ )System Programs‬التى تتحكم فى‬
‫عمل الحاسب اآللى ‪,‬وتنفيذ البرامج وإدارة الملفات وإدارة الموارد الخاصة به بما فيها‬
‫أجهزة اإلدخال واإلخراج والذاكرة‪ .‬وهناك العديد من نظم التشغيل الشائعة اإلستخدام‬
‫مثل نظام تشغيل األقراص )‪ Disk Operating System (DOS‬واإلصدارات‬
‫المختلفة من أنظمة تشغيل مايكروسوفت ويندوز ‪Microsoft Windows‬‬
‫‪Operating Systems (Window s 95, 98. 2000) • •• • Microsoft‬‬
‫‪ Windows NT‬ونظام تشغيل لينكس ‪ Unix‬و‪ . Linu‬وأنظمة تشغيل أندرويد‬
‫للعمل على األجهزة المحمولة ‪.‬‬
‫ويتكون نظام التشغيل من ‪:‬‬
‫▪ برامج التحكم ‪ :Control Programs‬وتختص بعمليات النظام مثل‬
‫عمليات أجهزة اإلدخال واإلخراج ‪ ,I/O operations‬والجدولة‬
‫‪ ,scheduling‬واإلتصال بأجهزة الحاسب األخرى ‪ ,‬ومعالجة األخطاء‬
‫واألحداث المختلفة ‪.Interrupts‬‬
‫▪ برامج المعالجة ‪ :Processing Programs‬وهي مجموعة البرامج التى‬
‫تقوم بتسهيل عمليات تنفيذ البرامج المختلفة‪ ,‬مثل المترجمات ‪ ,‬وبرامج‬
‫التحرير ‪ ,‬وبرامج المكتبات‪.‬‬
‫▪ برامج األدوات ‪ :Utility Programs‬وهي مجموعة من البرامج‬
‫ب‪ .‬برامج التطبيقات ‪:Application Programming‬‬
‫هي مجموعة من البرامج التى يتمم تصميمها ألغراض ومهام خاصة لحل مشكلة معينة‪.‬‬
‫ولذلك فهى تقوم بالتركيز فقط على هذه المشكلة‪ .‬وهناك تطبيقات متنوعة يمكن عرض‬
‫عدد منها كما يلى ‪:‬‬
‫ برامج تحرير النصوص ‪Word Processing Software‬‬‫ تطبيقات قواعد ‪Database Applications‬‬‫ تطبيقات الجداول اإلليكترونية ‪Electronic Spreadsheet application‬‬‫‪ -‬تطبيقات الويب ‪Web Applications‬‬
‫ تطبيقات اإلتصاالت ‪Communication Software‬‬‫ تطبيقات المحاسبة ‪Accounting Software‬‬‫ تطبيقات الرسم بالحاسب ‪Computer Graphics‬‬‫ التصميم بواسطة الحاسب ‪Computer Aided Design CAD‬‬‫ التصنيع بواسطة الحاسب ‪Computer Aided Manfacture CAM‬‬‫ تطبيقات المحاكاة والنمذجة ‪.Modelling and Simulation Software‬‬‫‪.3‬‬
‫المبادئ اإلساسية للبرمجة‬
‫دائما ما يتم تصميم برنامج الكمبيوتر لحل مشكلة معينة ‪ ,‬وتستخدم األوامر التى يتكون‬
‫منها هذا البرنامج لحل هذه المشكلة‪ .‬ومع ذلك ‪ ،‬يجب أن نعرف أن الكمبيوتر ال يقوم‬
‫بحل المشاكل بنفس الطرق التى يفكر بها اإلنسان‪ .‬فإن اإلنسان يقوم بإستخدام التفكير‬
‫والذكاء والحدس لحل المشاكل بينما يقوم الحاسب اآللى بحل المشاكل إعتمدا على‬
‫خطوات الحل النى تم وضعها بإستخدام مبرمج الحاسب اآللى‪.‬‬
‫وفي ضوء ما ذكر أعاله ‪ ،‬فإنه يجب تصميم برنامج الحاسب اآللى بشكل صحيح بحيث‬
‫يتم حل المشكلة وتطوير هذا الحل بفعالية ودقة‪ .‬وقبل أن يتم التطرق إلى الخطوات‬
‫األساسية المتبعة لتصميم برنامج الحاسب اآللى‪ ،‬البد من من التطرق إلى الخصائص‬
‫الرئيسية الواجب توافرها وأخذها فى اإلعتبار أثناء عمل تصميم جيد لبرنامج الحاسب‬
‫اآللى‪ .‬ويمكن سردها كما يلى‪:‬‬
‫‪ .1‬اإلعتمادية ‪ : Reliability‬والمقصود بها اإلعتماد على برنامج الحاسب اآللى فى‬
‫تنفيذ المهام التى صمم من أجلها بشكل جيد‪.‬‬
‫‪ .2‬قابلية الصيانة ‪ :Maintability‬والمقصود بها هو قدرة المبرمج على تعديل أى‬
‫جزء من البرنامج نتيجة لمتطلبات جديدة ‪ New Requirement‬أو معالجة أخطاء‬
‫ظاهرة فى أداء البرنامج ‪.Errors‬‬
‫‪ .3‬قابلية النقل من جهاز إلى آخر ‪ :Portablity‬وهي قابلية نقل البرنامج من بيئة عمل‬
‫إلى أخرى أو من جهاز إلى آخر بأقل كمية من التعديالت أو بال أى تعديل‪.‬‬
‫‪ .4‬سهولة القراءة ‪ :Readability‬سهولة قراءة البرنامج عن طريق مبرمجين آخرين‬
‫وفهمه بسهوله ويسر‪ .‬وتؤثر هذه الخاصية على سهولة صيانة البرنامج ‪ ,‬أى أن‬
‫البرنامج سهل القراءة تسهل صيانة وحلول األخطاء به‪.‬‬
‫‪ .5‬األداء ‪ :Performance‬البد أن يتميز البرنامج المستخدم في حل مشكلة ما بالقدرة‬
‫على تنفيذ المهام المصمم من أجلها بسرعة وبكفاءة عالية‪ .‬أى أن المطلوب هو أن‬
‫تعمل هذه البرامج بشكل جيد وبشكل سريع وبكفاءة عالية‪.‬‬
‫‪ .6‬حفظ الذاكرة ‪ :Memory Saving‬المقصود هنا هو ببساطة أن البرنامج ال ينبغي‬
‫أن يكون طويل جدا أى يستغرق وقت أطول فى حل المشكلة وال يتطلب تنفيذ عملية‬
‫الحل إستهالك جزء من ذاكرة الحاسب اآللى بشكل مفرط‪.‬‬
‫تؤثر كل العوامل السابقة بشكل كبير على تصميم البرامج والبد أن تؤخذ جميعها فى‬
‫اإلعتبار‪ .‬والتى يضعها المبرمج فى اإلعتبار أثناء تصميم برامج الحاسب اآللى لحل‬
‫مشكلة ما‪.‬‬
‫‪.4‬‬
‫مراحل تصميم البرامج ‪Stages of Program Developement‬‬
‫تمر عملية تطوير برمجيات الحاسب اآللى بمراحل معينة تتمثل فى اآلتى ‪:‬‬
‫‪ .1‬صياغة وتحديد المشكلة ‪Problem Definition‬‬
‫تعتبر مرحلة صياغة وتحديد المشكلة من المراحل الضرورية التى البد منها أثناء‬
‫تطوير وتنفيذ برمجيات الحاسب اآللى‪ .‬وتبدأ هذه المرحلة بالتعرف على حاجة‬
‫المستخدم أو المؤسسة لتصميم هذا البرنامج‪ .‬ويقع على المبرمج عملية تحليل‬
‫المشكلة إعتمادا على الفهم الجيد لهذه المشكلة وما هى الخطوات المطلوبة لحل هذه‬
‫المشكلة‪ .‬وبشكل عام‪ ,‬فإن عملية تحديد المشكلة وتحليلها هي من العمليات األساسية‬
‫التى لها التأثير األعلى على األداء النهائى لبرنامج الحاسب اآللى‪ .‬بمعنى آخر فإن‬
‫التحليل الجيد للمشكلة ينتج عنه برنامج حاسب آلى يعمل بشكل جيد‪ ,‬وله تأثير أيضا‬
‫على تكلفة تطوير البرنامج‪ .‬أما إذا كان هناك تقصير بشكل كبير فى هذه المرحلة‬
‫فإن ذلك ينتج عنه تكلفة عالية لتطوير البرامج وينتج عنه أيضا الكثير من األخطاء‪.‬‬
‫ومن الطرق األساسية فى عملية تعريف وتحليل المشكلة هي معرفة العناصر اآلتية‬
‫‪:‬‬
‫▪ مدخالت البرنامج ‪ : Program Input‬ما هى المدخالت وأشكالها المختلفة‬
‫وأنواعها والقيود التى يمكن تطبيقها على هذه المدخالت‪.‬‬
‫▪ معالجة المدخالت ‪ :Processing‬ما هي العمليات المطلوب تنفيذها على‬
‫مدخالت البرنامج للوصول إلى المخرجات المطلوبة‪.‬‬
‫▪ مخرجات البرنامج ‪ :Program Output‬ما هى المخرجات المختلفة‬
‫وأشكالها وأنواعها‪.‬‬
‫‪ .2‬تصميم البرمجيات ‪Solution Design‬‬
‫بعد اإلنتهاء من التعريف الجيد للمشكلة وتحليلها ‪ ,‬تبدأ عملية تصميم الحل والذى‬
‫يمكن فى بعض األحيان أن يكون هناك أكثر من حل للمشكلة‪ ,‬ويجب على المصمم‬
‫المقارنة بين كل الحلول المقترحة وإختيار األفضل منها‪ .‬وهناك ممارسات جيدة‬
‫لتصميم الحل وهى تقسيم الحل المقترح إلى مجموعة من الحلول الفرعية التى يتم‬
‫التعامل مع كل منها على حدة وفى أوقات مختلفة أو توزيعها على أكثر من مصمم‬
‫لعملية الحل مع التنسيق فيما بينهم‪ .‬وهذه الطريقة لها التأثير الجيد على عملية‬
‫التعديل أو الصيانة‪ .‬وهذا المفهوم يسمى برمجة الوحدات ‪Modular‬‬
‫‪ ,Programming‬حيث أن البرنامج األساسى يتم تقسيمه إلى البرنامج األساسى‬
‫إلى مجموعة برامج فرعية لسهولة تطوير وصيانة البرمجيات‪.‬‬
‫وتتضمن عملية تصميم البرنامج شكلين أساسيين من التدفق المنطقى للبرنامج وهم‪:‬‬
‫ القواعد العامة للبرنامج ‪ :General Logic‬ويمكن تنفيذه بإستخدام الهيكل التركيبى‬‫‪ Structure Chart‬والذى يوضح العناصر الرئيسية للبرنامج وعالقاتها ببعضها‬
‫البعض‪ .‬والشكل التالى يمثل الهيكل العام لبرنامج اآللة الحاسبة‪:‬‬
‫الشاشة‬
‫الرئيسية‬
‫القوائم‬
‫العمليات‬
‫الحسابية‬
‫األرقام‬
‫الذاكرة‬
‫المحرر‬
‫‪:‬‬
‫‪+‬‬
‫‪-‬‬
‫\‬
‫‪x‬‬
‫ القواعد التفصيلية للبرنامج ‪ :Detailed Logic‬وهي عبارة عن التفصيل الدقيق‬‫لكل عملية أو وحدة من الوحدات المذكورة فى القواعد العامة للبرنامج‪ .‬والمقصود‬
‫بالقواعد التفصيلية هو سرد التفاصيل الخاصة بكل مكون من المكونات التى تم‬
‫اإلشارة إليها فى الهيكل العام للبرنامج‪ .‬وهناك بعض األدوات التى تستخدم لهذا‬
‫التوصيف الدقيق وهى خرائط التدفق ‪ Flow Chart‬و األكواد الزائفة‬
‫‪ PseudoCode‬والتى سيتم التعامل بها مؤخرا فى هذا الكتاب‪.‬‬
‫‪1‬‬
‫تحديد‬
‫المشكلة‬
‫‪6‬‬
‫صيانة‬
‫البرامج‬
‫‪2‬‬
‫تحليل المشكلة‬
‫‪3‬‬
‫تصميم‬
‫خوارزميات‬
‫الحل‬
‫‪4‬‬
‫كتابة البرامج‬
‫والتوثيق‬
‫‪5‬‬
‫إختبار الحل‬
‫ومعالجة‬
‫األخطاء‬
‫الخطوات المتبعة لتصميم برنامج‬
‫‪ .3‬كتابة البرنامج ‪Program Coding‬‬
‫وهي عملية تحويل خطوات الحل الناتجة عن عملية تصميم البرنامج إلى كود‬
‫بإستخدام أحد لغات البرمجة‪ ,‬وخصوصا لغات البرمجة عالية المستوى ‪High‬‬
‫‪ ,Level Programming Languages‬مثل لغة ال ‪ C‬أو لغة ‪ .C++‬والتى‬
‫تتطلب معرفة المبرمج معرفة تامة بهذه اللغة‪ .‬وبشكل عام فإن خطوات تعريف‬
‫المشكلة وتصميم المشكلة ال تعتمد على لغة برمجة معينة‪ .‬ولكن فى بعض األحوال‪,‬‬
‫يكون الحل المقترح ال يمكن تنفيذه إال بلغة برمجة معينة‪ .‬والبد للمبرمج أن يعرف‬
‫أن لغات البرمجة تتميز عن بعضها البعض وقد يكون إستخدام لغة برمجة معينة‬
‫هو األفضل لحل مشكلة ما عن لغة أخرى‪.‬‬
‫‪ .4‬إختبار البرنامج ‪Program Testing‬‬
‫بعد كتابة البرنامج بإحدى لغات الرمجة فإن‪ ,‬فإن هذا البرنامج يتم تنفيذه بإستخدام‬
‫الكمبيوتر وبدء عملية اإلختبار طبقا للخطوات اآلتية‪:‬‬
‫▪ معرفة األخطاء ‪ :debugging‬وهي عملية التعرف على األخطاء المختلفة‬
‫بداخل البرنامج وإصالحها‪ .‬وهناك أنواع من األخطاء التى من الممكن أن‬
‫تحدث أثناء كتابة الكود الخاص بالبرنامج وتنفيذ البرنامج وهى‪:‬‬
‫▪ تحذير ‪ :Warrning‬وال يتم إيقاف البرنامج بناءا عليها ويستمر‬
‫البرنامج فى العمل‬
‫▪ الترجمة ‪ :Compling‬وهي عملية يتم تحويل البرنامج فيها من شكل الكود‬
‫إلى شكل لغة اآللة التى يستطيع الكمبيوتر التعامل معها وفهمها عن طريق‬
‫برنامج يسمى ‪ compiler‬أو المترجم‪.‬‬
‫▪ اإلختبار ‪ :Testing‬ويتم تقسيم عملية اإلختبار إلى مراحل متعددة تشمل‬
‫اآلتى‪:‬‬
‫▪ ‪ :Unit testing‬ويشمل إختبار كل وحدة من البرنامج بشكل منفصل‬
‫عن الوحدات األخرى‪.‬‬
‫▪ ‪ :IntegerationTesting‬وتشمل إختبار كل الوحدات التى يتكون‬
‫منها البرنامج معا فى شكل يجعل البرنامج صالح للإلستخدام من‬
‫وجهة نظر المستخدمين‪.‬‬
‫▪ ‪ :System Testing‬يحدث عندما يتم إعداد البرنامج فى شكله‬
‫النهائى عند المستخدم‪.‬‬
‫▪ ‪ :User Tsting‬يتم إختبار البرنامج بواسطة المستخدمين للتأكد من‬
‫تحقق كل طلبات المستخدم‪.‬‬
‫‪ .5‬توثيق‬
‫وصيانة‬
‫البرنامج‬
‫‪and‬‬
‫‪Documentation‬‬
‫‪Program‬‬
‫‪Maintenance‬‬
‫إن البرامج الجيد هو البرنامج الذى له توثيق لكل المزايا والوظائف التى يتميز بها‪.‬‬
‫وبشكل عام فإن التوثيق الجيد لل برنامج يعتبر مرجع جيد للنظام يساعد المبرمجين‬
‫ومحللوا النظم فى عملية تعديل أى جزء من النظام أو اإلجراءات الخاصة بهذا‬
‫النظام بشكل جيد عندما يكون هناك حاجة لذلك‪ .‬عندما تتغير الظروف المحيطة‬
‫بالنظام فإن كلما تزيد الحاجة للتعديل فى إجراءات هذا النظام‪ .‬لذلك فإن عملية‬
‫توثيق النظام هي عملية مستمرة طالما أن هناك المزيد من التغييرات على النظام‬
‫أو تغيير فى اإلجراءات التى يتكون منها النظام‪.‬‬
‫‪.5‬‬
‫أنواع األخطاء المحتملة أثناء البرمجة ‪Types of programming Errors‬‬
‫يجب على مبرمج الحاسب اآللى أن يدرك بأن هناك القليل من البرامج التى تعمل‬
‫بشكل جيد وصحيح للمرة األولي‪ ,‬فال أحد يستطيع القول بأن البرنامج سيكون خالى‬
‫من األخطاء بنسبة ‪ .%100‬لذا على المبرمج أن يصنع الكثير من الجهود لكشف‬
‫وتصحيح أي نوع من األخطاء الموجودة في البرنامج‪ .‬ولكن قبل اكتشاف األخطاء‬
‫وإزالتها ‪ ،‬من الضروري جدا أن يعرف المبرمج أنواع األخطاء المحتملة ودرجة‬
‫خطورتها على البرنامج والتى يجب مراعاتها أثناء كتابة البرنامج‪.‬‬
‫وتنقسم األخطاء الناتجة عن البرمجة إلى أربعة أنواع رئيسية‪:‬‬
‫‪ .1‬أخطاء بناء الجمل ‪ :Syntax Errors‬وهي ناتجة عن عدم إتباع القواعد‬
‫الخاصة بلغة البرمجة وسوء فهم هذه القواعد فى بناء جمل البرمجة‪ .‬ويقوم‬
‫المترجم ‪ Compiler‬بإكتشاف هذا النوع من الخطأ‪ .‬وعند وجود أى خطأ من‬
‫هذا النوع ال يستطيع المترجم إتمام عملية الترجمة وبالتالى ال يتم تحويل‬
‫البرنامج إلى ملف تنفيذى يمكن تنفيذه على الحاسب اآللى‪ .‬ويقوم المترجم‬
‫بعرض هذه األخطاء على شكل قائمة تشمل إسم الخطأ وسبب الخطأ وفى بعض‬
‫األحيان يظهر رقم السطر الذى يحتوى على هذا الخطأ لمساعدة المبرمج على‬
‫الوصول إليه سريعا‪ .‬ويمكن لخطأ واحد أن ينتج عنه مجموعة من األخطاء‬
‫بحيث إذا تم حله يتم حل كل هذه األخطاء مباشرة‪.‬‬
‫‪ .2‬أخطاء أثناء تشغيل البرنامج ‪ :Run Time Error‬وهي األخطاء التى‬
‫تحدث أثناء تنفيذ البرنامج مثل خطأ القسمة على صفر ‪ ,Divide By Zero‬أو‬
‫الذاكرة غير كافية أو خطأ الوصول إلى عنصر خارج النطاق المصفوفة ‪out‬‬
‫‪ .of range index‬وهذا النوع من األخطاء ال يمكن إكتشافه أثناء عملية ترجمة‬
‫البرنامج ولكن يتم تنفيذ البرنامج وعند ظهور هذه األخطاء تسبب إغالق‬
‫البرنامج أو الحصول على نتائج خاطئة‪ .‬كما أن عملية تصحيح هذه األخطاء‬
‫هى عملية صعبة على المبرمج‪.‬‬
‫‪ .3‬األخطاء المنطقية ‪ :Logical Error‬ترتبط هذا األخطاء بقواعد عمل‬
‫البرنامج وال يستطع المترجم التعرف عليها ويتم تنفيذ البرنامج ولكن يعطى‬
‫نتائج خاطئة أو الدخول فى عمليات ال نهائية‪ ,‬ولكن يتم التعرف عليها أثناء‬
‫عملية إختبار البرنامج ‪ Program Test‬كما ورد سابقا‪ .‬و تحدث هذه األخطاء‬
‫بسبب الترجمة غير الصحيحة لـخوارزمية في البرنامج ‪ ،‬وسوء فهم المشكلة‬
‫وكتابة معادالت خاطئة وعدم وجود وضوح التسلسل المعامالت ‪.Operators‬‬
‫‪ .4‬األخطاء الكامنة ‪ :Latent Errors‬هي األخطاء "المخفية" التي تحدث فقط‬
‫عندما يتم استخدام مجموعة معينة من البيانات‪ .‬انظر أدناه المثال‪:‬‬
‫)‪;result = (a+b)/(c-d‬‬
‫يحدث خطأ فقط عندما يكون ‪ c‬و ‪ d‬متساويين بسبب ذلك سيجعل المقام صفر‬
‫وبالتالى ينتج عنه خطأ القسمة على صفر‪ .‬يمكن الكشف عن مثل هذه األخطاء‬
‫فقط باستخدام جميع الحاالت الممكنة للبيانات ويصعب إكتشاف مثل هذه‬
‫األخطاء‪ ,‬ولكن يمكن تفاديها بعمل جمل شرطية للتأكد من أن ‪ C‬ال يساوى ‪d‬‬
‫أثناء حساب هذه المعادلة ‪.‬‬
‫‪ .5‬التحذيرات ‪ :warning‬وهي أنواع من األخطاء التى تحدث ولكن درجة‬
‫خطورتها ال تصل إلى إيقاف البرنامج‪ .‬ولكن تأثيرها يكون فقط على أداء‬
‫البرنامج‪ .‬وأمثلة على ذلك مثل تعريف متغير وعدم إستخدامه فى أى عملية أو‬
‫إستخدام متغير لم يتم تعريفه من قبل‪.‬‬
‫‪ .6‬نصائح للمبرمج ‪Tips for programmer‬‬
‫فيما يلى بعض النصائح التي تساعد المبرمج على زيادة مهاراته في البرمجة‬
‫ليصبح مبرم ًجا جيدا‪.‬‬
‫‪ .1‬التعرف على األساسيات ‪ :know Basics‬يجب أن يكون لدى المبرمج‬
‫فهم جيد ألساسيات لغة البرمجة التي يستخدمها‪ .‬فإن الفهم الجيد يساعد على‬
‫حل المشكالت المعقدة عن طريق تقسيمها إلى مشاكل أصغر‪ .‬والبد أن يكون‬
‫الكود منظم ومرتب بشكل جيد ليساعد المبرمج على قراءته أو أى مبرمج‬
‫آخر على قراءته حتى بعد مرور الكثير من الوقت‪.‬‬
‫‪ .2‬الممارسة المستمرة ‪ :Lot of Practice‬تساعد الممارسة الكثيرة‬
‫المبرمج على تحسين مهاراته‪ .‬وهناك الكثير من طرق الممارسة ‪ ،‬مثل حل‬
‫الكثير من مشاكل البرمجة أو اإلشتراك فى مسابقات البرمجة عبر اإلنترنت‪.‬‬
‫‪ .3‬القابيلية للتغير ‪ :Amenable to Change‬تتغير التكنولوجيا بسرعة‬
‫كبيرة جدا ‪ ,‬لذا يجب على المبرمج أن يدرك مثل هذه التغييرات‪ .‬كما يجب‬
‫عليك التأكد من أن المشاريع أو التقنيات التي يستخدمها هي تقنيات حديثة و‬
‫ليست قديمة لكي يصبح مبرم ًجا جيدا ‪ ،‬ويجب عليه ايضا محاولة تعلم كل‬
‫ما هو جديدة فى البرمجة والتكنولوجيا‪.‬‬
‫‪ .4‬القراءة الكثيرة ‪ :Reading a Lot‬قراءة كتب ومقاالت البرمجة الجديدة‬
‫هي من أفضل الطرق التى تساعد المبرمج على التعلم‪ ,‬وكذلك الدخول إلى‬
‫منتديات البرمجة عبر اإلنترنت‪.‬‬
‫‪ .5‬مساعدة اآلخرين ‪ :Helping Others‬عن طريق اإلنضمام إلى‬
‫المنتديات مثل منتدى ‪ stackoverflow.com‬حيث يمكنك مساعدة‬
‫المبرمجين اآلخرين من خالل اإلجابة عن أسئلتهم‪ .‬كما يمكن للمبرمج‬
‫العثور على إجابات ألسئلته الخاصة‪ .‬كما يمكنه طرح أسئلة في المنتديات‬
‫وحل مشكالتك ؛ كل هذه األنشطة تساعد المبرمج ليكون ليكون مبرم ًجا‬
‫أفضل‪.‬‬
‫‪.‬‬
‫الفصل الثانى‬
‫لغات برمجة الحاسب‬
‫‪Computer Programming Languages‬‬
‫فى بداية ظهور الحاسب االلى‪ ,‬كان يتم إدخال األوامر إلى الكمبيوتر عن طريق‬
‫الكروت المثقبة ‪ Punched Cards‬فى بداية عملية تنفيذ البرامج‪ .‬وكانت تتميز‬
‫هذه الطريق بالبطء الشديد لما فيها من وقت ضائع فى إنتظار دخول أوامر الحاسب‬
‫اآللى بهذه الطريقة إعتمادا على العامل البشري‪ .‬ومن أجل زيادة سرعة هذه العملية‪,‬‬
‫وعند ظهور ذاكرة الكمبيوتر ‪ Computer Memory‬أصبحت تستخدم لتخزين‬
‫مجموعة األوامر التى يتكون منها البرنامج وكذا البيانات التى يتم تنفيذ هذه األوامر‬
‫عليها‪ .‬هذا التطور نشأ عنه فكرة تخزين البرنامج فى الذاكرة‪ .‬أى يتم كتابة البرنامج‬
‫على شكل مجموعة من األوامر تسمى ‪ Code‬أو ‪ instruction‬وبالتالى نشأت‬
‫فكرة ما يسمى البرمجة بإستخدام لغات الحاسب اآللى‬
‫‪Computer‬‬
‫‪ .Programming Languages‬وكانت أول اللغات التى إستخدمت لكتابة برامج‬
‫الحاسب اآللى هي لغة اآللة ‪ .Machine Language‬فى هذا الفصل سوف يتم‬
‫عرض التفصيل عن لغات برمجة الحاسب اآللى وتصنيفاتها المختلفة‪.‬‬
‫ويمكن تصنيف لغات البرمجة عتمادا على العناصر االتية‪:‬‬
‫ المستوى ‪Level‬‬‫ الغرض ‪Purpose‬‬‫ طريقة الترجمة ‪Translation Method‬‬‫‪.1‬‬
‫أنواع لغات البرمجة طبقا للمستوى ‪Level‬‬
‫كما تم ذكره فى المقطع السابق فإن لغة اآللة ‪ Machine Language‬هي البداية‬
‫الحقيقية للغات البرمجة وهي لغة يمكن القول بأنها اللغة الوحيدة التى يفهمها المعالج‬
‫‪ CPU‬بالحاسب اآللى‪.‬‬
‫ويمكن تصنيف لغات البرمجة إلى صنفين أساسيين‪:‬‬
‫ لغات ذات المستوى المنخفض ‪Low-Level Language‬‬‫وهى اللغات األقرب فى المستوى إلى مكونات الحاسب اآللى‪.‬‬
‫‪ .1‬لغة اآللة‬
‫أو اللغة الثنائية ‪or Binary Language‬‬
‫‪Machine‬‬
‫‪:Language‬‬
‫وهي وتعتبر لغة اآللة هي اللغة األقل مستوى وهي األقرب إلى مكونات الحاسب‬
‫اآللى المادية‪ .‬وهي أول لغة برمجة تم تقديمها إلى مبرمجين الحاسب اآللى‪ .‬وهي‬
‫لغة سريعة جدا حيث أنها اللغة المباشرة التى يتعامل بها الحاسب اآللى وال تحتاج‬
‫ألى مترجم ‪ translator‬ألن األوامر ‪ Instructions‬التى تتكون منها هذه اللغة‬
‫تتكون بشكل أساسى من الصفر والواحد )‪.zeros and ones (0’s and 1’s‬‬
‫حيث أن كل مايكروبروسسور مخزن به مجموعة من األوامر على شكل أنماط‬
‫ثنائية‪ ,‬وكل أمر عبارة عن جزئين أساسيين الشفرة ‪ Opcode‬والمعامل‬
‫‪ ,Operand‬وتستخدم الشفرة لتحديد نوع العملية مثل الجمع والطرح ‪ ,‬أما المعامل‬
‫فيمثل البيانات التى سيتم تنفيذ العمليات عليها‪ .‬ولغة اآللة من اللغات األكثر كفاءة‬
‫وال يستطيع أى حاسب آلى تنفيذ أى برنامج إال بشرط أن يكون مكتوب بلغة اآللة‬
‫الخاصة به‪.‬‬
‫وتتميز لغة اآللة بالمميزات اآلتية‪:‬‬
‫▪ سرعة التنفيذ‬
‫▪ حفظ الذاكرة‬
‫▪ التحكم الكامل فى كل المكونات المادية للحاسب اآللى واإلمكانيات المتاحة‬
‫به‪.‬‬
‫كما أن للغة اآللة بعض العيوب يمكن سردها كالتالى‪:‬‬
‫▪ لغة صعبة التعلم‬
‫▪ البرامج المكتوبة بها معرضة للخطأ بشكل عال‪.‬‬
‫▪ تعتمد على الماكينة التى تعمل عليها بشكل كامل‪ ,‬أى أن البرنامج المكتوب‬
‫بلغة اآللة ويعمل على كمبيوتر معين يمكن أن ال يعمل على كمبيوتر آخر‬
‫أو يعطى أخطاء أثناء التنفيذ نظرا إلختالف المكونات المادية للجهاز األول‬
‫عن المكونات المادية للجهاز الثانى‪.‬‬
‫‪ .2‬لغة التجميع ‪:Assembly Language‬‬
‫وهي مجموعة من اللغات تم تطويرها للتغلب على الصعوبات الموجودة فى لغة اآللة‪.‬‬
‫وتقع لغة التجميع فى مستوى أعلى بين لغة اآللة واللغات عالية المستوى‪ ,‬وهي عبارة‬
‫عن عدة لغات وليست لغة واحدة‪ .‬وتتكون لغة التجميع من رموز بدال من األرقام‬
‫الثنائية‪ ,‬وتحتاج إلى مترجم يسمى ‪ Assembler‬ليقوم بتحول البرامج المكتوبة بهذه‬
‫اللغة إلى لغة اآللة لكى تكون قابلة للتنفيذ على الحاسب االلى‪ .‬لذلك يستغرق تنفيذ‬
‫البرنامج المكتوب بلغة التجميع وقتا أكثر من البرنامج المكتوب بلغة اآللة‪.‬‬
‫وتعتمد لغة التجميع على اآللة التى يتم تنفيذ البرنامج عليها‪ ,‬وتعتبر من اللغات األساسية‬
‫التى يتم توفيرها مع المايكروبروسسور ‪ ,CPU‬حيث أن لكل مايكروبروسسور لغته‬
‫الخاصة به أو بشكل آخر مجموعة األوامر الخاصة به‪.‬‬
‫وتتميز لغة التجميع بالمميزات اآلتية‪:‬‬
‫ أسهل فى الفهم واإلستخدام من لغة اآللة‪.‬‬‫‪ -‬سهل البحث فى الكود عن عملية معينة وتعديلها أو تصحيح الخطأ بها‪.‬‬
‫كما أن بها بعض القيود ‪:‬‬
‫ تعتمد على اآللة‪ ,‬أى ال يمكن تنفيذ البرنامج المكتوب بلغة التجميع على آلة مختلفة‪.‬‬‫ يتطلب البرمجة بلغة التجميع معرفة المبرمج بالمكونات المادية للمايكروبروسسور‬‫الذى سيتم تنفيذ البرنامج عليه‪.‬‬
‫والشكل التالى يوضح برنامج مكتوب بلغة التجميع لجمع رقمين وتخرين ناتج الجمع‪.‬‬
‫مثال لبرنامج بلغة التجميع لجمع رقمين‬
‫‪.2‬‬
‫أنواع لغات البرمجة طبقا للغرض ‪Purpose‬‬
‫يتم تقسيم لغات البرمجة حسب الغرض إلى نوعين‪:‬‬
‫‪ .1‬لغات برمجة ذات أغراض عامة ‪ :General Purpose Languages‬تستخدم لحل‬
‫مشاكل متنوعة عامة فى مجاالت تطبيقية مختلفة‪ .‬و في بعض األحيان ‪ ،‬يُشار إلى لغات‬
‫البرمجة لألغراض العامة باسم البرمجة النصية ‪ .text-Based Programming‬وذلك‬
‫ألن المبرمجين يحتاجون إلى كتابة النصوص واألرقام والرموز عند كتابة البرامج‪ .‬و أمثلة‬
‫على ذلك لغة ال ‪ C‬و ‪ C++‬ولغة الجافا ‪.Java‬‬
‫‪ .2‬لغات برمجة ذات أغراض خاصة ‪ :Special Purpose Languages‬تستخدم لحل‬
‫صا لحل المشاكل الخاصة بمجال‬
‫مشاكل ذات طبيعة خاصة‪ .‬وهي لغات مصممة خصي ً‬
‫تطبيقي معين‪ .‬وال يمكنك استخدام مثل هذه اللغة لحل مشكلة ال تقع ضمن نطاقها‪ .‬و أمثلة‬
‫على لغات البرمجة ذات األغراض الخاصة ‪ LISP‬و ‪ .Prolog‬حيث تم تصميم هاتين‬
‫صا ألغراض الذكاء االصطناعي‪ .‬وكذلك لغة ‪ SQL‬وهي لغة برمجة خاصة‬
‫اللغتين خصي ً‬
‫بمجال معالجة قواعد البيانات‪.‬‬
‫‪ .3‬أنواع لغات البرمجة طبقا طريقة الترجمة ‪Translation Method‬‬
‫كما أشرنا سابقة فإن اللغة الوحيدة التى يفهمها الكمبيوتر ويقوم بتنفيذ البرامج المكتوبة بها‬
‫هى لغة اآللة‪ .‬وأى لغة أخرى يتم ترجمتها إلى لغة اآللة عن طريق مترجم‪ ,‬وفيما يلى‬
‫بعض أنواع المترجمات‪:‬‬
‫‪ :Interpreter .1‬هو برنامج يترجم لغة برمجة عالية المستوى إلى لغة اآللة أثناء عملية‬
‫تنفيذ البرنامج‪ .‬الترجمة والتنفيذ لكل جملة فى البرنامج‪ .‬بمعنى آخر ‪ ،‬يقوم المترجم‬
‫بترجمة جملة واحدة وتقوم وحدة التحكم بتنفيذ لغة اآللة الناتجة عن ترجمة هذا السطر‬
‫ثم يتم ترجمة الجملة التالية ثم تقوم وحدة التحكم بتنفيذ تعليمات لغة اآللة الناتجة عنها‬
‫وما إلى ذلك‪ .‬فإذا تم تشغيل البرنامج سبع مرات في اليوم يتم إعادة تفسير لغة البرمجة‬
‫سبع مرات ‪ .‬مما يجعل عملية تنفيذ البرنامج البرنامج بطيئة‪ .‬وتعتبر عملية تصحيح‬
‫األخطاء أسهل وأسرع ألنه يقوم إظهار الخطأ جملة بجملة‪.‬‬
‫‪ :Compiler .2‬يعمل ‪ Compiler‬على قراءة البرنامج ‪ Source Code‬بأكمله ثم يقوم‬
‫بتحويله بأكمله إلى لغة اآللةعلى شكل كائنات ‪ .Objects‬ويستغرق المترجم الكثير من‬
‫الوقت لقراءة البرنامج بأكمله أو لتحليل البرنامج بأكمله‪ .‬ويحتاج إلى كمية هائلة من‬
‫الذاكرة إلكمال العملية‪ .‬ألنهم ينشئون رمز الكائن بتحليل البرنامج المكتوب عليهم‪ .‬وال‬
‫‪ compiler‬يعمل بشكل أسرع من ‪ .Interpreter‬وبعكس ال ‪ Interpretr‬فإن ال‬
‫‪ compiler‬يقوم بترجمة البرنامج مرة واحدة‪ .‬وال يتطلب ترجمة البرنامج فى كل مرة‬
‫قبل التنفيذ إال إذا حدث تغيير فى البرنامج‪.‬وتستخدم لغات مثل ‪ C‬و ‪ ++ C‬ال‬
‫‪.compiler‬‬
‫البرمجة بلغة ال ‪C‬‬
‫‪ .1‬مقدمة‬
‫لغة ال ‪ C‬هي لغة برمجة إجرائية عامة ‪ .Procedural Programming‬تم تطويرها‬
‫في البداية من قبل دنيس ريتشي في عام ‪ .1972‬تم تطويرها بشكل أساسي كلغة برمجة‬
‫للنظام لكتابة الكود الخاص بنظام التشغيل‪ .‬تم تطويرها في مختبرات ‪Bell‬‬
‫‪ Telephone‬لتطوير نظام التشغيل ‪ .UNIX‬وتتضمن المميزات الرئيسية للغة ‪C‬‬
‫الوصول إلى الذاكرة على مستوى منخفض ‪ ،‬ومجموعة بسيطة من الكلمات الرئيسية‬
‫‪ ،‬واألسلوب النظيف ‪ ،‬وتجعل كل هذه المميزات لغة ‪ C‬لغة مناسبة لبرمجة النظام مثل‬
‫نظام التشغيل أو تطوير المترجم ‪ .Compilers‬استعارت العديد من اللغات الالحقة‬
‫بناء الجمل والمميزات األخرى بشكل مباشر أو غير مباشر من لغة ‪ .C‬مثل بناء جمل‬
‫‪ Java‬و ‪ PHP‬و ‪ JavaScript‬والعديد من اللغات األخرى تعتمد بشكل أساسي على‬
‫لغة ‪ .C‬لغة ال ‪ C++‬هي لغة متميزة من لغة ‪.C‬‬
‫و تتنافس لغة ال ‪ C‬مع لغة لغات البرمجة الحديثة مثل لغة البايثون ولغة الجافا ‪ ،‬والتي‬
‫تحظى بشعبية عالية وتستخدم على نطاق واسع بين مبرمجي البرامج الحديثة‪.‬‬
‫‪ :IEEE‬أفضل ‪ 10‬لغات برمجة فى نهاية عام ‪2018‬‬
‫‪ .2‬لماذا البرمجة بلغة ‪C‬‬
‫إن تدريس البرمجة بلغة ال ‪ C‬هو أساسى وضرورى للطالب والمهنيين لكى يصبحوا‬
‫مهندسي برمجيات متميزين خاصة عندما يعملون في مجال تطوير البرمجيات‪ .‬حيث‬
‫إنها لغة بسيطة وتوفر تنفيذ أسرع‪ .‬وهناك العديد من الوظائف المتاحة لمطوري‬
‫البرمجيات '‪ 'C‬في سوق العمل‪ .‬وفيما يلى بعض المزايا الرئيسية لتعلم البرمجة ‪:C‬‬
‫ سهولة تعلم البرمجة بلغة ‪C‬‬‫ لغة مركبة‬‫ قادرة على إنتاج برامج ذات كفاء عالية‪.‬‬‫ يمكن استخدامها فى برمجة الهاردوير‪.‬‬‫ يمكن تشغيل البرامج الناتجة عنها على العديد من تقنيات الكمبيوتر‪.‬‬‫ تم كتابة نظام التشغيل ‪ Unix‬بها‪.‬‬‫ اليوم ‪ C‬هي لغة برمجة النظام األكثر استخدا ًما وشعبية‪.‬‬‫ معظم التطبيقات المهمة تم كتابتها بلغة ال ‪ C‬مثل ‪Linux OS and RDBMS‬‬‫‪ MySQL‬و‪.Google's Chromium language‬‬
‫ تستخدم بكثرة فى األنظمة المدمجة ‪ Embeded Systems‬و ‪.IOT‬‬‫‪ .3‬تطبيقات البرمجة بلغة ال ‪C‬‬
‫تم اعتماد ‪ C‬كلغة تطوير نظام ألنها تنتج تعليمات برمجية تعمل بسرعة تقريبًا مثل‬
‫التعليمات البرمجية المكتوبة بلغة التجميع ‪ .Assembly Languages‬وفيما يلى‬
‫بعض األمثلة على استخدام ‪ C‬هي‪:‬‬
‫ نظم التشغيل ‪Operating Systems‬‬‫ مترجمات لغات البرمجة ‪Language Compilers‬‬‫‪ -‬محررات النصوص ‪Text Editors‬‬
‫ البرامج الحديثة ‪Modern Programs‬‬‫ قواعد البيانات ‪Databases‬‬‫ أدوات النظام ‪Utilities‬‬‫ كيف تعمل لغة ال ‪C‬‬‫يتم ترجمة لغة ال ‪ C‬بإستخدام المترجم الذى يقوم بتجميع البرنامج وتحويله إلى ملف كائن قابل‬
‫للقراءة آليًا‪ .‬ثم بعد ذلك يستخدم برنامج الرابط ‪ Linker‬لتجميع كل ملفات الكائن المختلفة وينشئ‬
‫ملفًا تنفيذيًا ‪ .exe‬لتشغيل البرنامج‪ .‬ويوضح الرسم التالي خريطة تنفيذ البرنامج بلغة ال ‪.C‬‬
‫‪ .4‬تهيئة بيئة العمل بلغة ‪C‬‬
‫فى هذا المقرر سوف نستخدم إحدى برامج بيئة التطوير المجمعة ‪ IDE‬مفتوحة‬
‫المصدر وتسمى ‪ Code::Blocks‬والتى تحتوى على مترجم يسمى ‪ GCC‬ومحرر‬
‫لكتابة الكود و مكتشف لألخطاء ‪ Debugger‬فى تطبيق واحد‪.‬‬
‫وفيما يلى خطوات تهيئة هذا البرنامج على نظام تشغيل وويندوز‪:‬‬
‫‪ .1‬قم بزيارة الموقع‬
‫‪ http://www.codeblocks.org/downloads‬والضغط على تحميل‬
‫‪ .2‬قم بإختيار تنزيل ‪codeblocks-17.12mingw-setup.exe‬‬
‫‪ .3‬قم بتشغيل البرنامج الذى تم تحميله‪ ,‬ثم قم بالضغط على ‪ next‬ثم ‪accept‬‬
‫‪ .4‬قم بإختيار المجلد الذى تريد تهيئة البرنامج به‪.‬‬
‫‪ .5‬ثم فى الخطوة التالية قم بإختيار العناصر التى يتكون منها هذا البرنامج‪.‬‬
‫‪ .6‬إستمر فى الخطوات حتى يتم اإلنتهاء من تهيئة ‪Code::Block‬‬
‫‪ .7‬لتشغيل البرنامج قم بالضغط على الرمز الخاص به واختار ‪ GCC‬كمترجم‬
‫إفتراضى‪.‬‬
‫‪ .8‬سيتم تشغيل بيئة العمل اإلفتتاحية الخاصة ب ال ‪ CodeBlock‬كما يلى‪:‬‬
‫‪ .5‬الهيكل األساسى لبرنامج بلغة ‪C‬‬
‫المقصود بهيكل البرنامج هو الشكل الرئيسى المميز ألى برنامج يكتب بلغة ال ‪ C‬وأى‬
‫مبرمج يكتب برنامج بشكل مختلف عن هذا الهيكل سوف يعطى أخطاء أثناء عملية‬
‫الترجمة وسيصبح غير قابل للتنفيذ‪ .‬والشكل التالى يوضح الهيكل العام لبرنامج ‪:C‬‬
‫‪//First Program‬‬
‫>‪#include<stdio.h‬‬
‫{)(‪Int main‬‬
‫;‪Int a=10‬‬
‫;)‪Printf(“%d”,a‬‬
‫} ;‪Return 0‬‬
‫‪Documentation Section‬‬
‫‪Header‬‬
‫)(‪Main‬‬
‫‪Variable Declaration‬‬
‫‪Body‬‬
‫‪Return‬‬
‫و يتكون الهيكل العام لبرنامج ‪ C‬من العناصر اآلتية‪:‬‬
‫‪ .1‬مقطع التوثيق ‪ :Documentation Section‬وفيه يتم كتابة معلومات عن‬
‫البرنامج وإستخداماته مسبوقة بعالمة التعليق ‪.//‬‬
‫‪ :Header File .2‬وتبدأ بعبارة >‪ #include<…..‬وهي عبارة عن مجموعة ملف‬
‫ذات اإلمتداد ‪ h‬والتى تحتوى على تفاصيل وتعريف الدوال التى تستخدم فى‬
‫البرنامج‪ ,‬وفيما يلى أمثلة من ملفات ال ‪ header‬فى لغة ال ‪:C‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪stdint.h – Defines exact width integer types.‬‬
‫‪– Defines core input and output functions stdio.h‬‬
‫‪stdlib.h – Defines numeric conversion functions, memory allocation‬‬
‫‪string.h – Defines string handling functions‬‬
‫‪– Defines common mathematical functions math.h‬‬
‫‪ .3‬الدالة اإلساسية )(‪ :main‬ويكون نص تعريف الدالة )(‪ main‬كاالتى‪:‬‬
‫} ‪Int main() { ………….‬‬
‫‪ .4‬تعريف المتغيرات ‪ :Vaiable Declaration‬ويتم اإلشارة إلى المتغيرات‬
‫المستخدمة فى هذا البرنامج فى هذا المقطع‪ ,‬حيث اليمكن إستخدام أى متغير بدون‬
‫عملية التعريف وتتم عملية التعريف قبل إستخدام المتغير‪ .‬والجملة اآلتية توضح‬
‫تعريف متغير بإسم ‪ a‬ومن النوع ‪.int‬‬
‫;‪Int a‬‬
‫‪ .5‬جسم البرنامج ‪ :Body‬وفى هذا المقطع يتم كتابة كل الجمل التى تمثل تفاصيل‬
‫البرنامج ويمكن أن تكون عمليات حسابية أو مقارنات أو معالجة بشكل ما أو بحث‬
‫أو ترتيب‪ ,‬الجملتين اآلتيين توضحان عملية وضع قيمة المتغير ‪ a‬ب ‪ 10‬ثم طباعتها‬
‫على الشاشة فى الجملة الثانية‪.‬‬
‫;‪a = 10‬‬
‫;)‪printf(“%d”,a‬‬
‫جملة ‪ :return‬وهى تقوم بإرجاع قيمة معينة إعتمادا على شكل جملة ‪.main‬‬
‫‪ .6‬كيف يمكن تشغيل برنامج ‪C‬‬
‫‪ .1‬فى الشاشة اإلفتتاحية قم بالضغط على إنشاء مشروع جديد ‪:Create New Project‬‬
‫‪ .2‬إختار ملف ‪ file‬ثم قم بإختيار مصدر ‪ C/C++ source‬ثم إضغط على ‪Go‬‬
‫‪ .3‬قم بإختيار لغة البرمجة ‪ C‬ثم قم بإختيار الملف المراد تشغيله من متصفح الويندوز‪.‬‬
‫‪ .4‬إستمر بالخطوات حتى النهاية‪ ,‬ثم قم بالضغط على حفظ وترجمة ‪ Comile‬ثم تنفيذ ‪.run‬‬
‫يظهر ناتج التشغيل كاآلتى ‪:‬‬
‫‪ .7‬إستخدام التعليقات فى برامج ‪C‬‬
‫التعليق هو عبارة عن وصف أو توضيح لما يتم تنفيذه يإستخدام الكود الخاص‬
‫بالبرنامج‪ .‬ويساعد المبرمج على توضيح تفاصيل العمليات المختلفة ليجعل فهم‬
‫البرنامج وقراءاته عن طريق اآلخرين سهلة‪ .‬وأثناء تنفيذ البرنامج يقوم المترجم بإهمال‬
‫كل التعليقات المكتوبة داخل البرنامج‪ .‬والمبرمج الذى يكتب برامج يسهل فهمها من‬
‫اإلشخاص اآلخرين أفضل بكثير من المبرمج الذى يكتب برامج مفهومة فقط عن طريق‬
‫اآللة‪ .‬ولذلك ينصح بإستخدام التعليقات لمساعدة المبرمج على فهم الكود حتى ولو بعد‬
‫فترة زمنية طويلة‪ .‬وهناك نوعان من التعليقات‪:‬‬
‫ تعليقات السطر الواحد وتبدأ بالرمز ‪ //‬وفيما يلى مثال لبرنامج موضح فيه كيفية‬‫إستخدام هذا النوع من التعليقات‪.‬‬
‫‪// C program to demo‬‬
‫‪// Single Line comment‬‬
‫>‪#include <stdio.h‬‬
‫)‪int main(void‬‬
‫{‬
‫‪// This is a single line comment‬‬
‫;)"‪printf("AL-Azhar 2020‬‬
‫‪// return zero‬‬
‫;‪return 0‬‬
‫}‬
‫ تعليقات السطور المتعددة وتبدأ بالرمز *‪ /‬ثم تنتهى بالرمز ‪ */‬ويمكن أن تستخدم‬‫فى تعليقات السطر الواحد أيضا‪ .‬ومثال على ذلك البرنامج اآلتى‪:‬‬
‫>‪include <stdio.h‬‬
‫{ )(‪int main‬‬
‫‪/* in main function‬‬
‫‪I can write my principal code‬‬
‫‪And this in several comments line */‬‬
‫‪int x = 42; /*x is a integer variable*/‬‬
‫;)‪printf("%d", x‬‬
‫;‪return 0‬‬
‫}‬
‫‪ .8‬مجموعة الحروف التى تكون لغة ال ‪C‬‬
‫مثل كل لغة أخرى ‪ ،‬تحتوي لغة "‪ "C‬على مجموعة أحرف خاصة بها‪ .‬فالبرنامج‬
‫عبارة عن مجموعة من التعليمات التي عند إخراجها ‪ ،‬تُنتج مخرجات معينة‪ .‬وكذلك‬
‫البيانات التي تتم معالجتها بواسطة البرنامج تتكون من حروف ورموز مختلفة‪ .‬وناتج‬
‫البرنامج هو أيضا مزيج من الحروف والرموز‪ .‬وتتكون مجموعة الحروف الخاصة‬
‫بلغة ‪ C‬من ‪:‬‬
‫ الحروف الهجائية‪ :‬هى مجموعة الحروف الكبيرة ‪ A-Z‬ومجموعة الحروف‬‫الصغيرة ‪.a-z‬‬
‫ األرقام‪ :‬وهى تمثل مجموعة األرقام من ‪.9-1‬‬‫ المسافات الفارغة‪ :‬وهي عبارة عن مسافة فارغة ‪ ,‬وسطر جديد ‪ ,‬و عالمة ‪enter‬‬‫و ‪.tab‬‬
‫ الرموز الخاصة‪ :‬وهؤ عبارة عن الرموز الخاصة المستخدمة فى لغة ‪ C‬كما هى‬‫موضحة بالجدول اآلتى‪:‬‬
‫)‪, (comma‬‬
‫)‪{ } (opening bracket & closing bracket‬‬
‫( ()‪. (period) opening left & closing right parenthesis‬‬
‫)‪; (semi-colon‬‬
‫)‪[] (left bracket & right bracket‬‬
‫)‪? (question mark‬‬
‫)‪# (hash sign‬‬
‫)‪' (apostrophe‬‬
‫)‪: (colon‬‬
‫)‪" (double quotation mark‬‬
‫)‪& (ampersand‬‬
‫)‪! (exclamation mark‬‬
‫)‪^ (caret‬‬
‫)‪|(vertical bar‬‬
‫)‪+ (addition‬‬
‫)‪/ \ (forward & backward slash‬‬
‫)‪- (subtraction‬‬
‫)‪~ (tilde‬‬
‫)‪_ (underscore‬‬
‫)‪$ (dollar sign‬‬
‫)‪% (percentage sign‬‬
‫)‪* (multiplication‬‬
‫)‪/ (division‬‬
‫)‪> (greater than or closing angle bracket‬‬
‫)‪< (less than or opening angle bracket‬‬
‫‪ .9‬الكلمات المحجوزة والمعرفات ‪keywords and Identifiers‬‬
‫الكلمات المحجوزة ‪ keywords‬هي كلمات لها معنى ثابت فى لغة ال ‪ C‬وهذا المعنى‬
‫ال يمكن أن يتغير وهى جزء أساسى من لغة ال ‪ .C‬وتحتوى لغة ‪ C‬على ‪ 32‬كلمة‬
‫محجوزة يتم كتابة بالحالة الصغرى ‪ small‬كما هو موضح فى الجدول التالى‪:‬‬
‫‪struct‬‬
‫‪switch‬‬
‫‪typedef‬‬
‫‪union‬‬
‫‪unsigned‬‬
‫‪void‬‬
‫‪volatile‬‬
‫‪while‬‬
‫‪int‬‬
‫‪long‬‬
‫‪register‬‬
‫‪return‬‬
‫‪float‬‬
‫‪signed‬‬
‫‪sizeof‬‬
‫‪static‬‬
‫‪double‬‬
‫‪else‬‬
‫‪enum‬‬
‫‪extern‬‬
‫‪short‬‬
‫‪for‬‬
‫‪goto‬‬
‫‪if‬‬
‫‪auto‬‬
‫‪break‬‬
‫‪case‬‬
‫‪char‬‬
‫‪const‬‬
‫‪continue‬‬
‫‪default‬‬
‫‪do‬‬
‫والمعرف ‪ Identifier‬هو عبارة عن إسم يطلق على المتغيرات ‪ variables‬والدوال‬
‫‪ . functions‬ويتم تعريفها بواسطة المبرمج وتستخدم لتعريف عنصر معين داخل‬
‫البرنامج‪ .‬ويكون لكل معرف إسم وحيد وال يتكرر‪ ,‬وفيما يلى بعض القواعد المتبعة‬
‫لتعريف المعرفات ‪.Identifiers‬‬
‫ الحرف األول البد أن يكون حرف هجائى أو _‪.‬‬‫ يتكون فقط من الحروف والرقام و_‪.‬‬‫ اليمكن إستخدام الكلمات المحجوزة كمعرف‪.‬‬‫ ال يمكن أن تحتوى على مسافات فارغة‪.‬‬‫‪ -‬يكون اإلسم له معنى دال‪.‬‬
‫‪ .10‬المتغيرات ‪Variables‬‬
‫المتغير هو معرف يستخدم لتخزين بعض القيم‪ .‬فالثوابت ال يمكن أن تتغير أثناء تنفيذ‬
‫البرنامج بينما المتغيرات تتغير قيمتها أثناء تنفيذ البرنامج‪ .‬ويمكن إستخدام المتغير‬
‫الواحد أكثر من مرة فى البرنامج‪ .‬والبد أن يكون إسم المتغير له معنى دال عليه يحدد‬
‫الغرض من إستخدامه‪.‬‬
‫‪Example: Height, age, are the meaningful variables that represent the purpose it is b‬‬
‫‪eing used for. Height variable can be used to store a height value. Age variable can‬‬
‫‪be used to store the age of a person‬‬
‫وفيما يلى القواعد المتبعة أثناء تعريف المتغيرات‪:‬‬
‫ إسم المتغير يتكون فقط من الحروف واألرقام و_‪.‬‬‫ ال يمكن بدء إسم المتغير برقم‪.‬‬‫ ال يحتوى إسم المتغير على مسافات فارغة‪.‬‬‫ اليمكن أن يكون إسم المتغير عبارة عن كلمة محجوزة‪.‬‬‫ فى لغة ‪ C‬أسماء المتغيرات تعتمد على الحالة التى تكتب بها بمعنى أن المتغيرين‬‫‪ AGE‬و ‪ age‬مختلفين‪.‬‬
‫وفيما يلى مجموعة من أسماء المتغيرات المكتوبة بشكل صحيح والمكتوبة بشكل خطأ‪.‬‬
‫أسماء متغيرات مكتوبة بشكل خطأ‬
‫أسماء متغيرات مكتوبة بشكل صحيح‬
‫‪1height‬‬
‫‪height or HEIGHT‬‬
‫‪Hei$ght‬‬
‫‪_height‬‬
‫‪My name‬‬
‫‪_height1‬‬
‫‪My_name‬‬
‫والجملتين اآلتيتين توضحان كيفية تعريف متغير من نوع ‪ int‬ثم إعطاءه قيمة‬
‫معينة)‪:(48‬‬
‫;‪int my_variable‬‬
‫;‪my_variable = 48‬‬
‫كما يمكن إختصار الجملتين السابقتين فى جملة واحدة كما يلى‪:‬‬
‫;‪int my_variable = 48‬‬
‫‪ .11‬أنواع البيانات ‪Data Types‬‬
‫تحتوى لغة ال ‪ C‬على مجموعة متنوعة من أنواع البيانات المختلفة التى تسهل على‬
‫المبرمج إختيار نوع مناسب لكل البيانات إعتمادا على متطلبات البنامج‪ .‬وهناك ثالثة‬
‫أنواع رئيسية من أنواع البيانات‪:‬‬
‫ البدائية ‪ :Primitive‬وتحتوى على خمسة أنواع رئيسية من أنواع البيانات وهى‪:‬‬‫▪ األرقام الصحيحة ‪int‬‬
‫▪ الحروف الهجائية ‪char‬‬
‫▪ األعداد النسبية ‪Float‬‬
‫▪ األعداد المزدوجة ‪Double‬‬
‫▪ الال شئ ‪Void‬‬
‫ المشتقة ‪ :Dreived‬المصفوفات ‪ arrays‬والدوال ‪ Functions‬والمؤشرات‬‫‪ Pointers‬والتركيبات ‪ structures‬كلها تعتبر أنواع بيانات مشتقة‪.‬‬
‫ المعرفة بواسطة المبرمج ‪.User Defined‬‬‫والجدول التالى يوضح أنواع البيانات المختلفة والمساحات الالزمة لتخزينها فى الذاكرة‬
‫ومدى كل نوع‪.‬‬
‫‪Range‬‬
‫‪-128 to 127‬‬
‫‪0 to 255‬‬
‫‪-32768 to 32767‬‬
‫‪0 to 65535‬‬
‫‪Size in bytes‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪2‬‬
‫‪Data type‬‬
‫‪Char or signed char‬‬
‫‪Unsigned char‬‬
‫‪int or signed int‬‬
‫‪Unsigned int‬‬
Short int or
Unsigned short int
Signed short int
Long int or Signed
long int
Unsigned long int
float
double
Long double
2
0 to 255
2
4
-128 to 127
-2147483648 to
2147483647
0 to 4294967295
3.4E-38 to 3.4E+38
1.7E-308 to 1.7E+308
3.4E-4932 to 1.1E+4932
4
4
8
10
‫وفيما يلى أمثلة من تعريف بعض المتغيرات التى تحتوى عبى الكثير من أنواعع‬
:‫البيانات‬
int age;
float division;
double BankBalance;
Char letter;
void displayData()
.‫وفيما يلى مثال على تعريف المتغيرات وإستخدامها‬
int main() {
int x, y;
float salary = 13.48;
char letter = 'K';
x = 25;
y = 34;
int z = x+y;
printf("%d \n", z);
printf("%f \n", salary);
printf("%c \n", letter);
return 0;
}
:‫وناتج تنفيذ هذا البرنامج كاآلتى‬
59
13.480000
K
Constants ‫الثوابت‬
.12
‫الثوابت هي القيم الثابتة التي ال تتغير أبدًا أثناء تنفيذ البرنامج‪ .‬فيما يلي األنواع‬
‫المختلفة من الثوابت‪:‬‬
‫ الثوابت الصحيحة التى تحتوى على أرقام من ‪0-9‬‬‫‪Example, 111, 1234‬‬
‫ الثوابت الثمانية ‪ Octal‬وهى الثوابت التى تحتوى على أرقام من ‪.0-7‬‬‫‪Example, 012, 065‬‬
‫ الثوابت السداسية عشرة ‪ Hexi-Decimal‬وهى الثوابت التى تحتوى على أرقام‬‫من ‪ 0-9‬والحروف من ‪.A-H‬‬
‫‪Example, 0X2, 0Xbcd‬‬
‫ الثوابت الحرفية ‪ :Charcters‬وتحتوى على حرف واحد بين عالمتى تنصيص‬‫""‪.‬‬
‫'‪Example, 'A', '9‬‬
‫ الثوابت اإلسمية ‪ :String Constants‬والتى تحتوى على مجموعة من الحروف‬‫المتصلة موجودة بين عالمتى تنصيص ""‪:‬‬
‫"‪Example, "Hello Students", "AL-Azhar University‬‬
‫ الثوابت الحقيقية ‪ :Real Constants‬والتى تحتوى على قيم صحيحة وكذلك‬‫على قيم عشرية‪.‬‬
‫‪Example, 202.15, 300.00‬‬
‫ويمكن تعريف الثوابت بطريقتين‪:‬‬
‫‪ .1‬بإستخدام الكلمة المحجوزة ‪const‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪const double PI = 3.14‬‬
‫;)‪printf("%f", PI‬‬
‫‪//PI++; // This will generate an error as constants cannot be changed‬‬
return 0;
}
Define ‫ بإستخدام الكلمة المحجوزة‬.2
#include <stdio.h>
#define PI 3.14
int main() {
printf("%f", PI);
return 0;}
https://www.guru99.com/c-if-else-statement.html
‫‪ -‬بإستخدام الكلمة المحجوزة ‪Define‬‬
‫الفصل الثالث‬
‫‪C Conditional Statement‬‬
‫الجمل الشرطية فى لغة ال ‪C‬‬
‫‪ .1‬ماهى الجمل الشرطية‬
‫يتم تنفيذ الجمل الشرطية فى لغة "‪ "C‬بالتتابع إذا كانت الجمل غير مسبوقة بأى‬
‫جمل شرطية‪ .‬فإذا تم إستخدام بعض الجمل الشرطية قبل الجمل الغير شرطية ‪،‬‬
‫فقد يتغير تدفق التنفيذ بنا ًء على النتيجة التي تم تقييمها بواسطة الشرط‪ .‬ويشار إلى‬
‫هذه العملية باسم اتخاذ القرار في لغة "‪ ."C‬وتسمى الجمل الشرطية أيضا بجمل‬
‫التحكم ‪ control statements‬حيث أنها تساعد المبرمج بإتخاذ قرارات مختلفة‬
‫بناءا على نتيجة الشروط المختلفة التى يقوم بإختبارها‪ .‬وتسمى فى بعض األحيان‬
‫جمل التشعب ‪ Branching Statements‬حيث أن تنفيذ البرنامج يسير فى‬
‫إتجاهات مختلفة إعتمادا على تقييم الجمل الشرطية‪.‬‬
‫ويوجد فى لغة ‪ C‬نوعين من الجمل الشرطية وهما جملتى ‪ If‬و‪. If-else‬‬
‫‪ .2‬جملة ‪if‬‬
‫وهي إحدى الجمل الشرطية القوية‪ .‬وهى المسئولة عن تعديل تدفق تنفيذ البرمامج‬
‫بناءا على نتيجة الشرط المستخدم‪ .‬إذا تم استخدام العبارة دائ ًما مع شرط‪ .‬حيث يتم‬
‫تقييم الشرط أوالً قبل تنفيذ أي عبارة داخل نص ‪ .If‬ويتم كتابة جملة ‪ If‬كما يلى‪:‬‬
‫)‪if (condition‬‬
‫;‪instruction‬‬
‫وناتج تقييم الشرط يكون دائما إما ‪ true‬وإما ‪ .false‬و ‪ true‬تعنى دائما قيمة غير‬
‫صفرية‬
‫‪ none-zero value‬أما ‪ false‬فتعنى قيمة صفرية ‪ .zero-value‬ويمكن‬
‫أن يكون الجزء المطلوبة تنفيذه بناءا على صحة الشرط جملة واحدة أو عدة جمل‪ ,‬فإذا‬
‫كان عبارة عن عدة جمل فيمكن وضعه بداخل األقواس }{‪.‬‬
‫والمثال اآلتى يوضح كيفية تركيب جملة ‪ if‬فى لغة ال ‪.C‬‬
‫برنامج ‪:1‬‬
‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int num1=1‬‬
‫;‪int num2=2‬‬
‫)‪if(num1<num2‬‬
‫‪//test-condition‬‬
‫{‬
‫;)"‪printf("num1 is smaller than num2‬‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫ويوضح هذا البرنامج إستخدام جملة ‪ if‬إلختبار تساوى رقمين ‪ num1‬و ‪.num2‬‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغير ‪ num1‬من النوع ‪ int‬وتخزين قيمة ‪ 1‬فى هذا المتغير‪.‬‬‫ يتم تعريف متغير ‪ num2‬من النوع ‪ int‬وتخزين قيمة ‪ 2‬فى هذا المتغير‪.‬‬‫ يتم إستخدام جملة ‪ if‬إلختبار هل ‪ num1‬أقل من ‪ ,num2‬حيث تم إستخدام معامل‬‫عالئقى ‪ ,Relational Operator‬وفى هذا المثال تكون قيمة إختبار الشرط ‪.true‬‬
‫ بناءا على نتيجة إختبار الشرط فإن البرنامج يقوم بطباعة الجملة ‪num1 is‬‬‫‪ smaller than num2‬ثم يتنتهى تنفيذ البرنامج بشكل صحيح‪.‬‬
‫ناتج التنفيذ‪:‬‬
‫‪num1 is smaller than num2‬‬
‫وتكون خطوات تنفيذ البرنامج كما يلى ‪:‬‬
‫‪ .3‬المعامالت العالئقية ‪Relational Operators‬‬
‫تحتوى لغة ‪ C‬على ستة معامالت عالئقية يمكن إستخدامها لصياغة التعبيرات الثنائية‬
‫‪ Boolean Boolean‬ألخذ القرارت المختلفة إعتماد على تقييم هذه الشروط ةالتى‬
‫يكون نتيجتها ‪ true‬أو ‪.false‬‬
‫أقل من‬
‫أقل من أو يساوى‬
‫أكبر من‬
‫أكبر من أو يساوى‬
‫يساوى‬
‫ال يساوى‬
‫<‬
‫=<‬
‫>‬
‫=>‬
‫==‬
‫=!‬
‫‪Less Than‬‬
‫‪Less Than or Equal‬‬
‫‪Greater Than‬‬
‫‪Greater Than or Equal‬‬
‫‪Equal‬‬
‫‪Not Equal‬‬
‫ويالحظ أن عالمة اإلختبار (==) تختلف عن المعامل = والذى يضع قيمة فى متغير‬
‫ويقع كثير من المبرمجين فى أخطاء عدم معرفة الفرق بين اإلثنين‪.‬‬
‫برنامج‪:‬‬
‫;‪int x = 41‬‬
‫;‪x =x+ 1‬‬
‫{ )‪if (x == 42‬‬
‫};)"!‪printf("You succeed‬‬
‫شرح البرنامج‪:‬‬
‫ يتم إنشاء متغير ‪ x‬من نوع ‪ int‬ومساواته بالقيمة ‪.41‬‬‫ يتم زيادة قيمة المتغير ‪ x‬بمقدار ‪.1‬‬‫‪ -‬يتم إختبار هل قيمة ‪ 42 = x‬أم ال‪ ,‬وبالتالى طباعة الجملة‬
‫!‪.You succeed‬‬
‫ناتج البرنامج‪:‬‬
‫‪You succeed‬‬
‫برنامج‪:‬‬
‫;‪int present = 1‬‬
‫)‪if (present‬‬
‫;)"‪printf("There is someone present in the classroom \n‬‬
‫شرج البرنامج‪ :‬إذا كان هناك متغير يحتوى قيمة غير صفرية فيمكن وضعه على‬
‫شكل شرط مباشرة‪.‬‬
‫ناتج البرنامج‪:‬‬
‫‪There is someone present in the classroom‬‬
‫‪ .4‬جملة ‪If-Else‬‬
‫هي نفس جملة ‪ if‬والفرق بينها أن جملة ‪ if‬يتم تنفيذ جزء من الكود فى حالة تحقق‬
‫صحة الشرط‪ .‬أما جملة ‪ if-else‬فتحتوى على جزين من الكود جزء يتم تنفيذه أثناء‬
‫تحقق صحة الشرط أما الجزء االخر فيتم تنفيذه فى حالة عدم تحقق الشرط كما هو‬
‫واضح من الشكل التالى‪:‬‬
‫ويتكون الشكل العام لجملة ‪ if-else‬كالتالى‪:‬‬
if (test-expression)
{
True block of statements
}
Else
{
False block of statements
}
Statements;
if-else ‫ ويوضح المثال التالى برنامج إلستخدام جملة‬:‫برنامج‬
#include<stdio.h>
int main()
{
int num=19;
if(num<10)
{
printf("The value is less than 10");
}
else
{
printf("The value is greater than 10");
}
return 0;
}
:‫شرج البرنامج‬
.19 ‫ ومساواته بالرقم‬int ‫ من النوع‬num ‫ تعريف متغير‬.false ‫ ليكون الناتج‬num<10 ‫ إختبار الشرط‬The value is greater ‫ وطباعة الجملة‬else ‫ تنفيذ جزء الكود الخاص بالجزء‬.than 10
:‫ناتج البرنامج‬
The value is greater than 10
:‫والشكل اآلتى يوضح خطوات تنفيذ البرنامج‬
‫برنامج‪ :‬ويوضح المثال التالى برنامج إلستخدام جملة ‪if-else‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int y‬‬
‫;‪int x = 2‬‬
‫;‪6: x‬‬
‫?)‪y = (x >= 6‬‬
‫‪y = 6; else‬‬
‫‪y = x; */‬‬
‫)‪if (x >= 5‬‬
‫‪/* This is equivalent to:‬‬
‫;)‪printf("y =%d ",y‬‬
‫};‪return 0‬‬
‫وفى هذا البرنامج يتم إستخدام طريقة أخرى بديلة لجملة ‪ if-else‬بإستخدام المعامل‬
‫‪ ?:‬فى الجملة‬
‫;‪6: x‬‬
‫?)‪y = (x >= 6‬‬
‫وتعنى أن قيمة المتغير ‪ y‬تساوى ‪ 6‬إذا كان الشرط )‪ (x >= 6‬صحيحا ‪ ,‬وإال فإنها‬
‫تساوى قيمة المتغير ‪.x‬‬
‫ناتج البرنامج‪:‬‬
‫‪y =2‬‬
‫‪ .5‬جملة ‪ If-Else‬المتداخلة ‪Nested-If-Else‬‬
‫تستخدم جمل ‪ If-else‬المتداخلة إذا كان هناك سلسلة من القرارات التى تعتمد على‬
‫صحة أو عدم صحة شروط معينة‪ .‬والبرنامج اآلتى يوضح كيفية إستخدام جملة ‪if-‬‬
‫‪ else‬المتداخلة‪.‬‬
‫برنامج‪ :‬ويوضح المثال التالى برنامج إلستخدام جملة ‪ if-else‬المتداخلة‬
‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int num=1‬‬
‫)‪if(num<10‬‬
‫{‬
‫)‪if(num==1‬‬
‫{‬
‫;)‪printf("The value is:%d\n",num‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪printf("The value is greater than 1‬‬
‫}‬
‫}‬
‫‪else‬‬
‫{‬
‫;)"‪printf("The value is greater than 10‬‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغير ‪ num‬من النوع ‪ int‬ومساواته بالقيمة ‪.1‬‬‫ يتم إختبار صحة الشرط ‪ num<10‬وبناءا عليه يتم الدخول فى إتجاهين مختلفين‪.‬‬‫ يتم إختبار الشرط ‪ num==1‬وبناءا على نتيجة اإلختبار يتم طباعة جملة معينة‬‫على الشاشة‪.‬‬
‫والشكل التالى يوضح خطوات تنفيذ هذا البرنامج‪.‬‬
‫ناتج البرنامج‪:‬‬
‫‪1 The value is:‬‬
‫وفى حالة إستخدام جملة ‪ if-else‬المتداخلة ‪ ،‬يجب أن يكون المبرمج حذر ويقوم بتنظيم‬
‫الكود بإستخدام المسافات البادئة ألن المسافة البادئة الصحيحة تجعل من السهل قراءة‬
‫البرنامج‪.‬‬
‫‪ .6‬جملة ‪ else-if‬المتداخلة‬
‫كما أوضحنا سابقا فإن جملة ‪ if‬تستخدم فى تنفيذ كود معين فى حالة تحقق الشرط‪ ,‬أما‬
‫جملة ‪ if-else‬فتستخدم لتنفيذ جزين من الكود أحدهما فى حالة صحة إختبار الشرط‬
‫واألخرى فى حالة عدم صحة الشرط‪ .‬وتستخدم جملة ‪ else-if‬فى حالة وجود أكثر من‬
‫مسارين للتنفيذ‪ .‬وفيما يلى توضيح للشكل العام لجملة ‪.else-if‬‬
‫{ )‪if (test - expression 1‬‬
‫;‪statement1‬‬
‫{ )‪} else if (test - expression 2‬‬
‫;‪Statement2‬‬
‫{ )‪} else if (test - expression 3‬‬
‫;‪Statement3‬‬
‫{ )‪} else if (test - expression n‬‬
‫;‪Statement n‬‬
‫{ ‪} else‬‬
‫;‪default‬‬
‫}‬
‫;‪Statement x‬‬
‫ويُعرف هذا النوع من التركيبات باسم السلم‪ .lader‬حيث تبدو هذه السلسلة بشكل عام‬
‫وكأنها سلم‪ .‬يتم تقييم عبارات االختبار من األعلى إلى األسفل‪ .‬عندما يتم العثور على‬
‫تعبير اختبار حقيقي ‪ ،‬يتم تنفيذ العبارة المرتبطة به‪ .‬وعندما تكون كل الشروط خاطئة‬
‫‪ ،‬يتم تنفيذ العبارة االفتراضية األخرى‪ .‬وفيما يلى برنامج يوضح كيف تعمل جملة‬
‫‪else-if:‬‬
‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int marks=89‬‬
‫{)‪if(marks>85‬‬
‫"(‪printf‬ممتاز;)"‬
‫}‬
‫{)‪if(marks>75‬‬
‫"(‪printf‬جيد جدا;)"‬
‫}‬
‫{)‪else if(marks>65‬‬
‫"(‪printf‬جيد;)"‬
‫}‬
‫{)‪else if(marks>50‬‬
‫"(‪printf‬مقبول;)"‬
‫}‬
‫{‪else‬‬
‫"(‪printf‬راسب;)"‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغير بإسم ‪ marks‬من النوع ‪ int‬ومساواته بالقيمة ‪.89‬‬‫ يتم عمل عدة إختبارات على هذ المتغير وبناءا على نتيجة اإلختبار يتم تنفيذ الجزء‬‫من الكود المصاحب لهذا الشرط‪.‬‬
‫والشكل التالى يوضح خطوات تنفيذ هذا البرنامج‪:‬‬
‫ناتج البرنامج‪:‬‬
‫ممتاز‬
‫جمل التكرار فى لغة ال ‪C‬‬
‫‪Looping in C‬‬
‫‪ .1‬ما هو المقصود بالتكرار ‪Loops‬‬
‫أثناء تنفيذ التكرار ‪ loop‬يقوم البرنامج بتنفيذ سلسلة من جمل الكود العديد من المرات‬
‫حتى يتحقق شرط معين‪ .‬ويتكون ‪ loop‬من جزئين‪ ,‬ويتكون التكرار من جزئين‬
‫أساسيين‪ ,‬جملة التحكم ‪ , Control Statement‬والكود الذى سيتم تنفيذه فى كل تكرار‬
‫‪ .Body‬وجزء التجم يحتوى على مجموعة من الشروط التى توجه تنفيذ التكرار حتى‬
‫حدوث شرط معين‪.‬‬
‫‪ .2‬أنواع التكرار ‪Types of Loops‬‬
‫بناء على وضع جملة التحكم فى التكرار‪ ,‬يتم تقسيم التكرار إلى نوعين أساسيين‪:‬‬
‫‪ .1‬التحكم أثناء البداية ‪ :Entry Controlled Loop‬وهنا يتم إختبار شرط التحكم‬
‫قبل بدء تنفيذ التكرار‪ .‬وإذا لم يتحقق الشرط فال يمكن تنفيذ الكود‪.‬‬
‫‪ .2‬التحكم أثناء النهاية ‪ :Exit controlled loop‬وهنا يتم إختبار شرط التحكم بعد‬
‫الكود الخاص بالتكرار‪ .‬فال يتم التحقق من الشرط إال بعد تنفيذ الكود مرة واحدة‪.‬‬
‫وهناك بعض القواعد الواجب إتباعها أثناء إستخدام التكرار وهى‪:‬‬
‫ شروط التحكم البد أن تعرف جيدا لتجنب أن يتم تنفيذ التكرار عدد ال نهائى من‬‫المرات‪ .‬والتكرار الذى يقوم بتنفيذ الكود المصاحب عدد النهائى من المرات يسمى‬
‫التكرار الالنهائى ‪ .infinite koop‬أو الكود غير المنتهى ‪ .Endless loop‬وهذه‬
‫بعض خصائص التكرار الغير منتهى ‪:‬‬
‫▪ ال يتم تحقق شرط اإلنتهاء‪.‬‬
‫▪ الشروط التى تم صياغتها ال يمكن أن تتحقق‪.‬‬
‫ويتوفر فى لغة ال ‪ C‬عدد من أشكال التكرار وهى‪:‬‬
‫‪While Loop .1‬‬
‫‪Do-while Loop .2‬‬
‫‪For loop .3‬‬
‫والشكل التالى يوضح كيفية عمل األنواع المختلفة من التكرار‪:‬‬
‫‪Entry Controlled Loop‬‬
‫‪Exit Controlled Loop‬‬
‫‪While Loop .3‬‬
‫ويتم تطبيقه بشكل مباشر ‪ ,‬ويأخذ كود ‪ while loop‬الشكل اآلتى‪:‬‬
‫{ )‪while (condition‬‬
‫;‪statements‬‬
‫}‬
‫وهو يمثل تكرار من نوع التحكم أثناء البداية‪ .‬حيث أن الشرط يتم إختباره بداية قبل‬
‫تنفيذ الكود المصاحب للتكرار‪ .‬فإذا تحقق الشرط وكان ناتج اإلختبار ‪ true‬يتم تنفيذ‬
‫الكود ‪ .‬ثم يتم أخذ التحكم إلى بداية التكرار مرة أخرة إلختبار الشرط ومعاودة التنفيذ‪.‬‬
‫وتستمر هذه العملية حتى تصبح نتيجة إختبار الشرط ‪ false‬فينتقل التجم إلى خارج‬
‫التكرار‪ .‬ويتم إكمال تنفيذ باقى البرنامج‪ .‬وإذا كانت نتيجة إختبار الشرط فى البداية‬
‫تساوى ‪ false‬فإن الكود الخاص بالتكرار لن يتم تنفيذه بأى حال من األحوال‪.‬‬
‫برنامج‪ :‬بإستخدام ‪ while loop‬قم بعمل برنامج يطبع األرقام من ‪ 1‬إلى ‪.10‬‬
‫>‪#include<stdio.h‬‬
‫>‪#include<conio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int num=1‬‬
‫‪//initializing the variable‬‬
‫=<‪0)1while(num‬‬
‫‪//while loop with condition‬‬
‫{‬
‫;)‪printf("%d\n",num‬‬
‫;‪num++‬‬
‫‪//incrementing operation‬‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ يتم إنشاء متغير بإسم ‪ num‬ومساواته بالقيمة اإلبتدائية ‪.1‬‬‫ يتم تنفيذ الشرط الخاص بالتكرار ‪ while‬وهو ‪ num<=10‬لتكون نتيجيته تساوى‬‫‪.true‬‬
‫ يتم طباعة محتوى المتغير ‪ num‬على الشاشة‪.‬‬‫ يتم زيادة قيمة المتغير بمقدار ‪.1‬‬‫ يتمم تنفيذ التكرار مرة أخرى بإختبار الشرط ‪ ...‬والتنفيذ ‪ ...‬وزيادة قيمة المتغير ‪num‬‬‫حتى تصبح قيمته = ‪.10‬‬
‫والشكل التالى يوضح خطوات تنفيذ البرنامج‪:‬‬
‫ناتج البرنامج‪:‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫‪10‬‬
‫‪Do-While Loop .4‬‬
‫يشبه تكرار ‪ do-while‬تكرار ‪ while‬فيما عد أنه يتم إختبار الشرط بعد تنفيذ جزء‬
‫الكود المطلوب تكراره (التحكم أثناء النهاية ‪.)exit-controlled loop‬ويأخذ كود ‪do-‬‬
‫‪ while loop‬الشكل اآلتى‪:‬‬
‫{ ‪do‬‬
‫‪statements‬‬
‫;)‪} while (expression‬‬
‫وكما هو واضح بالشكل ‪ ,‬فإن الكود ‪ statements‬يتم تنفيذه أوال ثم بعد ذلك يتم إختبار‬
‫الشرط‪ .‬وإذا كان الشرط خطأ فإن الكود الخاص بالتكرار يتم تنفيذه ولو مرة واحدة‪.‬‬
‫والبرنامج التالى يوضح كيفية عمل التكرار ‪.do-while loop‬‬
‫برنامج‪ :‬المطلوب عمل برنامج يقوم بطباعة األعداد الزوجية التى تقع بين ‪ 2‬و ‪.20‬‬
‫>‪#include<stdio.h‬‬
‫>‪#include<conio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int num=1‬‬
‫‪do‬‬
‫‪//initializing the variable‬‬
‫‪//do-while loop‬‬
‫{‬
‫;)‪printf("%d\n",2*num‬‬
‫;‪num++‬‬
‫‪//incrementing operation‬‬
‫;)‪}while(num<=10‬‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج ‪:‬‬
‫ يتم تعريف متغير ‪ num‬من نوع ‪ int‬ومساواته بالقيمة اإلبتدائية ‪.1‬‬‫ يتم إستخدام ‪do-while loop‬‬‫‪ .1‬يتم طباعة المتغير ‪ num‬مضروبة فى ‪.2‬‬
‫‪ .2‬يتم زيادة قيمة المتغير ‪ num‬بمقدار ‪.1‬‬
‫‪ .3‬يتم إختبار القيمة الجديدة للمتغير من خالل الشرط ‪ ,num<=10‬إذا تحقق‬
‫الشرط يتم تكرار الخطوة من ‪ 1‬إلى ‪.3‬‬
‫ إذا لم يتم تحقق الشرط يخرج التحكم من التكرار وتنفيذ جملة ;‪.return 0‬‬‫والشكل التالى يوضح خطوات تنفيذ البرنامج‪:‬‬
‫ناتج البرنامج‪:‬‬
‫‪2‬‬
‫‪4‬‬
‫‪6‬‬
‫‪8‬‬
‫‪10‬‬
‫‪12‬‬
‫‪14‬‬
‫‪16‬‬
‫‪18‬‬
‫‪20‬‬
‫‪ .5‬التكرار ‪For loop‬‬
‫ويعتبر تكرار ‪ for loop‬من أسهل وأكفأ التكرارات الموجودة فى لغة ال ‪ .C‬وفيما يلى‬
‫الشكل العام لتكرار ‪.for loop‬‬
‫‪for (initial value; condition; incrementation or decrementation‬‬
‫)‬
‫{‬
‫;‪statements‬‬
‫}‬
‫ويتكون تكرار ال ‪ for-loop‬األجزاء اآلتية‪:‬‬
‫‪ .1‬القيمة اإلبتدائية ‪ :Initial Value‬وهى جملة يتم تنفيذها مرة واحدة فقط ويها يتم‬
‫مساواة المتغير العداد ‪ counter‬بالقيمة اإلبتدائية‪.‬‬
‫‪ .2‬الشرط ‪ :Condition‬وهى تعبير ثنائى ‪ Boolean‬أى أن ناتج تنفيذه يكون إما‬
‫‪ true‬أو ‪ .false‬ويتم مقارنة المتغير العداد ‪ counter‬بقيمة ثابته تذكر صراحة أو‬
‫تكون مخزنة فى متغير لكل محاولة ‪ ,‬وكلما كان ناتج المقارنة صحيح يتم تنفيذ‬
‫التكرار‪ ,‬وعندما يصبح ناتج المقارنة بخطأ يتم إيقاف التكرار ويخرج البرنامج منه‬
‫إلكمال باقى األكواد‪.‬‬
‫‪ .3‬جزء الزيادة\النقصان ‪ : incrementation/decrementation‬وفيه يتم زيادة‬
‫أونقص المتغير العداد حتى يصل إلى القيمة النهائية‪.‬‬
‫وفيما يلى برنامج يوضح كيفية إستخدام التكرار ‪for-loop‬‬
‫برنامج‪ :‬المطلوب كتابة برنامج يطبع األعداد من ‪ 1‬إلى ‪ 10‬بإستخدم أسلوب التكرار‬
‫‪for-loop‬‬
‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int number‬‬
‫)‪for(number=1;number<=10;number++‬‬
‫‪//for loop to print 1-10 numbers‬‬
‫{‬
‫;)‪printf("%d\n",number‬‬
‫‪//to print the number‬‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغير ‪ number‬من نوع ‪.int‬‬‫ ‪For-loop‬‬‫▪ يتم تحديد جزء البداية بمساواة المتغير ‪ number‬بالقيمة ‪.1‬‬
‫▪ وفى جزء الشرط يتم تحديد الشرط ‪number<=10‬‬
‫▪ وفى جزء الزيادة أو النقصان يتم تحديده بالزيادة بمقدار ‪number++ 1‬‬
‫▪ وفى جزء الكود المصاحب ل ‪ for-loop‬يتم طباعة قيمة المتغير ‪number‬‬
‫▪ يستمر التنفيذ حتى يصبح الشرط ‪ number<=10‬غير صحيح فينتهى تنفيذ‬
‫الجزء الخاص بالتكرار أى حتى تصبح قيمة المتغير ‪.10 = number‬‬
‫والشكل التالى يوضح كيفية عمل البرنامج‪:‬‬
‫ناتج البرنامج‪:‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫‪10‬‬
‫ويمكن أن تحتوى جملة ‪ for-loop‬على أكثر من تعبير كما يلى‪:‬‬
‫{ )‪for (x = 0, y = num; x < y; i++, y--‬‬
‫;‪statements‬‬
‫}‬
‫حيث تم إختيار جملة البداية لتعتمد على أكثر من متغير ‪ ,x = 0, y = num‬وتم إختيار‬
‫جزء الزيادة والنقصان ليؤثر فى متغيرين ‪ i++, y - -‬حيث سيتم زيادة قيمة المتغير‬
‫‪ i‬ونقصان قيمة المتغير ‪ .y‬حيث يفصل الرمز ; بين األجزاء الثالثة‪.‬‬
‫برنامج‪:‬‬
‫;‪int i=0‬‬
‫;‪int max = 10‬‬
‫{ )‪for (; i < max; i++‬‬
‫;)‪printf("%d\n", i‬‬
‫}‬
‫هذا البرنامج يستخدم لطباعة األعداد من ‪ 1‬إلى ‪ , 10‬ونالحظ هنا أنه تم إهمال جزء‬
‫البداية فى صياغة ال ‪.for-loop‬‬
‫برنامج‪ :‬المطلوب كتابة برنامج لطباعة جدول الضرب للعدد ‪ 1‬وللعدد ‪.2‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int i, j‬‬
‫;‪int table = 2‬‬
‫;‪int max = 10‬‬
‫‪for (i = 1; i <= table; i++) { // outer loop‬‬
‫‪for (j = 0; j <= max; j++) { // inner loop‬‬
‫;)‪printf("%d x %d = %d\n", i, j, i*j‬‬
‫}‬
‫‪printf("\n"); /* blank line between tables */‬‬
‫}}‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغيرين ‪ I,j‬من النوع ‪.int‬‬‫ يتم تعريف متغيرين ‪ table‬من النوع ‪ int‬ومساواته بالعدد ‪.2‬‬‫ يتم تعريف متغيرين ‪ max‬من النوع ‪ int‬ومساواته بالعدد ‪.10‬‬‫ يتم إستخدام أسلوب التكرار ‪ for-loop‬المتداخل‪.‬‬‫‪ -‬طباعة جدول الضرب بإستخدام‬
‫;)‪printf("%d x %d = %d\n", i, j, i*j‬‬
‫ طباعة سطر جديد بإستخدام الجملة ;)"‪printf("\n‬‬‫ناتج البرنامج‪:‬‬
‫ملحوظة‪ :‬يمكن إستخدام أسلوب ‪ for-loop‬المتداخل حتى ‪ 15‬مستوى فى لغة ‪.C‬‬
‫وعادة ما يستخدم هذا األسلوب المتداخل فى العمليات على المصفوفات‪.‬‬
‫‪ .6‬جملة ‪break‬‬
‫تستخدم جملة ‪ break‬حين يريد المبرمج الخروج من أسلوب التكرار ‪ loop‬نظرا‬
‫لحدوث شرط معين‪ ,‬وفى هذه الحالة اليتم الدوران بالعدد المحدد‪ ,‬وعند تحقق هذا‬
‫الشرط يخرج تنفيذ البرنامج من جزء الكود الخاص بالتكرار مباشرة ويقوم بتنفيذ الجزء‬
‫المتبقى من البرنامج‪ .‬والبرنامج التالى يحدد مثال على إستخدام جملة ‪.Break‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int num = 5‬‬
‫{ )‪while (num > 0‬‬
‫)‪if (num == 3‬‬
‫;‪break‬‬
‫;)‪printf("%d\n", num‬‬
‫;‪num--‬‬
‫}}‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغير ‪ num‬من نوع ‪ int‬ومساواته بالقيمة ‪.5‬‬‫ يتم إستخدام ‪ while loop‬لطباعة اإلعداد من ‪ 5‬إلى ‪ 1‬تنازليا‪.‬‬‫ يتم تطبيق شرط عند الوصول لرقم ‪ 3‬يتم إستدعاء جملة ‪ break‬والخروج من‬‫حلقة التكرار وإكمال البرنامج‪.‬‬
‫ناتج البرنامج‪:‬‬
‫‪ .7‬جملة ‪continue‬‬
‫تستخدم جملة ‪ continue‬عندما يريد المبرمج أن يتخطي إلى التكرار التالي مع البقاء‬
‫في الحلقة ‪ ،loop‬فيقوم بإستخدام جملة ‪.Continue‬‬
‫برنامج‪ :‬طباعة األرقام من رقم ‪ 6‬حتى رقم ‪ 1‬تنازليا ما عدا رقم ‪.5‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int nb = 7‬‬
‫{ )‪while (nb > 0‬‬
‫;‪nb--‬‬
‫;‪continue‬‬
‫)‪if (nb == 5‬‬
‫;)‪printf("%d\n", nb‬‬
‫}}‬
‫شرح البرنامج‪:‬‬
‫ تعريف المتغير ‪ nb‬من النوع ‪ int‬ومساواته بالرقم ‪.7‬‬‫ إستخدام ‪.While loop‬‬‫ إستخدام الشرط ;‪ if (nb == 5) continue‬لعدم طباعة الرقم ‪.5‬‬‫ناتج البرنامج‪:‬‬
‫‪ .8‬كيف يمكن إختيار أسلوب التكرار المناسب‬
‫اختيار حلقة التكرار ‪ loop‬هو دائما مهمة صعبة على المبرمج ‪ ،‬لتحديد حلقة التكرار‬
‫‪ loop‬المراد إستخدامها فى البرنامج فيجب القيام بالخطوات التالية‪:‬‬
‫‪ .1‬القيام بتحليل المشكلة تحليال جيدا وتحديد ما إذا كانت المشكلة تتطلب إختبارا مسبقا‬
‫أم إختبارا نهائيا‪.‬‬
‫‪ .2‬إذا كانت المشكلة تتطلب إختبارا مسبقا فقم بإستخدام ‪.for-loop‬‬
‫‪ .3‬إذا كانت المشكلة تتطلب إختبارا نهائيا فقم بإستخدام ‪.do-while-loop‬‬
‫جملة ‪switch case‬‬
‫‪Switch Case Statement in C Programming‬‬
‫تقوم جملة ‪ switch-case‬بعمل إختبار لقيم المتغير ومقارنتها بالعديد من القيم التى‬
‫تعبر كل منها عن حالة معينة‪ .‬وعندما تتشتبه القيمة المخزنة داخل المتغير بإحدى القيم‬
‫يتم تنفيذ جزء الكود المصاحب لهذه الحالة‪ .‬وكل حالة من حاالت ‪ switch-case‬يكون‬
‫لها معرف خاص بها‪ .‬حيث يتم مقارنة القيمة المدخلة عن طريق المستخدم بكل هذه‬
‫الحاالت حتى يتم إيجاد الحالة المطلوبة‪ .‬وفى حالة عدم وجود هذه الحالة يتم تنفيذ الحالة‬
‫اإلفتراضية ‪ ,‬ويتم الخروج من تنفيذ ‪ switch-case‬إلى باقى البرنامج‪.‬‬
‫وتستخدم ‪ switch-case‬فى حل الصعوبة الناتجة عن تطبيق جملة ‪ if-else-if‬فى‬
‫حالة وجود الكثير من الشروط التى تتداخل مع بعضها البعض مما يجعل قراءة البرنامج‬
‫وفهمه فهما جيدا والذى يمثل صعوبة بالغة للمبرمج فى عملية تصميم البرنامج‪.‬‬
‫‪ .1‬صياغة جملة ‪switch-case‬‬
‫توضح الصياغة التالية شكل جملة ‪:switch-case‬‬
‫) ‪switch( expression‬‬
‫{‬
‫‪case value-1:‬‬
‫;‪Block-1; Break‬‬
‫‪case value-2:‬‬
‫;‪Block-2; Break‬‬
‫‪case value-n:‬‬
‫;‪Block-n; Break‬‬
‫‪default:‬‬
‫;‪Block-1; Break‬‬
‫}‬
‫;‪Statement-x‬‬
‫‪ -‬الجزء ‪ Expression‬هو تعبير رقمى أو إسمى‪.‬‬
‫ ‪ Value 1, Value 2,….., Value n‬تمثل الرموز الخاصة بالحاالت المختلفة‬‫للبرنامج والبد أن تكون مختلفة عن بعضها البعض لضمان صحة تنفيذ البرنامج‪.‬‬
‫وينتهى رمز الحالة بعالمة (‪ .):‬وترتبط كل حالة بجزء من الكود‪.‬‬
‫ الكود المصاحب للحالة وهو عبارة عن مجموعة من الجمل التى يتم تنفيذها أثناء‬‫الدخول إلى هذه الحالة‪.‬‬
‫ عندما يتم تنفيذ جملة ‪ , switch-case‬يتم مقارنة قيمة ‪ expression‬بكل رموز‬‫الحاالت المختلفة‪ ,‬وعند وجود رمز الحالة المتشابه معها يتم تنفيذ الكود المصاحب‬
‫لها‪.‬‬
‫ جملة ‪ break‬فى كل حالة تشير إلى نهاية الكود الخاص بهذ الحالة ‪ ,‬والذى يوجه‬‫تنفيذ البرنامج من جملة ‪ .switch-case‬وعدم وجود كلمة ‪ break‬يؤدى إلى تنفيذ‬
‫كل الحاالت الموجودة فى جملة ‪.switch-case‬‬
‫ جملة ‪ : default‬هى إختيارية حيث يمكن كتابتها أو عدم وكتابتها‪ .‬وعند وجودها‬‫فإنه يتم تنفيذ جزء الكود الذى يليها فى حالة عدم التوصل إلى أى حالة من الحاالت‬
‫السابقة‪.‬‬
‫ بعد اإلنتهاء من تنفيذ جملة ‪ switch-case‬سيتم توجيه التنفيذ الى الجمل التى تليها‬‫إلكمال تنفيذ البرنامج‪.‬‬
‫والشكل التالى يوضح خريطة تدفق جملة ‪:switch case‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int num = 8‬‬
‫{ )‪switch (num‬‬
‫‪case 7:‬‬
‫;)"‪printf("Value is 7‬‬
‫;‪break‬‬
‫‪case 8:‬‬
‫;)"‪printf("Value is 8‬‬
‫;‪break‬‬
‫‪case 9:‬‬
‫;)"‪printf("Value is 9‬‬
‫;‪break‬‬
‫‪default:‬‬
‫;)"‪printf("Out of range‬‬
‫;‪break‬‬
‫}‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ تعريف متغير بإسم ‪ num‬من النوع ‪ int‬ومساواته بالرقم ‪.8‬‬‫ تعريف جملة ‪ switch case‬بإستخدام المتغير ‪ num‬كمدخل لها لمقارنته بثالثة‬‫حاالت مختلفة حالة (‪ )8‬و حالة (‪ )7‬وحالة (‪ )9‬والحالة اإلفتراضية ‪.default‬‬
‫والشكل التالى يوضح خطوات تنفيذ البرنامج‪.‬‬
‫ناتج البرنامج‪:‬‬
‫برنامج‪ :‬البرنامج التالى يوضح تأثير جملة ‪ break‬على تنفيذ جملة ‪switch-case‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;‪int number=5‬‬
‫{ )‪switch (number‬‬
‫‪case 1:‬‬
‫‪case 2:‬‬
‫;)"‪printf("One, Two, or Three.\n‬‬
‫‪case 3:‬‬
‫;‪break‬‬
‫‪case 4:‬‬
‫‪case 5:‬‬
‫;)"‪printf("Four, Five, or Six.\n‬‬
‫‪case 6:‬‬
‫;‪break‬‬
‫}};)"‪default: printf("Greater than Six.\n‬‬
‫شرح البرنامج‪:‬‬
‫ تعريف متغير بإسم ‪ num‬من النوع ‪ int‬ومساواته بالرقم ‪.5‬‬‫ تعريف جملة ‪ switch case‬بإستخدام المتغير ‪ num‬كمدخل لها لمقارنته بثالثة‬‫حاالت مختلفة حالة (‪ )1‬و حالة (‪ )2‬وحالة (‪ )3‬وحالة (‪ )4‬وحالة (‪ )5‬وحالة (‪)6‬‬
‫والحالة اإلفتراضية ‪.default‬‬
‫‪ -‬الحاالت (‪ )1‬و (‪ )2‬و (‪ )4‬و (‪ )5‬ليس لها جملة ‪.break‬‬
‫ فيقوم بنتفيذها ونظرا‬case 5: ‫ مع الحالة‬switch-case ‫ يتطابق المدخل لجملة‬‫ ثم ينفذ البلوك الخاص‬case 6: ‫ فإنه يستمر بالتنفيذ للحالة‬break ‫لعدم وجود جملة‬
.switch-case ‫ فيقوم بالخروج من جملة‬break ‫بها إلى أن يجد جملة‬
.‫والشكل التالى يوضح خطوات تنفيذ البرنامج‬
:‫ناتج البرنامج‬
‫ المتداخلة‬switch-case ‫ صياغة جملة‬.2
switch-case ‫ بداخل جملة‬switch-case ‫ يمكن إستخدام جملة‬C ‫فى لغة ال‬
.‫ المتداخلة‬switch-case ‫أخرى حيث تسمي جملة‬
:‫برنامج‬
#include <stdio.h>
int main() {
int ID = 500;
int password = 000;
printf("Plese Enter Your ID:\n ");
scanf("%d", & ID);
switch (ID) {
case 500:
printf("Enter your password:\n ");
scanf("%d", & password);
switch (password) {
case 000:
printf("Welcome Dear Programmer\n");
break;
default:
printf("incorrect password");
break;
‫}‬
‫;‪break‬‬
‫‪default:‬‬
‫;)"‪printf("incorrect ID‬‬
‫;‪break‬‬
‫}‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ فى هذا البرنامج تم تعريف متغيرين بإسم ‪ ID, Password‬ومساواة قيمتهما‬‫بالقيم ‪ 500‬و ‪.000‬‬
‫ هنا تم إستخدام طريقة جديدة وهى إرسال رسالة إلى المستخدم وتلقى اإلجابة منه‬‫وحفظها فى متغير يسمى ‪ .ID‬بإستخدام الجملة ;)‪.scanf("%d", & ID‬‬
‫ تكوين جملة ‪ swich-case‬للمدخل ‪.ID‬‬‫ إرسال رسالة إلى المستخدم وتلقى اإلجابة منه وحفظها فى متغير يسمى‬‫‪ .password‬بإستخدام الجملة ;)‪.scanf("%d", & ID‬‬
‫والشكل التالى يمثل خطوات تنفيذ البرنامج‪ :‬والذى يعتمد على المدخل الذى يتم إدخاله بواسطة‬
‫المستخدم‪.‬‬
‫ناتج البرنامج‪:‬‬
‫وفيما يلى نلخص قواعد التعامل مع جملة ‪switch-case‬‬
‫ جملة ‪ expression‬المستخدمة البد أن يكون لها ناتج معروف ومحدد‪.‬‬‫ رموز الحاالت البد أن تكون ثابتة وموحدة وغير مكررة وتنتهى بالرمز (‪.):‬‬‫ البد من وجود جملة ‪ break‬فى كل حالة من الحاالت المستخدمة‪.‬‬‫ البد من وجود قيمة إفتراضية ‪ default‬واحدة‪.‬‬‫‪ -‬يمكن إستخدام عدة جمل متداخلة من ‪.switch-case‬‬
‫التعامل مع األسماء فى لغة الـ ‪C‬‬
‫‪Manipulating Strings in C Language‬‬
‫اإلسم هو مجموعة من الحروف المتتالية‪ .‬ولغة ال ‪ C‬تتعامل مع اإلسم كوحدة واحدة حتى لو‬
‫احتوى بداخله على مسافات فارغة‪ .‬ويتم التمييز بين الحرف الواحد فى واإلسم فى لغة الـ ‪ C‬عن‬
‫طريق وضع عالمة التنصيص الفردية مع الحروف (‘ ’ ( وإستخدام عالمة التنصيص الزوجية‬
‫(”“) مع األسماء‪.‬‬
‫"!‪Example, "Welcome to AL-AzHar University‬‬
‫وتقدم ‪ C‬مكتبة أساسية تسمى >‪ <string.h‬والتى تحتوى على جميع الدوال التى يمكن إستخدامها‬
‫إلجراء العمليات المعقدة على األسماء بشكل سهل‪.‬‬
‫‪ .1‬تعريف المتغيرات اإلسمية ‪Declaring String Variables‬‬
‫اإلسم هو عبارة عن مصفوفة من الحروف من نوع ‪ .Char‬واليوجد متغير من نوع ‪ string‬فى‬
‫لغة ال ‪ ,C‬لذلك البد من التعامل مع اإلسم ‪ String‬على أنه مصفوفة من النوع ‪.char‬‬
‫والشكل العام لتعريف متغير من النوع ‪ String‬كالتالى‪:‬‬
‫;]‪char string_variable_name [array_size‬‬
‫والبد أن يكون حجم المصفوفة معرفا من قبل ألنه يستخدم فى معرفة عد الحروف التى يتكون‬
‫منها هذا اإلسم لتخزينها فى المتغير‪ .‬وفيما يلى بعض األمثلة من تعريف بعض المتغيرات اإلسمية‪.‬‬
‫‪//declaration of a string variable‬‬
‫;]‪char first_name[15‬‬
‫;]‪char last_name[15‬‬
‫;]‪char UniveristyName[15‬‬
‫;]‪char FacultyName[15‬‬
‫واإلمثلة السابقة تمثل متغيرات إسمية مكونة من مصفوفة حجمها = ‪ 15‬حرف‪ .‬وهذا يعنى أن هذه‬
‫المتغيرات يمكن أن تحتفظ بأسماء تحتوى على األكثر ‪ 15‬حرف‪ .‬ويبدأ دليل المصفوفة ‪Array‬‬
‫‪ Index‬المخزن فيه الحروف من ‪ 0-14‬مكان‪ .‬ويضيف مترجم ال‪ C‬القيمة ‪ Null‬لكل الحروف‬
‫المنشئة داخل المصفوفة‪.‬‬
‫وفيما يلى أمثلة مختلفة لقيم تم تخزينها فى متغيرات إسمية على شكل مصفوفة من الحروف‪.‬‬
‫;"‪char first_name[15] = "AYMAN‬‬
‫;}'‪char first_name[15] = {'A','Y','M','A','N','\0‬‬
‫‪// NULL character '\0' is required at end‬‬
‫;"‪char University[5] = "AZHAR‬‬
‫‪/*string = 'A'+'Z'+'H'+'A'+'R'+"NULL" */‬‬
‫'‪/* string size = 'A'+'Z'+'H‬‬
‫;"‪char University[ ] = "AZHAR‬‬
‫‪+'A'+'R'+"NULL" = 6 */‬‬
‫; }'‪char University[5] = {'A', 'Z', 'H', 'A', 'R', '\0‬‬
‫‪/*Declaration as set of characters ,Size 5*/‬‬
‫ويمكن فى لغة ال ‪ C‬أن يتم تعريف متغير إسمى على شكل مصفوفة من الحروف ‪ char‬بدون‬
‫ذكر ‪array size‬‬
‫;"‪char first_name[ ] = "Azhar‬‬
‫‪ .2‬إدخال اإلسماء ‪String Input‬‬
‫عند كتابة البرامج التفاعلية والتى تتطلب إدخال بيانات من المستخدم ‪ ,‬يمكن فى لغة ال ‪ C‬إستخدام‬
‫الدوال )(‪ Scanf(), gets(), fgets‬لقراءة سطر من النصوص يتم إدخاله عن طريق المستخدم‪.‬‬
‫وعند إستخدام )(‪ scanf‬يتم إستخدام التنسيق "‪ "%s‬بدون إستخدام المعامل & للوصول لعنوان‬
‫المتغير ألن المصفوفة يتم التعامل معها عن طريق المؤشر‪ .‬فعلى سبيل المثال البرنامج التالى‬
‫يوضح هذا المعنى‪:‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;]‪char name[10‬‬
‫;‪int age‬‬
‫;)"‪printf("Enter your first name and age: \n‬‬
‫;)‪scanf("%s %d", name, &age‬‬
‫;)‪printf("You entered: %s %d",name,&age‬‬
‫}‬
‫وهناك مشكلة فى قراءة )(‪ Scanf‬لإلسم حيث أنها تعتبر نهاية اإلسم حدوث سطر جديد أو مسافة‬
‫أو ‪ .enter‬بمعنى إذا قمت بإدخال إسم ثنائى أو ثالثى مفصولين مسافة فارغة فإنها ال تستطيع إال‬
‫قراءة اإلسم األول فقط‪.‬‬
‫ولقراءة إسم يحتوى على مسافات خالية فإنه يفضل إستخدام الدالة )(‪ gets‬التى تقرأ السطر كامال‬
‫وتعتبر نهاية اإلسم هى عالمة السطر الجديد (الضغط على مفتاح ‪)enter‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;]‪char full_name[25‬‬
‫;)" ‪printf("Enter your full name:‬‬
‫;)‪gets(full_name‬‬
‫;)‪printf("My full name is %s ",full_name‬‬
‫;‪return 0‬‬
‫}‬
‫شرح البرنامج‪:‬‬
‫ يتم تعريف متغير على شكل مصفوفة من ‪ 25‬حرف بإسم ‪.full_name‬‬‫ يتم إرسال رسالة إلى المستخدم إلدخال اإلسم‪.‬‬‫ يتم تلقى اإلسم من المستخدم وحفظه فى المتغير ‪.full_name‬‬‫ يتم طباعة اإلسم المدخل على الشاشة‪.‬‬‫ناتج البرنامج‪:‬‬
‫ويمكن إستخدام الجملة )(‪ fgets‬بدال من الدالة )(‪ gets‬والتى تقرأ عدد محدد من الحروف‪.‬‬
‫والبرنامج التالى يوضح كيفية إستخدام الدالة )(‪fegets‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;]‪char name[10‬‬
‫;)" ‪name plz:‬‬
‫‪printf("Enter your‬‬
‫;)‪fgets(name, 10, stdin‬‬
‫;)‪printf("My name is %s ",name‬‬
‫};‪return 0‬‬
‫شرح البرنامج‪:‬‬
‫تتكون البارامتر الخاصة بالدالة ‪ fgets‬من‪:‬‬
‫ المتغير المراد تخزين اإلسم المدخل فيه‪.‬‬‫ حجم اإلسم المدخل‬‫ ‪ Stdin‬لقراءة اإلسم المراد تخزينه من لوحة المفاتيح‪.‬‬‫ناتج البرنامج‪:‬‬
‫‪Enter your name plz: Carlos‬‬
‫‪My name is Carlos‬‬
‫‪ .3‬طباعة وعرض اإلسماء ‪String Output‬‬
‫يمكن إستخدام دالة )(‪ printf‬لطباعة وعرض اإلسماء على أجهزة العرض بالصيغة التالية‪:‬‬
‫;)‪printf("%s", name‬‬
‫كما يمكن إستخدام الدالة )(‪ fputs‬لطباعة وعرض اإلسماء على أجهزة العرض بالصيغة التالية‪:‬‬
‫برنامج‪:‬‬
‫>‪#include<string.h‬‬
‫>‪#include<stdio.h‬‬
‫)(‪int main‬‬
‫;]‪{char town[40‬‬
‫;)" ‪printf("Enter your town:‬‬
‫;)‪gets(town‬‬
‫;)‪fputs(town, stdout‬‬
‫};‪return 0‬‬
‫شرح البرنامج‪:‬‬
‫يتم إستخدام دالة )(‪ fputs‬لطباعة وعرض محتوى المتغير ‪ town‬على الشاشة‪ ,‬وتحتوى‬
‫البارامتر الخاصة بدالة )(‪ fputs‬على اآلتى‪:‬‬
‫ المتغير الذى يحتوى اإلسم المراد طباعته‪.‬‬‫ ‪ Stdout‬لطباعة المتغير على الشاشة‪.‬‬‫ناتج البرنامج‪:‬‬
‫كما يمكن إستخدام الدالة )(‪ fputs‬لعرض وطباعة المتغيرات اإلسمية على الشاشة‪.‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫{ )(‪int main‬‬
‫;]‪char name[15‬‬
‫‪//reads a string‬‬
‫‪//displays a string‬‬
‫};‪return 0‬‬
‫;)‪gets(name‬‬
‫;)‪puts(name‬‬
‫وهذا الكود يعتبر هو أبسط األكواد المستخدمة‪.‬‬
‫‪ .4‬المكتبة ‪String library‬‬
‫تحتوى مكتبات لغة ال‪ C‬على دوال متنوعة لمعالجة األسماء داخل البرنامج‪ .‬ويتم تخزين كل هذه‬
‫الدوال فى المكتبة ‪string.h‬‬
‫‪Purpose‬‬
‫تستخدم هذه الدالة إليجاد عدد الحروف التى يتكون منها اإلسم (طول‬
‫اإلسم)‬
‫تستخدم هذه الدالة لدمج إسمين معا‪.‬‬
‫تقوم هذه الدالة بمقارنة إسمين‪ .‬والناتج يكون ‪ 0‬فى حالة تساوى اإلسمين‪,‬‬
‫وأقل من ‪ 0‬فى حالة أن ‪ str1<sr2‬وأكبر من ‪ 0‬فى حالة ‪.str1>sr2‬‬
‫تقوم هذه الدالة بمقارنة اإلسمين الذين يتكونان من عدد من الحروف‬
‫يساوى ‪ n‬من بداية ‪ str1‬و ‪ .str2‬والناتج يكون ‪ 0‬فى حالة تساوى‬
‫اإلسمين‪ ,‬وأقل من ‪ 0‬فى حالة أن ‪ str1<sr2‬وأكبر من ‪ 0‬فى حالة‬
‫‪.str1>sr2‬‬
‫تستخدم لنسخ عدد من الحروف يساوى ‪ n‬من اإلسم األول إلى اإلسم‬
‫الثانى‪.‬‬
‫للبحث عن حرف ‪ c‬فى اإلسم ‪str1‬‬
‫للبحث عن حرف ‪ c‬فى اإلسم ‪ str1‬بطريقة عكسية‬
‫للبحث عن اإلسم ‪ str2‬فى اإلسم ‪str1‬‬
‫لكى يتم تحويل النص إلى الحالة ‪small‬‬
‫لكى يتم تحويل النص إلى الحالة ‪Capital‬‬
‫لقراءة اإلسم بشكل معكوس‪.‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫>‪#include <string.h‬‬
‫{ )( ‪int main‬‬
‫‪//string initialization‬‬
‫;"‪char string1[15]="Hello‬‬
‫;"!‪char string2[15]=" World‬‬
‫;]‪char string3[15‬‬
‫;‪int val‬‬
‫‪Function‬‬
‫)(‪strlen‬‬
‫)‪strcat(str1, str2‬‬
‫)‪strcmp(str1, str2‬‬
‫)‪strncmp(str1, str2, n‬‬
‫)‪strncpy(str1, str2, n‬‬
‫)‪strchr(str1, c‬‬
‫)‪strrchr(str1, c‬‬
‫)‪strstr(str1, str2‬‬
‫)(‪strlwr‬‬
‫)(‪strupr‬‬
‫)(‪strrev‬‬
//string comparison
val= strcmp(string1,string2);
if(val==0){
printf("Strings are equal\n");
}
else{
printf("Strings are not equal\n");
}
//string concatenation
printf("Concatenated string:%s",strcat(string1,string2)); /
/string1 contains hello world!
//string length
printf("\nLength of first string:%d",strlen(string1));
printf("\nLength of second string:%d",strlen(string2));
//string copy
printf("\nCopied string is:%s\n",strcpy(string3,string1));
//string1 is copied into string3
return 0;
}
:‫شرح البرنامج‬
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
:‫ناتج البرنامج‬
‫‪ .5‬تحويل اإلسم إلى رقم ‪Converting String To Numbers‬‬
‫فى لغة ال ‪ c‬يمكن تحويل اإلسم الذى يتكون من حروف رقمية إلى قيمة رقمية لعمل العمليات‬
‫الحسابية عليها‪ .‬وتحتوى مكتبة ‪ stdio.h‬على الدوال اآلتية لتحويل اإلسماء إلى أرقام‪:‬‬
‫المعنى‬
‫الوصف‬
‫)‪int atoi(str‬‬
‫‪ASCII to‬‬
‫تقوم بتحول اإلسم إلى قيمة صحيحة‪,‬‬
‫‪integer‬‬
‫وتقوم إرجاع صفر فى حالة عدم وجود‬
‫أرقام‪.‬‬
‫تقوم بتحول اإلسم إلى قيمة نسبية‪ ,‬وتقوم ‪double atof(str) ASCII to float‬‬
‫إرجاع ‪ 0.00‬فى حالة عدم وجود أرقام‪.‬‬
‫‪long int‬‬
‫تقوم بتحول اإلسم إلى قيمة صحيحة ذات ‪ASCII to long‬‬
‫)‪atol(str‬‬
‫‪int‬‬
‫مدى أكبر‪ ,‬وتقوم إرجاع ‪ 0‬فى حالة عدم‬
‫وجود أرقام‪.‬‬
‫برنامج‪:‬‬
‫>‪#include <stdio.h‬‬
‫)(‪int main‬‬
‫;]‪{char *string_id[10‬‬
‫;‪int ID‬‬
‫;)" ‪printf("Enter a number:‬‬
‫;)‪gets(string_id‬‬
‫;)‪ID = atoi(string_id‬‬
‫;)‪",ID‬‬
‫‪printf("you enter %d‬‬
‫};‪return 0‬‬
‫شرح البرنامج‪:‬‬
‫الدالة‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫‪............................................................................................................................................................‬‬
‫ناتج البرنامج‪:‬‬
Functions in C
C ‫الدوال فى لغة ال‬
https://www.guru99.com/c-functions.html
Download