close

القائمة الرئيسية

الصفحات

أخبار الرياضة

الدوال في سي بلس بلس | C++ Functions

مفهوم الدوال في ++C


الدالة ( Function ) هي دالة تقوم بعملية او مجموعة عمليات سواء إدخال او إخراج او عمليات حسابية او عمليات منطقية.
مفهوم الدوال في ++C
الدوال في سي بلس بلس | C++ Functions

في هذا الدرس سنتعلم كيفية إنشاء دوال جديدة و كيفية استخدامها.

بناء الدوال في++C

يوجد نوعين من الدوال في ++C دوال جاهزة و دوال المبرمج.
الدوال في سي بلس بلس | C++ Functions
الدوال في سي بلس بلس | C++ Functions
دوال جاهزة في C++ وتكون built in ويتم إستدعاء ها مباشرة ولكن يتطلب ملف Header file.
اما الدوال التي يعرفها المبرمج وتكون User-defined.

الشكل العام لتعريف دالة C ++ هو كما يلي.

return_type function_name(parameter list)
{
body of the function
}

  • return_type
  • نوع الإرجاع: يشير إلى نوع القيمة التي ترجعها الدالة بعد التنفيذ. على سبيل المثال ، قد تضيف دالة اثنين من الأعداد الصحيحة وتعيد مجموعها. وبالتالي تقوم بإرجاع رقم. في هذه الحالة ، سيكون نوع الإرجاع للدالة int (عدد صحيح). ليس من الضروري أن ترجع كل دالة قيمة. إذا لم تُرجع الدالة قيمة ، فأنت تستخدم الكلمة "void" كنوع الإرجاع.
  • function_name
  • اسم الدالة: هو اسم فريد يُستخدم لتعريف دالة يستخدم هذا الاسم لاستدعاء دالة.
  • parameter list
  • معلمات - المعلمة مثل عنصر نائب. عندما يتم استدعاء دالة ، تقوم بتمرير قيمة إلى المعلمة. يشار إلى هذه القيمة كمعلمة أو وسيطة فعلية. تشير قائمة المعلمات إلى نوع معلمات دالة وترتيبها وعددها. المعلمات اختيارية ؛ أي ، قد لا تحتوي دالة على معلمات.
  • body of the function
  • نص الدالة: يحتوي على تعليمات يتم استخدامها لأداء المهمة التي قمت بإنشاء الدالة من أجلها. على سبيل المثال ، يمكنك إنشاء دالة لإضافة رقمين صحيحين. يتضمن نص الدالة مجموعة من التعليمات لإضافة هذين الرقمين. قد يتضمن إعلانات متغيرة ، وبيانات التخصيص ، وبيان cout ، وما إلى ذلك.

أمثلة حول تعريف دوال جديدة في C++

في المثال التالي، نوعان من أنواع function في C++ دالة بدون وسيطة ولا قيمة إرجاع. بدلآ من كتابة الكود لعرض النص في main () ، أنشأنا دالة منفصلة تسمى displaytext () وكتبنا الكود في هذه الدالة. في main () تم استدعاء الدالة .


#include 
void displaytext()
{
 cout<<”This is my first function\n";    //Function body
}
void main()
{
displaytext();    //function call
}



displaytext();

تُعرف العبارة أعلاه باسم استدعاء دالة. يتضمن اسم الدالة متبوعًا بفاصلة منقوطة. يطلق عليه دالة بدون وسيطة ولا قيمة إرجاع. عندما يأتي المترجم عبر هذا البيان فإنه ينقل التحكم إلى العبارة الأولى للدالة displaytext () . في البرنامج أعلاه الرئيسية هي دالة "الدعوة" و المعروض () هو 'استدعاء دالة'.

مثال
هنا قمنا بتعرف الدالة()addnum هذه الدالة تقوم بستقبال عددين كمدخلات بعد ذالك تقوم بعملية جمع العددين.

void addnum(int x, int y)
{
int total;
total=x+y;
cout<< “ The sum is << total;
}


في السطر الأول ، توجد دالة بالاسم addnum () تأخذ رقمين كاملين كمعلمات لها. يتم تخزين هذه المعلمات في متغيرين x و y. تستخدم المتغيرات لتخزين المعلمات لأن الرقمين اللذين تريد إضافتهما غير معروفين.

في السطر الثاني ، نعلن عن مجموع متغير صحيح . يستخدم هذا المتغير لتخزين مجموع الرقمين.

بعد ذلك ، نقوم بتعيين إجمالي قيمة المتغير . القيمة المعينة هي مجموع الرقمين اللذين تريد إضافتهما.

العبارة الأخيرة عبارة cout تعرض مجموع الرقمين على الشاشة.

الآن ، عند استدعاء الدالة addnum من main () ، يمكنك تحديد الأرقام الفعلية في استدعاء الدالة على النحو التالي:

void main()
{
addnum(44,79);
}

