• 0
Adm Ali

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

سؤال

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

6 إجابة على هذا السؤال .

  • 0

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

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

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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
On 22/03/2016 at 7:41 PM, Adm Ali said:

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

هناك العديد من الطرق، أوضحها هو استخدام 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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جميل جدا

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

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

بالتوفيق

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .