الفصل الرابع
الدوال :
لن اثقل عليك بان اتحدث عن الدوال بشكل موسع بل سأكتفي بالمبادء لان هذه الدوره موجهه فقط الي المبتدئين
تكلمنا في ماسبق عن اشياء كثيره , يمكنك من خلالها انت تقوم بكتابة برامج صغيره ,يمكنك اداء وظائف صغيره من خلالها
ولكن البرمجه لا تتوقف عند هذا الحد , ﻻ يوجد مبرمج يبتدي من الصفر ! المبرمجين يعتمدون علي اشياء اخري تم تصميمها من قبل مبرمجين اخرين سبقوهم , مثلا عندما تقوم بطباعة سلسله نصيه الي الconsol الخاص بيك , وقتها انت لاتقوم باختراع داله جديده لكي تقوم بهذا العمل , لانها موجوده بالفعل ويمكنك استخدامها , هذه هي ميزة الدوال , يمكنك البناء علي ماقمت بفعله بالفعل او مافعله الاخرون . ويمكنك تقسيم البرنامج لعدة وظائفة قابلة للاستخدام في برامج اخري وقابلة للتعديل بشكل منفرد لايؤثر علي الوظائف الاخري , وهذا هو مفهوم الداله .
لنبدأ في التصميم ودعنا من الكلام الانشائي .
الان نحن نريد برنامج صغير نعطيه عددان ويعطينا مضروبهم .
لكي تبدا عليك اولا ان تعرف كيف تقوم بالاعلان عن داله ثم تقوم بالتعريف عنها , لاحظ ان المفهومين مختلفين تماما
حيث ان الاعلان عن داله يعطيها فقط قيمة الارجاع الخاصه بيها , ويعطيها عدد المتغيرات وانواعها المطلوبه للداله , اما التعريف فيحتوي علي الاعلان ويحتوي ايضا علي الكود الخاص بالقيام بالوظيفه الخاصه بالداله
يمكنك ان تدمج تعريف الداله والاعلان عنها في مكان واحد ولكني لا افضل ذلك
الاعلان عن داله بتم
[/rt]
return_type function_name(function_arguments_list);
[code]
[rtl]
وتعريفها يتضمن الاعلان بالشكل السابق + القوسين {} ومابينهما يحتوي علي كود الداله
والان لتصميم الداله , عليك ان تعرف ان لكل داله قيمة ارجاع , واذا لم يكن لها قيمة ارجاع فنقوم بالاعلان عن الدله بقيمة الارجاع void اي لا تقوم بارجاع شيء
ولكن في دالتنا نحن نريد ان نحصل علي قيمة ارجاع عدديه صحيحه int
ونحن نريد ايضا استقبال متغييرن اثنين نوعمها عددي صحيح int
فنقوم بالاعلان عن الداله كالاتي
[/rtl]
[code]
int multiply(int x , int y);
ثم نقوم بتعريفها بعد دالة main() يمكنك ان تقوم بادراج التعريف والاعلان قبل دالة main() بشكل كامل
#include <stdio.h>
int multiply(int x , int y);
int main(void)
{
int x = 10;
int y = 2;
int result = multiply(x,y);
printf("%d\n",result);
return 0;
}
int multiply(int x , int y)
{
int a = x * y;
return a;
}
ماحدث هو الاتي , قمنا بالاعلان عن الدله , وحينما استخدمنا الداله بداخل main قامت main باستدعاء ال code الخاص بالداله
وهو تعريف متغير اسمه a ووضع ناتج ضرب x , y بداخله ثم ارجاع قيمة a وهذه هو ماحدث بالتحديد
دعنا نقوم بعدة تمراين الان
#include <stdio.h>
double multiply(double x , double y);
int main(void)
{
double x = 10.25;
double y = 2.66;
double result = multiply(x,y);
printf("%lf\n",result);
return 0;
}
double multiply(double x , double y)
{
double a = x * y;
return a;
}
الفرق بينها وبين الداله السابقه هو انها تقوم بارجاع قيمة عدديه غير صحيحه اي تحتوي علي كسور , وواضح الفرق بينها وبين الدله السابقه في الكود وهو لاشيء الا اعادة تغير انواع المتغيرات
لاحظ معي ان المتغيرات المعرفه بداخل الداله والمعرفه في سلسلة المتغيرات التي تقبلها الداله لا علاقه لها باي متغيرات داخل main او داخل اي داله اخري او خارج اي دالة اخري وهذا مايعرف بال scope
ال scope هو مجال المتغيرات , ومجال المتغيرات بداخل الدوال هو كل مايبتدي من اول { الي اخر } للداله
اي ان المتغير a بداخل الداله multiply مجاله هو الداله multiply وليس له اي علاقه باالمتغير a بداخل الدله main في المثال الاتي
#include <stdio.h>
void dummy(int x)
{
int a = 5;
}
int main(void)
{
int a = 10;
return 0;
}
قما سبق وان اخبرتكم بادماج التعريف مع الاعلان قبل الداله main
, وهذه هي نهاية هذا الفصل , حيث ان الكلام عن الدول والمجالات ومحددات المساحات وانواع المتغيرات سوف يطول الكلام عنه وهذا ليس في سياق دورة موجهة الي المبتدئين
اما انت فعليك واجب بسيط
قم بكتابة داله تقوم باخذ حرف وتقوم بارجاع ال leet code الخاص بيه

راجع الدروس السابقه وفتح مخك وانت تعرف اذاي
سلام