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

برنامج مسابقات متكامل ◄ تفضل بالدخول ►

بدأه احمد حجير في 21 يونيو 2010 · 3 رد · 1,510 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

banar.png

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

في البداية سيكون لدينا مصفوفة test من نوع string ، عدد صفوفها بعدد الأسئلة ، العمود الأول يحوي السؤال ، الأعمدة التالية وحتى قبل الأخير للخيارات ، والعمود الأخير للإجابة الصحيحة . نقوم بإسناد قيم للمصفوفة يدوياً كالآتي :

   string test[10][6]={
        {"Desert is to oasis as ocean is to :\n\n",
            "Water",
            "Island",
            "Sand",
            "Sea",
            "Island"
        },

        {"Which number should come next in the series : 1 4 9 16 25\n\n",
            "27",
            "34",
            "36",
            "45",
            "36"
        },

        {"If the day before yesterday is two days after Monday then what day is it today?\n\n",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Friday",
            "Friday"
        },

        {"Joe was both 5th highest and 5th lowest in a race.How many people participated?\n\n",
            "8",
            "9",
            "10",
            "11",
            "9"
        },

        {"Which letter logically follows? T, Q, N, K, H,\n\n",
            "Y",
            "E",
            "M",
            "Z",
            "E"
        },

        {"Which number should come next in the series ? 1 - 1 - 2 - 3 - 5 - 8 - 13\n\n",
            "21",
            "26",
            "31",
            "16",
            "21"
        },

        {"PEACH is to HCAEP as 46251 is to :\n\n",
            "25641",
            "26451",
            "12654",
            "15264",
            "15264"
        },

        {"What number is one half of one quarter of one tenth of 800?\n\n",
            "10",
            "40",
            "80",
            "8",
            "10"
        },

        {"Divide 30 by 1/2 and add 10. What is the answer?\n\n",
            "25",
            "35",
            "60",
            "70",
            "70"
        },

        {"Some months have 31 days; how many have 28?\n\n",
            "1",
            "2",
            "6",
            "12",
            "12"
        }
    };

ولكي نطبع الأسئلة مرتبة بشكل عشوائي في كل مرة ، نقوم بتعريف مصفوفة عددية num تحوي ارقاماً من 0 إلى 9 ، ثم نقوم بتغيير أماكن عناصرها عشوائياً كما تعلمنا في درس سابق ، لكي نجعل ترتيب عرض الأسئلة يختلف من مرة لأخرى ، كما ستجد في الدرس نفسه طريقة لاختيار 10 اسئلة من بين 100 سؤال بشكل عشوائي ، وهنا ستكون الفائدة أكبر ؛ إن لن يعود الأمر مقتصراً على اختلاف ترتيب الأسئلة في كل مرة ، بل إن الأسئلة نفسها ستتغير وهذا يجعل البرنامج أفضل بكثير .

   int num[10];

    for(int i=0;i<10;i++)
        num=i;

    for(int counter=10;counter>0;counter--)
    {
        int x=rand()%counter;
        int temp=num[x];

        for(int i=x;i<counter-1;i++)
            num=num[i+1];

        num[counter-1]=temp;
    }

وداخل دوران بعدد الأسئلة ( من 0 إلى 9 ) نقوم بطباعة السؤال والخيارات كالآتي :

cout<<test[num][0]
     <<"1. "<<test[num][1]
     <<"     "<<"2. "<<test[num][2]
     <<"     "<<"3. "<<test[num][3]
     <<"     "<<"4. "<<test[num][4]<<endl;

ومن ثم نطلب من المستخدم رمز إدخال إجابته ونقوم بتخزينها بمتغير answer . رمز الاجابة في هذا البرنامج من 1 إلى 4 ، وإن أدخل قيمة خارج هذا النطاق سيدخل البرنامج في دوران while لن يخرج منه إلا بعد إعطاء قيمة صحيحة لرمز الاجابة :

   cout<<"\nEnter your answer : ";
    cin>>answer;

    while(answer<1 || answer>4)
    {
        cout<<"\n\aPlease insert a number between 1 and 4 : ";
        cin>>answer;
    }

عدد النقاط سيزداد مع كل إجابة صحيحة ، وسيتم تخزينه في متغير score :

   if(test[num][answer] == test[num][5])
     score++;

وفي النهاية طباعة نقاط المتسابق وبعدها الاجابات الصحيحة على الأسئلة :

   cout<<"Your score is : "<<score<<endl;

    cout<<"\n\nANSWERS\n\n";

    for(int k=0;k<10;k++)
    {
        cout<<test[num[k]][0]<<test[num[k]][5]<<"\n\n";
    }

بعد تجميع أجزاء البرنامج تحصل على الآتي :

#include<iostream>  // For input-output operations
#include<cstdlib>   // For srand()
#include<string>    // For declaring strings
#include<ctime>     // For time()

using namespace std;

