ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2016/08/19
    159
    117

    برنامه بهینه

    سلام دوستان. بنظر شما بین دو شرط زیر فرقی وجود داره؟

    if (!w) {
    i = 0;
    } else {
    ++i;
    }


    // with:
    if (w) {
    ++i;
    } else {
    i = 0;
    }
    ویرایش توسط digi-rx : 2019/03/01 در ساعت 10:57

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  2. #2
    2016/08/19
    159
    117

    پاسخ : برنامه بهینه

    خوب. ظاهرا نتیجه هر دو یکسان هست هرچند در کدشون فرق هست. فرقش هم این که در اولین if میاد اول متغیر رو not میکنه و بعد شرط رو مقایسه میکنه.
    اما در عمل بستگی داره که این کد کجای برنامه قرار بگیره. همانطور که دیدیم باوجود یکسان بودن خروجی در اولینif یک عمل not اضافه انجام می شود.
    حال اگر این شرط در توابعی مثل تابع setup یا توابع دیگر که فقط قرار هست یکبار (یا بتعداد کمی) اجرا می شوندفرقی نمیکند که از این نوع if استفاده شود یا if دومی. اما:
    فرض کنید که برای هر عمل not میکرو یک کلاک مصرف کند و ما این شرط not شده رو در تابع loop اصلی برنامه گذاشتیم . با فرض اینکه تابع لوپ برنامه ما در هر ثانیه 1000بار اجرا می شود ( البته در میکروهای سرعت بالاتر مثل stm یا ماژول esp8266 این عدد چندین هزار بار خواهد بود) پس ما براحتی با یک not غیر ضروری بیش از 1000 کلاک در ثانیه از زمان پردازش میکرو را هدر داده ایم !

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  3. #3
    2016/08/19
    159
    117

    پاسخ : برنامه بهینه

    حال فرض کنید ما یک سنسور دما داریم که خروجی آنرا تبدیل به یک عدد صحیح int کرده ایم و قصد داریم آنرا به بازه هایی تقسیم کرده و در این بازه ها دستورات مدنظرمون رو اجرا کنیم (مثل خاموش روشن کردن فن) روشی که معمولا میبینم که خیلیها انجام میدن به صورت زیر است:

    if ((temp >= 0) && (temp < 12)) {
    // statment 1
    } else if ((temp >= 12) && (temp < 17)) {
    // statment 2
    } else if ((temp >= 17) && (temp < 23)) {
    // statment 3
    } else if ((temp >= 23) && (temp < 28)) {
    // statment 4
    } else if ((temp >= 28) && (temp < 38)) {
    // statment 5
    }

    بیاید ببینیم میکرو برای پردازش این دستورات چند عمل را باید انجام دهد:

    من اعمال و مقایسه های شرط اول رو فقط در تصویر مشخص کردم درنتیجه باید این تعداد در 5 ضرب شود. همانطور که میبینید تقریبا تعداد 24 عملیات رو باید انجام دهد. (آخرین خط else ندارد)
    آیا راه بهتری هست؟

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  4. #4
    2017/11/05
    Amol
    498
    181

    پاسخ : برنامه بهینه

    نقل قول نوشته اصلی توسط digi-rx

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    حال فرض کنید ما یک سنسور دما داریم که خروجی آنرا تبدیل به یک عدد صحیح int کرده ایم و قصد داریم آنرا به بازه هایی تقسیم کرده و در این بازه ها دستورات مدنظرمون رو اجرا کنیم (مثل خاموش روشن کردن فن) روشی که معمولا میبینم که خیلیها انجام میدن به صورت زیر است:

    if ((temp >= 0) && (temp < 12)) {
    // statment 1
    } else if ((temp >= 12) && (temp < 17)) {
    // statment 2
    } else if ((temp >= 17) && (temp < 23)) {
    // statment 3
    } else if ((temp >= 23) && (temp < 28)) {
    // statment 4
    } else if ((temp >= 28) && (temp < 38)) {
    // statment 5
    }

    بیاید ببینیم میکرو برای پردازش این دستورات چند عمل را باید انجام دهد:

    من اعمال و مقایسه های شرط اول رو فقط در تصویر مشخص کردم درنتیجه باید این تعداد در 5 ضرب شود. همانطور که میبینید تقریبا تعداد 24 عملیات رو باید انجام دهد. (آخرین خط else ندارد)
    آیا راه بهتری هست؟
    سلام من هم از همین روش استفاده میکنم ولی حدس میزنم روش سوییچ کیس بهتر باشه حالا دوستانی که با Switch/ Case کار کردن بیان بگن






    امیرحسین ضیا
  5. #5
    2016/08/19
    159
    117

    پاسخ : برنامه بهینه

    نقل قول نوشته اصلی توسط azjaguar

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام من هم از همین روش استفاده میکنم ولی حدس میزنم روش سوییچ کیس بهتر باشه حالا دوستانی که با Switch/ Case کار کردن بیان بگن
    خیلی ممنون آقای مهندس از اینکه تو بحث شرکت می فرمایید. ما هرچقدر بتونیم دستورات و یا توابعی که در برنامه درون حلقه قرار می گیرند (تکرار می شوند) رو کمتر کرده و یا حتی در صورت امکان به خارج از حلقه منتقل کنیم فشار پردازشی میکرو کمتر شده و بجاش می توانیم با همان میکرو کارهای دیگر و بیشتری انجام دهیم.
    (هدف از این تاپیک این هست که هر یک ازدوستان که براشون مقدور باشه تجربیاتشون رو در این زمینه اینجا به اشتراک بگذارند. ما هم یاد می گیریم.)
    هم با if میشه هم با switch. من تو این پست کد بهینه if رو قرار میدم و در پست بعد switch رو.

    if (temp < 38) {
    if (temp >= 28) {
    // statment 5
    } else if (temp >= 23) {
    // statment 4
    } else if (temp >= 17) {
    // statment 3
    } else if (temp >= 12) {
    // statment 2
    } else if (temp >= 0) {
    // statment 1
    }
    }

    بنظرم توی پست قبل تعداد عملیات رو کم شمردم. در هر صورت با مقایسه این کد با کد قبلی مشخصه که حدود 9 یا 10 عملیات در این کد کمتر انجام می شود.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  6. #6
    2016/08/19
    159
    117

    پاسخ : برنامه بهینه

    ;کد زیر کد switch مربوط به همان مثال بالا هست که باید تصحیح کنم که بهینه نمی باشد: (در آردوینو)

    int temp = ...;
    switch (temp) {
    case 0 ... 11:
    // statment 1
    break;
    case 12 ... 16:
    // statment 2
    break;
    case 17 ... 23:
    // statment 3
    break;
    case 23 ... 27:
    // statment 4
    break;
    case 28 ... 37:
    // statment 5
    break;
    }

    در حالتی که احتمال true شدن یکی از case ها بیشتر از سایرین هست باید اون case رو بالاتر از بقیه قرار داد. به این ترتیب مثلا در هزار بار اجرای switch فوق بصورت میانگین زمان کمتری از میکرو مصرف می شود.
    اگر احتمال وقوع بیشتر یک case وجود نداشته باشد بهتر است از همان گد بهینه if استفاده شود.
    البته در حالتهایی که تعداد شرط ها زیاد باشد در حالتی که مقدور باشد بهتر است از ساختارهای درختی استفاده گردد.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

نمایش نتایج: از 1 به 6 از 6

موضوعات مشابه

  1. بهینه سازی فازی با الگوریتم pso
    توسط reza_rouhi در انجمن Matlab
    پاسخ: 12
    آخرين نوشته: 2015/06/27, 19:20
  2. بهینه سازی توان راکتیو
    توسط hamidjavanmardi در انجمن سيستم هاي قدرت
    پاسخ: 0
    آخرين نوشته: 2015/04/03, 13:30
  3. کنترل بهینه
    توسط ghorbani89 در انجمن سيستم هاي كنترلي
    پاسخ: 0
    آخرين نوشته: 2015/03/23, 01:57
  4. ربات بهینه شده
    توسط arm_avr در انجمن ربات های مسیر یاب
    پاسخ: 1
    آخرين نوشته: 2013/12/24, 23:04
  5. اشنایی با روشها و تکنیکهای بهینه برنامه نویسی همدیگه
    توسط polestar در انجمن میکروکنترلرهای AVR
    پاسخ: 29
    آخرين نوشته: 2011/08/03, 14:55

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •