به محفل ریاضی ایرانیان خوش آمدید! لطفا برای استفاده از تمامی امکانات عضو شوید
سایت پرسش و پاسخ ریاضی
+1 امتیاز
103 بازدید
در دبیرستان و دانشگاه توسط masoud_tesna (15 امتیاز)
ویرایش شده توسط admin

با سلام خدمت اساتید محترم. بنده برنامه‌نویسیِ صفحهٔ اینترنتی انجام می‌دهم. برای طراحی یک قسمت گیر کردم.

توضیحات تصویر

شکل بالا رو نگاه کنید. تعداد گزینه‌ها (آیتم‌ها) باید مضربی از ۳ باشد، مانند ۳، ۶ و ۹. در برنامه‌نویسی یک چیزی داریم به نام foreach که باعث می‌شود به تعداد هر کدام از گزینه‌ها یک جعبهٔ مشکی ایجاد بشود، همان‌گونه که در شکل می‌بینید. اما من می‌خواستم به ازای هر سه گزینه یک جعبهٔ مشکی ایجاد بشود. برای این کار من هر بار که foreach اجرا می‌شود یک واحد به متغیر $k$ می‌افزایم. یعنی گفتم هر زمانی که شرط زیر روی داد یک جعبهٔ سیاه بسازد و گزینه‌های بعد از آخرین جعبهٔ پیشین تا اینجا که ۳ تا می‌شوند را درونش بگذار.

k % 3 == 0

تا اینجای کار همه چیز درست است. کار دومی که من می‌خواهم انجام بدهم این است که از این ۹ گزینه بتوانم گزینه‌های ۱ و ۴ و ۷ را انتخاب کنم. تعداد گزینه‌ها متغیر هستند، برای همین اگر به جای ۹ گزینه، ۳ گزینه داشته باشم آنگاه نوشتن «گزینه‌های ۱ و ۴ و ۷ را انتخاب کن» به اشکال بر می‌خورد چون گزینهٔ چهارمی وجود ندارد. چگونه می‌توانم به برنامه بگویم که گزینه‌هایی که یک واحد بیشتر از مضرب‌های ۳ هستند را خودکار انتخاب کند؟ همین کار را اگر بخواهم آنهایی که ۲ واحد بیشتر از مضرب‌های ۳ هستند و همین طور آنهایی که مضرب ۳ هستند را چگونه باید انجام بدهم؟


@fardina @AmirHosein

با سلام من واقعا متشکرم از پاسختون. من رو ببخشید که خیلی دیر شد. زبان برنامه نویسی استفاده شده PHP میباشد.. منظورم رو الان براتون کامل توضیح میدم.

توضیحات تصویر

این تصویر رو ببینید. از شماره 1 تا 9 شماره گذاری کردم. در این برنامه ما یک آرایه داریم که شامل این 9 تا آیتم هستن. فرض میکنیم اسم این آرایه $my_array میباشد حالا واسه دسترسی به هر کدوم از این آیتم ها میتونیم به صورت زیر کد نویسی کنیم:

$my_array[1] یا $my_array[2] و .... $my_array[9]

من با این روش میتونم به 9 آیتم آرایه دسترسی پیدا کنم. و کارمو انجام بدم بدون هیچ مشکلی! اما این واسه وقتیه که تعداد آیتم ها ثابت باشن یعنی مثلا همین 9 تا آیتم باشند. ولی اینطور نیست و تعدا آیتم ها ممکنه: 3 یا 6 یا 9 یا 12 ... (کلا هر تعدادی که بشه اونارو سه تا سه تا جدا کرد.) باشد...من اگر بخوام از این روش استفاده کنم هر موقع مدیر سایت خواست تعداد رو افزایش یا کاهش بده من هم باید برم و به همون تعداد از $my_array استفاده کنم.. خب پس تصمیم میگیریم که از یک تابع به اسم foreach که بهش میگن حلقه استفاده کنیم.. این تابع میاد آرایه رو تو یک حلقه قرار میده و به ازای هر آیتم اون کارهایی که میخوایم رو انجام میده مثلا:

توضیحات تصویر

خب کد بالا میاد به تعداد هر کدوم از آیتم ها اسم اون آیتم(که نام دسته بندی) و تصویر (که تصویر شاخص دسته بندی) هست رو نشون میده به چه شکلی؟؟؟ همون تصویری که بالا براتون گذاشتم.. پشت سر هم بدون اینکه بشه بهش گفت مثلا بیا سه تارو باهم نشون بده بعد برو سه تای بعدی یا خیلی چیزای دیگه...

