:¦- (9) تعلّم لغة الـ:C من الصفر -¦: الدوال -¦: تم التجديد 29/06/2015
آخر
الصفحة
EdyBel

  • المشاركات: 46565
    نقاط التميز: 15853
عضوة أساسية
EdyBel

عضوة أساسية
المشاركات: 46565
نقاط التميز: 15853
معدل المشاركات يوميا: 7.4
الأيام منذ الإنضمام: 6278
  • 16:19 - 2011/05/19
 الدوال
Les fonctions
 
ننتهي من الجزء الأول من الدروس ( المبادئ ) بهذا الدرس المهم الذي يتكلّم عن الدوال في لغة السي. كل البرامج في لغة السي ترتكز على المبدئ الذي سأشرحه في هذا الدرس.
سوف نتعلم هيكلة برامجنا وتقسيمها لعدة أجزاء... تقريباً كما لو كنّا نلعب لعبة الليغو Lego.
 
 البرامج الكبيرة في لغة السي ماهي إلا تجميعات لأجزاء صغيرة من الشفرات المصدرية، و هذه الأجزاء هي بالضبط ما نسمّيه ... بالدوال. 
 
إنشاء و استدعاء دالة :
رأينا في الدروس السابقة بأن برامج السي تبدؤ بدالة رئيسية تدعى main . ( لقد أعطيتك حتى مخطط تلخيصي لتذكيركم ببعض الكلمات المفتاحية، أنظر المخطط الموالي )
 
 

  

 

في الأعلى، نجد توجيهات المعالج القبلي ( اسم معقد سأرجع لشرحه في وقت لاحق ). من السهل التعرّف على هذه التوجيهات " هي تبدؤ بإشارة # و هي غالباً توضع في أعلى الملف المصدري.

لقد قلت لك بأن البرنامج في لغة السي يبدأ بالدالة main. أؤكد لك، هذا صحيح! إلا أنه هنا لقد بقينا داخل الدالة main و لو نخرج أبداً منها. أعد قراءة الشفرات المصدرية في الدروس السابقة و سترى : لقد بقينا دائما داخل الحاضنتين الخاصتين بالدالة الرئيسية.

 

هل من السيء فعل ذلك؟

لا، هذا ليس سيء. لكن ليس هذا ما يفعله المبرمجون بلغة السي حقيقة. بل و إن كل البرامج تقريباً لا تكتفي بالعمل على الدالة الرئيسيةة فقط، لحدّ الآن كانت البرامج التي نكتبها صغيرة و لهذا فهي لم تطرح أي مشكل. لكن تخيّل معي برامج ضخمة تحتوي على آلاف الأسطر من الشفرة المصدرية! لو كانت كلّ الأسطر مكتوبة داخل حاضنتي الدالة الرئيسية لأصبحنا في سوق الماشية.

الدالة تقوم بتنفيذ تعليمات و تقوم بإرجاع نتيجة. هي عبارة عن قطعة من الشفرة المصدرية تعمل على القيام بمهمة معينة. نقول بأن الدالة تملك قيمة الإدخال و قيمة الإخراج. المخطط التالي يمثل المبدئ الذي تعمل عليه الدالة:

  

 

حينما نقوم باستدعاء دالة، نمرّ بثلاثة مراحل:

  1. المدخل input: نقوم بإدخال المعلومات إلى الدالة ( بإعطائها معلومات تعمل عليها )
  2. الحسابات: تقوم الدالة بعمل حسابات على المعلومات التي تم ادخالها
  3. الاخراج : بعد أن تنتهي الدالة من الحسابات تعطينا النتيجة على شكل قيمة الإخراج أو الارجاع

يمكن أن نتصوّر دالة تسمى triple تضرب العدد في 3 ( المخطط الموالي ). بالطبع الدوال في الغالب هي أكثر تعقيداً من هذا : 

 

 

هدف الدوال إذا هو تبسيط الشفرة المصدرية، لكي لا نظطر إلى إعادة كتابة نفس الشفرة المصدرية عدّة مرات على التوالي.

أحلم قليلاً: لاحقاً، سننشئ مثلا دالة اسمها showWindow تقوم بفتح نافذة في الشاشة. ما إن نكتب الدالة ( المرحلة الأصعب )، لن يتبقّ لنا سوى القول ( أيتها الدالة showWindow، أظهري لي النافذة! ). يمكننا أيضاً كتابة دالة moveCharacter التي تهدف إلى تحريك شخصية ما في اللعبة ... الخ.

 
مخطط دالة :
 
