اطلاعیه

Collapse
No announcement yet.

کمک برای کار برروی رشته ها (CODEVISION)

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

    کمک برای کار برروی رشته ها (CODEVISION)

    سلام ببخشید من به تازگی کار با کدویژن رو آغاز کردم می خوام بر روی رشته ها کار کنم چند جا گیر کردم به کمک اساتید نیاز دارم
    1-میخوام مثلا "char A[]="A23کاراکتر A رو حذف کنم و عدد "23" رو داخل یه متغیر بریزم B = 23 (تا بتونم روش عملیات ریاضی انجام بدم)
    2-دقیقا برعکس روش بالا رو می خوام داشته باشم یعنی متغیر رو به رشته و به اون رشته یه کاراکتر اضافه کنم
    من تو بسکام این روش هارو میتونستم انجام بدم ولی تو کد ویژن نمی تونم لطفا راهنمایی کنید. (با بسکام خیلی کارها می شه رو رشته انجام داد یعنی تو کدویژن میشه) :sad:

    #2
    پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

    سلام دوست عزیز :bye
    از اونجایی که اسکی کد '0' ،دارای معادل عددی 48 است :شما برای تبدیل اعداد کاراکتری به عدد صحیح باید:
    num='0'-48;
    وبه طور کلی:
    num=char-48;
    و برای عکس این قضیه داریم:
    char=num+48;
    عزیزم توجه داشته باش که این دستورات فقط اعداد تک رقمی رو از صحیح به کاراکتر و برعکس تبدیل می کنه! :smile:
    اگر خواستی یه برای اعداد چند رقمی اینکارو کنی باید براش یه تابع بنویسی! :agree:
    برای اینکه از رشته مورد نظر اعداد رو جدا کنی مثلا از a[]="a23" عدد 2 را استفاده کنی باید توجه داشته باشی که:
    a[1]=2.
    امیدوارم که مفید باشه.
    همیشه بزرگوار تر از آن باشید که برنجید
    و نجیب تر از آن باشید که برنجانید!

    دیدگاه


      #3
      پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

      ممنون آقای جعفری
      یه سوال دیگه هم داشتم
      اگه بخوایم یه عدد اعشاری رو مثل 16.67543268 به 16.67 تبدیل کنیم باید چیکار کنم؟ :redface:
      ممنونم.

      دیدگاه


        #4
        پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

        خواهش می کنم عزیزم
        خب برای چی دو رقم اعشار می خوای؟ برای نمایش؟
        اگر برای نمایش می خوای می تونی از دستورات زیر استفاده کنی:

        num=16.678932;
        sprintf(buff,"%d.%d",int(num),int(num*10 0)%100);
        حالا اگه می خوای این عدد اعشاری رو تا دو رقم چاپ کنی کافیه که buff رو چاپ کنی.
        به طور کلی برای هر کاربردی می تونی عدد اعشاریتو در 100(چون دو رقم اعشار رو می خوای)ضرب کنی و ببین:
        flaot fnum;
        int intnum;
        intnum=fnum*100;
        fnum=float(intnum)/100.0;
        یه همچین چیزی بنویس :mrgreen:
        امیدوارم که منظورمو رسونده باشم. :biggrin:
        همیشه بزرگوار تر از آن باشید که برنجید
        و نجیب تر از آن باشید که برنجانید!

        دیدگاه


          #5
          پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

          با سلام
          نوشته اصلی توسط ATI RADEON
          ممنون آقای جعفری
          یه سوال دیگه هم داشتم
          اگه بخوایم یه عدد اعشاری رو مثل 16.67543268 به 16.67 تبدیل کنیم باید چیکار کنم؟ :redface:
          ممنونم.
          به نظر من روش ساده تری هم هست :

          b=12.65235;
          printf("b=%2.3f",b); //print:b=12.652

          دیدگاه


            #6
            پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

            با سلام،

            دوستان این روش هائی که شما پیشنهاد دادید که فقط برای نمایش دادن اعداد هستش، اگر همونطور که توی اولین پست گفته شده بخوان محاسبات انجام بدن چی؟؟؟

            من روش زیر رو پیشنهاد میدم :

            کد:
            	#include <stdio.h>							//for fprintf use
            	#include <stdlib.h>							//for atoi, atof, itoa, ftoa, .... use
            	
            	
            	//********* for integer
            	char 		 *Ctemp;
            	char 		 	Stemp[3];
            	int				Itemp;
            
            	
            	Ctemp = "A23.4";								//Result : A23.4
            	strcpy(Stemp, &Ctemp[1]);				//Result : 23.4
            	Itemp = atof(Stemp) * 3;				//Result : 69
            	//-------------------
            	//********* for float
            	char 		 *Ctemp;
            	char 		 	Stemp[5];
            	float			Itemp;
            
            	
            	Ctemp = "A23.4";								//Result : A23.4
            	strcpy(Stemp, &Ctemp[1]);				//Result : 23.4
            	Itemp = atof(Stemp) * 3;				//Result : 70.20
            مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه


              #7
              پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

              تو هدر فایل math.h یکسری تابع برای تبدیل رشته های اسکی به عدد وجود دارند مثل تابع atof که یه رشته رو به عدد float تبدیل میکنه

              دیدگاه


                #8
                پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                سلام به اساتید
                شرمنده همینطوری میام تو صحبتاتون اما فکر کردم سوالم به این تاپیک مربوطه.
                من تازه با سی کدویژن کار میکنم و میخوام یه عددی که از کیبورد گرفتم و تو متغییرم ذخیره کردمو تقسیم بر 10 کنم و به یه متغیر جدید بدم تو متغیر جدید عدد صفر رو میبینه . مثلا قکر کنین عدد 2 رو از کیبورد گرفتم و تو متغیر a ذخیره کردم حالا میخوام عدد 2رو تو متغیر b بصورت 0.2 ذخیره کنم که در اینصورت باید بنویسم :
                b=a/10
                البته متغیر b ازنوع float و aاز نوع int هست . اما بجای نشون دادن عدد 0.2 رو lcd عدد صفر رو نشون میده و البته برای نمایش روی lcd اینکارو میکنم:

                sprintf(lcd,"%3u",b);
                lcd_puts(lcd);
                که متغیر lcd هم از نوع char هست .
                خوب دوستان میشه در این مورد راهنماییم کنین؟؟؟؟ :question:
                mer30

                دیدگاه


                  #9
                  پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                  سلام برادر
                  نگا کن من اون برنامه ای رو که می گی با تابع ftoa نوشتم تو پروتئوس جواب داد فقط چند نکته مهم
                  حتمی باید رشته ات از جنس unsigned char باشد
                  حتمی باید متغیرت از جنس float باشد
                  حتمی باید اخر برنامه ای که نوشتی و ال سی دی داره delay باشد
                  حتمی باید در زندگی پول باشد :mrgreen:
                  یه مثال می زنم روشن شی
                  کد:
                  [right]
                  <include <stdlib.h
                  <include <delay.h
                  ;float b=2.54
                   
                  ;[]unsigned char s1
                  (while (1
                     }
                        ;
                     ;(ftoa(b,2,s1  
                     ;()lcd_clear 
                     ;(lcd_puts(s1 
                     ;(delay_ms(20
                     {;
                  [/right]

                  دیدگاه


                    #10
                    پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                    متغیر b بعنوان یه int نمیتونه عدد اعشاری 0.2 رو ذخیره کنه بنابر این باید b هم float تعریف بشه

                    دیدگاه


                      #11
                      پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                      نوشته اصلی توسط mmh1
                      سلام برادر
                      نگا کن من اون برنامه ای رو که می گی با تابع ftoa نوشتم تو پروتئوس جواب داد فقط چند نکته مهم
                      حتمی باید رشته ات از جنس unsigned char باشد
                      حتمی باید متغیرت از جنس float باشد
                      حتمی باید اخر برنامه ای که نوشتی و ال سی دی داره delay باشد
                      حتمی باید در زندگی پول باشد :mrgreen:
                      یه مثال می زنم روشن شی
                      کد:
                      [right]
                      <include <stdlib.h
                      <include <delay.h
                      ;float b=2.54
                       
                      ;[]unsigned char s1
                      (while (1
                         }
                            ;
                         ;(ftoa(b,2,s1  
                         ;()lcd_clear 
                         ;(lcd_puts(s1 
                         ;(delay_ms(20
                         {;
                      [/right]
                      ببخشین اونوقت الان شما چطوری متغیر حاوی عدد اعشاری رو به متغییر lcd از نوع unsigned char فرستادی و اون دستور ;(ftoa(b,2,s1 رو من نفهمیدم اونجا داره چیکار میکنه . oo:
                      بابا ما تازه داریم با سی کدویژن کارمیکنیم اگه میشه یه مقدار دقیقتر مثال بزن . من فقط میخوام بدونم چطور یه عدد مثل 2 که الان تو یه متغیری ذخیره شده رو اول تقسیم بر 10 کنم و بعد جواب این تقسیم که حتما اعشاری هست رو تو یه متغیر دیگه ذخیره کنم و حالا چطور اونو رو lcd نمایش بدم تا عددهای بی ربط رو lcd نشون نده و همون حاصل تقسیم رو ببینم؟؟؟؟ :agree:
                      mer30

                      دیدگاه


                        #12
                        پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                        اگه متغیر f از نوع float باشه براحتی با تابع ftoa به اسکی (کاراکتر) تبدیل میشه و میتونی اونو روی ال سی دی بنویسی. توابع دیگه ای برای تبدیل داده های مختلف با اسکی وجود داره که میتونی از هلپ کدویژن پیداشون کنی

                        دیدگاه


                          #13
                          پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                          یه چیزه دیگه اینکه اگه ما توی یه متغیر از نوع int یه عدد صحیح 4 رقمی داشته باشیم و بخوایم بین یکی از رقم ها اعشار قرار بدیم و اونو تو یه متغیر دیگه قرار بدیم طوری که بتونیم اونو رو lcd نمایشش بدیم چه کار باید کنیم تنها راه تقسیمه بر 10 یا 100 یا .... هست؟؟؟؟
                          mer30

                          دیدگاه


                            #14
                            پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                            اگه فقط میخوای نشون بدی که تقسیم بر 10 کن. خارج قسمت رو چاپ کن بعد یه نقطه بذار و بعدشم باقیمانده رو چاپ کن. اما اگه میخوای این عدد اعشاری رو ازش جای دیگه استفاده کنی که باید موقع تقسیم بر 10 همزمان تبدیل به float هم بشه و نتیجه در یک متغیر float ذخیره بشه. برای تبدل شدن به float هم دو راه آسون وجود داره
                            1- تقسیم بر 10.0 به جای 10 خالی
                            2- استفاده از type cast برای تبدیل عدد صحیح a به float اینجوری float (a)

                            دیدگاه


                              #15
                              پاسخ : کمک برای کار برروی رشته ها (CODEVISION)

                              نوشته اصلی توسط mojalan
                              اگه فقط میخوای نشون بدی که تقسیم بر 10 کن. خارج قسمت رو چاپ کن بعد یه نقطه بذار و بعدشم باقیمانده رو چاپ کن. اما اگه میخوای این عدد اعشاری رو ازش جای دیگه استفاده کنی که باید موقع تقسیم بر 10 همزمان تبدیل به float هم بشه و نتیجه در یک متغیر float ذخیره بشه. برای تبدل شدن به float هم دو راه آسون وجود داره
                              1- تقسیم بر 10.0 به جای 10 خالی
                              2- استفاده از type cast برای تبدیل عدد صحیح a به float اینجوری float (a)
                              دستت درست مشکلم حل شد با روش اول خیلی راحت مشکل برطرف شد اما از روش دوم چون سر در نیاوردم تستش نکردم . :wow: :wow: :nerd:
                              mer30

                              دیدگاه

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