حالا اگه من بخوام سه تا آیتم رو درون یک باکس قرار بدم نه یکی یکی مثل تصویر زیر:

توضیحات تصویر

میام حلقه رو به صورت زیر تغییر میدم:

توضیحات تصویر

خب اول هر کدی که نوشتم رو توضیح بدم:

1- ایجاد کردن متغییری به اسم $k و برابر کردن اون با صفر.

2- برای ایجاد باکس از کد <div> استفاده میشه که شروع باکس و پایان باکس با </div> .

3- برای چاپ کردن هم از کد echo استفاده میشه.

4- برای اینکه بفهمیم درون آرایه دقیقا چند آیتم وجود داره از کد count($my_array) استفاده میشه.

5- ایجاد شرط کد if و اگر شرط برقرار نبود کد else

حالا من حلقه رو شروع کردم و به ازای هر آیتم که حلقه اجرا میشه یک واحد به متغییر $k اضافه کردم... دو تا خط بعدی اومدم اسم دسته بندی و تصویرش رو چاپ کردم. خط بعدی اومدم شرطی رو گزاشتم برای بسته شدن باکس(</div>) گفتم اگر: $k % 3 == 0 و همچنین متغییر $k کوچیک تر از تعداد کل آیتم های آرایه (count($my_array)) اگر این دو شرط برقرار بود باکس رو میبنده (< /div>) بعد از بستن باکس میاد باکس بعدی رو باز میکنه (< div>) . با این حساب باکسی که خارج از حلقه ایجاد شده اگر شرط برقرار بود اون باکس رو میبنده و یک باکس جدید درست میکنه برای سه آیتم بعدی و همینجور میره تا آخر که دیگه شرط قابل قبول نباشه در اینصورت با کد else میگیم فقط باکس رو ببند (< /div>) که آخرین باکس ایجاد شده رو میبنده و دیگه نیاز نیست باکس جدیدی بسازه! خب با کدهای بالا به ازای هر سه آیتم باکس ایجاد میکنه که دقیقا تصویر بالا ایجاد میشه.... تا اینجای کار همه چیز درسته. خب آخرین چیزی که من میخوام انجام بدم انتخاب کردن آیتم اول، دوم و سوم هر باکس. یعنی: اول انتخاب: 1، 4 و 7 بعد انتخاب: 2، 5 و 8 و در آخر انتخاب: 3، 6 و 9 باید به صورتی باشه که اگر تعدا از 9 تا به 12 تا ارتقا پیدا کرد که میشه چهار باکس نیاز به تغییر کد ها برای انتخاب هر آیتم نباشه درست مثل کد: $k % 3 == 0 که سه تا سه تا جدا میکرد و دیگه نیاز نیست با تغییر تعدا آیتم ها این کد هم تغییر بکنه! از شما دوستان و اساتید گرامی کمال تشکر رو دارم، و منو به خاطر طولانی شدن این سوال ببخشید. امیدوارم بتونم برای شما عزیزان جبران کنم..

توسط fardina (17,196 امتیاز)
+2
مطمئن نیستم میخواید دقیقا چه کاری انجام بدید؟
ولی با توجه به متغیر k که دارید وقتی میخواید متغیر اول، چهارم و هفتم رو انتخاب کنید، با توجه به کدی که نوشتید میشه آیتم هایی که متغیر k در تقسیم بر 3 باقیمانده برابر 1 داشته باشند یعنی
k % 3 == 1
توسط AmirHosein (17,857 امتیاز)
ویرایش شده توسط AmirHosein
@masoud_tensa من هم چیزی که از متن شما دستگیرم می‌شود همان چیزی است که آقای @fardina در دیدگاه پاسخ‌تان داده‌اند. به هر حال بد نیست که زبان برنامه‌نویسی مورد نظر را هم نام ببرید. برایتان نیز متن و عنوان و برچسب پرسش‌تان را ویرایش کردم.
توسط admin (1,694 امتیاز)
+1
@masoud_tensa متن پرسش را نباید در قسمت پاسخ بیاورید. متن جدیدتان اضافه شد.
@AmirHosein
@fardina

1 پاسخ

0 امتیاز
توسط AmirHosein (17,857 امتیاز)
انتخاب شده توسط masoud_tesna
 
