اطلاعیه

Collapse
No announcement yet.

تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

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

    تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

    سلام.من میخوام یه تابع برای تبدیل عدد چند رقمی به کاراکتر بنویسم.مثلا به ازای عدد 875 مقدار کاراکتری اون رو بر گردونه.میشه روش تبدیل رو توضیح بدین.

    #2
    پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

    نوشته اصلی توسط amir6682
    سلام.من میخوام یه تابع برای تبدیل عدد چند رقمی به کاراکتر بنویسم.مثلا به ازای عدد 875 مقدار کاراکتری اون رو بر گردونه.میشه روش تبدیل رو توضیح بدین.
    سلام
    اگه با زبان c کار میکنید از این تابع استفاده کنید.
    این رو برای lcd کاراکتری نوشتم که w عدد ورودی و آرایه مورد نظر هم t.
    اگه متوجه نحوه کار تابع نشدید بگید تا تشریحش کنیم.
    کد:
    void lcd_put(int w){
    unsigned char t[17],b;
    int a,c;
    a=w;b=0;
    while(a>9){a=a/10;b++;}
    c=1;
    for(a=0;a<b;a++){c=c*10;}
    for(a=0;a<18;a++){t[a]='\0';}
    a=0;
    while(c!=0){
    t[a]=(w/c)+0x30;
    w=w%c;
    c=c/10;
    a++;}
    lcd_puts(t);}
    تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

    دیدگاه


      #3
      پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

      نوشته اصلی توسط amir6682
      سلام.من میخوام یه تابع برای تبدیل عدد چند رقمی به کاراکتر بنویسم.مثلا به ازای عدد 875 مقدار کاراکتری اون رو بر گردونه.میشه روش تبدیل رو توضیح بدین.
      روش کار ساده هست.
      1- شما باید در هر مرحله با تقسیم عدد مورد نظر بر 10 باقی مانده اون محاسبه کنید
      2- به باقی مانده عدد 48 اضافه کنی تا تبدیل به کد اسکی بشه
      3- اگه خارج قسمت از 10 کوچکتر بود تمام
      در غیر این صورت خارج قسمت به عنوان ورودی جدید در نظر میگیری و به مرحله 1 بر میگردی

      نکته: در مرحله 2 میتونی کارکترها در یک آرایه ذخیره کنی تا یک رشته در بیاد
      نکته: بسیاری از کامپایلر ها کتابخانه ای برای تبدیل عدد به رشته و برعکس دارند
      [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

      دیدگاه


        #4
        پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر ب

        مرسی دوست عزیز.مشکل من این بود که در mikroc دستور bytetostr متغیر مورد نظر رو به رشته تبدیل میکنه اما نمی تونه چینش صحیحی از آرایه ها رو داشته باشه.به همین خاطر خواستم خودم تابعی تعریف کنم.

        my problem is :
        ////////16F887////////
        char Achar[4],Bchar[4];
        int num=0,cmp=0;

        sbit LCD_RS at RC0_bit;
        sbit LCD_EN at RC1_bit;
        sbit LCD_D4 at RC2_bit;
        sbit LCD_D5 at RC3_bit;
        sbit LCD_D6 at RC4_bit;
        sbit LCD_D7 at RC5_bit;
        sbit LCD_RS_Direction at TRISC0_bit;
        sbit LCD_EN_Direction at TRISC1_bit;
        sbit LCD_D4_Direction at TRISC2_bit;
        sbit LCD_D5_Direction at TRISC3_bit;
        sbit LCD_D6_Direction at TRISC4_bit;
        sbit LCD_D7_Direction at TRISC5_bit;

        void main ()
        {
        Lcd_Init();
        Lcd_Cmd(_LCD_CLEAR);
        Lcd_Cmd(_LCD_CURSOR_OFF);


        Achar[0]='7';
        Achar[1]='5';
        Lcd_out(1,1,Achar);
        num=75;
        bytetostr(num,Bchar);
        Lcd_chr(2,1,Bchar[0]); //bchar[0]=empty It doesn't start form here and start from bchar[1] for fill array??
        Lcd_chr(2,2,Bchar[1]); //bchar[1]=7
        Lcd_chr(2,3,Bchar[2]); //bchar[2]=5
        Lcd_chr(2,4,Bchar[3]); //bchar[3]=empty
        cmp=strcmp(Bchar,Achar);
        if(cmp=0) //never been zero because in terms of strcmp they have difference
        RB0_bit=1;

        }

        for example when num= 75 , i want to convert value of num Accordance with the following:
        num= 75 ===> Bchar[0]=7 Bchar=[1]=5 Bchar[2]=empty Bchar[3]=empty
        Instead of:
        num= 75 === bytetostr(num,x)==> Bchar=[0]=empty Bchar[1]=7 Bchar[2]=5 Bchar[3]=empty
        when use bytetostr it does not fill the leftmost part of array (x[0]) from the first.Achar and Bchar are 75 but in terms of strcmp they have difference
        ببخشین قبلا اینو توی یه فروم انگلیسی نوشته بودم حال نداشتم فارسیش کنم.

        دیدگاه


          #5
          پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

          من همین امروز نوشتم برای با Keil و ARM-gcc کار میکنه
          سعی کردم بهینه باشه ، از دوستان کسی باز هم پیشنهاد داشت بگه
          برای کامپایلر دیگه فقط باید "uint16_t" و "uint32_t" را عوض کنی مثلا بزاری int

          کد PHP:
          void itoa(int numchar str[]) {
            
          //this function convert integer to string - str[] must have enough space
            
          int len 0;
            
          int num_tmp;
            
          num_tmp num;

            
          //for negative number
            
          if (num_tmp &lt0) {
              
          num_tmp = -num_tmp;
              
          str[0] = '-';
              
          len++;
            }

            
          //Find length of int Number
            
          do {
              
          len++;
              
          num_tmp /= 10;
            } while (
          num_tmp);

            
          //return absolute number
            
          if (num &gt0)
              
          num_tmp num;
            else
              
          num_tmp = -num;

            
          //store to string
            
          str[len] = 0;
            do {
              
          len--;
              
          str[len] = num_tmp 10 + '0';
              
          num_tmp /= 10;
            } while (
          num_tmp);

          { خلاف قوانین - پاک شد }

          دیدگاه


            #6
            پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

            نوشته اصلی توسط amir6682
            مرسی دوست عزیز.مشکل من این بود که در mikroc دستور bytetostr متغیر مورد نظر رو به رشته تبدیل میکنه اما نمی تونه چینش صحیحی از آرایه ها رو داشته باشه.به همین خاطر خواستم خودم تابعی تعریف کنم.

            my problem is :
            ////////16F887////////
            char Achar[4],Bchar[4];
            int num=0,cmp=0;

            sbit LCD_RS at RC0_bit;
            sbit LCD_EN at RC1_bit;
            sbit LCD_D4 at RC2_bit;
            sbit LCD_D5 at RC3_bit;
            sbit LCD_D6 at RC4_bit;
            sbit LCD_D7 at RC5_bit;
            sbit LCD_RS_Direction at TRISC0_bit;
            sbit LCD_EN_Direction at TRISC1_bit;
            sbit LCD_D4_Direction at TRISC2_bit;
            sbit LCD_D5_Direction at TRISC3_bit;
            sbit LCD_D6_Direction at TRISC4_bit;
            sbit LCD_D7_Direction at TRISC5_bit;

            void main ()
            {
            Lcd_Init();
            Lcd_Cmd(_LCD_CLEAR);
            Lcd_Cmd(_LCD_CURSOR_OFF);


            Achar[0]='7';
            Achar[1]='5';
            Lcd_out(1,1,Achar);
            num=75;
            bytetostr(num,Bchar);
            Lcd_chr(2,1,Bchar[0]); //bchar[0]=empty It doesn't start form here and start from bchar[1] for fill array??
            Lcd_chr(2,2,Bchar[1]); //bchar[1]=7
            Lcd_chr(2,3,Bchar[2]); //bchar[2]=5
            Lcd_chr(2,4,Bchar[3]); //bchar[3]=empty
            cmp=strcmp(Bchar,Achar);
            if(cmp=0) //never been zero because in terms of strcmp they have difference
            RB0_bit=1;

            }

            for example when num= 75 , i want to convert value of num Accordance with the following:
            num= 75 ===> Bchar[0]=7 Bchar=[1]=5 Bchar[2]=empty Bchar[3]=empty
            Instead of:
            num= 75 === bytetostr(num,x)==> Bchar=[0]=empty Bchar[1]=7 Bchar[2]=5 Bchar[3]=empty
            when use bytetostr it does not fill the leftmost part of array (x[0]) from the first.Achar and Bchar are 75 but in terms of strcmp they have difference
            ببخشین قبلا اینو توی یه فروم انگلیسی نوشته بودم حال نداشتم فارسیش کنم.
            شما تعداد بایت های Bchar بیشتر کن مشکلت حل میشه
            همیشه باید آخر باید 0 باشه تا پایان رشته مشخص کنه
            با توجه با اینکه متغییر شما 2 بایتی هست و حداکثر مثدار 65535 میتونه داشته باشه شما باید متغییر Bchar بصورت زیر تعریف کنی
            کد:
            Char Bchar[6] = "";
            [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

            دیدگاه


              #7
              پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی

              Mohpooria جان بابت تابعی که نوشتی سپاسگذارم.مرسی :nice:

              دیدگاه

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