PDA

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



حمیدرضاصادقیان
سه شنبه 27 مرداد 1388, 17:15 عصر
سلام.میخوام یک برنامه بنویسم که برنامه درسی رو برای یک مدرسه بنویسه.
ما فقط یک برنامه درسی میخواهیم. ولی در این برنامه باید مسائل زیر رعایت بشه.
1- ساعت مقرری معلم در هفته باید در داخل این برنامه لحاظ بشه. به طور مثال معلم باید در هفته 24 ساعت تدریس داشته باشه.
2- یک معلم ممکنه روزهای خاصی مانند شنبه - 2شنبه و سه شنبه بیاد.
3- یک معلم ممکنه چند درس رو تدریس کنه مانند دفاعی و پرورشی و ورزش و دینی.
4- زمان قانونی درسها باید در هفته پر شود. مثلا ریاضی باید در هفته 6 ساعت تدریس بشه.
که این عدد برای پایه های مختلف تفاوت میکنه.
5- در برنامه نباید درسهای هم پایه کنار هم قرار بگیرند. مثلا دروس پایه مانند ریاضی - علوم و حرفه. نباید مثلا روز شنبه ساعت اول ریاضی - ساعت دوم علوم باشه.یا مثلا دروس نظری ادبیات و عربی و زبان. که نباید ادبیات و زبان پشت سرهم قرار بگیره.
6- روزهای کاری مدرسه ممکنه در روزهای مختلف تفاوت داشته باشه. مثلا شنبه از 8 تا 14 و یکشنبه از 8 تا 12.
حالا پیدا کنید پرتقال فروش را!!!!

حمیدرضاصادقیان
چهارشنبه 28 مرداد 1388, 09:00 صبح
یک روش من خودم نصفه نیمه پیدا کردم اونم استفاده از ماتریسها. فعلا دوتا ماتریس تشکیل دادم یکی ماتریس روزهای هفته و معلمان هست یک ماتریس معلمان و درسهایی که هر معلم درس میده. با ضرب این دوتا مشخص میشه که در هفته چه درسهایی میتونه باشه.ولی برای بقیه اش گیر کردم.
ممنون از دوستان.

mitra.m
پنج شنبه 29 مرداد 1388, 13:47 عصر
سلام كنجكاو شدم. برنامه جالبي است. حسابي مجبورت ميكنه فكر كني. يه سوال بپرسم، ماتريساتو با صفر و يك پر كردي ديگه؟ ميگم نميشه واسه درسهايي هم كه نميشه كنار هم باشن يه ماتريس داشته باشيم. بعد ازاينكه درسا مشخص شد، ماتريس نتيجه رو تو اين ماتريس ضرب كنيم تا ترتيب درسا مشخص بشه؟ يا مثلا از ليست(C#) استفاده كنيم. يعني يه ليست داشته باشيم كه هر خونه اش باز يه ليست جدا باشه. هر چي درست نبود از تو ليست حذف بشه تا در نهايت چيزايي كه تو ليست مي مونه برنامه ي درست است.:متفکر:
ميترا
(http://www.kaspid.com (http://www.kaspid.com/))

tdkhakpur
پنج شنبه 29 مرداد 1388, 14:05 عصر
شما باید از توایع بازگشتی استفاده کنید.
ولی در مورد الگوریتم کار شما باید یک ماتریس از نوع عددی به تعدا 7 روز و تعداد دروس در یک روز بصورت استاندارد بسازید.
برای هر خانه خالی در ماتریس شرط ها را با عدد مشخص کنید مثلا وجود عدد 1 به این معنی باشد که در این مکان از برنامه نمیتوان درس ریاضی قرار داد یا اینکه با قرار دادن مثلا عدد 5 مشخص کنید که معلم x قادر به تدریس در این قسمت از برنامه نیست و به همین ترتیب شرایط را برقرار کنید.(واقعا کار میبره)
بعد از وارد کردن داده ها یه جستجوی هوشمندانه و بررسی شرایط میتوانید برنامه هفتگی را پیاده سازی کنید.

حمیدرضاصادقیان
یک شنبه 01 شهریور 1388, 09:36 صبح
ممنون.ولی از روابط بازگشتی چطوری باید استفاده کرد؟ اخه چه چیزی رو باید بازگشتی حساب کنم.؟

afi_program
یک شنبه 01 شهریور 1388, 10:54 صبح
به نظرم راه حل خوبی مدنظرت نیست.همونطور دوست عزیز گفت راهبرد عقبگرد بهترین راه برای حل این مسئله است.باید با اولویتی که دست خودته از توی ماتریس ها انتخاب کنی و درس و استاد و زمان را هماهنگ کنی و وقتی به تناقض بر خوردی یه پله به عقب برگردی.در واقع مثل اینه که یه درخت بسازی و اونو پیمایش کنی.
موفق باشی

tdkhakpur
یک شنبه 01 شهریور 1388, 16:43 عصر
ممنون.ولی از روابط بازگشتی چطوری باید استفاده کرد؟ اخه چه چیزی رو باید بازگشتی حساب کنم.؟
سلام
با قرار دادن داده ها در همه محلها و بررسی شرایط دروس و معملمان و سایر شرایط دیگر ولی فقط یک بار (که این کار فقط از دست توابع بازگشتی بر می آید)میتوانید این عملیات را به اتمام برسانید.
درسته اسم این نوع عملیات هوش مصنوعی هست ولی توابع بازگشتی ابزار برای این کاره
والا برای رسیدن به هدف بدون استفاده از این نوع روش واقعا کار را زیاد و دشوار خواهد کرد.
احتیاج به کد نویسی داره و با شرح دادن نمیشه توضیح داد....

once4ever
دوشنبه 02 شهریور 1388, 05:08 صبح
همیشه اینو مد نظر بگیرید که پیدا کردن یک جواب بهتر از محاسبه تمام احتمالات جواب هست!

1. برای شرایطی که دارید درجه قرار بدهید یعنی برای ریاضی کدام استاد اول پرشود و... (یک برنامه کامل)
2. سپس محدوده هارو بدست بیارید یعنی یک معلم حتما باید دوشنبه کلاس ریاضی بگیرد (توابع بازگشتی)

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

3. حالا شروع کنید بترتیب درجه بندی با محدودیتها روزهارو پر کنید (توابع بازگشتی)
4. ممکن است چندین جواب با تغییر درجه ها و محدودیتها بدست بیارید که امتیاز برنامه شماست

مثال اولیه:
درس (تا موقعی که نیاز هفته پرشود) -> روز هفته (نباید درسهای هم پایه کنار هم قرار بگیرند) -> استاد (صلاحیت و محدوده ساعت) -> درست | غلط (موردی پیدا شد یا نشد)

من سعی میکنم بجای درگیر شدن با فرمولها از مفت و سریع بودن سی پی یو استفاده کنم ;)

حمیدرضاصادقیان
دوشنبه 02 شهریور 1388, 07:42 صبح
ممنون.راه های جالبی دوستان بیان کردند.سعی میکنم پیاده سازی کنم اگر تموم شد با کد اینجا قرار میدم.
ممنون

once4ever
یک شنبه 15 شهریور 1388, 05:02 صبح
آقای صادقیان چه کردید؟

afi_program
سه شنبه 17 شهریور 1388, 13:05 عصر
منتظر نتیجه هستیم دوست عزیز.امیدوارم موفق شده باشی