NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4125 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 20 از 23

موضوع: ضرب دو عدد در کدویژن<کمک کنید لطفا>

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    Icon16 ضرب دو عدد در کدویژن<کمک کنید لطفا>

    سلام و عرض خسته نباشید
    دوستان من یه پروژه ای دارم که ولتمتر و امپر متر هست که با atmega 8 ساخته شده
    حالا قراره یه دستوری رو اخر برنامه اضافه کنم که این ولت وامپری که تو lcdنمایش داده شده رو ضرب در هم کنه ونمایش بده (یعنی وات رو نشون بدیم)
    کد رو میزارم خواهشا راهنمایی کنین
    [PHP]unsigned int v_measure(void)
    {
    ADC_VREF_TYPE=0x40;
    v=read_adc(0)*4.8875855327468;
    vv=v;
    Vadj1=(v%100)/10;
    Vadj2=(v%100)%10;
    v=v/100;
    sprintf(voltage,"V=%d.%d%d ",v,Vadj1,Vadj2);
    return vv;
    }

    unsigned int i_measure(void)
    {
    ADC_VREF_TYPE=0x40;
    i=(read_adc(1)*5)/(1.023*0.56);
    if(i<1000)
    {
    ADC_VREF_TYPE=0x00;
    i=(read_adc(1)*1.5)/(1.023*0.56);
    }
    ADC_VREF_TYPE=0x40;
    return i;
    }

    void show_vi(void)
    {
    lcd_gotoxy(0,0);
    lcd_puts(voltage);

    if(i<1000)
    {
    sprintf(current,"I=%d mA ",i);
    lcd_gotoxy(8,0);
    lcd_puts(current);
    }
    else
    {
    Iadj1=(i%1000)/100;
    Iadj2=((i%1000)/10)%10;
    Iadj3=(i%1000)%10;
    sprintf(current,"I=%d.%d%d%dA",i/1000,Iadj1,Iadj2,Iadj3);
    lcd_gotoxy(8,0);
    lcd_puts(current);
    }
    lcd_gotoxy(0,1);
    LCDprogressBar(v,40,16);
    }[/PHP]
    البته خودم تونستم تو نمایش گر وات رو نشون بدم ولی عدد صحیحی نشون نمیده و ثابت میمونه

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    سلام،
    شما اصلاً توابع v_measure و i_measure رو در برنامتون صدا نکردین! فقط تعریفشون کردید.

  4. تشکرها از این نوشته :


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_h نمایش پست ها
    سلام،
    شما اصلاً توابع v_measure و i_measure رو در برنامتون صدا نکردین! فقط تعریفشون کردید.
    نه دوست عزیز این همون کد امپرمتر و ولتمترهست،مشکلی هم نداره
    من فقط میخوام این دو توابع v - i رو به هم ضرب کنم


    البته من این کد رو نوشتم وتو lcdنمایش میده مشکل اینه که عدد وات صحیح نماید

    کد:
    sprintf(watt,"W=%d.%d%d%dw",v*i);
        lcd_gotoxy(1,1);
        lcd_puts(watt);

  6. #4
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    شما 4 بار از %d استفاده کردید و فقط یک مقدار V*I رو فرستادین.
    اگر منظورتون چاپ عدد با 3 رقم اعشار بوده باید این طوری بنویسید:
    کد:
    sprintf(watt,"W=%.3f W",v*i);

  7. تشکرها از این نوشته :


  8. #5
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_h نمایش پست ها
    شما 4 بار از %d استفاده کردید و فقط یک مقدار V*I رو فرستادین.
    اگر منظورتون چاپ عدد با 3 رقم اعشار بوده باید این طوری بنویسید:
    کد:
    sprintf(watt,"W=%.3f W",v*i);
    خيلي ممنون علي اقا حالا يه مشكل اصلي كه هست اينه كه نتيجه ضرب رو درست نشون نميده
    البته اينم بگم كه p رو با float تعريف كردم وقتي با char تعريف ميكنم يه عدد ديگه نشون ميده

  9. #6
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

    سلام
    خب معلومه که نتیجه ضرب درست در نمیاد و دلیلش هم اینه که اومده تو برنامه مقادیر اعشار رو به عدد صحیح تبدیل کرده من اینجا یه نمونشو برای شما مثال میزنم:
    شما فرض کنید که میخواین عدد 2.011 روی ال سیدی نمایش بدین
    یه راهش اینه که بیاین عدد مورد نظر رو توی یه متغیر از نوع float ذخیره کنید و بعد توسط دستور sprintf تبدیل کنید و بعد نمایش بدین
    راه دیگه ای که حدودا تو این برنامه استفاده شده اینه که شما اعداد اعشار رو بصورت اعداد صحیح در بیارید
    یعنی به صورت زیر عمل کنید:
    کد:
    2.011*1000=2011
    در این حالت میبینید که عدد 2.011 به صورت عدد صحیح در اومد.
    در این حالت تنها اگر بتوانید به نحوی ارقام عدد به دست اومده رو از هم جدا کنید یعنی هر کدوم از ارقام 1و0و1و1 در یک متغیر جداگانه ذخیره کنید میتونید به این روشی که تو این برنامه استفاده شده مقدار مورد نظر رو روی ال سی دی نمایش بدین.برای جدا کردن ارقام از روش زیر استفاده شده:
    کد:
    2011%10=1
    2011/10%10=1
    2011/10/10%10=0
    2011/10/10/10=2
    میبینید که اعداد از هم جدا شدن حالا اگه هر کدوم رو تو یه متعیر جدا ذخیره کنی میتونی رو ال سی دی به روشی که تو این برنامه استفاده شده مقدار رو نمایش بدی :

    [PHP]sprintf(current,"I=%d.%d%d%dA",i/1000,Iadj1,Iadj2,Iadj3)[/PHP]

    موفق باشید
    ویرایش توسط vahidasm : 02-01-2013 در ساعت 20:33
    اولین مرحله شناخت آفرینش همانا خرد است چشم و گوش و زبان سه نگهبان اویند که لاجرم هر چه نیکی و شر است از همین سه ریشه می گیرد .و افسوس که بدنبال کنندگان خرد اندکند باید که به سخن دانندگان راه جست و باید جهان را کاوش نمود و از هر کسی دانشی آموخت و یک دم را هم برای آموختن نباید از دست داد . فردوسی خردمند

  10. کاربران : 4 تشکر کرده اند از شما vahidasm برای ارسال این پست سودمند:


  11. #7
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    Icon16

    نقل قول نوشته اصلی توسط vahidasm نمایش پست ها
    سلام
    خب معلومه که نتیجه ضرب درست در نمیاد و دلیلش هم اینه که اومده تو برنامه مقادیر اعشار رو به عدد صحیح تبدیل کرده من اینجا یه نمونشو برای شما مثال میزنم:
    شما فرض کنید که میخواین عدد 2.011 روی ال سیدی نمایش بدین
    یه راهش اینه که بیاین عدد مورد نظر رو توی یه متغیر از نوع float ذخیره کنید و بعد توسط دستور sprintf تبدیل کنید و بعد نمایش بدین
    راه دیگه ای که حدودا تو این برنامه استفاده شده اینه که شما اعداد اعشار رو بصورت اعداد صحیح در بیارید
    یعنی به صورت زیر عمل کنید:
    کد:
    2.011*1000=2011
    در این حالت میبینید که عدد 2.011 به صورت عدد صحیح در اومد.
    در این حالت تنها اگر بتوانید به نحوی ارقام عدد به دست اومده رو از هم جدا کنید یعنی هر کدوم از ارقام 1و0و1و1 در یک متغیر جداگانه ذخیره کنید میتونید به این روشی که تو این برنامه استفاده شده مقدار مورد نظر رو روی ال سی دی نمایش بدین.برای جدا کردن ارقام از روش زیر استفاده شده:
    کد:
    2011%10=1
    2011/10%10=1
    2011/10/10%10=0
    2011/10/10/10=2
    میبینید که اعداد از هم جدا شدن حالا اگه هر کدوم رو تو یه متعیر جدا ذخیره کنی میتونی رو ال سی دی به روشی که تو این برنامه استفاده شده مقدار رو نمایش بدی :

    [PHP]sprintf(current,"I=%d.%d%d%dA",i/1000,Iadj1,Iadj2,Iadj3)[/PHP]موفق
    باشید


    بینهایت ممنون از مهندسvahidasm عزیز
    همونطور که شما فرمودین به اون شکل انجام دادم ولی باز نتیجه نداد ببینین درسته ؟؟؟!!
    [PHP]char watt[16];
    unsigned p,sv,si;
    Vadj1=(v%100)/10;
    Vadj2=(v%100)%10;
    v=v/100;
    sv=v,Vadj1,Vadj2;

    Iadj1=(i%1000)/100;
    Iadj2=((i%1000)/10)%10;
    Iadj3=(i%1000)%10;

    si=i/1000,Iadj1,Iadj2,Iadj3;

    p=sv*si;
    sprintf (watt,"W=%d.%d%d w",p);
    lcd_gotoxy(4,1);
    lcd_puts(watt);
    [/PHP]
    خوهشا اشکالاتشو بگین من مبتدی ام

    یه سوال دیگه ، امکانش هست دوتا رشته رو به هم ضرب کرد و بعد نتیجه رو نمایش داد????
    یعنی به این شکل ؟؟
    [PHP]p=(voltage)*(current);[/PHP]
    ؟؟

  12. #8
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

    سلام
    1-شما قواعد دستور sprintf رو هنوز نمیدونید-دربارش تحقیق کنید
    2-این کدی که شما نوشتین به چه منظوری بوده؟
    [PHP]si=i/1000,Iadj1,Iadj2,Iadj3;[/PHP]
    و همچنین این:
    [PHP]sv=v,Vadj1,Vadj2;[/PHP]
    سوالی که از شما دارم اینه که شما اینا رو نوشتین و بدون مشکل کامپایل شد و هیچ خطایی نداد؟؟

    یه سوال دیگه ، امکانش هست دوتا رشته رو به هم ضرب کرد و بعد نتیجه رو نمایش داد????
    دوتا رشته رو میشه در هم ضرب کرد ولی اینا که اعداد صحیح نیستن که بخوای تو هم ضربشون کنی!
    یعنی اطلاعاتی که داخل اینها ریخته میشه رو نمیتونید به عنوان یک مقدار یا اصطلاحا value در نظر بگیرید.
    به زبون ساده اون کاری که شما میخواین انجام بدین با این دو رشته شدنی نیست
    اولین مرحله شناخت آفرینش همانا خرد است چشم و گوش و زبان سه نگهبان اویند که لاجرم هر چه نیکی و شر است از همین سه ریشه می گیرد .و افسوس که بدنبال کنندگان خرد اندکند باید که به سخن دانندگان راه جست و باید جهان را کاوش نمود و از هر کسی دانشی آموخت و یک دم را هم برای آموختن نباید از دست داد . فردوسی خردمند

  13. کاربران : 3 تشکر کرده اند از شما vahidasm برای ارسال این پست سودمند:


  14. #9
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    من اون قسمت si اومدم نتیجه اعداد i رو تو siریختم وهمینطور نتیجه voltage رو ریختم تو sv ، بعد این دوتا رو به هم ضرب کردم
    درمورد ارور هم بگم که به جای p ایناروضرب کردمsv*si تا ارور رفع شد الان هیچ اروری ندارم
    [PHP] sprintf (watt,"W=%d.%d.%d w",sv*si);
    [/PHP]

  15. #10
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

    سلام
    [PHP]si=i/1000,Iadj1,Iadj2,Iadj3; [/PHP]
    من تا حالا ندیدم کسی همچین کاری رو انجام بده-یا شما اشتباه انجام دادین یا سواد من درباره این موضوع کمه

    دوستانی که بلدن توضیح بدن
    شما بازم اومدین همون کار قبلی که انجام داده بودین رو دوباره انجام دادین یعنی:
    [PHP]sprintf (watt,"W=%d.%d.%d w",sv*si); [/PHP]
    اولا sv*si یه عدد میده شما اومدین 3 تا %d گذاشتین بعد بین هر کدوم هم ممیز گذاشتین
    همینه که میگم شما قوائد دستور sprintf رو نمیدونید و باید دربارش تحقیق کنید
    اولین مرحله شناخت آفرینش همانا خرد است چشم و گوش و زبان سه نگهبان اویند که لاجرم هر چه نیکی و شر است از همین سه ریشه می گیرد .و افسوس که بدنبال کنندگان خرد اندکند باید که به سخن دانندگان راه جست و باید جهان را کاوش نمود و از هر کسی دانشی آموخت و یک دم را هم برای آموختن نباید از دست داد . فردوسی خردمند

  16. کاربران : 2 تشکر کرده اند از شما vahidasm برای ارسال این پست سودمند:


  17. #11
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط vahidasm نمایش پست ها
    سلام
    [PHP]si=i/1000,Iadj1,Iadj2,Iadj3; [/PHP]من تا حالا ندیدم کسی همچین کاری رو انجام بده-یا شما اشتباه انجام دادین یا سواد من درباره این موضوع کمه

    دوستانی که بلدن توضیح بدن
    شما بازم اومدین همون کار قبلی که انجام داده بودین رو دوباره انجام دادین یعنی:
    [PHP]sprintf (watt,"W=%d.%d.%d w",sv*si); [/PHP]اولا sv*si یه عدد میده شما اومدین 3 تا %d گذاشتین بعد بین هر کدوم هم ممیز گذاشتین
    همینه که میگم شما قوائد دستور sprintf رو نمیدونید و باید دربارش تحقیق کنید
    بله پس حتما اشتباه از منه من فقط میخواستم همون اعداد که به قول شما به عدد صحیح تبدیل شده رو فراخوانی کنم بعد ضربدر هم کنم
    میشه شما راهنمایی کنین که چطوری ضرب کنم که نتیجه رو درست بده؟؟؟؟؟؟


    درموردsprintf هم یه مطالعی کردم درست! ولی اینارو خودم اینطوری نوشتم ببینم میشه نتیجه گرفت یا نه

  18. #12
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط vahidasm نمایش پست ها
    سلام
    خب معلومه که نتیجه ضرب درست در نمیاد و دلیلش هم اینه که اومده تو برنامه مقادیر اعشار رو به عدد صحیح تبدیل کرده من اینجا یه نمونشو برای شما مثال میزنم:
    شما فرض کنید که میخواین عدد 2.011 روی ال سیدی نمایش بدین
    یه راهش اینه که بیاین عدد مورد نظر رو توی یه متغیر از نوع float ذخیره کنید و بعد توسط دستور sprintf تبدیل کنید و بعد نمایش بدین
    راه دیگه ای که حدودا تو این برنامه استفاده شده اینه که شما اعداد اعشار رو بصورت اعداد صحیح در بیارید
    یعنی به صورت زیر عمل کنید:
    کد:
    2.011*1000=2011
    در این حالت میبینید که عدد 2.011 به صورت عدد صحیح در اومد.
    در این حالت تنها اگر بتوانید به نحوی ارقام عدد به دست اومده رو از هم جدا کنید یعنی هر کدوم از ارقام 1و0و1و1 در یک متغیر جداگانه ذخیره کنید میتونید به این روشی که تو این برنامه استفاده شده مقدار مورد نظر رو روی ال سی دی نمایش بدین.برای جدا کردن ارقام از روش زیر استفاده شده:
    کد:
    2011%10=1
    2011/10%10=1
    2011/10/10%10=0
    2011/10/10/10=2
    میبینید که اعداد از هم جدا شدن حالا اگه هر کدوم رو تو یه متعیر جدا ذخیره کنی میتونی رو ال سی دی به روشی که تو این برنامه استفاده شده مقدار رو نمایش بدی :

    [php]sprintf(current,"i=%d.%d%d%da",i/1000,iadj1,iadj2,iadj3)[/php]موفق باشید
    میشه بگین که چطوری این عدادی رو که الان از هم جدا هستن رو به شکل یه عدد واحد در بیارم؟؟؟؟[php]ارقام 1و0و1و1[/php]

  19. #13
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

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

  20. تشکرها از این نوشته :


  21. #14
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط vahidasm نمایش پست ها
    سلام
    خب همون اعمال رو برعکسش رو انجام بده
    اصلا چرا میخوای کاری که انجام شده رو دوباره انجام بدی؟؟
    خب کدهای مربوط به اون اعمال رو از برنامه حذف کن
    موفق باشید
    همون اعمال رو برعکسش کنم بازم اعداد جداجدا میافتم مثل همون روش شما
    کدهای مربوط اون رو حذف کردم ولی نتیجه بالای 5 رقم چاپ میشه با اون دستورها اومده فقط دو رقم صحیح رو نشون داده و بقه رو اعشار کرده
    اینجا نمیشه از دستور div (\) استفاده کرد ؟

  22. #15
    همکار علمی sarbaz13 آواتار ها
    تاریخ عضویت
    Mar 2011
    نام
    محمد قاسمی
    نوشته ها
    410
    تشکر
    995
    تشکر شده 425 بار در 230 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mahdi2210 نمایش پست ها
    همون اعمال رو برعکسش کنم بازم اعداد جداجدا میافتم مثل همون روش شما
    کدهای مربوط اون رو حذف کردم ولی نتیجه بالای 5 رقم چاپ میشه با اون دستورها اومده فقط دو رقم صحیح رو نشون داده و بقه رو اعشار کرده
    اینجا نمیشه از دستور div (\) استفاده کرد ؟
    برادر mahdi2210

    یک چیزی اولش بهت بگم بهت بر نخوره هر کاری اهلش رو می خواد داداش من.اومد چند تابع تعریف کردی که توابع قبل از دشتورات Void main(void){ }; همون بدنه اصلی برنامه تعریف کردی و کل برنامتون ارسال نکردی توی انجمن.

    بعدم من تا اونجایی که سر در آوردم تو مشکل زیاد داری چون نخوندی و کار نکردی با avr
    حالا من چند دستور برات می نویسم و توضیح میدم باشد که مشکل شما دوست عزیز حل شود.

    1- دستور تبدیل عدد اعشاری به کارکتر برای نمایش بر روی LCD
    اول کتابخونش رو اضافه می کنیم.
    بعد از دستوراتش استفاده می کنیم.
    ftoa(متغییر از جنس فلوت, متغییر از جنس کارکتر);
    #include <stdlib.h>
    float a;
    char s1[4];
    void main (void){
    .
    .
    while(1){
    a=2.013
    ftoa(a,s1[]);
    lcd_puts(s1);
    }
    };



    22-دستور sprintf();

    فرم نوشتن این دستور به این صورت می باشد که ابتدا یک متغیر برای ذخیره سازی و بعد رشته (همان تبدیل عدد اعشاری به رشته) و بعد هم متغیر i که حاوی یک عدد است. که در اینجا d% یعنی اینکه متغیر i در مبنای دسیمال نمایش داده شود. پس این دستور این رشته را در متغیر s1[] ذخیره می کند.

    بعدم اگه بخواهی دوتا رشته رو در هم ضرب کنی که نمیشه.چون عدد نیستن.یعنی در واقع شما چون می خواهی روی LCD مقدار متغییر هات رو چاپ کنی می خواهی 2تا رشته رو در هم ضرب کنی که اشتباه است.
    شما باید مقدارهای عددی که بدست می آری رو در هم ضرب کنی بعد توسط دستورات بالای به کارکتر تبدیلش کنی و بعد در داخل دستور sprintf بزاری.



  23. تشکرها از این نوشته :


  24. #16
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sarbaz13 نمایش پست ها
    برادر mahdi2210

    یک چیزی اولش بهت بگم بهت بر نخوره هر کاری اهلش رو می خواد داداش من.اومد چند تابع تعریف کردی که توابع قبل از دشتورات Void main(void){ }; همون بدنه اصلی برنامه تعریف کردی و کل برنامتون ارسال نکردی توی انجمن.

    بعدم من تا اونجایی که سر در آوردم تو مشکل زیاد داری چون نخوندی و کار نکردی با avr
    حالا من چند دستور برات می نویسم و توضیح میدم باشد که مشکل شما دوست عزیز حل شود.

    1- دستور تبدیل عدد اعشاری به کارکتر برای نمایش بر روی LCD
    اول کتابخونش رو اضافه می کنیم.
    بعد از دستوراتش استفاده می کنیم.
    ftoa(متغییر از جنس فلوت, متغییر از جنس کارکتر);
    #include <stdlib.h>
    float a;
    char s1[4];
    void main (void){
    .
    .
    while(1){
    a=2.013
    ftoa(a,s1[]);
    lcd_puts(s1);
    }
    };



    22-دستور sprintf();

    فرم نوشتن این دستور به این صورت می باشد که ابتدا یک متغیر برای ذخیره سازی و بعد رشته (همان تبدیل عدد اعشاری به رشته) و بعد هم متغیر i که حاوی یک عدد است. که در اینجا d% یعنی اینکه متغیر i در مبنای دسیمال نمایش داده شود. پس این دستور این رشته را در متغیر s1[] ذخیره می کند.

    بعدم اگه بخواهی دوتا رشته رو در هم ضرب کنی که نمیشه.چون عدد نیستن.یعنی در واقع شما چون می خواهی روی LCD مقدار متغییر هات رو چاپ کنی می خواهی 2تا رشته رو در هم ضرب کنی که اشتباه است.
    شما باید مقدارهای عددی که بدست می آری رو در هم ضرب کنی بعد توسط دستورات بالای به کارکتر تبدیلش کنی و بعد در داخل دستور sprintf بزاری.


    سلام
    اولا ممنون از بابت راهنماییتون
    دوما اینکه شما میفرمایید من اهل کدنویسی نیستم درست،من تو پست های قبل هم گفتم من مبتدی ام و فقط میخوام این پروژه سخت افزاری رو رد کنم در ضمن اگه بلد بودم که اینقدر سوال نمیکردم

    دوست عزیز اگه بخواین من میتونم همه کدهارو بزارم یا براتون پخ کنم مشکل ما تبدیل عدد اعشاری به کاراکتر نیست مایه میکرو داریم که قراره یا ولت و یه جریان ازش بگیریم حالا بعد تو نتیجه این جریان و ولت رو به هم ضرب کنیم تا وات بدست بیاد خب
    حالا اونجایی که ولت و جریان رو میگیریم مجبوریم یه سری تقسیمات انجام بدیم چون اعداد 4 و 5 رقمی هستن.میخوایم دورقم نشون بده (؟؟.؟؟ به این شکل) فقط دو رقم صحیح رو نشون بده [PHP]Vadj1=(v%100)/10;
    Vadj2=(v%100)%10;
    v=v/100;
    sprintf(voltage,"V=%d.%d%d ",v,Vadj1,Vadj2);[/PHP]
    یعنی اینجا عدد نتیجه ما از سه قسمت تشکیل یافته vadj1 , vadj2,v
    وهمین طور نتیجه جریان ما از چهار قسمت تشکیل یافته i,Iadj1,Iadj2,Iadj3
    [PHP] Iadj1=(i%1000)/100;
    Iadj2=((i%1000)/10)%10;
    Iadj3=(i%1000)%10;
    sprintf(current,"I=%d.%d%d%dA",i/1000,Iadj1,Iadj2,Iadj3);[/PHP]
    خب حالا وقتی میام این اعداد رو به هم ضرب میکنم نتیجه درست در نمیاد (البته اعداد صحیح رو درست ضرب میکنم)
    حالا میشه شما یه برنامه بنویسین که این i (جریان ) رو ضربدر v (ولت) کنه ؟؟؟؟؟؟؟؟
    تنها مشکل من همینه

  25. #17
    همکار علمی sarbaz13 آواتار ها
    تاریخ عضویت
    Mar 2011
    نام
    محمد قاسمی
    نوشته ها
    410
    تشکر
    995
    تشکر شده 425 بار در 230 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mahdi2210 نمایش پست ها
    سلام
    اولا ممنون از بابت راهنماییتون
    دوما اینکه شما میفرمایید من اهل کدنویسی نیستم درست،من تو پست های قبل هم گفتم من مبتدی ام و فقط میخوام این پروژه سخت افزاری رو رد کنم در ضمن اگه بلد بودم که اینقدر سوال نمیکردم

    دوست عزیز اگه بخواین من میتونم همه کدهارو بزارم یا براتون پخ کنم مشکل ما تبدیل عدد اعشاری به کاراکتر نیست مایه میکرو داریم که قراره یا ولت و یه جریان ازش بگیریم حالا بعد تو نتیجه این جریان و ولت رو به هم ضرب کنیم تا وات بدست بیاد خب
    حالا اونجایی که ولت و جریان رو میگیریم مجبوریم یه سری تقسیمات انجام بدیم چون اعداد 4 و 5 رقمی هستن.میخوایم دورقم نشون بده (؟؟.؟؟ به این شکل) فقط دو رقم صحیح رو نشون بده [PHP]Vadj1=(v%100)/10;
    Vadj2=(v%100)%10;
    v=v/100;
    sprintf(voltage,"V=%d.%d%d ",v,Vadj1,Vadj2);[/PHP]
    یعنی اینجا عدد نتیجه ما از سه قسمت تشکیل یافته vadj1 , vadj2,v
    وهمین طور نتیجه جریان ما از چهار قسمت تشکیل یافته i,Iadj1,Iadj2,Iadj3
    [PHP] Iadj1=(i%1000)/100;
    Iadj2=((i%1000)/10)%10;
    Iadj3=(i%1000)%10;
    sprintf(current,"I=%d.%d%d%dA",i/1000,Iadj1,Iadj2,Iadj3);[/PHP]
    خب حالا وقتی میام این اعداد رو به هم ضرب میکنم نتیجه درست در نمیاد (البته اعداد صحیح رو درست ضرب میکنم)
    حالا میشه شما یه برنامه بنویسین که این i (جریان ) رو ضربدر v (ولت) کنه ؟؟؟؟؟؟؟؟
    تنها مشکل من همینه
    من کاملا نمی فهمم که چی میگید. شما
    یعنی چی ضرب می کنید نتیجه درست در نمی آید.؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!! !!!!!!!

    مثلا شما می خواهید Iadj1در Vadj1ضرب کنید.که نوع هر دو متغییرت باید float تعریف کرده باشی.
    float x;
    x=Iadj1*Vadj1;
    اینجوری مقدار عددی هر دو متغییر در هم ضرب می شوند.

    که در اینجا متغییر x الان دیگه مقدار توانت هست.





  26. تشکرها از این نوشته :


  27. #18
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2012
    نوشته ها
    22
    تشکر
    79
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sarbaz13 نمایش پست ها
    من کاملا نمی فهمم که چی میگید. شما
    یعنی چی ضرب می کنید نتیجه درست در نمی آید.؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!! !!!!!!!

    مثلا شما می خواهید Iadj1در Vadj1ضرب کنید.که نوع هر دو متغییرت باید float تعریف کرده باشی.
    float x;
    x=Iadj1*Vadj1;
    اینجوری مقدار عددی هر دو متغییر در هم ضرب می شوند.

    که در اینجا متغییر x الان دیگه مقدار توانت هست.




    نه اینجا vadj1,vadj2,v کلا یک عدد هستن اگه به قسمت پرینت توجه کنین میبینید
    [PHP]sprintf(voltage,"V=%d.%d%d ",v,Vadj1,Vadj2); [/PHP]
    یعنی این سه قسمت همون ولتاژ هستن
    وهمچنین
    [PHP]sprintf(current,"I=%d.%d%d%dA",i/1000,Iadj1,Iadj2,Iadj3); [/PHP]
    همینطور i , iadj1,2,3 همون جریان مارو نمایش میدن(current)
    حالا چطوری این current و voltage رو باهم ضرب کنیم ونمایش بدیم؟؟؟؟
    میدونم برای کسی که کدنویسی بلده کار خیلی راحتی هست من خودم از چند روش استفاده کردم که نتیجه درست نمیده


  28. #19
    ناظم انجمن vahidasm آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    وحید
    نوشته ها
    754
    تشکر
    1,068
    تشکر شده 881 بار در 470 پست

    پیش فرض

    دوست عزیز و گرامی مشکل شما به برنامه نویسی مربوط نمیشه به ریاضیات مربوط میشه............
    فرض میکنیم که شما تو کد نویسی مهارتتون کمه و قسمت کدهای اضافه رو نمیتونید حذف کنید ولی دوست من شما باید جایگاه دهگان و صدگان و .... رو تو ریاضی بدونید دیگه(البته قصد توهین ندارم ها!)میدونم که محیط برنامه نویسی برای آدمهای تازه کار خیلی گنگه ولی یه خرده دقت کنی میفهمی که کد زیر داستانش چیه:
    [PHP]sprintf(voltage,"V=%d.%d%d ",v,Vadj1,Vadj2); [/PHP]
    تو این کد میگه که مقدار صحیح تو این قسمت v هست و مقادیر اعشار تو اینجا vadj1 و vadj2 هستن
    حالا خیلی سخته که اینا رو به یه عدد واحد تبدیل کنی؟؟
    یعنی:
    کد:
    v=(v*100)+(vadj1*10)+vadj2
    f=v/100
    تو قسمت بالا فرض میکنیم که اعداد v , vadj1 , vadj2 یک رقمی(0تا9) هستن
    f باید از نوع float تعریف بشه
    خب دوست عزیز این قسمت ولتاژته که با دو رقم اعشار به دست میاد دیدی که هیچ ربطی به برنامه نوشتن نداشت؟؟
    تو این برنامه اگه به فرض مثال v=1 و vadj1=2 و vadj3 =1 باشه برنامه به صورت زیر عمل میکنه:
    [PHP]
    v=(1*100)+(2*10)+1=121
    f=121/100=1.21
    [/PHP]
    متاسفانه اینطور که پیداس هیچ تحقیقی انجام نمیدین.
    ویرایش توسط vahidasm : 09-01-2013 در ساعت 04:12
    اولین مرحله شناخت آفرینش همانا خرد است چشم و گوش و زبان سه نگهبان اویند که لاجرم هر چه نیکی و شر است از همین سه ریشه می گیرد .و افسوس که بدنبال کنندگان خرد اندکند باید که به سخن دانندگان راه جست و باید جهان را کاوش نمود و از هر کسی دانشی آموخت و یک دم را هم برای آموختن نباید از دست داد . فردوسی خردمند

  29. کاربران : 2 تشکر کرده اند از شما vahidasm برای ارسال این پست سودمند:


  30. #20
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    خوب این که این همه دردسر نداره عزیزان !
    اینجوری بنویس
    کد:
    float x;
    x = I*V;
    sprintf(buf,"%2.2f",x);

  31. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


صفحه 1 از 2 12 آخرینآخرین

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

  1. هویه هوای گرم
    توسط behnam6500 در انجمن مفاهیم اولیه در رباتیک
    پاسخ: 20
    آخرين نوشته: 28-12-2015, 18:14
  2. Spi نرم افزاری در کدویژن
    توسط ali2914 در انجمن AVR
    پاسخ: 16
    آخرين نوشته: 13-08-2014, 00:49
  3. برنامه نقاشی ویندوز 7 را به ویندوزهای ویستا و ایکس پی اضافه کنید
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 1
    آخرين نوشته: 20-01-2010, 15:43
  4. نواز وظیفه ویندوزهای ایکس پی و ویستا را به نوار وظیفه ویندوز 7 تبدیل کنید
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 0
    آخرين نوشته: 19-01-2010, 13:39
  5. Xp ویندوزهای ویندوز 2003 سرور را دقیقا به ویندوز 7 تبدیل نمائید
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 0
    آخرين نوشته: 19-01-2010, 12:59

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

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