اطلاعیه

Collapse
No announcement yet.

جمع اعداد درون آرایه در کد ویژن

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    جمع اعداد درون آرایه در کد ویژن

    سلام
    من یک eeprom ایجاد کردم که 12 مقدار رو بصورت آرایه درون خودش ذخیره میکنه.

    من میخوام بدونم چطور میشه تمام اعداد داخل آرایه با هم جمع میشن.

    کدویژن

    به این شکل جواب نمیده و اعداد رو اشتباه جمع میکنه و .... .

    for (o=0;o<12;o++)
    {
    sum += MinuteVal[o];
    lcd_gotoxy(11,2);
    sprintf(Buffer_LCD0,"%d ", sum);
    lcd_puts(Buffer_LCD0);
    };

    جدیدترین ویرایش توسط shoniz; ۱۲:۴۷ ۱۳۹۹/۰۲/۱۸.
    *\ وقتی ارزش ها عوض بشن، عوضی ها باارزش می شن /*

    #2
    پاسخ : جمع اعداد درون آرایه در کد ویژن

    کسی میدونه چطور میشه مقدار وارد شده در اندیس آرایه رو چطور با هم جمع کنیم و روی ال سی دی نمایش بدیم؟

    من هر کاری میکنم درست جمع نمیکنه
    *\ وقتی ارزش ها عوض بشن، عوضی ها باارزش می شن /*

    دیدگاه


      #3
      پاسخ : جمع اعداد درون آرایه در کد ویژن

      نوشته اصلی توسط shoniz نمایش پست ها
      کسی میدونه چطور میشه مقدار وارد شده در اندیس آرایه رو چطور با هم جمع کنیم و روی ال سی دی نمایش بدیم؟

      من هر کاری میکنم درست جمع نمیکنه
      سلام
      اگر منظورتون همون کد بالا باشه، با یک اصلاح کوچیک به شکل زیر باید کار کنه:

      sum = 0;
      for (o=0;o<12;o++)
      {
      sum += MinuteVal[o];
      }
      lcd_gotoxy(11,2);
      sprintf(Buffer_LCD0,"%d ", sum);
      lcd_puts(Buffer_LCD0);

      فقط یه سوال؛ ابعاد LCD چقدره؟ این کد برای LCD هایی مناسبه که بیشتر از 2 تا سطر داشته باشن. توی LCD های 2*16 که معمولا استفاده میه، سطر شماره 2 نداریم!

      دیدگاه


        #4
        پاسخ : جمع اعداد درون آرایه در کد ویژن

        نوشته اصلی توسط hossein.m98 نمایش پست ها
        سلام
        اگر منظورتون همون کد بالا باشه، با یک اصلاح کوچیک به شکل زیر باید کار کنه:

        sum = 0;
        for (o=0;o<12;o++)
        {
        sum += MinuteVal[o];
        }
        lcd_gotoxy(11,2);
        sprintf(Buffer_LCD0,"%d ", sum);
        lcd_puts(Buffer_LCD0);

        فقط یه سوال؛ ابعاد LCD چقدره؟ این کد برای LCD هایی مناسبه که بیشتر از 2 تا سطر داشته باشن. توی LCD های 2*16 که معمولا استفاده میه، سطر شماره 2 نداریم!
        ابعاد lcd 4x20 هست.
        این
        sum += MinuteVal[o];
        کل اندیس های آرایه رو با خودش جمع میکنه.
        اما مثلا
        MinuteVal[0]+MinuteVal[1]+MinuteVal[2]+ ....+ MinuteVal[11]
        درست انجام میشه
        *\ وقتی ارزش ها عوض بشن، عوضی ها باارزش می شن /*

        دیدگاه


          #5
          پاسخ : جمع اعداد درون آرایه در کد ویژن

          نوشته اصلی توسط shoniz نمایش پست ها
          ابعاد lcd 4x20 هست.
          این
          sum += MinuteVal[o];
          کل اندیس های آرایه رو با خودش جمع میکنه.
          اما مثلا
          MinuteVal[0]+MinuteVal[1]+MinuteVal[2]+ ....+ MinuteVal[11]
          درست انجام میشه
          خوب مگه انتظار دیگه ای از این کد داشتید؟ این کد کارش اینه سلول های 0 تا 11 یک آرایه رو با هم جمع کنه. فقط باید توجه داشته باشید که نوع داده sum به قدری بزرگ باشه که با جمع کردن مقادیر آرایه، sum دچار سرریز نشه. مثلا اگر آرایه شما از نوع 8 بیتی باشه، سایز sum باید حداقل 16 بیتی باشه و گرنه امکان سرریز وجود داره. اگر آرایه 16 بیتیه، sum باید 32 بیتی باشه. همیشه باید توی طراحی و کدنویسی بدترین شرایط رو مد نظر قرار داد.

          دیدگاه


            #6
            پاسخ : جمع اعداد درون آرایه در کد ویژن

            نوشته اصلی توسط hossein.m98 نمایش پست ها
            خوب مگه انتظار دیگه ای از این کد داشتید؟ این کد کارش اینه سلول های 0 تا 11 یک آرایه رو با هم جمع کنه. فقط باید توجه داشته باشید که نوع داده sum به قدری بزرگ باشه که با جمع کردن مقادیر آرایه، sum دچار سرریز نشه. مثلا اگر آرایه شما از نوع 8 بیتی باشه، سایز sum باید حداقل 16 بیتی باشه و گرنه امکان سرریز وجود داره. اگر آرایه 16 بیتیه، sum باید 32 بیتی باشه. همیشه باید توی طراحی و کدنویسی بدترین شرایط رو مد نظر قرار داد.
            مشکلی با مقدارش ندارم.

            مشکل من اینه که میخوام 12 تا زمان برای 12 قسمت برنامم بگیرم. تمام زمان های دقیقه رو تو خط بعد تبدیل کنه به ساعت و نشون بده.
            حالا : این کد تمامش رو جمع میکنه. اما به ازای هر بار دکمه ی upkey تمام اعداد 12 آرایه رو با خودش جمع میکنه.
            مثلا دقیقه ها شدن 130 دقیقه. با زدن دکمه upkey میشه 260 و مجدد بزنم میشه 390 و .....

            اما اینطوری خیلی خوب کار میکنه :
            sum = MinuteVal[1]+MinuteVal[2]+MinuteVal[3]+MinuteVal[4]+MinuteVal[5]+MinuteVal[6]+MinuteVal[7]+MinuteVal[8]+MinuteVal[9]+MinuteVal[10]+MinuteVal[11]+MinuteVal[12];
            حالا راه حل لطفاً
            *\ وقتی ارزش ها عوض بشن، عوضی ها باارزش می شن /*

            دیدگاه


              #7
              پاسخ : جمع اعداد درون آرایه در کد ویژن

              نوشته اصلی توسط shoniz نمایش پست ها
              مشکلی با مقدارش ندارم.

              مشکل من اینه که میخوام 12 تا زمان برای 12 قسمت برنامم بگیرم. تمام زمان های دقیقه رو تو خط بعد تبدیل کنه به ساعت و نشون بده.
              حالا : این کد تمامش رو جمع میکنه. اما به ازای هر بار دکمه ی upkey تمام اعداد 12 آرایه رو با خودش جمع میکنه.
              مثلا دقیقه ها شدن 130 دقیقه. با زدن دکمه upkey میشه 260 و مجدد بزنم میشه 390 و .....

              اما اینطوری خیلی خوب کار میکنه :
              sum = MinuteVal[1]+MinuteVal[2]+MinuteVal[3]+MinuteVal[4]+MinuteVal[5]+MinuteVal[6]+MinuteVal[7]+MinuteVal[8]+MinuteVal[9]+MinuteVal[10]+MinuteVal[11]+MinuteVal[12];
              حالا راه حل لطفاً
              اول اینکه آرایه شما 12 سلولی هستش، پس سلول شماره 12 نداره! از صفر داره تا 11. اینجور که شما نوشتی سلول اول آرایه رو تو محاسبات نمیاره، و چون سلول شماره 12 نداریم، پس مقدار سلول 12 هر چیزی میتونه باشه و تضمینی برای مقدارش وجود نداره. نتیجتا اصلا محاسبات درستی رو شاهد نخواهیم بود.
              دوما اگر کد من رو اجرا کرده باشید که فکر نکنم کرده باشید، توی همون خط اول sum صفر شده که sum توی هربار محاسبه، با مقدار مرحله قبلش جمع نشه! هزار بار هم که این قطعه کد اجرا بشه، هر بار جمع مقادیر آرایه رو بر میگردونه و چیزی غیر از اون اضافه نمیکنه. فقط همونطوری که قبلا گفتم، باید سایز sum به درستی انتخاب بشه تا سر ریز نکنه.

              دیدگاه

              لطفا صبر کنید...
              X