الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.
التنقل بين الدوال

كيف اتنقل بين الدوال فى الـ ++C ؟

بدأه Adm Ali في 21 مارس 2016 · 6 رد · 1,021 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،،،

انا جديد فى عالم البرمجة، وحالياً ادرس ال ++C ، ووصلت فى هذا الطريق إلي الدوال، وسؤال محدد وبسيط، لو انا صممت برنامج يقوم بعدة مهام حسابية على سبيل المثال مثل الضرب والقسم والجمع والطرح، واريد ان يختار المستخدم نوع العملية التى يريد الدخول لها وعمل عملية حسابية، كيف افعل هذا ؟

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

اتمنى ان يكون قصد واضح، واتمنى سماع ردودكم فى اقرب وقت ،،،

#2

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

انظر المثال، لدينا التوابع التالية:

int say_hello()
{
    cout<<"Hello World!"<<endl;
    return 0l
}
int sum(int a,int b)
{
    return a+b;
}
int mul(int a,int b)
{
    return a*b;
}

ويمكنك اختيار أيهما يُستدعى حسب رد المستخدم كما يلي

int main()
{
    cout<<"What do you want (1:say hello,   2:sum   , 3:mul)"<<endl;
    
    int choice;
    cin>>choice;
    if(choice==1)
    {
        say_hello();
    }else if(choice==2)
    {
        cout<<"Enter a,b"<<endl;
        cin>>a>>b;
        cout<<a<<" + "<<b<<" = "<<sum(a,b)<<endl;
    }else if(choice==3)
    {
        cout<<"Enter a,b"<<endl;
        cin>>a>>b;
        cout<<a<<" * "<<b<<" = "<<mul(a,b)<<endl;
    }else{
        cout<<"Wrong choice"<<endl;
    }
    return 0;
}

 

إن لم يكن المثال واضحًا فأهلًا بالأسئلة :)

 

بالتوفيق

1
#3

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

#4

main() يمكن ذلك بالتعديل على كود الدالة الرئيسية

int main()
{
    cout<<"What do you want (1:say hello,   2:sum   , 3:mul 4:exit)"<<endl;
    
    int choice;
    cin>>choice;
    if(choice==1)
    {
        say_hello();
    }else if(choice==2)
    {
        cout<<"Enter a,b"<<endl;
        cin>>a>>b;
        cout<<a<<" + "<<b<<" = "<<sum(a,b)<<endl;
    }else if(choice==3)
    {
        cout<<"Enter a,b"<<endl;
        cin>>a>>b;
        cout<<a<<" * "<<b<<" = "<<mul(a,b)<<endl;
	}else if (choise==4)
	{
		return 0;
    }else{
        cout<<"Wrong choice, Try again"<<endl;
    }
	main()
    return 0;
}

عندما ينفذ البرنامج العملية المطلوبة يعيد تنفيذ البرنامج من جديد(إختيار العملية الجديدة)

1
#5
Adm Ali كتب:

هل هناك طريقة للعودة إلى قائمة الاختيارات الاولى

هناك العديد من الطرق، أوضحها هو استخدام goto، كما في المثال التالي:

#include <iostream>

using namespace std;

int main()
{
    int x;

your_label:
    cout<<"please enter your mark"<<endl;
    cin  >> x ;

    if ( x >= 90)
    {
        printf("GREAT\n");
    }else if ( x > 50){
        cout<<"good"<<endl;
    }else{
        cout<<"baaad"<<endl;
    }

    goto your_label;

    return 0;
}

حيث يتم القفز إلى اللافتة label التي نذكر اسمها بعد goto

ولكنّ الطريقة الأكثر شيوعًا هي استخدام الحلقات، كما في المثال التالي

#include <iostream>

using namespace std;

int main()
{
    int x;
    
    bool more_questions=true;
    
    while(more_questions)
    {
        cout<<"please enter your mark"<<endl;
        cin  >> x ;

        if ( x >= 90)
        {
            printf("GREAT\n");
        }else if ( x > 50){
            cout<<"good"<<endl;
        }else{
            cout<<"baaad"<<endl;
        }
        
        string answer;
        cout<<"Do you want to continue?"<<endl;
        cin>>answer;
        if(answer=="no")
            more_questions=false;
    }

    return 0;
}

 

وقد يستخدم البعض حلقاتٍ لا تنتهي، كما في المثال التالي:

#include <iostream>

using namespace std;

int main()
{
    int x;
    
    while(true)
    {
        cout<<"please enter your mark"<<endl;
        cin  >> x ;

        if ( x >= 90)
        {
            printf("GREAT\n");
        }else if ( x > 50){
            cout<<"good"<<endl;
        }else{
            cout<<"baaad"<<endl;
        }
    }

    return 0;
}

ولكنّها غير حبّذةٍ رغم قصر الشيفرة اللازمة لكتابتها، فهي لا تسمح بإنهاء البرنامج بطريقة سليمة.

وهناك العديد من الطرق الأخرى، كما ذكر الأخ kenham في رده، ولكنني اقتصرت على الأبسط والأكثر شيوعًا.

 

والله وليّ التوفيق

1
#6

اشكركم جميعاً على ردودكم وهي فى محلها حقيقتا، وطرحت لى افكار جديدة :)

1
#7

جميل جدا

نحن مشوقون لرؤيتك أفكار جديد بالمنتدى، على شكل مشاريع أو تحديات ,,,, إلخ

أرجو منك أن تساهم بدعم المنتدى بمواضيع مميزة

بالتوفيق

1

مواضيع مشابهة