احمد حجير

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

4 ردود في هذا الموضوع

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]=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[i]=num[i+1];

num[counter-1]=temp;
}

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


cout<<test[num[i]][0]
<<"1. "<<test[num[i]][1]
<<" "<<"2. "<<test[num[i]][2]
<<" "<<"3. "<<test[num[i]][3]
<<" "<<"4. "<<test[num[i]][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[i]][answer] == test[num[i]][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]=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[i]=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[i]][0]
<<"1. "<<test[num[i]][1]
<<" "<<"2. "<<test[num[i]][2]
<<" "<<"3. "<<test[num[i]][3]
<<" "<<"4. "<<test[num[i]][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[i]][answer]==test[num[i]][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[i]][0];

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

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

setColor(10);
cout<<test[num[i]][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[i]][answer]==test[num[i]][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

شارك هذا الرد


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

موضوع جميل

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

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

0

شارك هذا الرد


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

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

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

وليك الف شكر

0

شارك هذا الرد


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

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

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

وليك الف شكر

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

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

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

تم تعديل بواسطه namespace
0

شارك هذا الرد


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

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

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