لقد تكوّنت لديك فكرة على الطريقة التي تعمل بها الدالة الرئيسية main. و مع ذلك يجب أن أريك كيف نقوم بإنشاء دالة. الشفرة المصدرية التالية تمثّل دالة تخطيطياً. هذا مثال للحفظ :
 
type functName(parameters)
{
    // We write the instructions here
}
 
أنت تعرف شكل الدالة الرئيسية. إليك ما عليك فهمه بخصوص المخطط : 
 
  • type ( نمط قيمة الإخراج ) : هو نمط الدالة. مثل المتغيرات، للدوال أنماطها الخاصة. هذا النمط يعتمد على القيمة التي ترجعها الدالة. إذا ترجع الدالة رقماً عشرياً، فسنضع بالتأكيد الكلمة المفتاحية double، لو ترجع رقماً طبيعياً، سنضع النمط int أو long مثلا. و لكن يمكن أيضاً إنشاء دوال لا ترجع أي شيء!

هناك إذا نوعان من الدوال :

  1.  دوال ترجع قيمة : تعطيها أنماط نعرفها كـint أو char أو double ... الخ
  2. دوال لا ترجع أية قيمة : نعطيها نمط خاص void و الذي يعني ( الفراغ ).
  • functName : هو اسم الدالة. يمكنك أن تسمي الدالة مثلما تريد لطالما تحترم القواعد التي تتبعها في تسمية المتغيرات ( لا للأحرف التي تحتوي على accents، لا فراغات ...الخ ).
  • parameters ( هي قيم الإدخال ) : داخل قوسين، يمكنك أن تبعث خصائص للدالة. هي القيم التي ستعمل بها الدالة.

يمكنك أن تبعث القدر الذي تريد من الخصائص. كما يمكنك ألا تبعث أية خاصية، و لكن نادراً ما يحصل هذا.
مثلاً، بالنسبة للدالة triple، أنت تبعث رقماً كخاصية. الدالة ( تسترجع ) الرقم و تضربه في الرقم 3. تقوم بعد ذلك بإرجاع النتيجة.
بعد ذلك، نجد الحاضنة التي تشير إلى بداية الدالة. داخل الحاضنتين، تضع التعليمات التي تريدها. بالنسبة للدالة triple، يجب أن تكتب التعليمات التي توافق ضرب قيمة الإدخال في الرقم 3 .

الدالة إذا هي عبارة عن آلية تتلقّى قيم إدخال ( الخصائص ) و ترجع قيمة إخراج .

  انشاء أول دالة :

فلنرى مثال تطبيقي دون التأخير أكثر : الدالة الشهيرة triple التي حدثتك عنها منذ قليل. فلنقل أن هذه الدالة تتلقّ عدداً طبيعياً من نمط int و أنها تُرجع عدداً طبيعياً أيضاً من نمط int. هذه الدالة تضرب العدد الذي نعطيه لها في 3.
 

int triple (int number)
{
   int result=0;
    result=number*3; // We multiply the input number by 3
   return result; We return the result as an output value 
}

 

هاهي أول دالة لك! شيء مهمّ للغاية: كما ترون، الدالة من نمط int. فهي مجبرة أن ترجع قيمة من نمط int. داخل القوسين، نجد المتغيرات التي تتلقّاها الدالة، الدالة triple تتلقّى متغيرة من نمط int تسمى number. السطر الذي يشير إلى أن الدالة تقوم بإرجاع قيمة هو السطر الذي يحتوي على الكلمة المفتاحية return. هذا السطر يوجد في العادة في نهاية الدالة. 

return result; 

 

هذه الشفرة المصدرية تعني للدالة : توقّفي و أرجعي العدد result. يجب أن تكون هذه المتغيرة result من نمط int، لأن الدالة تقوم بإرجاع قيمة من نمط int كما قلت في الأعلى.
صرّحت ( أنشأت ) عن المتغيرة result في الدالة triple. هذا يعني أنها لا تستخدم إلا داخل هذه الدالة و ليس داخل أخرى كالـدالة الرئيسية main مثلا. أي أنها متغيرة خاصة بالدالة triple.

لكن هل هي الطريقة الأقصر لكتابة الدالة triple؟ لا، يمكننا كتابة محتوى الدالة في سطر واحد كالتالي :

 

