فوائد استخدام الدوال في البرمجة
1- تساعد الدوال المخزنة في ذاكرة الحاسب على اختصار البرنامج إذ يكتفي باستدعائها باسمها فقط لتقوم بالعمل المطلوب .
2- تساعد البرامج المخزنة في ذاكرة الحاسب أو التي يكتبها المستخدم على تلافى عمليات التكرار في خطوات البرنامج التي تتطلب عملاً مشابهاً لعمل تلك الدوال.
3- تساعد الدوال الجاهزة في تسهيل عملية البرمجة.
4-يوفر استعمال الدوال من المساحات المستخدمة في الذاكرة.
5-كتابة برنامج الـ ++C في شكل دوال واضحة المعالم يجعل البرنامج واضحاً لكل من المبرمج والقارئ على حد سواء.
مكتبة
الدوال الرياضية
( Math Library Functions)
تحتوى مكتبة
الدوال الرياضية على العديد من الدوال التي تستخدم في تنفيذ العمليات الرياضية
الحسابية. فمثلاً المبرمج الذي يرغب في حساب وطباعة الجذر التربيعي للعدد 900 قد يكتب عبارة كالتالية:
cout << sqrt ( 900);
عند تنفيذ هذه العبارة يتم استدعاء الدالة المكتبية sqrt لحساب الجذر التربيعي للعدد بين القوسين (900). يسمى العدد بين القوسين وسيطة الدالة argument وعليه فالعبارة السابقة تقوم بطباعة العدد 30 ، تأخذ الدالة sqrt وسيطة من النوع double وتكون النتيجة قيمة من نفس النوع وينطبق هذا على جميع الدوال الرياضية.
عند استعمال الدوال الرياضية في أي برنامج بلغة C++ يجب تضمين الملف math.h والذي يحتوى على هذه الدوال.
الجدول التالي يلخص بعض الدوال الرياضية:
الجدول التالي يلخص بعض الدوال الرياضية:
Function
|
Description
|
Example
|
|
sqrt(x)
|
الجذر
التربيعي لـ x
|
sqrt
(9.0) is 3
|
|
exp(x)
|
exp(1.0) is 2.718282
|
ex
|
|
fabs(x)
|
القيمة
المطلقة لـ x
|
if
x > 0 fabs(x) = x
= 0
fabs(x) = 0
< 0
fabs(x) = -x
|
|
ceil(x)
|
تقرب x لأصغر
عدد صحيح أكبر من x
|
ceil(9.2)
is 10.0
ceil(-9.8)
is 9.0
|
|
floor(x)
|
تقرب x لأكبر
عدد صحيح أصغر من x
|
floor(9.2)
is 9
floor(-9.8)
is –10.0
|
الدوال
المعرفة بواسطة المستخدم
Programmer-defined
Functions
أغلب الدوال تمتلك لائحة من الوسائط (Parameters) والتي هي أيضاً متغيرات محلية.
هنالك عدة أسباب دعت إلى تقسيم البرنامج إلى دالات وتسمى هذه العملية
(Functionalizing a program) وهي:
2- تساعد البرامج المخزنة في ذاكرة الحاسب أو التي يكتبها المستخدم على تلافى عمليات التكرار في خطوات البرنامج التي تتطلب عملاً مشابهاً لعمل تلك الدوال.
3- تساعد الدوال الجاهزة في تسهيل عملية البرمجة.
4- يوفر استعمال الدوال من المساحات المستخدمة في الذاكرة.
5-كتابة برنامج C+ + في شكل دوال واضحة المعالم يجعل البرنامج واضحاً لكل من المبرمج والقارئ على حد سواء.
كل البرامج التي رأيناها حتى الآن تحتوى على الدالة main وهي التي تنادى الدوال المكتبية لتنفيذ مهامها. سنرى الآن كيف يستطيع المبرمج بلغة الـ C++ كتابة دوال خاصة به.
نموذج الدالة
Function
Prototype
فمثلا في تصريح الدالة التالي:-
int anyfunc(int);
يأخذ تعريف الدوال في C++ الشكل العام التالي:
return-value-type function-name
(parameter list)
{
declarations and statements
}
حيث: :return-value-type نوع القيمة المعادة بواسطة الدالة والذي يمكن أن يكون أي نوع من أنواع بيانات C++. وإذا كانت الدالة لا ترجع أي قيمة يكون نوع إعادتها void.
function-name: اسم الدالة والذي يتبع في تسميته قواعد تسمية المعرفات (identefiers).
parameter list: هي لائحة الوسيطات الممرة إلى الدالة وهي يمكن أن تكون خالية (void) أو تحتوى على وسيطة واحدة أو عدة وسائط تفصل بينها فاصلة ويجب ذكر كل وسيطة على حدة.
declarations and statements: تمثل جسم الدالة والذي يطلق عليه في بعض الأحيان block . يمكن أن يحتوى الـ block على إعلانات المتغيرات ولكن تحت أي ظرف لا يمكن أن يتم تعريف دالة داخل جسم دالة أخرى. السطر الأول في تعريف الدالة يدعى المصرح declarator والذي يحدد اسم الدالة ونوع البيانات التي تعيدها الدالة وأسماء وأنواع وسيطاتها.
إستدعاء الدالة
Function Call
يتم استدعاء الدالة (التسبب بتنفيذها من جزء آخر من البرنامج، العبارة التي تفعل ذلك هي استدعاء الدالة) يؤدى استدعاء الدالة إلي انتقال التنفيذ إلي بداية الدالة. يمكن تمرير بعض الوسيطات إلى الدالة عند استدعائها وبعد تنفيذ الدالة يعود التنفيذ للعبارة التي تلي استدعاء الدالة.قيم الإعادة
Returned Values
هنالك ثلاث طرق يمكن بها إرجاع التحكم إلى النقطة التي تم فيها استدعاء الدالة:
1 - إذا كانت الدالة لا ترجع قيمة يرجع التحكم تلقائياً عند الوصول إلى نهاية الدالة
2 - باستخدام العبارة return;
3 - إذا كانت الدالة ترجع قيمة فالعبارة return expression; تقوم بإرجاع قيمة التعبير expression إلى النقطة التي استدعتها .
خذ برنامجاً يستخدم دالة تدعى square لحساب مربعات الأعداد من 1 إلى 10.
مثال:
//Program :
#include<iostream.h>
int
square(int);//function prototype
main()
{
for(int
x=1;x<=10;x++)
cout<<square(x)<<"
";
cout<<endl;
}
//now
function definition
int
square(int y)
{
return y*y;
}
الخرج
من البرنامج يكون كالآتي:
|
1 4
9 16 25
36 49 64
81 100
|
تعريف الدالة square( ) يدل على أنها تتوقع وسيطة من النوع int . و int التي تسبق اسم الدالة تدل على أن القيمة المعادة من الدالة square هي من النوع int أيضاً . العبارة return تقوم بإرجاع ناتج الدالة إلى الدالة main.
السطر:
int square (int)
هو نموذج أو تصريح الدالة (function prototype) .يتبع...