Autor Tema: Tutorial - Cadenas y arreglos de chars  (Leído 68988 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #45 en: 31 de Julio de 2009, 23:51:16 »
ahi no ha salido en indice no se porque, pero es asi

 strcpy( mensaje,men1);
       i++;
       strcpy( mensaje,men2);
       i++;
       strcpy( mensaje,men3);
       i++;
       strcpy( mensaje,men4);
       i++;
       strcpy( mensaje,men5);
       i++;
       strcpy( mensaje,men6);
       i++;
       strcpy( mensaje,men7);

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #46 en: 31 de Julio de 2009, 23:52:26 »
tampoco no sale
bueno es algo asi

strcpy( mensaje[1],men2);

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #47 en: 01 de Agosto de 2009, 00:10:17 »
Hola micronet3:
Para definir una matriz con mensajes:
Código: C
  1. char Mensajes[5][10]={{"Primero"},{"Segundo"},{"Tercer"},{"Cuarto"},{"Quinto"}};

Y para reemplazar los mensajes:
Código: C
  1. strcpy(Mensajes[1],"Reemplazo");// cambio "Segundo" por "Reemplazo"

Acuérdate que se agrega '\0' por lo que tu matriz debe tener el tamaño apropiado.

Saludos!
« Última modificación: 01 de Agosto de 2009, 00:40:33 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #48 en: 01 de Agosto de 2009, 00:38:08 »
Si "mensaje" es un arreglo de dos dimensiones, entonces a la funcion strcpy le tendrias q pasar al menos un indice
strcpy(mensaje,men1);
Acordate q strcpy recibe como parametro un puntero, y "mensaje" asi como esta es un puntero doble.
Proba y contanos q tal.

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #49 en: 01 de Agosto de 2009, 06:25:10 »
asi si funciona.

#include <16F628A.h>

#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_B2,rcv=PIN_B1,stream=esclavo)

char mensaje[5][6];
//rutina de interrupcion
#int_rda
void interrupt_service_rutine_rda(void)
 {
 }

void main(void) {

        int i=0;
        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
        setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
        setup_timer_2(T2_DISABLED,0,1);
        setup_comparator(NC_NC_NC_NC);
        setup_vref(FALSE);
        port_b_pullups(False);
        set_tris_b(0b00000010);
        delay_ms(100);
        enable_interrupts(global);
        enable_interrupts(int_rda);
        strcpy(mensaje,"perro");
        i++;
        strcpy(mensaje,"loro");
         i++;
        strcpy(mensaje,"gato");
         i++;
        strcpy(mensaje,"raton");
         i++;
        strcpy(mensaje,"tigre");
       for(i=0;i<5;i++)
       fprintf(esclavo,"%s\n\r",mensaje);
      }

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #50 en: 01 de Agosto de 2009, 07:58:44 »
aja, ya parece que encontre la luz, miren esto, la clave esta en que el nombre de un vector es un puntero

#include <16F628A.h>

#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_B2,rcv=PIN_B1,stream=esclavo)

char mensaje[10];

char *apuntador;
//rutina de interrupcion
#int_rda
void interrupt_service_rutine_rda(void)
 {
 }

void main(void) {

        int i=0;
        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
        setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
        setup_timer_2(T2_DISABLED,0,1);
        setup_comparator(NC_NC_NC_NC);
        setup_vref(FALSE);
        port_b_pullups(False);
        set_tris_b(0b00000010);
        delay_ms(100);
        enable_interrupts(global);
        enable_interrupts(int_rda);
        mensaje[0]='h';
        mensaje[1]='o';
        mensaje[2]='l';
        mensaje[3]='a';
        mensaje[4]=0x00;
        mensaje[5]='c';
        mensaje[6]='o';
        mensaje[7]='m';
        mensaje[8]='o';
        mensaje[9]=0x00;
     
        fprintf(esclavo,"%s\r",mensaje+1);
        fprintf(esclavo,"%s\r",&mensaje[5]);
        apuntador=&mensaje[0];
        fprintf(esclavo,"%s\r",apuntador);
        apuntador=&mensaje[5];
        fprintf(esclavo,"%s\r",apuntador);
      }

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #51 en: 01 de Agosto de 2009, 08:27:17 »
creo que seria mucho pedir al ccs, pero por las dudas, el ccs permite declarar punteros dobles?
he declarado y no acepta, o hay alguna sintaxis especial?

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #52 en: 01 de Agosto de 2009, 11:01:36 »
Te refieres a un arrego de 4 dimensiones?

Creo que el CCS si deja hacer eso, pero con el micro que estas trabajando esta muy limitado en memoria.
El papel lo aguanta todo

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #53 en: 02 de Agosto de 2009, 10:31:14 »
mm no, me refiero a que si permite declarar punteros dobles, que segun lei se utiliza en una matriz

hacer asi
 int **p;
int *q;
lo he declarado pero lamentablemente no lo acepta. mmm pero como dice gera, cuando declaras una matriz
int p[2][3];  ahi hay un puntero simple y un puntero doble.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #54 en: 02 de Agosto de 2009, 14:26:43 »
No te deja declarar punteros dobles? Q clase de compilador es?
Se me ocurre q podrias definir un tipo, y un puntero a ese tipo, seria algo asi:
typedef int* pint_t;
pint_t *p;

Proba y contame como te va.

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #55 en: 04 de Agosto de 2009, 23:00:06 »
que interesante, tal vez esa sea la atraccion del c, que te permite hacer o modifcar.
si lo he compilado y no genera error, voy a tratar de aplicarlo a una matriz.
disculpa por la demora, el trabajo no me da mucho tiempo.

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #56 en: 01 de Noviembre de 2009, 19:32:58 »
Hola es nuevo el tema de las cadenas para mi pero es muy interesante,lo que quiero hacer y espero ser claro es facilitarme la tarea a la hora de imprimir una nota en el lcd(ya se que no deberé abusar de muchas letras en mi frase por el tema de la memoria RAM q dispongo)

Código: [Seleccionar]
#include <16F877a.h>
#fuses HS,NOWDT,PUT,NOPROTECT,NOLVP,BROWNOUT
#use delay(clock=20000000)
#include <flex_lcd.c>
#define OFF 1
#byte portb=0x06
#use fast_io(b)

int direccion=0x80,linea_2=OFF,selector_mensajes=0,primer_error=0;
void seleccion_mensaje();
void handle_error();

main()
{
   lcd_init();
   output_low(portb);
   set_tris_b(0xf0);
   portb=0b00000000;
   port_b_pullups(true);
   enable_interrupts(global);
   enable_interrupts(int_rb);
   
   lcd_setcursor(0,0);           //Esta función controla si es visible el cursor(1º parametro)y si se activa el parpadeo.
   direccion=0x80;
   
   while(1)
   {
      seleccion_mensaje();
      delay_ms(150);
      lcd_putc("\f");
      direccion++;
      lcd_gotoxy(direccion,linea_2);
         if(direccion==0x8F)
         {
         direccion=0xC0;
         }
         if(direccion==0xCF)
         {
         direccion=0x80;
         linea_2=OFF;
         }
         switch(restart_cause())       //Funcion aviso de reinicio por fallo alimentacion.
         {
         case NORMAL_POWER_UP:
         handle_error();
         
         break;
         }     
   }
}

void seleccion_mensaje()

{
   switch(selector_mensajes)
   {
   case 0:
   lcd_putc("Anahi te amo");

   break;

   case 1:
   lcd_putc("Te queria decir");

   break;

   case 2:
   lcd_putc("que a pesar de");

   break;

   case 3:
   lcd_putc("todo lo incha");

   break;

   case 4:
   lcd_putc("que sos...");

   break;

   case 5:
   lcd_putc("= te amo..");

   break;

   case 6:
   lcd_putc("hehe");

   break;
   
   case 7:
   lcd_putc("Yo Carlos..");
   
   break;
   
   default:
   selector_mensajes=0;
   
   break;
   }
}

#int_rb
void rb_rsi()
{
if(!input(PIN_B4)){delay_ms(40);++selector_mensajes;direccion=0x80;}
output_low(portb);
}

void handle_error()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fFallo en la alimentacion");
if(primer_error==1)
{
sleep();    //La idea es usar esto para congelar al pic y descongelarlo una vez reseteado y reparada la alimentación.
}
primer_error=1;
}
O sea que lo que quiero hacer es evitarme tener que escribir en cada case cada palabra por separado..como puedo escribir todo de una si quiero cambiar la leyenda ej. definir un array con un maximo de letras e ir partiendo la nota de forma q se imprima en pantalla 15 caracteres por vez, se puede hacer? no les pido q me hagan el trabajo pero si estan experimentados tirenme una idea de como podria hacerlo seria con strlen() y sprintf?..Gracias

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #57 en: 01 de Noviembre de 2009, 19:37:19 »
Hola, puedes usar la memoria de programa para almacenar los caracteres.

Código: [Seleccionar]
const char mensaje1[]="Mucho amor, poca RAM."; //Guarda la cadena en la rom de programa

...

for(i=0; i<21; ++i)
   lcd_putc(mensaje1[i]);


Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #58 en: 01 de Noviembre de 2009, 20:24:52 »
HEHE   :D si gracias capo nos vemos,aguante river carajo!!

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: Tutorial - Cadenas y arreglos de chars
« Respuesta #59 en: 01 de Noviembre de 2009, 21:28:56 »
Excelente material amigos!
Migsantiago y gera, los felicito por esa iniciativa!  :-/

Voy a leer la informnacion que colocaron a ver si puedo agregar algo de lo poco que he aprendido en estas cortas semanas qie llevo con el CCS  ;-)

Una preguntilla  :mrgreen:
Los ejemplos que van a colocar son tomando en cuenta el C o van a estar dirijidos al CCS?
Ya que hay cosas que como saben son validas en C y no en CCS.  :shock:

Saludos


 

anything