PDA

View Full Version : سوال: برنامه برای تولید تست پویا



itsurge
سه شنبه 08 اردیبهشت 1388, 18:48 عصر
:گریه:چطور میشه یک برنامه برای تولید تست پویا ایجاد کرد!
یعنی سوال را خودش طرح کند و جواب را نیز خودش بدست اورد و در بین گزینه ها قرار دهد. به عنوان مثال اگوریتم وارشال را بیگیرد و جواب های متفاوتی برای آن تولید کند به گونه ای
که اگر دوباره به سوال برگردیم نه سوال یکی باشد و نه جواب ها!:اشتباه:

khaste_007
چهارشنبه 09 اردیبهشت 1388, 01:27 صبح
با سلام
روشی که من پیشنهاد می دهم استفاده از کلاس Random هست شما می توانید عدادی رندوم را تولید و وابسته به آنها سوال ها و جواب هایتان را تولید کنید مثلا از بین سولاتی که که در بانک قرار دارد یکی را انتخاب کند و یا اگر سوال عددی هست اصلا خود سوال را رندوم تولید کند.
لینک توضیحات msdn درباره کلاس Random
http://msdn.microsoft.com/en-us/library/system.random.aspx

itsurge
چهارشنبه 09 اردیبهشت 1388, 20:10 عصر
منظور من ان چیزی که شما گفتید نبود این هم توضیحات بیشتر و کمی کد نویسی که در رابطه با این نوع برنامه نوشته شده. البته به زبان c++ که من کد را به زبان c# می خواهم


یک تست پویا، برنامه‌ای در یک زبان ویژوال است. فرآیند کلی برنامه به این صورت است که ابتدا یک مساله به صورت پویا طرح می‌شود و به دنبال آن چهار گزینه به کاربر معرفی می‌شود. پس از پاسخ‌گویی کاربر به سوال و گزینش یک پاسخ از سوی وی، برنامه می‌بایست پاسخ تشریحی را به شکلی روشن برای او نمایش دهد. به عنوان مثال، برنامه‌ای را در نظر بگیرید که یک گراف را برای کاربر نمایش می‌دهد و از او می‌خواهد مجموع وزن یال‌های درخت پوشای بهینه را مشخص کند.‌
file:///M:/پروزه/New%20Folder/طراحی%20الگوریتم،%20ذخیره%20و% 20بازیابی_files/pic1.bmp
نمایش پاسخ:
file:///M:/پروزه/New%20Folder/طراحی%20الگوریتم،%20ذخیره%20و% 20بازیابی_files/pic2.bmp