بهترین پاسخ

آقای @fardina همان ابتدای کار در دیدگاهشان پاسخ شما را دادند. من هم در ویرایشی که بر روی پرسش‌تان انجام دادم کاملا منظورتان را مشخص کرده‌بودم. فقط پرسیده بودم که از چه زبان برنامه‌نویسی‌ای استفاده می‌کنید که پاسخش PHP بود. من در اینجا نمونه‌ای دیگر پاسخ شما را می‌دهم. فرض کنید می‌خواهم نام سیاره‌های منظومهٔ خورشیدی را به ترتیب بیاورم و ۳ تا ۳ تا آنها را در یک جعبه قرار بدهم و آنهایی که ابتدای جعبه قرار می‌گیرند را قرمز رنگ کنم. چون بعدها ممکن است تعداد سیاره‌های ثبت‌شده تغییر کند پس این کار را مانند شما با کمک یک آرایه (لیست) انجام می‌دهم، پس در صورت کاسته یا افزوده شدن به تعداد سیاره‌ها یا تغییر نام یا تریتب، کافی است فقط آرایه‌مان را تغییر دهیم و مابقی کار به طور خودکار صورت می‌گیرد. خودتان مگر برای جدا کردن ۳ تا ۳ تای گزینه‌ها از $k % 3 == 0 استفاده نکرده‌اید؟ معنای آن را مگر نمی‌دانید؟ علامت درصد در زبان PHP و در واقع در خیلی از زبان‌های برنامه‌نویسی یعنی باقیماندهٔ تقسیم عدد سمت چپش (عدد یکُم) بر عدد سمت راستش (عدد دوم). پس زمانی که می‌نویسید $k % 3 یعنی باقیماندهٔ عددی که در متغیر $k قرار دارد بر عدد ۳. و گذاشتن == 0 یعنی آیا برابر با صفر است؟ خب حالا عددهایی که یک واحد از مضربی از ۳ بزرگتر باشند را چگونه بیان کنیم؟ مگر باقیماندهٔ تقسیم این عددها بر ۳ برابر با ۱ نمی‌شود؟ خب خیلی راحت از همان چیزی که پیش‌تر هم استفاده کرده‌اید استفاده کنید بنویسید $k % 3 == 1. و همینطور برای موردهای مشابه دیگر، دو واحد بیشتر از مضرب ۳، یا ۱۳ واحد بیشتر از مضرب ۱۰۰ و ... .

در زیر کد PHP که برای این نمونه نوشتم را می‌توانید ببینید، شاید اینطوری بهتر متوجه شوید. در ضمن یک بار با foreach نوشتم و بار دیگر با for.

<!DOCTYPE html>
<html>
<head>
<style>
div {
  width: 320px;
  padding: 10px;
  border: 5px solid gray;
  margin: 0;
}
</style>
</head>
<body>
<?php
// Defining an array containing names of the planets of the solar system.
$list=array("Mercury","Venus","Earth","Mars","Jupitor","Saturn","Uranus","Neptune","Planet nine");

echo "< h4>< font color=\"blue\">Using \"foreach\"< /font>< /h4>";
$k=0;
echo "<div>";
foreach ($list as $item) {
    $k = $k +1;
    if ( $k % 3 == 1) {
        echo "< font color=\"red\">$item, </font>";
    } elseif ( $k % 3 == 0 && $k < count($list) ) {
        echo "$item</div><div>";
    } elseif ( $k == count($list) ) {
        echo "$item.< /div>";
    } else {
        echo "$item, ";
    }
}
echo "</div>";

echo "<h4><font color=\"blue\">Using \"for\"</font></h4>";

echo "<div>";
for ($i = 0; $i < count($list); $i++) {
    if ( ($i+1) % 3 == 1) {
        echo "< font color=\"red\">$list[$i], < /font>";
    } elseif ( ($i+1) % 3 == 0 && $i <  count($list)-1 ) {
        echo "$list[$i]</div><div>";
    } elseif ( $i == count($list)-1 ) {
        echo "$list[$i].</div>";
    } else {
        echo "$list[$i], ";
    }
}
?>
</body>
</html>

خروجی این کد به شکل زیر می‌شود.

توضیحات تصویر


حمایت مالی

کانال تلگرام محفل ریاضی
امروز : تاریخ شمسی اینجا نمایش داده می‌شود
...