PDA

View Full Version : سوال: ایجاد سوال های تصادفی برای هر دانشجو



minoooooo
پنج شنبه 23 خرداد 1387, 00:21 صبح
با سلام .
من می خوام یک سری سوال تصادفی از پایگاه خوانده شود ولی با شرایط زیر :

طراح آزمون تعداد سوالات را در یک Textbox می نویسد .بعد یک سری مشخصات دیگر رو هم برای آزمون تنظیم می کند .
مثلا تعداد سوالات سخت ومتوسط و آسان و...
با توجه به این تنظیمات برای هر دانشجو یک آزمون با تعداد سوالات مساوی ولی سوالات مختلف تولید می کند.
حالا سواله من اینه که :
برای تصادفی شدن سوال از چه روشی استفاده کنم ؟؟؟
لطفا راهنمایی کنید .:افسرده:

mojniknam
پنج شنبه 23 خرداد 1387, 08:38 صبح
از کدهای sql
برای راهنمایی بیشتر توی همین سایت سرچ کن

m.hamidreza
پنج شنبه 23 خرداد 1387, 10:10 صبح
ID سوالات رو تو SQL میتونی به دلخواهت تعریف کنی بعد با استفاده از کلاس RNGCryptoServiceProvider در NET. تو رنج ID های سوالات، عدد تصادفی تولید کنی و اون ID تولید شده رو از db بازیابی کنی.

minoooooo
پنج شنبه 23 خرداد 1387, 12:45 عصر
برای تصادفی شدن از کلاس RNGCryptoServiceProvider در NET. استفاده می کنم .
ولی من راه حلی برای تصادفی شدن سوالات برای هر دانشجو می خوام .یعنی هر دانشجو یک آزمون با سوالات مختلف از دانشجوی دیگه داره.ولی سطح سوالات یکسان می باشد .

Nasim_m
پنج شنبه 23 خرداد 1387, 18:14 عصر
یک سر به آدرس زیر بزن جوابت رو پیدا می کنی
http://barnamenevis.org/forum/showthread.php?t=100332

minoooooo
پنج شنبه 23 خرداد 1387, 21:43 عصر
این لینک رو قبلا دیدم .ولی نمی دونم چه ارتباطی به سوالم داره؟؟

یعنی هر دانشجو یک آزمون با سوالات مختلف از دانشجوی دیگه داره.ولی سطح سوالات یکسان می باشد .

Nasim_m
پنج شنبه 23 خرداد 1387, 21:48 عصر
فرض کن یک جدول توی پایگاه داده داری که توش یک تعداد سوال داری (مثلا 100 تا) حالا با این روش اگه برای هر دانشجو 10 سوال رو به صورت تصادفی از این 100 تا انتخاب کنی احتمال اینکه 2 نفر دارای امتحان شبیه به هم باشند چقدر است؟(متاسفانه من همیشه توی درس آمار و احتمال یک پام می لنگه وگرنه جوابش رو بهت می دادم؟)

minoooooo
پنج شنبه 23 خرداد 1387, 22:16 عصر
SELECT TOP 10 * FROM myTable ORDER BY NewID()

با این کد یک تعداد مشخصی مثلا سوال را میشه به صورت رندم آورد .
ولی من می خواهم تعداد سوالات مثلا از یک textbox خوانده بشه .بعد به همان تعداد برای همه ی دانشجو ها سوال بیاره!!

یک سوال کلی ؟؟
برای رندم بهتر از دستورات توی پایگاه استفاده کرد یا توی زبان برنامه نویسی کدی براش نوشت؟؟؟

salehbagheri
پنج شنبه 23 خرداد 1387, 22:43 عصر
با استفاده از كدهاي وي بي يا سي شارپ مي‌توني اين كار رو انجام بدي!
اول يك ArrayList ايجاد كن و تمام ID سوالات را داخل ان فراخواني كن.
دوم يك ArrayList ديگه ايجاد كن.
سوم يك متغير تصادفي ايجاد كن كه به تعداد سوالات درخواستي از ArrayList اولي، ID هاي انتخابي را
بريزه تو ArrayList دومي.
سوالات ArrayList دومي رو از دانشجوها امتحان بگير!
تمام
اگرهم خواستي كدش رو برات ميزارم.

m.hamidreza
پنج شنبه 23 خرداد 1387, 22:47 عصر
برای تصادفی شدن از کلاس RNGCryptoServiceProvider در NET. استفاده می کنم .



ولی من راه حلی برای تصادفی شدن سوالات برای هر دانشجو می خوام .

خوب ؟!! شما از این کلاس پس چه استفاده ای میکنی؟



ولی من می خواهم تعداد سوالات مثلا از یک textbox خوانده بشه


اینم مشکلی نداره! شما تعداد سوالات رو از کاربر میگیری به همون تعداد ID تصادفی تولید میکنی بعد اون ID ها رو از جدول دیتابیست Select میکنی...

