اطلاعیه

Collapse
No announcement yet.

کار با رشته ها در کدویژن

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

    کار با رشته ها در کدویژن

    سلام دوستان دیروز یکی از دوستان درباره تغییر مقدار یک متغییر که یک رشته در ان قرار گرفته از من سوال پرسیدند و همان طور که میدانید متغییری که به منظور قرار دادن رشته یا کلمه در ان تعریف شده فقط هنگام تعریف قابل مقدار دهی میباشند
    کد:
    char a[5]="sajad";
    و در خطوط بعدی برنامه به طور مستقیم نمیتوان ان را تغییر داد:
    کد:
    char a[5]="sajad";
    a[5]=sara; // خطا
    و من نیز به ان علاقه مند شدم
    به خاطر همین شروع کردم به مطالعه و به نتایج زیر دست یافتم و گفتم بزارم تا استفاده کنید توضیحات هر خط در روبه روی ان قرار گرفته
    از دوستان خواهشمندم برای تکمیل این تایپیک به من ملحق بشن تا در اینده بتوانیم رو رشته ها مانور بیشتری داشته باشیم کد زیر یه مثال سادس
    البته بابت توابع lcd که برنامه رو شلوغ کرده یکم ببخشید چون من نمیتونم از توابع خود کدویژن استفاده کنم
    یه مقاله ام در همین رابطه قرار میدم که به جزئیات کار با رشته ها پرداخته و دستورات فایل کتابخانه : string.h رو توضیح داده
    http://rozup.ir/up/kulor/Documents/A...w.iseee.ir.pdf
    با تشکر
    کد:
    #include <mega16a.h>
    #include <stdlib.h>
    #include <string.h>
    #include <delay.h>
    //***************************************************************
    #define LCD_RS PORTB.0 //
    #define LCD_EN PORTB.1 //
    #define LCD_D4 PORTB.2 //
    #define LCD_D5 PORTB.3 //      معرفی پورت های lcd
    #define LCD_D6 PORTB.4 //
    #define LCD_D7 PORTB.5 //
    #define LCD_STROBE ((LCD_EN = 1),(LCD_EN=0))
    char buffer[32];
    //****************************************************************
    void lcd_write(unsigned char c);
    void lcd_cls(void);
    void lcd_puts(const char * s);             //  توابع lcd
    void lcd_putch(unsigned char c);
    void lcd_goto(unsigned char pos,unsigned char line);
    void lcd_init(void);
    //*******************************************************************************
    void strcat_cls(char *hj);//تعریف تابع پاک کردن رشته       * 
    void main(void){     //                   *
    unsigned char sajad[30]; // متغییری که رشته در ان قرار میگیرد  *
    DDRB=0xff;        // تعریف پورت lcd           *
    lcd_init();        //                   *
    while(1){         //                   *
    strcat(sajad,"sohrab");  //قرار دادن کلمه sohrab در متغییر sajad *
    lcd_cls();        // پاک کردن lcd            *     برنامه اصلی
    lcd_puts(sajad);     // نمایش متغییر سجاد          *
    delay_ms(500);      //                   *
    strcat_cls(sajad);    //پاک کردن محتویات متغییر sajad    *
    strcat(sajad,"sara");   //قرار دادن کلمه sara در sajad     *
    lcd_cls();        // پاک کردن lcd            *
    lcd_puts(sajad);     //                   *
    strcat_cls(sajad);    //پاک کردن محتوای متغییر sajad     *
    delay_ms(500);      //                   *
    }             //                   *
    }             //                   *
    //*******************************************************************************
    void strcat_cls(char *hj){        
     int hj_11;                        // بدنه تابع پاک کردن مقدار محتوای متغییر sajad
     for(hj_11=strpos(hj,'\0')-1;hj_11>=0;hj[hj_11]=0,hj_11--); 
     hj[0]='\0';
     }
     //************************************************************************************
    void lcd_write(unsigned char c){
      if(c & 0x80) LCD_D7=1; else LCD_D7=0;        // بدنه توابع lcd
      if(c & 0x40) LCD_D6=1; else LCD_D6=0;
      if(c & 0x20) LCD_D5=1; else LCD_D5=0;
      if(c & 0x10) LCD_D4=1; else LCD_D4=0;
      LCD_STROBE;
      if(c & 0x08) LCD_D7=1; else LCD_D7=0;
      if(c & 0x04) LCD_D6=1; else LCD_D6=0;
      if(c & 0x02) LCD_D5=1; else LCD_D5=0;
      if(c & 0x01) LCD_D4=1; else LCD_D4=0;
      LCD_STROBE;  
      delay_us(40);
    }
    void lcd_cls(void){
      LCD_RS = 0;
      lcd_write(0x1);
      delay_ms(2);
    }
    void lcd_puts(const char * s){
      LCD_RS = 1;
      while(*s) lcd_write(*s++);
    }
    void lcd_putch(unsigned char c){
      LCD_RS = 1;  
      lcd_write(c);
    }
    void lcd_goto(unsigned char pos,unsigned char line){
      LCD_RS = 0;
      if (line==0)
      lcd_write(0x80 + pos);
      else
      lcd_write(0x80 + pos+ 0x40);
    }   
    void lcd_init(void){
      LCD_RS = 0;
      delay_ms(15);
      LCD_D4 = 1;
      LCD_D5 = 1;
      LCD_STROBE;  
      delay_ms(5);
      LCD_STROBE;
      delay_us(100);
      LCD_STROBE;
      delay_ms(5);
      LCD_D4 = 0;
      LCD_STROBE;  
      delay_us(40);
       
      lcd_write(0x28);
      lcd_write(0x0C);
      lcd_write(0x06);
      lcd_write(0x01);
    }
    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

    #2
    پاسخ : کار با رشته ها در کدویژن

    سلام
    این خطایی که نوشتید بخاطر اینه که وقتی شما یک آرایه 5 تایی تعریف میکنید از اندیس 0 تا 4 ش دسترسی دارید.
    یعنی میتونید بنویسید
    کد:
    a[4]='C';

    head<=
    ...تشکر خدا...
    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

    دیدگاه


      #3
      پاسخ : کار با رشته ها در کدویژن

      نوشته اصلی توسط (مهدی رنجبر)m4hd1r
      سلام
      این خطایی که نوشتید بخاطر اینه که وقتی شما یک آرایه 5 تایی تعریف میکنید از اندیس 0 تا 4 ش دسترسی دارید.
      یعنی میتونید بنویسید
      کد:
      a[4]='C';
      بله به این صورت درسته ولی رشته دیگه نمیشه تو اون قرار داد این برای یک کلمه 3 یا 4 کارکتری مناسبه ولی برای یک کلمه 1000 کارکتری نمیشه این کارو انجام داد
      با تشکر
      سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

      دیدگاه

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