recent
أخبار ساخنة

الدوال التي تقوم بإعادة قيمة في لغة السي C الدرس|15|

الصفحة الرئيسية


الدوال التي تُعيد قيمة

في الدروس السابقة تحدثنا عن الدوال Function التي لا تقوم بإرجاع قيم و سوف نتعرف في هذا الدرس ما هو المقصود بإرجاع قيم, تخيّلنا أن الدالة main هي المدير Manager و الدالة الأٌخرى هي الموظف Client و الدالة main هي التي تقوم بإستدعاء الدالة الأٌخرى و كل دالة تقوم بإستدعاء الدالة الأخرى تكون هي من يطلٌب الطلب.

لنتخيل ما يلي, أن أب يستدعي الإبن للذهاب إلى السوق و الأب هو main و الإبن هو دالة اُخرى تقوم بالذهاب إلى السوق فإذا استدعى الأب إبنه و قال إذهب إلى السوق فهو لم يقٌم بإعطاءه أي مٌعطيات أو مُعاملات و لم يطلُب منه إرجاع أي شيئ و هذا هو اول نوع من الدوال "حيث لا يوجد مُعطيات و لا يتطلّب أي مُرجعات", فإذا قال الأب للإبن إذهب إلى السوق و خُذ دينار فهو قام بتمرير مٌتغير و هو الدينار لكن لا يزال لم يطلُب من الإبن بإرجاع أي شيئ و هذا النوع الثاني من الدوال "حيث توجد مُعطيات و هي المال و لا يتطلب أي مُرجعات", أما إذا قال إذهب إلى السوق و خُذ دينار و آتني ببطاطا فإن الأب يطلُب من الإبن أن يأخذ الدينار و يقوم بالذهاب إلى السوق ثم يرجع للأب مع البطاطا أي أنه أرجَع له قيمة و هذا النوع الثالث من الدوال, و قد يقول الأب إذهب إلى السوق و آتني ببطاطا و لم يُعطِه أي شيئ فمعنى هذا أن الإبن يجب أن يتصرَّف أن يأخذ مال من أي مكان آخر و يذهَب إلى السوق.

 

تلخيص ما ذكرناه مسبقاً

1-النوع الأول: بدون مُعطيات أو مرجعات.

2-النوع الثاني: مع معطيات و بدون مُرجعات.

3-النوع الثالث: مع مٌعطيات و مع مٌرجعات.

4-النوع الرابع: بدون مٌعطيات و مع مٌرجعات.


النوع الأول بدون معطيات او مرجعات

#include <stdio.h>
#include <stdlib.h>
void potato()
{
printf("potato \n");
}
int main(int argc, char** argv) {
potato();
return 0;
}

 

شرح المثال السابق 1

لقد قُمنا بإنشاء دالة من نوع void و إسمها potato و كانت هذه الدالة مُهمتها طباعة كلمة بطاطا potato فقط ثم تقوم بالنزول سطراً جديداً و ثم قُمنا بالدخول إلى الدالة main و قُمنا بإستدعاء هذه الدالة عبر كتابة إسمها فقط potato(), و عند تشغيل الكود السابق سوف نحصل على النتيجة

 
نلاحظ بأن هذا النوع لم نقوم بإعطاءه أية معطيات و لم نقم بالطلب منه إرجاع أي شيئ


النوع الثاني مع معطيات و بدون مرجعات

#include <stdio.h>
#include <stdlib.h>
void potato()
{
printf("potato \n");
}
void printNumberPotato(int number)
{
for(int i = 0; i < number; i++)
printf("potato \n");
}
int main(int argc, char** argv) {
potato();
printNumberPotato(4);
return 0;


شرح المثال السابق 2

انشأنا دالة void تقوم بطلب معطيات عددية int و إسم هذه الدالة هو printNumberPotato ثم دخلنا لحلقة for loop و قُلنا i تساوي 0 و i اصغر من المُتغير number و تقوم بزيادة 1 في كل دورة و يقوم في كل دورة بطباعة كلمة potato و ينزل سطراً جديداً, و دخلنا للدالة main لتشغيلها عبر إستدعائها بإسمها printNumberPotato و مررنا لها القيمة 4 لأنه في الأعلى وضعنا أنه يلزَم تمرير قيمة و عند تشغيل هذا البرنامج سوف يطبَع لنا كلمة potato خمس مرات و عند تشغيله سنجد نتيجته

 
هذا هو النوع الثاني بحيث أنه من نوع void مع قيمة مُدخلة

النوع الثالث معطيات و مع مرجعات

#include <stdio.h>
#include <stdlib.h>
void potato()
{
printf("potato \n");
}
void printNumberPotato(int number)
{
for(int i = 0; i < number;
printf("potato \n");
}
int power(int number)
{
return number * number;
}
int main(int argc, char** argv) {

int result = power(4);
printf("%d", result);
return 0;
}

شرح المثال السابق 3

أنشأنا دالة إسمها power يعني التربيع من اجل إرجاع قيمة مربعة و طلبنا أن القيمة الممررة هي عددية number و تقوم هذه الدالة بطباعة إرجاع قيمة القيمة الممررة مضروبة بنفسها number*number أي إرجاع القيمة المربعة لهذا المعامل, و في الدالة main وضعنا متغير عددي result يقوم بإستقبال القيمة المُرجعة من الدالة power و ضربِها بنفس القيمة ثم طَلَبنا طِباعة القيمة المُرجعه فعلى سبيل المثال مرَّرنا له القيمة 6 سوف تقوم بضربها في 6 و يكون الناتج 36 لكن في برنامجنا مرّرنا له القيمة 4 و عند التشغيل نحصل على النتيجة


كما نلاحظ لقد طبع لنا الرقم 16 لأن القيمة كان 4 و ضربها في نفسها.


النوع الرابع بدون معطيات و مع مرجعات

#include <stdio.h>
#include <stdlib.h>
int power(int number)
{
return number * number;
}
void power2(int number)
{
printf("%d", number * number);
}
int main(int argc, char** argv) {
power2(6);
return 0;


شرح المثال السابق 4

قمنا بنسخ الدالة power في المثال السابق و أسميناها power2 و تقوم بطباعة قيمة عددية و هي number*number و قمنا في البرنامج الرئيسي بإستدعائها بإسمها و تمرير الرقم 6 لها و عند تشغيل البرنامج ستكون النتيجة


الدالة ذات القيمة المُرجعة يجب إستقبال قيمتها من الدالة التي قامت بإستدعائها و هي الدالة main و يجب تعريفها حسب نوع القيمة المُراد إرجاعها و يمكننا تعريف الدوال بأي نوع من انواع البيانات التي تعلمناها مسبقاً مثل (int, float, doubel, boolean) و غيرها, لكن لا يجب ابداً نسيان وضع return في نهاية تعريف كل دالة تقوم بإرجاع قيمة.

إضغط هنا للرجوع للدرس السابق

google-playkhamsatmostaqltradent