اطلاعیه

Collapse
No announcement yet.

گرفتن عدد اعشاری از کیبورد

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

    گرفتن عدد اعشاری از کیبورد

    دوستان سلام .
    من قبلا با basic تو این موضوع هیچ مشکلی نداشتم اما تو کدویژن وقتی از همون روش میخوام عددی که یک رقم صحیح و سه رقم اعشار داره رو از ورودی که یه کیبورد 4*4 هست بگیرم و تو یه متغیر از نوع FLOAT بریزم نمیشه و عدد 0 رو تو اون متغیر میبینم
    راه حل چیه دوستان
    چطور باید یه عدد با یه رقم صحیح و سه رقم اعشار رو از کیبورد به یک متغیر داد......؟؟؟؟
    ضمنا اینو قبلا تو سایت سرچ کردم چیزی نبود.
    mer30

    #2
    پاسخ : گرفتن عدد اعشاری از کیبورد

    دستور float تو کدویژن تا شش رقم اغشار می ده حالا بگو چه طوری می ریزی؟یه مثال ساده
    char a=1,b=2;
    float e,c=0.02,d=0.3
    a=a*10+2
    e=a+c+d
    تو خروجی دازیم e=12.32
    تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

    دیدگاه


      #3
      پاسخ : گرفتن عدد اعشاری از کیبورد

      خوب در مورد نحوه گرفتن اعداد باید بگم که من این اعداد رو از کیبورد میگیرم و تو مثالی که شما زدین اعداد اعشار رو قبلا تو برنامه نویسی به متغیر دادید که این به کارم نمیاد من میخوام یه عدد اعشاری مثل 4.234 رو به صورت اعشاری به یه متغیر بدم
      تو basic ما فقط کافیه چند تا مغیر تعریف کنیم و توسط کیبورد عدد به اونها بدیم و حالا در نهایت عدد صحیح رو بصورت مستقیم ریخته و عدد دهم رو اول عدد رو تقسیم بر 10 کرده و بعد به متغیر میدیم و به همین ترتیب برای رقم صدم تقسیم بر 100 و....
      همین روشو به زبان c برگردوندم اما تو وقتی عدد هارو میخوام به هم جمع کنم فقط تو متغیر عدد 0 رو میبینه..... :question:
      mer30

      دیدگاه


        #4
        پاسخ : گرفتن عدد اعشاری از کیبورد

        نوشته اصلی توسط mohsenmax70
        خوب در مورد نحوه گرفتن اعداد باید بگم که من این اعداد رو از کیبورد میگیرم و تو مثالی که شما زدین اعداد اعشار رو قبلا تو برنامه نویسی به متغیر دادید که این به کارم نمیاد من میخوام یه عدد اعشاری مثل 4.234 رو به صورت اعشاری به یه متغیر بدم
        تو basic ما فقط کافیه چند تا مغیر تعریف کنیم و توسط کیبورد عدد به اونها بدیم و حالا در نهایت عدد صحیح رو بصورت مستقیم ریخته و عدد دهم رو اول عدد رو تقسیم بر 10 کرده و بعد به متغیر میدیم و به همین ترتیب برای رقم صدم تقسیم بر 100 و....
        همین روشو به زبان c برگردوندم اما تو وقتی عدد هارو میخوام به هم جمع کنم فقط تو متغیر عدد 0 رو میبینه..... :question:
        مثال بیشتر واسه این گفتم که متغییزاتو درست تعریف کردی یا نه؟تمامی متغییرات باید float باشه حالا اگه فقط یدونه منغییر داری که دیگه هیچ چون اونجهایی هم که تقسیم بر 100 یا 10 می کنی جواب اونام اعشاره.من چنین کاری رو زیاد کردم مثل مثال بالا با این تغییر که متغییر هام مثل این بالا اماده نبود از جایی می خوندم به نظر من متغییراتو اشتباه تعریف کردی.یا اینکه برنامه تو بزار اینجا
        تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

        دیدگاه


          #5
          پاسخ : گرفتن عدد اعشاری از کیبورد

          نوشته اصلی توسط sey22
          مثال بیشتر واسه این گفتم که متغییزاتو درست تعریف کردی یا نه؟تمامی متغییرات باید float باشه حالا اگه فقط یدونه منغییر داری که دیگه هیچ چون اونجهایی هم که تقسیم بر 100 یا 10 می کنی جواب اونام اعشاره.من چنین کاری رو زیاد کردم مثل مثال بالا با این تغییر که متغییر هام مثل این بالا اماده نبود از جایی می خوندم به نظر من متغییراتو اشتباه تعریف کردی.یا اینکه برنامه تو بزار اینجا
          خوب این برنامه من:
          variables all as float
          var1=1;
          var2=2/10;
          var3=3/100;
          var4=var1+var2+var3;

          mer30

          دیدگاه


            #6
            پاسخ : گرفتن عدد اعشاری از کیبورد

            البته شبیه یسکام نوشتی ولی با فرض float allvar تره برنامه ات درسته میمومه یه چیز چی جوری اینو میخونی؟یعنی اگه از printf استفاده می کنی باید بری تنظیمات کدویژن رو به float تغییر بدی ،این جوری
            1- project
            2-configure
            3-C compile
            4-printf feauter
            تو این قسمت بیارش تو حالت float معمولا گزینه اخریه............امیدوارم دیگه درست بشه :biggrin:
            تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

            دیدگاه


              #7
              پاسخ : گرفتن عدد اعشاری از کیبورد

              نوشته اصلی توسط sey22
              البته شبیه یسکام نوشتی ولی با فرض float allvar تره برنامه ات درسته میمومه یه چیز چی جوری اینو میخونی؟یعنی اگه از printf استفاده می کنی باید بری تنظیمات کدویژن رو به float تغییر بدی ،این جوری
              1- project
              2-configure
              3-C compile
              4-printf feauter
              تو این قسمت بیارش تو حالت float معمولا گزینه اخریه............امیدوارم دیگه درست بشه :biggrin:
              الان بعد از اینکه من نوع متغیرمو float کردم و از طریق کیبورد عدد دو رو بهش دادم و بعد مستقیم اون متغییرو رو lcd آوردم عدد52429 رو آورده این یعنی چی . البته یادم میاد رو bascom هم همین مشکل بود که در اول کار برای اون نوع متفییر یکی دو خط برنامه نوشتیم که مشکل حل شد
              نظرت چیه؟
              من الان میخوام بدونم اگه مثلا شما بخوای عدد اعشاری 0,3 رو بدی به یه متغیر چه کار میکنی که این عددو رو lcd همینطور نشون بده..
              mer30

              دیدگاه


                #8
                پاسخ : گرفتن عدد اعشاری از کیبورد

                اگه دیگه مطمدن شدی عملیاتت درسته دبگه بقیش نمایشه حالا یا روی ال یی دی با هاپر ترمینال مثلا برای هایپر میشه این
                float AA=12.2235
                printf("out:%C%f",AA);
                اینو می بینی out=12.2235 حالا واسه ال سی دی توابعش تو help است من الان اینجا ندارم ولی خیلی راحته یه خط بیشتر نیست
                تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

                دیدگاه


                  #9
                  پاسخ : گرفتن عدد اعشاری از کیبورد

                  نوشته اصلی توسط sey22
                  اگه دیگه مطمدن شدی عملیاتت درسته دبگه بقیش نمایشه حالا یا روی ال یی دی با هاپر ترمینال مثلا برای هایپر میشه این
                  float AA=12.2235
                  printf("out:%C%f",AA);
                  اینو می بینی out=12.2235 حالا واسه ال سی دی توابعش تو help است من الان اینجا ندارم ولی خیلی راحته یه خط بیشتر نیست
                  من با نمایش عدد مشکلی ندارم برادر . ببین من مثل مثال بالا نمیتونم عدد رو تو برنامه نویسیم وارد کنم بلکه کاربر دستگاه بعدا خودش از طریق کیبورد یه عدد اعشاری به دستگاه میده که این عدد دارای یک رقم صحیح هست و سه رقم بعدی به اعشار وارد میشود ببین یه عددی مثل 3/295 حالا برای اینکه به بیراهه نریم این دقیقا برنامه ای هست که نوشتم اصلا شاید تو برنامه اشتباه کرده باشم (از اونجاییکه به بیسیک بیشتر واردم) :
                  #include <mega16.h>
                  #include <delay.h>
                  #include <alcd.h>
                  int kbd=16;
                  float flow1; float flow2; float flow3; float flow4;
                  حالا تو یه حلقه دستورات مربوط به اسکن کیبورد رو نوشتم که با فشردن هر کلید برنامه به لیبل دستورات ذیل پرش میکند

                  if(var==1){var=2;flow1=kbd;sprintf(lcd,"%1u.",flow1);lcd_puts(lcd) ;delay_ms(500);goto kbd loop;}
                  if(var==2){var=3;flow2=kbd/10;sprintf(lcd,"%9u",flow2);lcd_puts(lcd); delay_ms(500);goto kbd loop;}
                  if(var==3){var=4;flow3=kbd/100;sprintf(lcd,"%1u",flow3);lcd_puts(lcd); delay_ms(500);goto kbd loop;}
                  if(var==4){var=1;flow4=kbd/1000;sprintf(lcd,"%1u",flow4);lcd_puts(lcd); delay_ms(500);goto kbd loop;}
                  توجه داشته باش که در دستورهای شرطی در انتهای خط , برنامه برای گرفتن رقم بعدی به حلقه اسکن کیبورد پرش میکند .
                  تو خط اول اگه دقت کنی بعد از %1uیه ممیز قرار دادم که جهت نمایش روی lcd هست . تا اینجا ما فقط 4 تا عدد رو که همشون هم صحیح هستندرو تو متغیر kbd ریختیم که حالا باید برای اینکه عددها بصورت اعشاری در بیان از رقم دوم به بعد که همون دهممون هست kbd/10 کنیم و تو متغیر flow که از نوع float هستند ذخیره کنیم که مشکل همینجاست که تو flow عدد صفر ظاهر میشه که البته یبار برای تست تقسیمو حذف کردم که درست شد ولی همین که تقسیمو اون وسط میذارم خراب میشه . بعد از اون حالا برای اینکه همه اعدادمون رو بصورت یکجا تو یه متغیر از نوعfloat داشته باشیم فقط کافیه که همه متغیرهامون رو با هم جمع کنیم به این صورت:
                  flow=flow1+flow2+flow3+flow4;
                  حالا یه این صورت رو lcd نمایش میدیم:
                  sprintf(lcd,"%5u",flow);
                  lcd_puts(lcd);
                  حالا مشکل چیه؟
                  mer30

                  دیدگاه


                    #10
                    پاسخ : گرفتن عدد اعشاری از کیبورد

                    1-kbd که همون کیپد هست اطلاعاتش کی پر می شه؟من از نوشته هات فهمیدم اخر شرط!! این جوری باشه که خوب تو الان داری محتوبات خالی kbd رو می ریزی توی flow
                    2-از تجربه خودم که C زیاد کار کردم و چند نفر ادم هایی که اونام c زیاد کار کردند هیچ وقت از دستور goto استفاده نکن می دونم تو بسکام رایج قدیما منم بسکام کار می کردم ولی تو سی درست مار نمی کنه حتی ممکنه یه جا بره گیر کنه من واسه اینکه بهم ثابت بشه یه کدی که کار می کرد رو با goto نوشتم دیگه کار نکرد :mrgreen:
                    ولی من هنوز نفهمیدم شما الان داری kbd خالی رو میزی یا اگه اونجا که نوشتی حلقه کیپد اونجا داری پرش می کنی ،شرط رو بی خیال شو ببین اصلا می تونی قبل از ورد به شرط ببینیش یا نه
                    3-من خودم برای float از printf استفاده می کنم ان چنان فرقی نداره ولی اون مثال قبلیم درباه printf رو از تو کدهای خودم گذاشتم مطمئن تره
                    تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

                    دیدگاه


                      #11
                      پاسخ : گرفتن عدد اعشاری از کیبورد

                      رفتم مستقیم به متغیر عدد اعشاری دادم ( 9.8765 )
                      اما با sprint رو lcd بازم جواب نمیده
                      پس میتونیم بگیم که در واقع عدد اعشاری تو متغیر درست ذخیره میشه اما تو نمایش عدد رو lcd هست که مشکل داریم ؟
                      اگه اینطوریه لطفا یه برام یه مثال کامل بزنین تا همینو بتونم اینجا استفاده کنم....
                      mer30

                      دیدگاه


                        #12
                        پاسخ : گرفتن عدد اعشاری از کیبورد

                        راستی یه چیزی راهی هست تا بدون استفاده از دستور sprint و بطور مستقیم متغیری رو روی lcd نشون بدیم ؟
                        اگه میشه چطور باید این کارو بکنم؟..

                        اینکارم کردم :
                        من به یه متغیر از نوع float عدد 5.432 دادم و مستقیما دستور نمایش اونو با sprintf دادم که اینو نمایش میده :
                        54002 این یعنی چی؟
                        اینم برنامه:
                        float AA
                        char lcd
                        AA=5.432;
                        sprintf(lcd,"%6u",AA);
                        lcd_puts(lcd);
                        mer30

                        دیدگاه


                          #13
                          پاسخ : گرفتن عدد اعشاری از کیبورد

                          نوشته اصلی توسط mohsenmax70
                          راستی یه چیزی راهی هست تا بدون استفاده از دستور sprint و بطور مستقیم متغیری رو روی lcd نشون بدیم ؟
                          اگه میشه چطور باید این کارو بکنم؟..

                          اینکارم کردم :
                          من به یه متغیر از نوع float عدد 5.432 دادم و مستقیما دستور نمایش اونو با sprintf دادم که اینو نمایش میده :
                          54002 این یعنی چی؟
                          اینم برنامه:
                          float AA
                          char lcd
                          AA=5.432;
                          sprintf(lcd,"%6u",AA);
                          lcd_puts(lcd);
                          من که اول گفتم چه جوری داری می خونی مشخص بود که داره اشتباه اطلاعت رو نشون میده پس تا الان دنبال چی بودی
                          من با ال سی دی یه جور دیگه کار کردم خودم واسش تابع نوشتم و با دستورات خودم کار می کرد تو همین سایت سرچ کن یه اموزش ال سی دی با همه دستوراتش هست واسه اقای یار محمدیه،اون با دستوراش اشنات می کنه،ولی اگه نظر منو می خوای تو هایپر اگه max داری ببین اگه اونجا اومد درسته.sprintf با این دستور من راحت نیستم عرض کردم من با printf مغمولا کار می کنم
                          تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

                          دیدگاه


                            #14
                            پاسخ : گرفتن عدد اعشاری از کیبورد

                            سلام .
                            من مطمئنم که اشکال االان از اینه که من عدد اعشاریی که تو متغیر دارم رو نمیتونم رو lcd درست نمایش بدم اگه امکان داره یه مثال عملی با printf یاهر چی که راحتتره بزنین ...... :read: :read: :read:
                            mer30

                            دیدگاه


                              #15
                              پاسخ : گرفتن عدد اعشاری از کیبورد

                              همونطور که گفتم اشکال در این بود که ما عدد نهایی رو توی متغیر اشتباهی ذخیره میکردیم
                              به هر حال دست دوستان درد نکنه مشکل حل گردید.
                              mer30

                              دیدگاه

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