void main()
{
    srand(time(0));

    int answer;
    int score=0;
    int num[10];

    for(int i=0;i<10;i++)
        num=i;

    for(int counter=10;counter>0;counter--)
    {
        int x=rand()%counter;
        int temp=num[x];

        for(int i=x;i<counter-1;i++)
            num=num[i+1];

        num[counter-1]=temp;
    }

    string test[10][6]={
        {"Desert is to oasis as ocean is to :\n\n",
            "Water",
            "Island",
            "Sand",
            "Sea",
            "Island"
        },

        {"Which number should come next in the series : 1 4 9 16 25\n\n",
            "27",
            "34",
            "36",
            "45",
            "36"
        },

        {"If the day before yesterday is two days after Monday then what day is it today?\n\n",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Friday",
            "Friday"
        },

        {"Joe was both 5th highest and 5th lowest in a race.How many people participated?\n\n",
            "8",
            "9",
            "10",
            "11",
            "9"
        },

        {"Which letter logically follows? T, Q, N, K, H,\n\n",
            "Y",
            "E",
            "M",
            "Z",
            "E"
        },

        {"Which number should come next in the series ? 1 - 1 - 2 - 3 - 5 - 8 - 13\n\n",
            "21",
            "26",
            "31",
            "16",
            "21"
        },

        {"PEACH is to HCAEP as 46251 is to :\n\n",
            "25641",
            "26451",
            "12654",
            "15264",
            "15264"
        },

        {"What number is one half of one quarter of one tenth of 800?\n\n",
            "10",
            "40",
            "80",
            "8",
            "10"
        },

        {"Divide 30 by 1/2 and add 10. What is the answer?\n\n",
            "25",
            "35",
            "60",
            "70",
            "70"
        },

        {"Some months have 31 days; how many have 28?\n\n",
            "1",
            "2",
            "6",
            "12",
            "12"
        }
    };

    for(i=0;i<10;i++,cout<<endl)
    {
        cout<<test[num][0]
            <<"1. "<<test[num][1]
            <<"     "<<"2. "<<test[num][2]
            <<"     "<<"3. "<<test[num][3]
            <<"     "<<"4. "<<test[num][4]<<endl;

        cout<<"\nEnter your answer : ";
        cin>>answer;

        while(answer<1 || answer>4)
        {
            cout<<"\n\aPlease insert a number between 1 and 4 : ";
            cin>>answer;
        }

        if(test[num][answer]==test[num][5])
            score++;
    }

    cout<<"Your score is : "<<score<<endl;

    cout<<"\n\nANSWERS\n\n";

    for(int k=0;k<10;k++)
    {
        cout<<test[num[k]][0]<<test[num[k]][5]<<"\n\n";
    }
}

وإذا لم يعجبك شكل البرنامج ، بإمكانك أن تجعله بالألوان بعمل التعديل التالي :

#include<windows.h> // For printing in colors
   .
    .
    .

void setColor(int color)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
}

void main()
{
    .
    .
    .

    for(i=0;i<10;i++,cout<<endl)
    {
        setColor(15);
        cout<<test[num][0];

        for(int j=1;j<=4;j++)
        {
            if(j>1) cout<<"     ";

            setColor(14);
            cout<<j<<". ";

            setColor(10);
            cout<<test[num][j];
        }

        setColor(14);
        cout<<"\n\nEnter your answer : ";
        cin>>answer;

        while(answer<1 || answer>4)
        {
            cout<<"\n\aPlease insert a number between 1 and 4 : ";
            cin>>answer;
        }

        setColor(10);
        cout<<"\n------------------------------\n";

        if(test[num][answer]==test[num][5])
            score++;
    }

    setColor(15);
    cout<<"Your score is : "<<score<<endl;

    setColor(14);
    cout<<"\n\nANSWERS\n\n";

    for(int k=0;k<10;k++)
    {
        setColor(15);
        cout<<test[num[k]][0];

        setColor(10);
        cout<<test[num[k]][5]<<"\n\n";
    }
}

28953_124683110903113_100000842732216_130433_4165289_n.jpg

◄ للأمانة العلمية ، يرجى ذكر المصدر عند النقل

الموضوع الاصلي

http://psd-development.com/vb/t506.html

شبكة تكنولوجيا المعلومات والهندسة التقنية

1
#2

موضوع جميل

جزاك الله خيراً

وجزى الله صاحب الموضوع الأصلي خيراً

البرمجة = الرياضيات

#3

أخي جزاك الله خيراً

ولكن هل يمكنك أن تضعه في مرفق

وليك الف شكر

#4
العاقب كتب:

أخي جزاك الله خيراً

ولكن هل يمكنك أن تضعه في مرفق

وليك الف شكر

المرفق موجود في الموضوع الأصلي

http://psd-development.com/vb/t506.html

للأمانة العلمية ( هكذا كانت وصية صاحب الموضوع الأصلي )

تم تعديل هذه المشاركة بواسطة namespace في 22 يونيو 2010 في 00:39

البرمجة = الرياضيات

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