int triple(int number)
{
      
return number*3; 
}

 
هذه الدالة تقوم بنفس المهمة التي تقوم بها الدالة السابقة، هي فقط أسرع من ناحية كتبتها. عموماً، الدوال التي تكتبها تحتوي الكثير من المتغيرات من أجل إجراء الحسابات عليها، نادرة هي الدوال القصيرة مثل triple.
 
الكثير من الخصائص، إنعدام الخصائص :
- الكثير من الخصائص :
 
الدالة triple تحتوي خاصية، لكن من الممكن إنشاء دوال تقبل العديد من الخصائص. مثلا، دالة تجمع عددين a و b :
  
 

int addition(int a,int b)
{
      
return a+b

}

يكفي تفريق الخاصيات بفاصلة كما ترى .
 
- إنعدام الخصائص :
 
بعض الدوال، نادرة أكثر، لا تأخذ أية خاصية كقيمة إدخال. هذه الدوال تقوم بنفس الشيء في غالب الأحيان. في الواقع، إذا لم تكن لديها أرقام تعمل عليها، فمهمة هذه الدوال هي القيام بوظائف معينة، كإظهار رسالة على الشاشة. و أيضاً، سيكون نفس النص الذي تظهره في كلّ مرة لأن الدالة لا تتلقّ أية خاصية كقيمة إدخال قادرة على تغيير محتوى النص.
تخيل دالة hello تقوم بإظهار الرسالة "hello" على الشاشة:

 

void hello()
{
       printf("hello")
}

 
 
لم أضع أي شيء داخل الأقواس لأن الدالة لا تتلقّ أية خاصية. بالإضافة إلى ذلك، استعملت النمط void الذي كلّمتك عنه أعلاه.
بالفعل، كما ترى فالدالة لا تحتاج إلى التعليمة return لأنها لا ترجع أي شيء. الدالة التي لا ترجع أي شيء هي دالة من نمط void.
 
- استدعاء دالة :

سنقوم الآن بتجريب الشفرة المصدرية للتمرّن قليلاً مع ما تعلّمناه. سنستعمل الدالة triple لضرب عدد في 3 .
لحد الآن، أطلب منك كتابة الدالة triple قبل الدالة main. إذا وضعتها بعدها، لن يشتغل البرنامج. سأشرح لك هذا لاحقاً. إليك الشفرة المصدرية التالية :
 

#include <stdio.h>
#include <stdlib.h>

int triple(int nombre)
{
    return 3 * nombre;
}   

int main(int argc, char *argv[])
{
    int inputNumber= 0, tripleNumber= 0;
   
    printf("Enter a number... ");
    scanf("%d", &inputNumber);
    
    tripleNumber= triple(inputNumber);
    printf("The number's triple= %d\n", tripleNumber);
   
    return 0;
}

 
 
يبدأ البرنامج بالدالة الرئيسية كما تعلم. نطلب من المستعمل إدخال رقم. نبعث هذا الرقم كمدخل للدالة triple، ثم نسترجع النتيجة في المتغيرة tripleNumber. أنظر بشكل خاص السطر التالي:
 
 
nombreTriple = triple(nombreEntre);

 

 

