الفصل األول الطريق إلى برمجة الحاسب اآللى 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-9Example, 111, 1234 الثوابت الثمانية Octalوهى الثوابت التى تحتوى على أرقام من .0-7Example, 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