فوائد استخدام الدوال في البرمجة
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) .يتبع...
شكراً جزيلاً
ردحذفما الفرق بين التصريح عن الدالة مع كتابة تعليماتها مباشرة أو التصريح المبدئي عن الدالة أولا ثم كتابة جسم الدالة في مرحلة أخرى ؟
ردحذفوشكرا
thanku
ردحذفهل يلزم دائما كتابة the function definition
ردحذفint square(int y)
{
return y*y;
}
بعد ال ()main
ماهو المطلوب من الصيغه التاليه function, for,do while and 1D matrix ارجو الرد بسرعه
ردحذفداله فيها متغيرات والشرط بيه أرقام
ردحذفأكتب برنامج يقوم بتمثيل بيانات الكتاب كسجل في مكتبة تحتوي على عدد n من الكتب. علما أن بيانات الكتاب
ردحذفكالتالي:
رقم الكتاب – عنوان الكتاب – اسماء المؤلفين – رقم الطبعة – سنة النشر.
حيث يقوم البرنامج بـــــ :
- تعريف دالة تقوم بإدخال بيانات الكتب.
- تعريف دالة تقوم بطباعة وعرض بيانات جميع الكتب بالمكتبة
- تعريف دالة تقوم بالبحث عن الكتاب بناء على اسم المؤلف، وفي حال وجوده تقوم بطباعة عنوان
الكتاب.
ملاحظة:
على الرغم أنه قد يكون للكتاب أكثر من مؤلف، ولكن اعتبر في هذا البرنامج أن يكون للكتاب مؤلف واحد فقط