سمت دیتابیس هم میشه، من فکر میکنم کلاس NET. مطمئن تر باشه + اینکه اگه بخوای تعداد رو هم لحاظ کنی پیاده سازیش تو کد راحت تره تا توی db .ضمن اینکه در مورد موضوع شما خیلی هم نیاز به حساسیت بالا نیست چون احتمالا تعداد سوالا باید زیاد باشه...
برای پیاده سازی Random در SQL هم میتونی از این لینک (http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/) استفاده کنی.

minoooooo
پنج شنبه 23 خرداد 1387, 23:40 عصر
تعداد سوالات را طراح مشخص می کند.
راستش من فکر کردم با استفاده از این کلاس یک سری سوال به صورت رندم (سوالات مشترک )از پایگاه انتخاب می شه !!!

minoooooo
جمعه 24 خرداد 1387, 14:45 عصر
اینم مشکلی نداره! شما تعداد سوالات رو از کاربر میگیری به همون تعداد ID تصادفی تولید میکنی بعد اون ID ها رو از جدول دیتابیست Select میکنی...

یک تعداد id تصادفی رو توی یک آرایه ریختم ولی نمی دونم چطوری همون id ها رو select کنم؟؟؟
یعنی فقط برای یک id کار می کنه!!!

m.hamidreza
جمعه 24 خرداد 1387, 23:20 عصر
ببینید شما تو db یه جدول دارین که توش سوالات هست این جدول یه کلید اصلی داره به نام ID . رنج این ID هم مثلا از 1000 هست تا 1500 .
کاربر شما میخواد 20 تا سوال داشته باشه شما این 20 رو از کاربر میگیرین و 20 تا عدد که بین 1000 تا 1500 هست تولید میکنی، این ID ها رو از db انتخاب میکنی میشه سوالات !
این روش کار هست. برای استفاده از کلاس RNGCryptoServiceProvider هم تو گوگل سرچ کنید نمونه های زیادی هست....

* به نظر من شما از Random هم میتونی استفاده کنی نیازی به RNGCryptoServiceProvider نیست چون حساسیت بالایی وجود نداره + اینکه پیاده سازی Random راحت تره...

موفق باشید.

minoooooo
شنبه 25 خرداد 1387, 00:54 صبح
دوست خوبم .بازم ممنون از راهنمایی هات .با اون قسمت ها مشکلی ندارم .
فکر کنم سوالم رو بد مطرح کردم!!
سوالم :
چطور یک آرایه رو به یک stored procedure ارسال کنم .
البته تقریبا به جواب رسیدم.

minoooooo
شنبه 25 خرداد 1387, 18:32 عصر
یک مشکل خیلی عجیب با کلاس RNGCryptoServiceProvide !!!!!
اعداد تکراری میده!!!




for (int i = 0; i < 10; i++)
{
int ToTalQuestion = 40;

byte[] randomNumber = newbyte[10];

RNGCryptoServiceProvider Gen = newRNGCryptoServiceProvider();

Gen.GetNonZeroBytes(randomNumber);
int[] rand = newint[10];

rand[i] = Convert.ToInt32(randomNumber[i]);
int[] rand1 = newint[10];
rand1[i] = rand[i] % ToTalQuestion + 1;


نمی دونم مشکل چیه؟؟؟؟

A_mojgan
شنبه 25 خرداد 1387, 20:56 عصر
سلام
اين كد رو با random نوشتم چون seed براساس ميلي ثانيه است احتمال تكراري بودن كمه


int[] a = new int[10];
int b;
Random n = new Random(DateTime.Now .Millisecond );
for (int i = 0; i < 10; i++)//number of qustion you want generate
{
b= n.Next(100); //max number
a[i] = b;
}

minoooooo
شنبه 25 خرداد 1387, 22:39 عصر
با کلاس رندم هم تکراری می ده(هر دفعه عدد رو توی یک آرایه می ریزم و مقایسه می کنم).
به نظر شما مشکل چیه؟؟؟؟

Himalaya
شنبه 25 خرداد 1387, 23:20 عصر
خوب تو کدهایی که تو تاپیک 16 وجود داره توی حلقه هر دفعه که 1 عدد تولید میشه ، اونو با بقیه عناصر آرایه
مقایسه کنید ... اگه با هیچکدوم از عناصر برابر نبود که هیچ ... در غیر این صورت ، داخل حلقه از i یک واحد کم کنید ، تا تولید عدد تصادفی برای اون اندیس از حلقه دوباره انجام بشه ...

minoooooo
یک شنبه 26 خرداد 1387, 11:32 صبح
این کارم کردم !!!ولی اگر یکی از دوستان یک لطفی بکنه و کدی که در تاپیک 15 نوشتم یک نگاهی بکنه ممنون می شم .نمی دونم کجا اشتباه کردم ؟؟؟
این کد رو برای تولید 10 سوال تصادفی نوشتم.