تالار گفتمان مانشت

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

کد:
for i=1:up
j=randi(x);
if A(j)>=B(i)
// دستورات //
else   //  انقدر جِی رو تولید کن تا شرط برقرار بشه
اگه اشتباه نکنم شما دارید یه ایندکس رندوم برای آرایه A تولید میکنید،‌یه راه حل اینه که یه مرحله پیشین بزارید و ایندکس عناصری که اون شرط براشون برقرار هست رو از قبل محاسبه کنید و تو کدتون استفاده کنید.
سلام.
اگر شرط اصلا انجام نشد چجوری میخواهید بگید تمام کن حلقه را ؟ که توی یه لوپ نیفته؟
من یکبار مشابه همین کار را میخواستم انجام بدهم ولی چون میدونستم ممکن هست به جواب نرسه ، یک متغیر گذاشتم که شرط را نهایتا تا 1000بار تکرار کند اگر اون کار انجام شد که خوبه اگر نشد دیگه احتمال اونکه رندوم من به جواب میرسید منفی میبود و برای همین حلقه بعد از 1000بار متوقف میکردم. این روش بدردتون میخوره؟
اگر بدرد نمیخوره تا روش دیگری را فکر کنیم شاید بدرد بخوره
(21 تير 1397 07:25 ب.ظ)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
(21 تير 1397 09:02 ب.ظ)Riemann نوشته شده توسط: [ -> ]اگه اشتباه نکنم شما دارید یه ایندکس رندوم...
اشتباه کردید Big GrinWink

(21 تير 1397 11:08 ب.ظ)The BesT نوشته شده توسط: [ -> ]سلام.
اگر شرط اصلا انجام نشد چجوری میخواهید بگید تمام کن حلقه را ؟ که توی یه لوپ نیفته؟
سلام ممنون،شرط انجام میشه ولی elseش رو نمیدونستم چجوری بنویسم و وقتی شرط برقرار نبود بدون هیچ عملی میرفت مرحله بعد.

(22 تير 1397 02:47 ق.ظ)Behnam‌ نوشته شده توسط: [ -> ]اولا
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
رو بخونید ببینید چرا نباید از goto استفاده کنید و چرا از زبان‌های ساخت‌یافته حذف شده.
بعدش هم این مشکل‌تون راه‌حل‌های زیادی داره. سعی کنید زیاد اسکریپت‌نویسی کنید تا این جور مسائل ساده براتون مشکل نشه.
بله خیلی ساده بود و کلی راه حل ولی چون نوشتنشو بلد نبود کلی if تودرتو نوشتم و گیج شدم.
مرسی با کدی که نوشتین جواب داد.
(22 تير 1397 10:55 ق.ظ)Katerina Petrova نوشته شده توسط: [ -> ]اشتباه کردید [تصویر:  biggrin.gif][تصویر:  wink.gif]
شرط میبندم که داری اشتباه میکنی Smile

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