تالار گفتمان مانشت
جایگزین goto در متلب! - نسخه‌ی قابل چاپ

جایگزین goto در متلب! - αɾια - ۲۱ تیر ۱۳۹۷ ۰۷:۲۵ ب.ظ

سلام ،چجوری میشه گفت اگه شرط برقرار بود/نبود برو یه سری کارا رو از اول انجام بده(اونقدر تکرار کن) تا شرط برقرار بشه/نشه!
goto که ظاهرا نداریم تو متلب، با break , continue و نوشتن ۱۰تا elseif پشت سرهم جواب نداد..
حتی تبدیل به تابع بازگشتیش کردم ولی بازم نشد Dodgy
هلپ Confused

کد:
for i=1:up
j=randi(x);
if A(j)>=B(i)
// دستورات //
else   //  انقدر جِی رو تولید کن تا شرط برقرار بشه


جایگزین goto در متلب! - Riemann - 21 تیر ۱۳۹۷ ۰۹:۰۲ ب.ظ

اگه اشتباه نکنم شما دارید یه ایندکس رندوم برای آرایه A تولید میکنید،‌یه راه حل اینه که یه مرحله پیشین بزارید و ایندکس عناصری که اون شرط براشون برقرار هست رو از قبل محاسبه کنید و تو کدتون استفاده کنید.

جایگزین goto در متلب! - The BesT - 21 تیر ۱۳۹۷ ۱۱:۰۸ ب.ظ

سلام.
اگر شرط اصلا انجام نشد چجوری میخواهید بگید تمام کن حلقه را ؟ که توی یه لوپ نیفته؟
من یکبار مشابه همین کار را میخواستم انجام بدهم ولی چون میدونستم ممکن هست به جواب نرسه ، یک متغیر گذاشتم که شرط را نهایتا تا ۱۰۰۰بار تکرار کند اگر اون کار انجام شد که خوبه اگر نشد دیگه احتمال اونکه رندوم من به جواب میرسید منفی میبود و برای همین حلقه بعد از ۱۰۰۰بار متوقف میکردم. این روش بدردتون میخوره؟
اگر بدرد نمیخوره تا روش دیگری را فکر کنیم شاید بدرد بخوره

RE: جایگزین goto در متلب! - Behnam‌ - ۲۲ تیر ۱۳۹۷ ۰۲:۴۷ ق.ظ

(۲۱ تیر ۱۳۹۷ ۰۷:۲۵ ب.ظ)Katerina Petrova نوشته شده توسط:  سلام ،چجوری میشه گفت اگه شرط برقرار بود/نبود برو یه سری کارا رو از اول انجام بده(اونقدر تکرار کن) تا شرط برقرار بشه/نشه!
goto که ظاهرا نداریم تو متلب، با break , continue و نوشتن ۱۰تا elseif پشت سرهم جواب نداد..
حتی تبدیل به تابع بازگشتیش کردم ولی بازم نشد Dodgy
هلپ Confused

کد:
for i=1:up
j=randi(x);
if A(j)>=B(i)
// دستورات //
else   //  انقدر جِی رو تولید کن تا شرط برقرار بشه

اولا
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
رو بخونید ببینید چرا نباید از goto استفاده کنید و چرا از زبان‌های ساخت‌یافته حذف شده.
بعدش هم این مشکل‌تون راه‌حل‌های زیادی داره. سعی کنید زیاد اسکریپت‌نویسی کنید تا این جور مسائل ساده براتون مشکل نشه.
منظورتون از "انقدر جِی رو تولید کن تا شرط برقرار بشه" واضح نیست چه شرطی. در حالت کلی یه راهش این هست:
کد:
else while(!condition){
...
}
البته باید حواس‌تون باشه که condition داخل حلقه‌ی while تغییر کنه. ممکنه هیچ وقت تغییر نکنه که میتنید یه counter هم تعریف کنید:
کد:
else while(!condition && i++ < max){
...
}
البته فکر کنم متلب increment قبول نمیکنه و ++ رو باید داخل حلقه بیارید.
اگه شرط‌تون هم این هست که j رو طوری تولید کنه که (A(j از (B(i بزرگتر باشه، اون موقع میتونید اصلا ادغام کنید:
کد:
for i = 1 : up
   j = randi(x)
   while A(j) < B(i)
      j = randi(x)
   end
   دستورات
end
یا
کد:
for i = 1 : up
   while 1 == 1
      j = randi(x)
      if A(j) >= B(i)
         break
      end
   end
   دستورات
end


RE: جایگزین goto در متلب! - αɾια - ۲۲ تیر ۱۳۹۷ ۱۰:۵۵ ق.ظ

(۲۱ تیر ۱۳۹۷ ۰۹:۰۲ ب.ظ)Riemann نوشته شده توسط:  اگه اشتباه نکنم شما دارید یه ایندکس رندوم...
اشتباه کردید Big GrinWink

(۲۱ تیر ۱۳۹۷ ۱۱:۰۸ ب.ظ)The BesT نوشته شده توسط:  سلام.
اگر شرط اصلا انجام نشد چجوری میخواهید بگید تمام کن حلقه را ؟ که توی یه لوپ نیفته؟
سلام ممنون،شرط انجام میشه ولی elseش رو نمیدونستم چجوری بنویسم و وقتی شرط برقرار نبود بدون هیچ عملی میرفت مرحله بعد.

(۲۲ تیر ۱۳۹۷ ۰۲:۴۷ ق.ظ)Behnam‌ نوشته شده توسط:  اولا
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
رو بخونید ببینید چرا نباید از goto استفاده کنید و چرا از زبان‌های ساخت‌یافته حذف شده.
بعدش هم این مشکل‌تون راه‌حل‌های زیادی داره. سعی کنید زیاد اسکریپت‌نویسی کنید تا این جور مسائل ساده براتون مشکل نشه.
بله خیلی ساده بود و کلی راه حل ولی چون نوشتنشو بلد نبود کلی if تودرتو نوشتم و گیج شدم.
مرسی با کدی که نوشتین جواب داد.

جایگزین goto در متلب! - Riemann - 22 تیر ۱۳۹۷ ۰۳:۵۱ ب.ظ

(۲۲ تیر ۱۳۹۷ ۱۰:۵۵ ق.ظ)Katerina Petrova نوشته شده توسط:  اشتباه کردید [تصویر:  biggrin.gif][تصویر:  wink.gif]
شرط میبندم که داری اشتباه میکنی Smile

تو مطلب هروقت به این مدل کارا رسیدی بدون داری یه جایی اشتب میزنی