English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دروس أساسية في لغة C

تحكم في العملية في لغة C

الوظائف في لغة C

المساحات في لغة C

المراجع في لغة C

الخطوط في لغة C

هيكل لغة C

ملفات لغة C

C أخرى

دليل مرجعي لغة C

نوع الدوال المحددة للمستخدم في لغة C

في هذا الدرس، ستتعلم كيفية استخدام الدوال لحل نفس المشكلة بطرق مختلفة.

تتحقق هذه البرامج الأربعة من صحة عدد المستخدم كعدد أولي.

كل هذه البرامج التي تظهر هنا تنتج نفس النتيجة، ونحن نقوم بإنشاء دالة مستخدم مخصصة في كل مثال. ولكننا نستخدم طرقًا مختلفة في كل مثال.

مثال 1: لا يتم تمرير أي معاملات، ولا يتم إرجاع أي قيمة

#include <stdio.h>
void checkPrimeNumber();
int main()
{
    checkPrimeNumber(); // لا يتم تمرير أي معاملات
    return 0;
}
// نوع العودة هو void، مما يعني عدم العودة بأي قيمة
void checkPrimeNumber()
{
    int n, i, flag = 0;
    printf("ادخل عدد صحيح:");
    scanf("%d", &n);
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d ليس عدد أولي.", n);
    else
        printf("%d هو عدد أولي.", n);
}

تستقبل الدالة checkPrimeNumber() إدخال المستخدم، وتتحقق مما إذا كان هو عدد أولي، وتظهر ذلك على الشاشة.

البارانtheses الفارغة في checkPrimeNumber() داخل main() تشير إلى عدم وجود معاملات يتم تمريرها إلى الدالة.

نوع العودة للدالة هو void. لذلك، لا تعود الدالة بأي قيمة.

مثال 2: لا يتم تمرير أي معاملات، لكن يتم إرجاع القيمة

#include <stdio.h>
int getInteger();
int main()
{
    int n, i, flag = 0;
   // لم يتم تمرير أي معاملات
    n = getInteger();    
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d ليس عدد أولي.", n);
    else
        printf("%d هو عدد أولي.", n);
    return 0;
}
// يعود المستخدم بالعدد الصحيح
int getInteger()       
{
    int n;
    printf("ادخل عدد صحيح:");
    scanf("%d", &n);
    return n;
}

n = getInteger(); الكسرة الموجودة في البارانtheses الفارغة تشير إلى عدم وجود أي معاملات يتم تمريرها إلى الدالة. وسيتم تخصيص القيمة التي يتم إرجاعها من الدالة إلى n.

في هذا السياق، تقوم دالة getInteger() باستقبال المدخلات من المستخدم وإرجاعها. يحتوي دالة main() على كود لفحص ما إذا كان الرقم هو عدد أولي.

مثال 3: تم نقل المعلمات ولكن لم يتم العودة بأي قيمة

#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main()
{
    int n;
    printf("ادخل عدد صحيح:");
    scanf("%d", &n);
    // يتم نقل n إلى الدالة
    checkPrimeAndDisplay(n);
    return 0;
}
// نوع العودة هو void، مما يعني عدم العودة بأي قيمة
void checkPrimeAndDisplay(int n) 
{
    int i, flag = 0;
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d ليس عدد أولي.", n);
    else
        printf("%d هو عدد أولي.", n);
}

سيتم نقل قيمة المدخل الصحيح من المستخدم إلى دالة checkPrimeAndDisplay().

في هذا السياق، تقوم دالة checkPrimeAndDisplay() بفحص ما إذا كان المعامل المرسل هو عدد أولي، وتظهر الرسالة المناسبة.

مثال 4: نقل المعلمات وإرجاع القيمة

#include <stdio.h>
int checkPrimeNumber(int n);
int main()
{
    int n, flag;
    printf("ادخل عدد صحيح:");
    scanf("%d", &n);
    // يتم نقل n إلى دالة checkPrimeNumber()
    // يتم تخصيص القيمة المعدة للمعلمة flag
    flag = checkPrimeNumber(n);
    if (flag == 1)
        printf("%d ليس عدد أولي.", n);
    else
        printf("%d هو عدد أولي.", n);
    return 0;
}
// من نوع دالة return int
int checkPrimeNumber(int n)
{
    int i;
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

سيتم نقل المدخلات من المستخدم إلى دالة checkPrimeNumber().

تقوم دالة checkPrimeNumber() بفحص ما إذا كان المعامل المرسل هو عدد أولي.

إذا كان المعامل المرسل هو عدد أولي، فإن الدالة تعود بـ 0. إذا كان المعامل ليس عدد أولي، فإن الدالة تعود بـ 1. يتم تخصيص القيمة المعدة للمعلمة flag.

بناءً على ما إذا كان flag يساوي 0 أو 1، سينشر دالة main() رسالة مناسبة.

ما هي الطريقة الأفضل؟

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

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