اطلاعیه

Collapse
No announcement yet.

ضرب و تقسیم در کدویژن

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

    ضرب و تقسیم در کدویژن

    سلام
    برای ضرب یا تقسیم دو متغیر در کدویژن چرا خروجی در عمل صفره؟

    مثلا در کد زیر
    int A;
    int B;
    lint C;
    int D;

    A=20;
    B=500;

    C=A*B;
    D=A/B;

    هم C و هم D صفر میده (در عمل با میکرو تست میشه )

    #2
    پاسخ : ضرب و تقسیم در کدویژن

    سلام....
    اون D و C رو از چه نوعی تعریف کردی...؟

    دیدگاه


      #3
      پاسخ : ضرب و تقسیم در کدویژن

      سلام
      بهتره برنامه رو کامل بنویسی تا بشه نظر داد
      به احتمال زیاد نوع متغییر ها رو درست انتخاب نکردی
      موفق باشی...

      دیدگاه


        #4
        پاسخ : ضرب و تقسیم در کدویژن

        سلام کد برنامه در زیر آمده

        البته مشکل ضرب با تعریف LONG INT حل شد ولی هر نوع متغیر FLOAT یا هر چیز دیگه ای برای تقسیم میذار بازم درست جواب نمیده
        کد:
        /*****************************************************
        This program was produced by the
        CodeWizardAVR V1.24.6 Standard
        Automatic Program Generator
        © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
        http://www.hpinfotech.com
        e-mail:office@hpinfotech.com
        
        Project : 
        Version : 
        Date  : 2/4/2013
        Author :               
        Comments: 
        
        
        Chip type      : ATmega32L
        Program type    : Application
        Clock frequency   : 8.000000 MHz
        Memory model    : Small
        External SRAM size : 0
        Data Stack size   : 512
        *****************************************************/
        
        #include <mega32.h>
        
        // Alphanumeric LCD Module functions
        #asm
          .equ __lcd_port=0x1B ;PORTA
        #endasm
        #include <lcd.h>
        
        #include <stdio.h>
        #include <math.h>
        #include <stdlib.h>
        #include <string.h>
        #include <delay.h>   
        int A=500;
        int B=30;
         long int C ;
        ;int D 
           char out_display[20];  
           char out_display2[20];
           char lcd4[10];
           char in_display[20]; 
           char in_display2[20];
           float tep;
        
        // Declare your global variables here
        
        void main(void)
        {
        // Declare your local variables here
        
        // Input/Output Ports initialization
        // Port A initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In 
        // State7=T State6=T State5=T State4=T State3=1 State2=T State1=T State0=T 
        PORTA=0x08;
        DDRA=0x08;
        
        // Port B initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
        PORTB=0x00;
        DDRB=0x00;
        
        // Port C initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
        PORTC=0x00;
        DDRC=0x00;
        
        // Port D initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
        PORTD=0x00;
        DDRD=0x00;
        
        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: Timer 0 Stopped
        // Mode: Normal top=FFh
        // OC0 output: Disconnected
        TCCR0=0x00;
        TCNT0=0x00;
        OCR0=0x00;
        
        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: Timer 1 Stopped
        // Mode: Normal top=FFFFh
        // OC1A output: Discon.
        // OC1B output: Discon.
        // Noise Canceler: Off
        // Input Capture on Falling Edge
        // Timer 1 Overflow Interrupt: Off
        // Input Capture Interrupt: Off
        // Compare A Match Interrupt: Off
        // Compare B Match Interrupt: Off
        TCCR1A=0x00;
        TCCR1B=0x00;
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;
        
        // Timer/Counter 2 initialization
        // Clock source: System Clock
        // Clock value: Timer 2 Stopped
        // Mode: Normal top=FFh
        // OC2 output: Disconnected
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;
        
        // External Interrupt(s) initialization
        // INT0: Off
        // INT1: Off
        // INT2: Off
        MCUCR=0x00;
        MCUCSR=0x00;
        
        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=0x00;
        
        // Analog Comparator initialization
        // Analog Comparator: Off
        // Analog Comparator Input Capture by Timer/Counter 1: Off
        ACSR=0x80;
        SFIOR=0x00;
        
        // LCD module initialization
        lcd_init(16);
        
        while (1)
           {
                 lcd_gotoxy(0,0);
                 lcd_putsf("Loading...");
                 D=A/B;      
                 C=A*B; 
                 lcd_clear();
                 delay_ms(500);
                 sprintf(in_display,"D= %u", D);
                 sprintf(out_display,"C= %u R", C); 
                
                 lcd_gotoxy(0,0);
                 lcd_puts(in_display);
                 lcd_gotoxy(0,1);
                 lcd_puts(out_display);  
         
                 delay_ms(1000);
        
        
           };
        }

        دیدگاه


          #5
          پاسخ : ضرب و تقسیم در کدویژن

          محاسبات درست انجام میشه اشکال از تابع sprintf هست
          برو به project/configure بعد سر برگ C Compiler رو انتخاب کن دو باره زیر برگ code generation رو انتخاب کن توی اون صفحه sprintf features رو روی float قرار بده
          گفت که دیوانه نهی لایق این خانه نهی

          دیدگاه


            #6
            پاسخ : ضرب و تقسیم در کدویژن

            نوشته اصلی توسط moslem1368
            محاسبات درست انجام میشه اشکال از تابع sprintf هست
            برو به project/configure بعد سر برگ C Compiler رو انتخاب کن دو باره زیر برگ code generation رو انتخاب کن توی اون صفحه sprintf features رو روی float قرار بده
            سلام مرسی از پاسختان، من این کار را انجام دادم اول اینطوری بودن متغیرا
            int A=500;
            int B=30;
            float C ;
            C=A/B;
            که بازم C را صفر نشون میداد
            بعد همه متغیرا رو فلوت گرفتم
            float A=500;
            float B=30;
            float C ;
            C=A/B
            و جوابی غیر صفر هم داد ولی خیلی پرته به جای 500 تقسیم بر 30 میده 49806

            دیدگاه


              #7
              پاسخ : ضرب و تقسیم در کدویژن

              نوشته اصلی توسط alimf931
              سلام مرسی از پاسختان، من این کار را انجام دادم اول اینطوری بودن متغیرا
              int A=500;
              int B=30;
              float C ;
              C=A/B;
              که بازم C را صفر نشون میداد
              بعد همه متغیرا رو فلوت گرفتم
              float A=500;
              float B=30;
              float C ;
              C=A/B
              و جوابی غیر صفر هم داد ولی خیلی پرته به جای 500 تقسیم بر 30 میده 49806
              در حالت اول اشتباه از شما بوده . چون حاصل تقسیم دو عدد صحیح بر هم عدد صحیحه که شما اون عدد صحیح رو توی اعشاری ریختین
              بهتره A , B از نوع int باشند و C از نوع float
              تقسیم هم به این شکل بنویسید
              C=(float)A/B
              گفت که دیوانه نهی لایق این خانه نهی

              دیدگاه


                #8
                پاسخ : ضرب و تقسیم در کدویژن

                سلام دوست عزیز
                ببخشید که دیر این پست رو میفرستم
                من طبق فرمایش شما در کدویژن
                float(A/B)=C
                ولی جواب تقسیم 30 بر 500 را 49806 میده
                نمیدونم مشکل چیه واقعا
                کد:
                /*****************************************************
                This program was produced by the
                CodeWizardAVR V1.24.6 Standard
                Automatic Program Generator
                © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
                http://www.hpinfotech.com
                e-mail:office@hpinfotech.com
                
                Project : 
                Version : 
                Date  : 2/4/2013
                Author :            
                Company :               
                Comments: 
                
                
                Chip type      : ATmega32L
                Program type    : Application
                Clock frequency   : 8.000000 MHz
                Memory model    : Small
                External SRAM size : 0
                Data Stack size   : 512
                *****************************************************/
                
                #include <mega32.h>
                
                // Alphanumeric LCD Module functions
                #asm
                  .equ __lcd_port=0x1B ;PORTA
                #endasm
                #include <lcd.h>
                
                #include <stdio.h>
                #include <math.h>
                #include <stdlib.h>
                #include <string.h>
                #include <delay.h>   
                int A=500;
                int B =30;
                float C; 
                   char out_display[20];  
                   char out_display2[20];
                   char lcd4[10];
                   char in_display[20]; 
                   char in_display2[20];
                   float tep;
                
                // Declare your global variables here
                
                void main(void)
                {
                // Declare your local variables here
                
                // Input/Output Ports initialization
                // Port A initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=1 State2=T State1=T State0=T 
                PORTA=0x08;
                DDRA=0x08;
                
                // Port B initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTB=0x00;
                DDRB=0x00;
                
                // Port C initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTC=0x00;
                DDRC=0x00;
                
                // Port D initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTD=0x00;
                DDRD=0x00;
                
                // Timer/Counter 0 initialization
                // Clock source: System Clock
                // Clock value: Timer 0 Stopped
                // Mode: Normal top=FFh
                // OC0 output: Disconnected
                TCCR0=0x00;
                TCNT0=0x00;
                OCR0=0x00;
                
                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: Timer 1 Stopped
                // Mode: Normal top=FFFFh
                // OC1A output: Discon.
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                // Timer 1 Overflow Interrupt: Off
                // Input Capture Interrupt: Off
                // Compare A Match Interrupt: Off
                // Compare B Match Interrupt: Off
                TCCR1A=0x00;
                TCCR1B=0x00;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;
                
                // Timer/Counter 2 initialization
                // Clock source: System Clock
                // Clock value: Timer 2 Stopped
                // Mode: Normal top=FFh
                // OC2 output: Disconnected
                ASSR=0x00;
                TCCR2=0x00;
                TCNT2=0x00;
                OCR2=0x00;
                
                // External Interrupt(s) initialization
                // INT0: Off
                // INT1: Off
                // INT2: Off
                MCUCR=0x00;
                MCUCSR=0x00;
                
                // Timer(s)/Counter(s) Interrupt(s) initialization
                TIMSK=0x00;
                
                // Analog Comparator initialization
                // Analog Comparator: Off
                // Analog Comparator Input Capture by Timer/Counter 1: Off
                ACSR=0x80;
                SFIOR=0x00;
                
                // LCD module initialization
                lcd_init(16);
                
                while (1)
                   {
                         lcd_gotoxy(0,0);
                         lcd_putsf("Loading...");
                         C=(float)A/B;      
                
                         lcd_clear();
                         delay_ms(500);
                         sprintf(in_display,"C= %u", C);
                        sprintf(out_display,"A= %u R", A); 
                         sprintf(in_display2,"B= %u",B); 
                
                         lcd_gotoxy(0,0);
                         lcd_puts(in_display);
                         lcd_gotoxy(0,1);
                         lcd_puts(out_display);  
                         lcd_gotoxy(0,2);
                         lcd_puts(in_display2);
                         delay_ms(1000);
                
                
                   };
                }

                دیدگاه


                  #9
                  پاسخ : ضرب و تقسیم در کدویژن

                  در دستور
                  sprintf(in_display,"C= %u", C);
                  باید باجای %u از %f استفاده کنی چون c از نوع float هستش
                  گفت که دیوانه نهی لایق این خانه نهی

                  دیدگاه


                    #10
                    پاسخ : ضرب و تقسیم در کدویژن

                    نوشته اصلی توسط moslem1368
                    در دستور
                    sprintf(in_display,"C= %u", C);
                    باید باجای %u از %f استفاده کنی چون c از نوع float هستش
                    سلام ممنون مشکل حل شد، ببخشید زیاد سوال میکنم، اگر از تابع exp استفاده کنیم
                    کد:
                    float c;
                    int a;
                    int b; 
                    c=(float)exp(a/b);
                             sprintf(in_display,"c= %f", c);  
                             lcd_gotoxy(0,0);
                             lcd_puts(in_display);
                    هم جواب درستی نمیده ممکنه راهنمایی بفرمایید

                    دیدگاه


                      #11
                      پاسخ : ضرب و تقسیم در کدویژن

                      این شکلی که نوشتی اشتباهه. ورودی تابع exp باید از نوع float باشه
                      c=exp((float)a/b); K
                      گفت که دیوانه نهی لایق این خانه نهی

                      دیدگاه


                        #12
                        پاسخ : ضرب و تقسیم در کدویژن

                        نوشته اصلی توسط moslem1368
                        این شکلی که نوشتی اشتباهه. ورودی تابع exp باید از نوع float باشه
                        c=exp((float)a/b); K
                        سلام moslem1368
                        خیلی ممنون از پاسخ شما
                        من طبق فرمایش شما کد زیر را اجرا کردم ولی متغیر c مقدار 1.00000 را روی lcd نمایش میدهد در صورتیکه باید 0.00012 باشد
                        کد:
                        float c;
                        int a=30;
                        int b=500; 
                        c=(float)exp(a/b);
                                 sprintf(in_display,"c= %f", c);  
                                 lcd_gotoxy(0,0);
                                 lcd_puts(in_display);

                        دیدگاه


                          #13
                          پاسخ : ضرب و تقسیم در کدویژن

                          شما float رو قبل از exp نوشتین درحالی که باید داخل پرانتز exp نوشته بشه
                          دقت کنید
                          گفت که دیوانه نهی لایق این خانه نهی

                          دیدگاه


                            #14
                            پاسخ : ضرب و تقسیم در کدویژن

                            نوشته اصلی توسط moslem1368
                            شما float رو قبل از exp نوشتین درحالی که باید داخل پرانتز exp نوشته بشه
                            دقت کنید
                            سلام دوست عزیز خیلی ممنون از اینکه پاسخ دادید ببخشید از اینکه زیاد سوال میپرسم، من طبق فرمایش شما کد رو اصلاح کردم اما همچنان متغیر c مقدار 1.00000 را روی lcd نمایش میدهد در صورتیکه باید 0.00012 باشد ممکنه از تنظیمات خود کدویژن باشه ؟

                            کد:
                            float c;
                            int a=30;
                            int b=500; 
                            c=exp((float)a/b);
                                     sprintf(in_display,"c= %f", c);  
                                     lcd_gotoxy(0,0);
                                     lcd_puts(in_display);

                            دیدگاه


                              #15
                              پاسخ : ضرب و تقسیم در کدویژن

                              اگه اینطوری نوشتی که درسته
                              تنظیمات sprintf رو تغییر دادی؟
                              گفت که دیوانه نهی لایق این خانه نهی

                              دیدگاه

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