PDA

View Full Version : تداخل در انتخاب زمان ها



majoran
چهارشنبه 09 مرداد 1387, 12:49 عصر
سلام دوستان من یه سوال داشتم خیلی هم برام مهم هست البته بیشتر بحث الگوریتم هست تا بحث برنامه نویسی ولی خوب چون دیدم بچه های این طرفا فوق العادع با مرام هستند و سریع جواب میدند بهتر دیدم بحث رو اینجا قرار بدم.

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

این سیستم رو من با این فرض پیاده سازی کردم که به طور مثال کلاس 1 در ساعت 8 تا 10 برگزار میشه و من به این مشخصه ساعت شروع رو 8 و پایان رو 10 دادم حالا کلاس دوم رو که دانشجو انتخاب کرده پک می کنم.
اگر ساعت شروع کلاس2 از کلاس 1 کوچکتر بود که باید ساعت پایان هم کوچکتر باشه .
ولی اگه از ساعت شروع کلاس 1 بزرگتر بود باید از ساعت پایان نیز بزرگتر باشه ..

حالا می خواستم ببینم که شما راه بهتری رو برای این کار سراق ندارید .

متشکرم

tabib_m
چهارشنبه 09 مرداد 1387, 19:59 عصر
ساعت پایان کلاس 2 باید از ساعت شروع کلاس 1 کوچیکتر باشه یا ساعت شروع کلاس 2 باید از ساعت پایان کلاس 1 بزرگتر باشه:


if($start1>=$end2 or $start2>=$end1){
echo "YES";
}else{
echo "NO";
}

موفق باشید.

majoran
چهارشنبه 09 مرداد 1387, 22:01 عصر
خوب دوست عزیز حالا اگه برای یک کلاس 2 یا 3 ساعت درسی مختلف داشتیم در اینصورت چیکار باید بکنیم شاید این 2 ساعت وجود داشته باشه شاید نداشته باشه

tabib_m
پنج شنبه 10 مرداد 1387, 10:04 صبح
خوب طبیعتا باید برای هر کلاسی به صورت مجزا عمل مقایسه رو انجام بدی دیگه!


$class1=array('1-2','5-7','8-9');
$class2=array('3-4','5-6');


$result=true;
foreach($class1 az $time1){
list($start1,$end1)=explode('-',$time1);
foreach($class2 as $time2){
list($start2,$end2)=explode('-',$time2);
if($start1<$end2 and $start2<$end1){
$result=false;
}
}
}

if($result) echo "YES"; else echo "NO";

majoran
پنج شنبه 10 مرداد 1387, 10:21 صبح
سلام
خدا خیرت بده مثل اینکه مشکل منو داری حل میکنی دستت درد نکنه آقا یه توضیح کامل در باره کد بالا می خوام ازت و اینکه زمان هارو می تونم به صورت متغییر وارد آرایم بکنم .
خدا خیرت بده

tabib_m
پنج شنبه 10 مرداد 1387, 17:23 عصر
دو تا آرایه ی class1 و class2 رو باید از دیتابیست پر کنی. همون طور که واضحه این آرایه ها ساعات کلاس رو نشون میدن...

ابتدا به صورت پیش فرض تعیین میشه که ساعات هیچ تداخلی ندارن:


$result=true;

بعد به وسیله ی حلقه ی foreach، خونه های آرایه ی اول رو میخونی... به ازای هر دور حلقه که اجرا میشه، $time1 مقدار جدیدی میگیره (ساعت بعدی کلاس) و در هر دور حلقه یک بار دیگه حلقه ی foreach، ایندفعه برای class2 اجرا میشه و بعد عمل مقایسه بین دو زمان (مربوط به حلقه ی بیرونی و حلقه ی داخلی) مقایسه میشه و در هر بار، اگر تداخل زمانی ای وجود داشته باشه، مقدار $resutl برابر با فالس میشه... میتونی به کد مزبور دستور break رو هم اضافه کنی که اگر نتیجه برابر با فالس شد، دیگه حلقه ادامه پیدا نکنه (چون دیگه نیازی به ادامه دادن نیست)...
برای مثالی که من زدم، عمل مقایسه 6 بار انجام میشه (حلقه ی اول 3 دور میزنه و به ازای هر دور حلقه ی اول، حلقه ی دوم 2 دور میزنه که نتیجتا میشه 6 دور)

طبیعتا برای مقادیر آرایه ها باید از متغیر (که از دیتابیس گرفتی) استفاده کنی!...

موفق باشید.

majoran
پنج شنبه 10 مرداد 1387, 20:21 عصر
list($start1,$end1)=explode('-',$time1);
رو هم توضیح می دی
می خوام بدونم توی متغییر تایم چی قرار می گیره و چرا از تایم 1و2 استفاده کردی
آقا خدا خیرت بده مشکل ما رو حل کردی دستت درد نکنه این الگوریتمی که گفتی اسمی چیزی نداره بخوام کاملتر در موردش تحقیق کنم

tabib_m
پنج شنبه 10 مرداد 1387, 23:50 عصر
list (http://ir.php.net/manual/en/function.list.php) کارش اینه که عناصر یک آرایه رو به ترتیب میریزه توی متغیرهایی که توش گذاشتیم. مثلا:


$theArr=(1,2,3);

list($a,$b,$c)=$theArr;
/*
$a=1;
$b=2;
$c=3;
*/


کار تابع explode (http://ir.php.net/manual/en/function.explode.php) هم اینه که یک رشته رو میگیره و بر اساس کاراکتری که تعیین کردیم (در اینجا "-") اون رو تیکه تیکه میکنه و هر تیکه رو میندازه توی یک خونه از آرایه:


$string="a:b:c:d:e";

$theArr=explode(":",$string);

// $theArr=Array('a','b','c','d','e');


طبیعتا نتیجه ی کد مذکور این میشه:


list($start1,$end1)=Array(1,2);

# در نتیجه
$start1=1;
$end1=2;


تایم 1، مربوط میشه به کلاس 1 و تایم 2 هم مربوط میشه به کلاس 2

بقیه ش هم که فکر میکنم دیگه واضح باشه...

نه، الگوریتم خاصی نیست که بخوات اسمی داشته باشه...

موفق باشید.