يتم تخزين القيمة 44 في المتغير( x (x = 44 ويتم تخزين القيمة 79 في المتغير( y (y = 79.

التمثيل البياني كما يلي:
الدوال في سي بلس بلس | C++ Functions
أمثلة حول تعريف دوال جديدة في C++

امثلة حول استدعاء دوال C ++

في لغة البرمجة C ++ ، يمكنك استدعاء الدوال بالطرق التالية:

  1. اتصل بالقيمة
  2. اتصل حسب المرجع

1. اتصل بالقيمة
في الاستدعاء بالقيمة ، يتم عمل نسخة من المتغير وتمريرها إلى دالة كمعلمة لها. لا تؤثر التغييرات التي يتم إجراؤها على هذه المعلمات في الدوال على المتغيرات في "دالة الاستدعاء".

في المثال التالي ، نقوم بزيادة قيمة الرقم المتغير بمقدار 1.


void Test(int Number)
{
cout<< Number;
Number++;
cout<< Number;
}
void main()
{
int NewNumber=1;
Test(NewNumber);
cout<< NewNumber;
}


ناتج البرنامج: 1 2 1.

في main () ، نقوم بتهيئة المتغير NewNumber إلى 1. بعد ذلك ، نسمي الدالة Test وتمرير NewNumber كمعلمة. يتم نقل عنصر التحكم الآن إلى اختبار الوظيفة. يتم إنشاء نسخة من المتغير NewNumber ؛ الآن ، هناك متغيرين في الذاكرة NewNumber و Number بالقيمة 1. هناك عبارة cout تعرض قيمة الرقم قبل زيادته. في العبارة التالية ، يتم زيادة الرقم المتغير بمقدار 1 ، ويعرض بيان cout التالي القيمة المتزايدة.

الآن ، يتم نقل عنصر التحكم إلى main (). لم يعد الرقم المتغير موجودًا في الذاكرة. ومن ثم ، يعرض بيان cout قيمة المتغير NewNumber ، الذي لا يزال 1.

2.  اتصل حسب المرجع
في اتصل بالقيمة ، يتم تمرير عنوان المتغير في الذاكرة إلى function المسمى كمعلمة. ستنعكس التغييرات التي يتم إجراؤها على المتغير في الدوال المطلوبة في دوال الاستدعاء. وذلك لأن التغييرات يتم إجراؤها على المتغير الفعلي وليس نسخته.

في المثال التالي ، يتم تمرير عنوان المتغير NewNumber كمعلمة لدالة الاختبار. لم يتم إنشاء نسخة من المتغير NewNumber. يشير NewNumber و Number إلى نفس الموقع في الذاكرة. وبالتالي ، تنعكس التغييرات التي أدخلت على المتغير في اختبار الدالة في main ().


void Test(int &Number)
{
cout<< Number;
Number++;
cout<< Number;
}
void main()
{
int NewNumber=1;
Test(NewNumber);
cout<< NewNumber;
}

ناتج البرنامج: 1 2 2

امثلة حول الدوال العودية في++C

الدالة العودية هي دالة تستدعي نفسها. يحتوي تعريف الدالة على استدعاء دالة لنفس الدالة.

مثال الدالة العودية كما يلي:


void display()
{
cout<< “Recursive Function\n”;
}

في المثال أعلاه ، يمكنك استدعاء عرض الدالة ضمن تعريف وظيفتها. وبالتالي ، العرض هو دالة عودية. ومع ذلك ، فإن المثال أعلاه ليس الطريقة الصحيحة لاستخدام الدوال العودية. سيتسبب البرنامج في تعطل جهاز الكمبيوتر الخاص بك. هذا لأنه لا توجد نقطة نهاية. تستمر دالة العرض في استدعاء نفسها إلى أجل غير مسمى وسوف يتعطل جهاز الكمبيوتر الخاص بك.

نقاط رئيسية يجب تذكرها

أثناء استخدام الدوال العودية في++C ، من المهم معرفة مكان تطبيق العودية. يمكنك استخدام العودية عندما يمكنك تقسيم مشكلة أكبر إلى مشاكل أصغر من نفس النموذج. الفكرة هي أن تتلاقى إلى حل عن طريق كسر مشكلة.

الشيء التالي الذي يجب معرفته هو نقطة النهاية ، أي متى يجب أن تتوقف الدالة عن استدعاء نفسها. لهذا تحتاج إلى تحديد الشرط الذي يجب تلبيته. يعمل هذا الشرط كنقطة نهاية لاستدعاء نفس الدالة بشكل متكرر. تُعرف هذه الحالة باسم Case Base .

في الحساب 4! = 4 * 3 * 2 * 1 أو يمكنك أن تقول 4! = 4 * 3! وبالمثل ،


3! = 3 * 2 * 1 أو 3! = 3 * 2!

2! = 2 * 1 أو 2! = 2 * 1

1! = 1 * 0!

 وبالتالي ، فإن الصيغة لحساب عاملي هي كما يلي:
   ( n! = n * (n-1 ، حيث n> = 1

ملاحظة: 0! = 1 (0! دائمًا 1 ، وفقًا للقاعدة).

يمكننا استخدام الدوال العودية لحساب مضروب أي عدد صحيح. دعونا نكتب برنامج C ++ كامل لحساب 4 عاملي (4!):

int factfind(int x)
{
if (x==1)
{
 return 1;
else
return x* factfind(x-1);
}
}
void main()
{
cout<<  ” The value of 4 factorial is";
return factfind(4);
}

مخرجات البرنامج أعلاه 24 في المثال اعلاه ، تقوم الدالة بتمرير الرقم الذي تريد إيجاد العامل له كمعلمة. يتم تخزين هذا الرقم في المتغير x.

لنفترض أننا نريد أن نجد مضروب 4. وهكذا ، س = 4
يستدعي الدالة factfind () مرة أخرى مع القيمة (x-1). في هذه الحالة ، 3 (4-1 = 3) ؛ حقائق (3).

لكن المترجم لا يعرف قيمة 3 !. لذلك يعود عنصر التحكم إلى الخطوة 1. هذه المرة يتم تمرير دالة الحقائق المعلمة 3 وتتكرر الخطوات 1 و 2 حتى قيمةx = 1  . عندما تكون قيمة x = 1 ، فإن الدالة ترجع 1.

الآن أصبحت دالة factfind () قادرة على حساب قيمة 2 !. بمجرد أن يعرف قيمة 2! ، فإنه يحسب قيمة 3! وأخيرا قيمة 4!. 

تعليقات

3 تعليقات
إرسال تعليق

إرسال تعليق