PDA

View Full Version : سوال: نوشتن یک تابع



saeed1985
پنج شنبه 27 بهمن 1390, 15:03 عصر
سلام.
با php چطور میشه این رو نوشت.
X$ مقداری معلوم هست $Z و $W متغییر. من میخوام مقدار R را تعیین کنم.
به این شکل که اول با توجه به متغییر ها میاد بررسی میکنه، اگر Z>W باشه مقدار Y=X میشه و Y رو به عنوان R معرفی میکند اگر نبود (یعنی Z<W بود) میره به مرحله بعد و از مقدار X یک واحد کم می کند و بعد دوباره میاد بررسی می کنه که آیا Z>W شده یا نه اگر Z>W شده بود میاد اون مقدار Y که به ازای آن Z>W شد را به عنوان R معرفی ولی اگر هنوز Z>W نشده بود دوباره میره به مرحله قبل و این بار 2 واحد از مقدار X کم میکنه (و یا یک روش دیگه میشه یک واحد دیگه از مقدار Y بدست آمده در مرحله قبل، کم کنه) و بعد دوباره میاد مقایسه میکنه که آیا Z>W شده یا نه و این حلقه آن قدر ادامه پیدا میکنه (یعنی میاد در هر مرحله یک واحد دیگه از X کم میکنه) تا Z>W بشه و آن وقت اون مقدار Y را که به ازای آن Z>W شد را به عنوان R معرفی میکنه.

MMSHFE
پنج شنبه 27 بهمن 1390, 16:28 عصر
دوست عزیز، Y$ میشه 50 چه ربطی به شرط Z>$W$ داره؟ اونها رو که تغییر ندادین. اصل مسئله رو بگین ببینیم چی میخواین؟ منظورم صورت سؤاله. ببینم میتونم خودم الگوریتمش رو براتون بنویسم یا نه.

saeed1985
پنج شنبه 27 بهمن 1390, 16:46 عصر
دوست عزیز، Y$ میشه 50 چه ربطی به شرط Z>$W$ داره؟ اونها رو که تغییر ندادین. اصل مسئله رو بگین ببینیم چی میخواین؟ منظورم صورت سؤاله. ببینم میتونم خودم الگوریتمش رو براتون بنویسم یا نه.

Y$ شده 50 چون به ازای مقادیر بیشتر از 50 شرط $Z$>W برقرار بوده ولی به ازای 50 دیگه شرط برقرار نشده یعنی شده $Z$<W به همین دلیل مقدار Y$ شده 50.

wallfa
جمعه 28 بهمن 1390, 00:54 صبح
خوب کلا یه چیزی نوشتم که اصلا ربطی به مسئله شما نداره ، شما باید اول خوب مسئله توجیح کنید که این کار نکردید . باید خط به خط بنویسید بعد اون بخواهید به شکل یه تابع در بیاد .



function($a,$b,$c,$d){
if($a>$b){
$g=$c-$d;
}
else{
$g=$d-$c;
}


}

saeed1985
جمعه 28 بهمن 1390, 02:02 صبح
پست اول ویرایش شد.

MMSHFE
جمعه 28 بهمن 1390, 09:52 صبح
وای خدای من دارم دیوانه میشم. عزیز شما یکبار دیگه توضیحاتتون رو بخونید، خودتون گیج میشین. برادر من متغیر X رو داریم تغییر میدیم. این چه ربطی به Z و W داره؟ اگه مقدار اونها برحسب X تعیین میشه، فرمولش رو بگین. اگر هم ربطی به X ندارن، پس با تغییر X نتیجه شرط Z>W هیچوقت تغییر نمیکنه. میشه سورس کد کاملتون رو بگذارین؟ یا حداقل الگوریتم کامل رو؟

saeed1985
جمعه 28 بهمن 1390, 12:54 عصر
وای خدای من دارم دیوانه میشم. عزیز شما یکبار دیگه توضیحاتتون رو بخونید، خودتون گیج میشین. برادر من متغیر X رو داریم تغییر میدیم. این چه ربطی به Z و W داره؟ اگه مقدار اونها برحسب X تعیین میشه، فرمولش رو بگین. اگر هم ربطی به X ندارن، پس با تغییر X نتیجه شرط Z>W هیچوقت تغییر نمیکنه. میشه سورس کد کاملتون رو بگذارین؟ یا حداقل الگوریتم کامل رو؟

X رو که من نوشتم مقداری معلوم هست یعنی یک عدد ثابت هست و تغییر نمیکنه و این Y هست که تغییر میکنه با توجه به شرط( Z>W ) و Z و W به صورت تصادفی انتخاب میشند برای همین شرط ممکنه همیشه برقرار نباشه. من پایین بدون Y توضیح میدم اونو که نوشتم یه مقدار گیج کننده شده.

