تمهيد
إن استخدام البرامج الفرعية، أو الإجرائيات، أمراً ضرورياً في لغات البرمجة رفيعة المستوى. وتفيد البرامج الفرعية في تسهيل البرامج لأنها تغلف المهام المتكررة في برنامج فرعي واحد، ومن ثم يمكن استدعاء هذا البرنامج الفرعي كلما دعت الحاجة إليه. كما تسهل البرامج الفرعية إنشاء مكتبات برمجية عامة بها برامج فرعية جاهزة تنجز المهام التي تتكرر بكثرة في البرامج. ويكفي لكي يستفيد المبرمج من هذه البرامج الفرعية أن يدرج الملف الذي يحتويها في برنامجه. |
1. الخوارزميات
تسمى البرامج الفرعية في لغة ج بالخوارزميات. والخوارزمية هي برنامج فرعي، لها اسم خاص بها، ولها جسم (أو جسم) فيه جمل تنجز عملاً محدداً. وتُعرَّف الخوارزمية بواسطة أمر تعريف لها الصيغة العامة التالية: الخوارزمية<اسم> <قائمة متغيرات معيارية> <فقرة> أما قائمة المتغيرات المعيارية فلها الصيغة العامة التالية: ( [ [الثابت] <اسم> [، <اسم> …] : <نوع> … ] ) تبدأ أمر تعريف الخوارزمية بالكلمة الدلالية الخوارزمية، يليها اسم الخوارزمية التي يجري تعريفها. ويجب أن يكون هذا الاسم اسماً جديداً لم يستخدم من قبل لتعريف أي عنصر من عناصر البرنامج الأخرى. ويلي اسم الخوارزمية قائمة بالمتغيرات المعيارية محصورة بين قوسين صغيرين. والمتغيرات المعيارية هي مجموعة من المتغيرات تستخدم في تمرير البيانات بين الخوارزمية والبرنامج الرئيسي. بعد ذلك يجب تعريف جسم، أو جسم، الخوارزمية. ويتكون جسم الخوارزمية من فقرة واحدة، وهي الفقرة التي تنفذ عند استدعاء الخوارزمية. |
مثال
الخوارزمية تربيع(س : حقيقي) |
تعرف هذا الأمر خوارزمية اسمها تربيع لها متغير معياري وحيد اسمه س، وهو متغير حقيقي. ويتكون جسم الخوارزمية من إيعاز واحد - أكتب س^2 - يعمل عند تنفيذه على كتابة مربع القيمة س على شاشة الكتابة. بعد تعريف الخوارزمية يمكن إستدعائها في أي نقطة من البرنامج، بواسطة أمر أنفذ، كما هو مبين أدناه. |
تنفيذ الخوارزميات
تنفذ الخوارزمية بواسطة أمر أنفذ التي لها الصيغة العامة التالية: [أنفذ] <اسم (خوارزمية أو تابع)> <قائمة متغيرات فعلية> ويمكن إسقاط الكلمة الدلالية أنفذ والاكتفاء بذكر اسم الخوارزمية. أما قائمة المتغيرات الفعلية فلها الصيغة العامة التالية: ( [<عبارة> [، <عبارة> …] ) |
مثال
الخوارزمية تربيع (س : حقيقي) |
في هذا المثال ، بعد تعريف الخوارزمية تربيع، تنفذ الخوارزمية بواسطة الإيعاز أنفذ تربيع(25.5)، الذي يستخدم العدد 25.5 كقيمة للمتغير المعياري س. وتستخدم هذه القيمة كقيمة فعليةللمتغيرس في الأمرأكتب س^2 ، وتكون نتيجة تنفيذ هذا البرنامج أن تظهرالقيمة 650.25، وهي مربع العدد 25.5، على شاشة الكتابة. ويجب أن يكون عدد المتغيرات (أو العبارات) في قائمة المتغيرات الفعلية مساوياً لعدد المتغيرات المعيارية في تعريف الخوارزمية، وأن يتطابق نوع العبارة مع نوع المتغير المعياريالموافق له. لذلكفالأمر التالي: |
أنفذ تربيع (25.5 ، 12) |
أمر خاطئ لتنفيذ الخوارزمية تربيع المعرفة أعلاه لأن عدد العبارات في قائمة المتغيرات الفعلية يزيد على عدد المتغيرات المعيارية في تعريف الخوارزمية. وكذلك الجملة : |
أنفذ تربيع () |
خاطئة أيضاً لأن عدد العبارات في قائمة المتغيرات الفعلية (لا يوجد متغيرات فعلية) أقل من عدد المتغيرات المعيارية للخوارزمية تربيع. كما أن البرنامج التالي: |
المتحول ع : صحيح |
يمثل طريقة خاطئة لتنفيذ الخوارزمية تربيع لأن نوع المتغير الفعلي ع (وهو متغير صحيح) لا يتطابق مع نوع المتغير المعياري س (وهو متغير حقيقي). والصحيح أن يكتب: |
المتحول ع : حقيقي |
إلا أنه يصح استدعاء الخوارزمية تربيع بواسطة الأمر التالي: |
تربيع(12) |
يعتبر العدد12 عددا مناسبا لأنه يمكن ترقية العدد الصحيح إلى عدد حقيقي في هذه الحالة. ويمكن تلخيص قواعد تمرير المتغيرات الفعلية إلى الخوارزميات بما يلي:
|
المتغيرات الخاصة والمتغيرات العامة
إضافة إلى الأوامر التنفيذية المختلفة، يمكن لجسم الخوارزمية أن يحتوي على تعريف متغيرات، أو ثوابت، أو أنواع بيانات جديدة. وتسمى الأسماء المعرفة داخل جسم الخوارزمية (أو الدالة) متغيرات خاصة. لأنه لا يمكن استخدام هذه المتغيرات خارج جسم الخوارزمية التي عرُّفت فيها، بل ينحصر مجال تعريفها داخل جسم الخوارزمية. وعلى النقيض من ذلك، فإن كل الأسماء المعرفة خارج جسم الخوارزميات والدوال - أي في البرنامج الرئيسي - تكون معرفة ومرئية في كل مواضع البرنامج التي تلي أمر الـتعريف، بما في ذلك المواضع التي تقع داخل أجسام الخوارزميات المعرفة في هذا البرنامج. ولذلك يطلق على هذه الأسماء متغيرات عامة، ويمكن استخدامها في جسم أي خوارزمية، أو تابع، مثلها مثل المتغيرات الخاصة المعرفة داخل الخوارزمية. |
مثال
!! تعريف المتغيرات العامة |
في هذا المثال، يحتوي البرنامج الرئيسي على الأمر "المتحول س: صحيح" الذي يعرف المتغير س بأنه متغير صحيح. ولأن هذا الأمر يقع في البرنامج الرئيسي، يصبح المتغير س معرفا في كافة مواضع البرنامج التي تلي أمر تعريفه بما في ذلك جسم الخوارزمية تربيع(). أما الخوارزمية تربيع() فتحتوي على تعريف لمتغير خاص ع. لكن هذا المتغير لا يكون معرفاً إلا داخل جسم هذه الخوارزمية. وفي جسم الخوارزمية، يـسند الأمر ع=10 القيمة 10 إلى المتغير الخاص ع، أما الأمر س=ع فيسند قيمة المتغير الخاص ع (10) إلى المتغير العام س. أخيراً، يـكتب الأمر الأخير في هذا البرنامج قيمة المتغير س. وتبين الصورة التالية نتيجة تنفيذ هذا البرنامج. |
![]() |
تمرير البيانات إلى الخوارزميات والدوال
تعتمد لغة ج في تمرير البيانات إلى الخوارزميات على طريقة الـتمرير بالعنوان. فعندما يجري استدعاء الخوارزمية بهذه الطريقة يُستبدل كل ورود للمتغير المعياري في جسم الخوارزمية بالمتغير الفعلي الموافق. لذلك فإن تغيير قيمة المتغير المعياري في جسم الخوارزمية يغير قيمة المتغير الفعلي أيضاً. |
مثال
!! تعريف الخوارزميات |
عندما ينفذ هذا البرنامج، يظهر التالي على شاشة الكتابة: |
![]() |
أي أن تنفيذ الخوارزمية على المتغير الفعلي ع أدى إلى تغيير قيمته بواسطة الأمر س = 15الموجود في جسم الخوارزمية. تذكر أن المتغير المعياري س يُستبدل أثناء تنفيذ الخوارزمية بالمتغير الفعلي ع. |
مثال - خوارزمية لـتبديل قيمة متحولين
!!تبدل هذه الخوارزمية قيمة المتغير س بـ ع ، و ع بـ س |
إلا أنه من المفيد في كثير من الأحيان المحافظة على قيمة المتغير الفعلي بعد تنفيذ الخوارزمية، حتى لو احتوت الخوارزمية على أمر أو أكثر تغير قيمة المتغير المعياري الموافق له. لهذا الغرض يمكن في لغة ج كتابة الـكلمة المفتاحية "الثابت" قبل اسم المتغير المعياري في أمر تعريف الخوارزمية. عند ذلك يحافظ المتغير الفعلي على قيمته بعد تنفيذ الخوارزمية. |
مثال
!! تعريف الخوارزميات |
عندما ينفذ هذا البرنامج يظهر التالي على شاشة الكتابة: |
![]() |
أي أن تنفيذ الخوارزمية تربيع على المتغير ع لم يؤدي إلى تغيير القيمة الأصلية للمتغير ع بعد انتهاء تنفيذ الخوارزمية. |
أمر أرجع
في الحالة العامة، ينتهي تنفيذ الخوارزمية عندما يصل مسار التنفيذ إلى آخر أمر فيها، وينتقل التنفيذ إلى الأمر الذي يلي الأمر الذي قامباستدعاء الخوارزمية في البرنامج الرئيسي. إلا أنه يمكن إنهاء الخوارزمية في أي نقطة منها باستخدام أمر أرجع الذي يتكون من الكلمة المفتاحية"أرجع"بمفردها. وتقرأ أَرجع بفتح الألف. فعندما يصل مسار التنفيذ إلى أمر أرجع ينتهي تنفيذ الخوارزمية حتماً ويعود مسار التنفيذ إلى النقطة التي تلي نقطة استدعاء الخوارزمية. |
مثال
الخوارزمية مقلوب (ص : صحيح) |
يعرف هذا المثال الخوارزمية "مقلوب" التي تقوم بحساب مقلوب متغير صحيح. وقبل حساب مقلوب المتغير يجب التأكد من أنه لا يـساوي الصفر. فإذا كانت قيمته 0 فعلاً، تكتب الخوارزمية تنبيها للمستخدم يشير إلى ذلك، وينتهي تنفيذها بواسطة أمر أرجع الذي يعيد التنفيذ إلى النقطة التي استدعيت منها الخوارزمية. أما إذا لم تكن قيمة المتغير س مساوية للصفر فتقوم الخوارزمية بكتابة قيمة مقلوب المتغير بواسطة الأمر: أكتب "مقلوب "، ص ، " = " ، 1 ÷ ص. |
2. الدوال (التوابع)
الدالة أو التابع (كما يسمى في لغة ج) هي دالة رياضية، ويمكن أن نقول أنها خوارزمية كأي خوارزمية أخرى أيضا، إلا أنه يتميز بأنه يرجع بقيمة (حسابية أو منطقية)، وبالتالي يمكن استخدام الدالة في العبارات كأي متغير أو دالة مبيتة (مثل جب أو لغ). وغني عن القول أنه قبل استخدام الدالة يجب تعريفها. وتعرف بواسطة الصيغة العامة التالية: التابع<اسم الدالة> <متغيرات معيارية> -> <نوع (حسابي أو منطقي)> <فقرة> ولكي تأخذ الدالة قيمتها يجب أن تحتوي في جسمها على كلمة أرجع (وتقرأ بضم الألف) متبوعة بالقيمة المراد إرجاعها، أي منحها كقيمة للدالة. والصيغة العامة للأمر أرجع في الدوال هي: أرجع<عبارة> ويجب أن يطابق نوع العبارة في أمر أرجع نوع الدالة المعلن عنه بعد الرمزين -> في أمر تعريف الدالة. فإذا كانت الدالة صحيحة لزم أن تكون كل العبارات في أوامر أرجع من النوع الصحيح أيضاً. |
مثال
!!تعريف الدالة |
تعرف الجملة الأولى في هذا المثال دالة اسمها تا تأخذ متغيرا حقيقياً واحداً اسمه س وترجع قيمة عددية حقيقية. يحتوي جسم الدالة على أمر واحد هو: أرجع س^2+1 الذي يقوم بإنهاء تنفيذ الدالة، ويمنحها في الرجوع قيمة العبارة س^2+1. وفي الأمر الأخير من هذا المثال يتم استدعاء الدالة تا ضمن العبارة اليسارية لجملة الإسناد ع = تا(4). وبنتيجة تنفيذ هذا البرنامج يأخذ المتغير ع القيمة 17 وهي قيمة العبارة 4^2+1. |
تمارين تطبيقية
التمرين 11.1
|
التمرين 11.2
|
التمرين 11.3
المشروع |
التمرين 11.4
|
الأنواع البسيطة
التمرين 11.5
|
التمرين 11.6
|
التمرين 11.7
|
التمرين 11.8
|
التمرين 11.9
|
التمرين 11.10
عدد صحيح: 6457392 |
التمرين 11.11أنجز الدالة عاملي من نوع حقيقي تقوم بأخذ القيمة الصحيحة ن من النوع صحيح، وتكون نتيجتها هي عامل ن.تذكير: العاملي ن! = ن(ن – 1)(ن –2)....3.2.1 لعدد صحيح طبيعي ن مع اعتبار أن 1=!0 . أنجز مشروعا يقوم تجريب هذه الدالة. |
التمرين 11.12
1 |
الجداول أحادية البعد
التمرين 11.13
|
التمرين 11.14
|
التمرين 11.15
|
التمرين 11.16
|
ترتيب عناصر الجدول
التمرين 11.17أعد كتابة الدالة ترتيب_شال المكتوبة بالخوارزم بلغة ج . استعمل الدالة تبديل المعرفة في الدرس.الدالة_اللارجعية ترتيب_شال(T جدول,N صحيح) |(*تقوم هذه الدالة بترتيب عناصر جدول بطريقة SHELL *) |النتيجة : تكون في الجدول T نفسه |(*التعريفات*) |صحيح SAUT, M, K |منطقي TERMINE | نضع N في SAUT |طالما (SAUT>1) نفذ | |نضع 2÷SAUT في SAUT | |نفذ | | |نضع صح في TERMINE | | |من M=1 إلى (N-SAUT) نفذ | | | |نضع M+SAUT في K | | | |إذاكانت (T[M]>T[K]) إذن | | | |تبديل(T[M],T[K]) | | | | |نضع خطأ في TERMINE | | | |نهاية_إذاكانت | | |نهاية_من | |طالما(TERMINE<>خطأ) |نهاية_طالما نهاية_الدالة |
التمرين 11.18حدد القيمة القصوى من بين عناصر جدول ج ذي الرتبة ن من أوجه ثلاثة :1- الدالة قصوي_1 ترجع القيمة القصوى. 2- الدالة قصوي_2 ترجع موقع القيمة القصوى في الجدول. 3- الدالة قصوي_3 ترجع عنوان القيمة القصوى. أنجز برنامجا يـقوم بتجربة عمل هذه الدوال. |
التمرين 11.19أنجز الدالة ترتيب_العزل التي تقوم بترتيب جدول (انظر التمرين 9.14)، استعمل الدالة تبديل التي تقوم بإبدال قيمتي متغيرين. أنجز برنامجا يـقوم بتجربة عمل هذه الدالة. |
التمرين 11.20أنجز الدالة وضع لترتيب جدول ، حيث تقوم بوضع قيمة X في داخل الجدول الذي يحتوي على ن عنصر مرتب تزايديا، فنحصل في النهاية على جدول مرتب تزايديا ذي الرتبة ن+1. رتبة الجدول تتزايد عند إدخال كل قيمة جديدة في الدالة وضع. أنجز برنامجا يـقوم بتجربة عمل هذه الدالة. |
التمرين 11.21أنجز الدالة ترتيب_الوضع التي تستعمل الدالة وضع لترتيب جدول تزايديا. أنجز برنامجا يـقوم بتجربة عمل هذه الدالة. الطريقة : |
التمرين 11.22أنجز الدالة قلب التي تقوم بترتيب قيمتين س و ش بحيث تكون س أصغر من ش حيث (س و ش معيارين للدالة قلب). الدالة قلب تكون نتيجتها القيمة 1 إذا تم الإبدال أو 0 إذا كان عكس ذلك. |
التمرين 11.23أنجز الدالة ترتيب_الفقاعات التي تقوم بترتيب جدول (انظر التمرين 9.15)، وتستعمل الدالة قلب للمساعدة. أنجز برنامجا يـقوم بتجربة عمل هذه الدالة. |
التمرين 11.24أنجز الدالة توحيد التي تقوم بإنشاء جدول موحد مرتب تزايديا الذي يوحد جدولين ج و خ مرتبين تزايديا ذي الرتبتين ن و م فتصبح رتبته هي ن+م (انظر التمرين 9.13).استعن بالدالة ترتيب_الفقاعات المعرفة في التمرين السابق. |
المتسلسلات الحرفية
التمرين 11.25أنجز الدالة طول_جملة التي ترجع بطول متسلسلة من الحروف. لا تستعمل داخلها أي متغير للمساعدة. |
التمرين 11.26أنجز الدالة تصغير_جملة التي تحول جميع حروف متسلسلة إلى حروف صغيرة في حالة إذا كانت حروفا لاتينية. لا تستعمل داخلها أي متغير للمساعدة. |
التمرين 11.27أنجز الدالة ضف_جملة(ذات المدخلين أو المعيارين حام و سام) حيث تقوم بإضافة المتسلسلة سام في نهاية المتسلسلة حام. لا تستعمل داخلها أي متغير للمساعدة. |
التمرين 11.28أنجز الدالة عكس_جملة تقوم بعكس حروف متسلسلة حام. استعمل الدالة طول_جملة(انظر أعلاه) وكذلك دالة تبديل_حرفين التي تقوم بإبدال متغيرين من نوع حرف. |
التمرين 11.29أنجز الدالة كلمات_جملة تقوم بحساب عدد الكلمات الموجودة في جملة (دالة رجعية). متغير ن للمساعدة واستعمل متغير منطقي للمساعدة وكذلك الدالة فراغ التي تحدد فواصل الجمل وترجع بصح إذا كان الرمز فاصلا وخطأ إذا كان العكس.ملاحظة: الفواصل هي { } () . ، ! ؟ .... |
التمرين 11.30أنجز الدالة كلمة_جملة ترجع عنوان (المؤشر) كلمة مطلوب البحث عنها داخل جملة إذا كانت موجودة، وإلا فسيكون الرجوع هو رمز نهاية الجملة '0\'. |
التمرين 11.31أنجز الدالة تساوي_جملتين تقوم بمقارنة متسلسلتين حام و سام حيث تكون نتيجتها : 1 إذا كان التساوي و 0 إذا كان عكس ذلك. (إذا كانت إحداهما أطول من الأخرى تكون النتيجة إما 0 أو 1 ). |
التمرين 11.32أنجز الدالة بحث_بجملة ترجع عنوان (المؤشر) حام داخل سام، (بمساعدة الدالتين تساوي_جملتين و طول_جملة) وإلا فسيكون الرجوع هو رمز نهاية الجملة '0\'. |
التمرين 11.33أنجز الدالة جملة_صحيح ترجع القيمة العددية من النوع صحيح لمتسلسلة حرفية تحتوي على أرقام (موجبة أو سالبة ). إذا كانت المتسلسلة لا تحتوي على أرقام، تتوقف الدالة في هذه الحالة عن التحويل. |
التمرين 11.34أنجز الدالة جملة_حقيقي ترجع القيمة العددية من النوع حقيقي لمتسلسلة حرفية تحتوي على أرقام (موجبة أو سالبة). إذا كانت المتسلسلة لا تحتوي على أرقام، تتوقف الدالة في هذه الحالة عن التحويل. |
التمرين 11.35أنجز الدالة صحيح_جملة تحول قيمة صحيحة من النوع صحيح إلى متسلسلة حام(عكس التمرين 11.33). (استعمل الدالة عكس_جملة المعرفة أعلاه للمساعدة). |
التمرين 11.36أنجز الدالة حقيقي_جملة تحول قيمة صحيحة من النوع حقيقي إلى متسلسلة حام(عكس التمرين 11.34). يتوقف التحويل عند الرقم الرابع بعد الفاصلة.طريقة : اضرب ن في 104 واستعمل الدالة صحيح_جملة. |
المصفوفات
التمرين 11.37
ملاحظة 2: قم باختيار أنواع المتغيرات المناسبة. |
التمرين 11.38أنجز الدالة كتابة_مصفوفة ذات 4 مداخيل أو معايير ص و س و ش و أقصى_ش التي تقوم بإعطاء عناصر المصفوفة ص. |
التمرين 11.39أنجز الدالة جمع_مصفوفة ذات النوع صحيح التي تمكن من حساب عناصر مصفوفة ص.(قم باختيار أنواع المتغيرات المناسبة). |
التمرين 11.40أنجز الدالة جمع_مصفوفتين التي تمكن من حساب مصفوفتين ص و ض. ص= ص+ ض |
التمرين 11.41أنجز الدالة ضرب_مصفوفة التي تمكن من ضرب عدد ع في مصفوفة ص. ص= ع×ص |
التمرين 11.42أنجز الدالة مقلوب_مصفوفة ذات 5 مداخيل أو معايير ص و س و ش و أقصى_س و أقصى_ش التي تقوم بحساب مقلوب المصفوفة ص باستعمال الدالة تبديل. نتيجة الدالة مقلوب_مصفوفة هي متغير منطقي الذي يرمز إذا ما كان رتبتي المصفوفة يساويان رتبتي المصفوفة المقلوبة (عدد الأسطر وعدد الأعمدة). أنجز مشروعا يقوم باختبار هذه الدالة. |
التمرين 11.43
أنجز الدالة ضرب_مصفوفتين التي تمكن من ضرب المصفوفة ص ذات الرتبتين س وش في المصفوفة ض ذات الرتبتين ش و ط. وتكون النتيجة في مصفوفة ثالثة ذات الرتبتين س و ط. (قم باختيار أنواع المتغيرات المناسبة). ص= ص×ض أنجز مشروعا يقوم باختبار هذه الدالة. |
مشاريع
حساب النسبة الدائرية π
!! الطريقة الأولى: بي = 4 × { مجموع[(-1^ي)÷(2×ي+1)] من ي=0 إلى ن } |
!! الطريقة الثانية: بي = جذر { مجموع[6÷(ي^2)] من ي=1 إلى ن} |
تشفير النصوص
أدرج "حروف" |
ويبين الشكل التالي مثالاً على تنفيذ هذا البرنامج. |
![]() |