ماتریس مجاورت گراف را به صورت تصادفی و به شکلی مناس تولید کند.
درخت پوشای کمینه را پیدا کند و مجموع وزن‌های آن را مشخص کند.
گزینه‌هایی را تولید کند که یکی از آنها پاسخ و سه تای دیگر نادرست باشند.
جواب تست را پس از انتخاب کاربر ب او نشان دهد.
به کدهای زیر توجه کنید (کدهای نوشته شده برای تست نمونه‌ای که تصویر آن در بالا آمده است).
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Code.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int M[5][5]; // ماتریس مجاورت
int start_node[4]; // ابتدای یال‌های درخت پوشای کمینه
int end_node[4]; // انتهای یال‌های درخت پوشای کمینه
int gozine[4]; // گزینه‌ها
int answer; // مجموع وزنهی درخت پوشا
int answer_index; // مشخص می‌کند که پاسخ کدام گزینه است
//************************************************** *************
//************************************************** *************
// این تابع ماتریس مجاورت را به صورت تصادفی مقدار می‌دهد
void RandomSetM()
{
int a , b;
for(a=0 ; a<5 ; a++)
for(b=0 ; b<5 ; b++)
M[a][b] = 1+random(5);
}
//************************************************** *************
// این تابع باید درخت پوشای کمینه را پیدا کند و همچنین پاسخ را بدست آورد
void FindMinimumSpanningTree()
{
// It is an example and is not true.
answer = 10;
}
//************************************************** *************
// این تابع مشخص می‌کند که گزینه درست کدام گزینه باشد و سایر گزینه‌ها چه مقداری داشته باشند
void SetGozineha()
{
int a;
answer_index = random(4);
for(a=0 ; a<4 ; a++)
gozine[a] = answer + a - answer_index;
}
//************************************************** *************
//************************************************** *************
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
// رویداد ایجاد فرم که تنها پس از اجرای برنامه اجرا می‌شود
void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
// فراخوانی سه تابع تولید تصادفی ماتریس مجاورت، یافتن درخت پوشا و تولید گزینه‌ها
RandomSetM();
FindMinimumSpanningTree();
SetGozineha();
// نمایش گزینه‌ها
CheckBox1->Caption = IntToStr(gozine[0]);
CheckBox2->Caption = IntToStr(gozine[1]);
CheckBox3->Caption = IntToStr(gozine[2]);
CheckBox4->Caption = IntToStr(gozine[3]);
// کشیدن گراف – رسم پنج دایره به ازای پنج گره گراف
Image1->Canvas->Ellipse(43 , 18 , 47 , 22);
Image1->Canvas->Ellipse(103 , 18 , 107 , 22);
Image1->Canvas->Ellipse(18 , 78 , 22 , 82);
Image1->Canvas->Ellipse(128 , 78 , 132 , 82);
Image1->Canvas->Ellipse(73 , 123 , 77 , 127);
// کشیدن گراف – رسم یال‌های گراف
Image1->Canvas->MoveTo(45 , 20);
Image1->Canvas->LineTo(105 , 20);
Image1->Canvas->LineTo(130 , 80);
Image1->Canvas->LineTo(75 , 125);
Image1->Canvas->LineTo(20 , 80);
Image1->Canvas->LineTo(45 , 20);
Image1->Canvas->LineTo(130 , 80);
Image1->Canvas->LineTo(20 , 80);
Image1->Canvas->LineTo(105 , 20);
// نمایش وزن یال‌ها
Image1->Canvas->TextOutA(70 , 5 , M[0][1]);
Image1->Canvas->TextOutA(120 , 40 , M[1][2]);
Image1->Canvas->TextOutA(105 , 105 , M[2][3]);
Image1->Canvas->TextOutA(40 , 105 , M[3][4]);
Image1->Canvas->TextOutA(20 , 40 , M[4][0]);
Image1->Canvas->TextOutA(90 , 50 , M[0][2]);
Image1->Canvas->TextOutA(70 , 75 , M[2][4]);
Image1->Canvas->TextOutA(50 , 50 , M[4][1]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// رویداد فشردن دکمه که تقریبا کارهایی مشابه با رویداد ایجاد فرم در آن انجام می‌شود
RandomSetM();
FindMinimumSpanningTree();
SetGozineha();
CheckBox1->Caption = IntToStr(gozine[0]);
CheckBox2->Caption = IntToStr(gozine[1]);
CheckBox3->Caption = IntToStr(gozine[2]);
CheckBox4->Caption = IntToStr(gozine[3]);

Image1->Canvas->Ellipse(43 , 18 , 47 , 22);
Image1->Canvas->Ellipse(103 , 18 , 107 , 22);
Image1->Canvas->Ellipse(18 , 78 , 22 , 82);
Image1->Canvas->Ellipse(128 , 78 , 132 , 82);
Image1->Canvas->Ellipse(73 , 123 , 77 , 127);
Image1->Canvas->MoveTo(45 , 20);
Image1->Canvas->LineTo(105 , 20);
Image1->Canvas->LineTo(130 , 80);
Image1->Canvas->LineTo(75 , 125);
Image1->Canvas->LineTo(20 , 80);
Image1->Canvas->LineTo(45 , 20);
Image1->Canvas->LineTo(130 , 80);
Image1->Canvas->LineTo(20 , 80);
Image1->Canvas->LineTo(105 , 20);

Image1->Canvas->TextOutA(70 , 5 , M[0][1]);
Image1->Canvas->TextOutA(120 , 40 , M[1][2]);
Image1->Canvas->TextOutA(105 , 105 , M[2][3]);
Image1->Canvas->TextOutA(40 , 105 , M[3][4]);
Image1->Canvas->TextOutA(20 , 40 , M[4][0]);
Image1->Canvas->TextOutA(90 , 50 , M[0][2]);
Image1->Canvas->TextOutA(70 , 75 , M[2][4]);
Image1->Canvas->TextOutA(50 , 50 , M[4][1]);
}
//---------------------------------------------------------------------------