داخل القوسين، نبعث المتغيرة كمدخل للدالة triple، إنه الرقم الذي ستعمل به الدالة. هذه الدالة تقوم بإرجاع قيمة، هذه القيمة نسترجعها بالمتغيرة tripleNumber. نطلب إذا من الحاسوب في هذا السطر التالي : ( أطلب من الدالة triple ضرب الرقم inputNumber في 3 و خزن النتيجة في المتغيرة tripleNumber.

نفس الشرح على شكل مخطط :

لازالت لديك صعوبات في فهم المبدء الذي تعمل به الدالة؟ لا تقلق! أنا متأكد أنك ستفهم بالمخططات. هذه الشفرة المصدرية التي تحتوي على تعليقات ستريك في أي ترتيب يتم تنفيذ التعليمات. إبدأ إذا بقراءته بالسطر المرقّم 1 ثم 2 ...الخ ( أعتقد أنك فهمت ) :

 

#include <stdio.h>
#include <stdlib.h>

int triple(int number) // 6
{
    return 3 * number; // 7
}   

int main(int argc, char *argv[]) // 1
{
    int inputNumber= 0, tripleNumber= 0; // 2

    printf("Enter a number... "); // 3
    scanf("%d", &inputNumber); // 4
    
    tripleNumber= triple(inputNumber); // 5
    printf("The triple of this number= %d\n", tripleNumber); // 8
   
    return 0; // 9
}


 


 
إليك ما يحدث سطراً بسطر :
  1. يبدأ البرنامج بالدالة الرئيسية main.
  2. يقرأ التعليمات في الدالة واحدة تلو الأخرى بالترتيب.
  3. يقرأ التعليمة الخاصة بالدالة printf.
  4. يقرأ أيضاً التعليمة الخاصة بالدالة scanf.
  5. يقرأ التعليمة ... آه نحن نستدعي الدالة triple، يجب إذا أن نقفز إلى أول سطر من محتوى هذه الدالة في الأعلى. ثم نقوم باسترجاع خاصية number.
  6. نقوم بالحسابات و ننتهي من الدالة. الكلمة المفتاحية return تعني أن الدالة قد انتهت و تسمح بالإشارة إلى النتيجة التي سترجعها الدالة.
  7. نرجع للدالة الرئيسية إلى التعليمة الموالية.
  8. نصل إلى return و منه تنتهي الدالة الرئيسية.

إذا فهمت في أي ترتيب يتم تنفيذ التعليمات فيه، فقد فهمت المبدئ. الآن يجب أن تفهم بأن الدالة تستقبل خصائص كمدخل و ترجع قيمة كمخرج ( المخطط الموالي ) . 

http://www6.0zz0.com/2015/06/29/12/509223801.png

ملاحظة: ليس الأمر نفسه بالنسبة لكل الدوال. أحياناً، لا تأخذ دالة أية خاصية كمدخل، و بالعكس أحياناً تأخذ الكثير من الخصائص كمدخل ( لقد شرحت لك هذا في سابقاً ). أيضاً، يمكن لدالة أن ترجع قيمة كما يمكنها ألا ترجع أي شيء.

 فلنجرب هذا البرنامج :

هذا مثال عن تنفيذ البرنامج : 

Enter a number... 10 The triple of this number= 30

 

 لست مظطراً أن تخزن النتيجة في متغيرة! يمكنك أن تعطي النتيجة المُرجعة من طرف الدالة triple إلى دالة أخرى و كأن التعليمة : 

triple(inputNumber)

في حدّ ذاتها كانت متغيرة. لاحظ هذا جيداً، هي نفس الشفرة المصدرية لكن هناك تغيير على مستوى آخر printf. بالإضافة إلى ذلك، لم نقم بالتصريح عن المتغيرة tripleNumber و التي لا تفيدنا في أي شيء الآن : 

#include <stdio.h>
#include <stdlib.h>

int triple(int number)
{
    return 3 * number;
}   

int main(int argc, char *argv[])
{
    int inputNumber= 0;
   
    printf("Enter a number... ");
    scanf("%d", &inputNumber);

    // The result returned by the funct is directly sent to printf without being saved in a variable
    printf("The triple of this number= %d\n", triple(inputNumber));
    
    return 0;
}

 
كما ترى، استدعاء الدالة triple يتم داخل الدالة printf. ماذا يفعل الجهاز حينما يصل إلى هذا السطر من الشفرة المصدرية؟
الأمر سهل، يجب بأن السطر يبدؤ بـprintf، فسيقوم إذا باستدعاء الدالة printf. يبعث إلى هذه الأخيرة كل الخصائص التي كتبناها. أول خاصية هي النص الذي نريد طباعته و الثاني هو رقم. يجد الجهاز بأنه قبل أن يبعث رقماً إلى الدالة printf عليه أولا استدعاء الدالة triple. هذا ما يقوم به : يستدعي triple، يقوم بالحسابات و ما إن يتلقّ النتيجة يبعثها للدالة printf.
هذه الحالة تشبه نوعاً ما تداخل استدعاء الدوال. الشيء الذي نستنتجه من هذا هو أنه بإمكان دالة أن تستدعي دالة أخرى. هذا هو مبدئ البرمجة بلغة السي! كلّ شيء مركّب مع الأشياء الأخرى، كما في لعبة الليغو Lego.
في النهاية، سيقى الشيء الأصعب هو كتابة الدوال. ما إن تكتبها، لن يبق عليك سوى استدعاؤها دون أن تقلق من العمليات التي تجري بداخلها! هذا سيسمح لك يتبسيط كتابة برامجك بشكل كبير. و صدّقني ستحتاج إلى هذه المبادئ كثيراً.
  
أمثلة للفهم الجيّد : 
 
كان عليك أن تلاحظ شيئاً: أنا شخص يلحّ كثيراً على الأمثلة.
المفاهيم النظرية مهمّة لكنها لا تكفي لتذكّر كلّ شيء، كما أنك لن تفهم في أي شيء يمكنك استغلالها لاحقاً. و هذا أمر مؤسف.
سأريك إذا الآن عدة استعمالات للدوال لكي تأخذ فكرة عن أهميّتها. سأقدّم الكثير من الأمثلة المتخلفة محاولاً أن أعطيك لمحة عن كلّ أنواع الدوال التي يمكن أن تتواجد.
لن أعلّمك أي شيء جديد لكنه الوقت لرؤية أمثلة تطبيقية. إذا كنت قد فهمت ما سبق فهذا أمر جيّد و لن يعيقك أي مثال مما سيأتي.
 
التحويل من الاورو الى الفرنك :
 
سنبدؤ بدالة مشابهة كثيراً للدالة triple، لكنها تحمل أهمية لابأس بها هذه المرة: دالة تحوّل من الأورو للفرنك. لمن لا يعرف فإن 1 أورو = 6,55957 فرنك.
سننشئ دالة نسميها conversion. هذه الدالة تأخذ متغيرة كمدخل من نمط double لأننا سنتعامل بالضرورة مع أعداد عشرية، إقرءها بتمعّن :

 

doubleconversion(doubleeuros)
{
     doublefrancs=0;
     francs=6.55957*euros;
    returnfrancs;
}
intmain(intargc,char*argv[])
{
     printf("10 euros = %fF\n",conversion(10)); 
     printf("50 euros = %fF\n",conversion(50));
     printf("100 euros = %fF\n",conversion(100));
     printf("200 euros = %fF\n",conversion(200));
     return0;
}

 

ويعطينا كنتيجة :
 
10 euros = 65.595700F 50 
euros = 327.978500F 100 
euros = 655.957000F 200 
euros = 1311.914000F
 
 لا يوجد اختلاف كبير مقارنة بالدالة triple، لقد أخبرتك بذلك مسبّقاً. الدالة conversion طويلة قليلاً و يمكن أن يتم اختصارها في سطر واحد، سأترك لك عناء فعل ذلك بنفس الطريقة التي شرحتها لك مسبقاً.
في الدالة الرئيسية main، تعمّدت وضع الكثير من الأسطر printf لأريك الهدف من استعمال الدوال. لكي أحصل على قيمة 50 أورو، ليس علي سوى استدعاء الدالة conversion بإعطائها 50 كقيمة إدخال. و إذا أردت تحويل 100 أورو إلى الفرنك، كل ما أحتاج فعله هو وضع القيمة 100 في مكان القيمة 50.
حان دورك! اكتب دالة ثانية ( دائماً قبل الدالة الرئيسية ) تقوم بالعملية العكسية أي تحول من الفرنك إلى الأورو. لن يكون الأمر صعباً. هناك إشارة عملية تتغير ليس إلا.
 
العقوبة :
 
سنهتم الآن بدالة لا تقوم بإرجاع أي شيء ( لا وجود للمخرج ) .
هي دالة تقوم بإظهار نفس النص على الشاشة بالقدر الذي نحن نريد. هذه الدالة تأخذ كمدخل : عدد المرات التي نريد أن يظهر بها النص في الشاشة ( نص العقوبة ).
 
 
void punition(int numberOfLines)
{
    int i;
   
    for (i = 0 ; i < numberOfLines; i++)
    {
        printf(" I won't misbehave in class again\n");
    }   
}   
int main(int argc, char *argv[])
{   
    punition(10);
   
    return 0;
}
 
النتيجة :
 
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
I won't miss behave in class again
 
 
 
  
هنا نتكلم عن دالة لا تُرجع أية قيمة. تكتفي هذه الدالة بالقيام بمهمة إظهار النص على الشاشة. الدالة التي لا ترجع أيه قيمة هي دالة من نمط void، غير هذا لا يوجد شيء مختلف.
كان ليكون من الممتع أن نكتب دالة punition تقوم بإظهار النص الذي نريده نحن على الشاشة. نبعث لها خاصيتين : النص الذي نريد و عدد المرات التي نريد أن يتم إظهاره. المشكل هو أننا لا نجيد بعد التعامل مع النصوص في لغة السي ( إذا كنت لم تنتبه فأذكرك أنه لحدّ الآن لم نتعامل سوى مع متغيرات تحمل قيم رقمية داخلها ). و بهذا الصدد أخبرك أننا لن نتأخر حتى نتعلّم كيفية التعامل مع النصوص. فعل ذلك معقّد قليلاً و لا يصلح أن نبدأ به في أول الدروس!
 
مساحة مستطيل :
 
من السهل حساب مساحة المستطيل : العرض x الطول .
الدالة التي سنكتبها rectangleSurface تأخذ خاصيتين : الطول و العرض. و تقوم بإرجاع المساحة .

 

doublerectangleSurface(doublewidth,doublelength)
 {
     returnwidth*length;
 }
intmain(intargc,char*argv[])
{
     printf("width =5 and length= 10. Surface= %f\n",rectangleSurface(5,10));
    printf("width =2.5 andlength=3.5. Surface= %f\n",rectangleSurface(2.5,3.5));
     printf("width =4.2 andlength=9.7. Surface= %f\n",rectangleSurface(4.2,9.7));
    return0;
}

النتيجة :


width= 5 and length= 10. Surface= 50.000000
width= 2.5 and length= 3.5. Surface= 8.750000
 width=4.2 and length= 9.7. Surface= 40.740000

 

هل يمكننا أن نظر مباشرة طول، عرض و مساحة المستطيل داخل الدالة؟ بالطبع! في هذه الحالة لن ترجع الدالة أي شيء. ستكتفي بإظهار ما حسبته :
 
voidrectangleSurface(doublewidth,doublelength)
{
     doublesurface=0;
     surface=width*length;
     printf("width= %f and length= %f. Surface= %f\n",width,length, surface);
}
intmain(intargc,char*argv[])
{
     rectangleSurface(5,10);
     rectangleSurface(2.5,3.5);
     rectangleSurface(4.2,9.7);
     return0;
 }
 
كما تلاحظ فوضع printf داخل الدالة rectangleSurface أعطتنا نفس النتيجة كما فعلنا بالشفرة المصدرية السابقة. الطريقة فقط تختلف.
 
قائمة Menu :
 
هذا الكود أكثر أهمية. سننشئ دالة menu لا تأخذ أي خاصية كمدخل. تكتفي هذه الدالة بإظهار قائمة و تطلب من المستعمل اختيار ما يريد. الدالة تقوم بإرجاع اختيار المستعمل.
 
int menu()
{
    int choice= 0;
   
    while (choice< 1 || choice> 4)
    {
        printf("Menu :\n");
        printf("1 : Royal Fried Rise\n");
        printf("2 : Noodle Basil \n");
        printf("3 : Pattaya Paradise \n");
        printf("4 : Spice Nitan Spicy...)\n");
        printf("Your choice? ");
        scanf("%d", &choice);
    }   
   
    return choice;
}   
int main(int argc, char *argv[])
{   
    switch (menu())
    {
        case 1:
            printf("You have chosen Royal Fried Rise\n");
            break;
        case 2:
            printf("You have chosen Noodle Basil \n");
            break;
        case 3:
            printf("You have chosen Pattaya Paradise \n");
            break;
        case 4:
            printf("You have chosen Spice Nitan Spicy\n");
            break;   
    }
      
    return 0;
}
 
 
 
 
 
 
 
 
 
تقوم الدالة menu بإظهار القائمة طالما لم يقم المستعمل بإدخال رقم محصور بين 1 و 4. و إلا فستقوم الدالة بإرجاع قيمة لا تظهر على القائمة!
في الدالة الرئيسية، تلاحظ أننا استعملنا switch للقائمة مباشرة، إنها طريقة سريعة و تطبيقية.
حان دورك! يمكنك تحسين الشفرة المصدرية أكثر : يمكنك أن تظهر رسالة خطأ في حالة أخطأ المستعمل في الختيار بدل أن تقوم بإعادة إظهار القائمة على الشاشة.
 

 
ملخص الدرس :
  • يمكن لدالة أن تستدعي دالة أخرى. و بهذا فالدالة الرئيسية main يمكنها استدعاء دوال جاهزة كـprintf و scanf و كذلك دوال ننشؤها بأنفسنا.
  • تتلقّى الدالة قيمة إدخال نسميها خاصية.
  • نقوم ببعض الحسابات على هذه الخاصيات و نُرجع قيمة بالاستعانة بالتعليمة return.

هذا الدرس مترجم بواسطة " عدن بلواضح " عن الموقع الفرنسي " openclassrooms.com " للكاتب "Mathieu Nebra" 

 :¦- (9) تعلّم لغة الـ:C من الصفر -¦: الدوال -¦: تم التجديد 29/06/2015
بداية
الصفحة