X عددی ثابت.
Z و W به صورت تصادفی انتخاب شدن.

1. شرط Z>W را بررسی کن.
2. اگر شرط برقرار بود X را به عنوان R معرفی کن.
3. در غیر این صورت i (از 1 تا 100) واحد از X کم کن و برو به مرحله 1. (یعنی اول یک واحد از X کم میکنه و میره به مرحله 1 اگر شرط برقرار نبود 2 واحد کم میکنه و دوباره میره به مرحله 1 و این قدر این کار رو تکرار میکنه تا شرط برقرار بشه و اون مقدار از X را که به ازای آن شرط برقرار شد را به عنوان R اعلام کنه.)

MMSHFE
جمعه 28 بهمن 1390, 15:41 عصر
ببینید این کد کاری که میخواین رو انجام میده؟


$w = rand();
$z = rand();
for($x = 100; ($x >= 1) && ($z > $w); $x--) {
$w = rand();
$z = rand();
}
echo 'R = '.$x;

saeed1985
جمعه 28 بهمن 1390, 15:51 عصر
ببینید این کد کاری که میخواین رو انجام میده؟


$w = rand();
$z = rand();
for($x = 100; ($x >= 1) && ($z > $w); $x--) {
$w = rand();
$z = rand();
}
echo 'R = '.$x;


این فقط مال وقتی هست که Z>W باشه و اگر نباشه باید یک واحد از X کم کنه و این کار رو این قدر تکرار کنه تا Z>W بشه. Z و W هم فقط اول کار به صورت تصادفی گرفته میشن و به عنوان شرط ازشون استفاده میشن و مقدارشون دیگه تا پایان ثابت میمونه.

MMSHFE
جمعه 28 بهمن 1390, 16:04 عصر
ببین عزیز، اومدی دوباره نسازی ها! اگه W و Z همون اول کار بطور تصادفی انتخاب بشن و دیگه تغییر نکنن، تا قیامت هم ما بیاییم از X یکی یکی کم کنیم، فایده ای نداره چون نسبت بین W و Z ثابته (درسته همون اول تصادفی انتخاب کردیم ولی دیگه تغییرشون نمیدیم). یعنی اگه قبل از حلقه، W از Z کوچکتر باشه، تا آخر حلقه کوچکتر باقی میمونه و بالعکس. بنابراین، داخل حلقه باید تغییرشون بدیم. حالا اگه میخواین شرط Z>W رو میتونید تغییر بدین و بصورت Z<W بگذارین. اینطوری حلقه تا وقتی تکرار میشه که یا X به 1 برسه یا اینکه Z دیگه کوچکتر از W نباشه. اینطوری فکر میکنم به هدف شما نزدیکتر باشه. موفق باشید.

saeed1985
جمعه 28 بهمن 1390, 19:35 عصر
ببین عزیز، اومدی دوباره نسازی ها! اگه W و Z همون اول کار بطور تصادفی انتخاب بشن و دیگه تغییر نکنن، تا قیامت هم ما بیاییم از X یکی یکی کم کنیم، فایده ای نداره چون نسبت بین W و Z ثابته (درسته همون اول تصادفی انتخاب کردیم ولی دیگه تغییرشون نمیدیم). یعنی اگه قبل از حلقه، W از Z کوچکتر باشه، تا آخر حلقه کوچکتر باقی میمونه و بالعکس. بنابراین، داخل حلقه باید تغییرشون بدیم. حالا اگه میخواین شرط Z>W رو میتونید تغییر بدین و بصورت Z<W بگذارین. اینطوری حلقه تا وقتی تکرار میشه که یا X به 1 برسه یا اینکه Z دیگه کوچکتر از W نباشه. اینطوری فکر میکنم به هدف شما نزدیکتر باشه. موفق باشید.
حق با شماست چون من فراموش کردم که بگم X و W هم رابطه مستقیم با هم دارند. اگر Z<W با کم شدن X مقدار W هم کم میشه برای همین تا آخر حلقه کوچکتر باقی نمیمونه و یه جایی بالاخره Z>W میشه. حالا اگر میشه با این شرایط اون قسمت دوم هم یعنی وقتی که Z<W اضافه کنید ممنون میشم.

MMSHFE
جمعه 28 بهمن 1390, 23:19 عصر
اگه بدونین چقدر از ساختار for زبانهای خانواده C خوشم میاد!
این کد رو ببینید:


for($x = 0, $w = rand(), $z = rand(); ($x < 100) && ($z < $w); $x++, $w--);
echo 'R = '.$x;

دقت کنید که ; آخر دستور for یادتون نره. موفق باشید.