Autor Tema: Llamando variables...  (Leído 2530 veces)

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

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Llamando variables...
« en: 17 de Abril de 2007, 16:34:52 »
Ola a todos(as) pues tengo una duda sobre cuando llamas una variable ya existente, en este caso cuando es un "array" o un char por asi decirlo.
Un ejemplo para q me entiendan...

void main()
{
int i1,i2,i3;
const long variable[3] = ( i1, i2, i3 );
}

Pues bien, ESO NO me deja hacer el compilador CCS. Encambio poniendo antes del "void main", esto:
#define i1  0
#define i2  0
#define i3  0

Si lo hace, pero necesito q sea una variable dentro del void para poder modifcarla y todo eso. Espero me entiendan, ah y porcierto esto es todo lo q uso:
CCS 4.023
Quemador/depurador MPLAB ICD 2
Tarjeta de prueba PICDEM 2 PLUS DEMO BOARD
PIC18F452
Cristal 4 MHZ

Espero no olvidarme de nada en general.
Gracias.


salu2 8) 8) 8)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Llamando variables...
« Respuesta #1 en: 17 de Abril de 2007, 17:10:11 »
En el primer caso estas declarando una variable , que se creará en tiempo de ejecución y luego la incorporas a una definición de un arreglo que es una constante!

No se si entiendes la diferencia pero te aseguro que estás confundiendo bastante las cosas.

En el segundo ejemplo no estas declarando variables, simplemente estás declarando "reemplazos de texto".  El compilador  al encontrar i1, lo reemplazará por 0.  Esto no significa que i1 puede cambiar su valor en tiempo de ejecución como si lo haría si fuera una variable.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Llamando variables...
« Respuesta #2 en: 17 de Abril de 2007, 17:44:55 »
Bien, entonces como puedo hacerlo ? O no hay forma de lograrlo =S porfavor denme una solucion.  :lol:

Yo en otro programa lo hacia algo asi:

int i1,i2,i3;
const long variable[3] = ( string(i1), string(i2), string(i3) );


Cosa que "string" seria una funcion/convertidor ya prediseñada por el programador, q me permitiria poder poner esto ahi y lo otro ahi. Me entienden ?? pense q existiria una funcion asi en el CCS, sino diganme alguna forma de poder hacerlo q lo necesito para modificar esas variables constantemente.


Gracias y salu2 8) 8) 8)

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Llamando variables...
« Respuesta #3 en: 17 de Abril de 2007, 17:56:40 »
Veamos...   creo que no solo PIC C le pondria objeciones a ese codigo, sino cualquier C... (aunque me puedo equivocar....)

Cuando tu dices

const long variable[3] = {#, #, # };    0j0, con llaves {}

donde a juro # debe ser una constante, ya sea un numero (23 por ejemplo), o una sustitucion de numero por letra.
esto es porque el compilador asume que estas declarando una variable e inicializando al mismo tiempo.... la variable arreglo "variable"

por ello solo cuando le dices al programa:

#define i1  0
#define i2  0
#define i3  0


te lo acepta... ¿por qué? porque entonces el compilador quita el nombre 'i1' y lo sustituye por el valor 0 al compilarlo, y asi si se le hace "aceptable"
ahora, puedes hacer lo siguiente:
declaras:

long variable[3]; long *i1;

y luego dices

i1=&variable[0] y así estableces que

*i1=variable[0] y *(i1+1)=variable[1] y así sucesivamente.

eso se leería como declaro el arreglo de 3 casillas "variable" ;y un espacio de memoria cuya direccion se guarda en memoria i1
entonces la primera linea como que el contenido de i1 es igual a la direccion (&) del primer elemento del arreglo variable
 lo siguiente ya no es una linea de codigo sino una igualdad en la realidad

 al decir *i1=0 estarias diciendo, haz algo (en este caso graba un 0) en la direccion en la que apunta i1 (es decir, hacia variable[0])

espero que sea esto lo que necesitabas
« Última modificación: 17 de Abril de 2007, 18:01:15 por Dancrazy »
Daniel 
Caracas, Venezuela 

-----------------

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Llamando variables...
« Respuesta #4 en: 17 de Abril de 2007, 18:07:53 »
ah! puedes inicializar asi tambien...

int8 variable[] = "caramba";

entonces el arreglo queda:

posicion     0    1   2    3    4     5    6   7
Variable  ['c']['a']['r']['a']['m']['b']['a'][\0]  <---  caracter nulo fin de string
       

y para hacer la conversion existe

sprintf(Variable,"%d",i1)  si el contenido de i1 es por ejemplo 34 el resultado es :

posicion     0    1   2
Variable  ['3']['4'][\0]  <---  caracter nulo fin de string

espero haber ayudado

buena informacion de sprintf?  busca aqui:
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html
Daniel 
Caracas, Venezuela 

-----------------

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Llamando variables...
« Respuesta #5 en: 17 de Abril de 2007, 18:16:53 »
Lo de spritf ya lo sabia desde hace poco para el lcd, pero eso de q sean parte de una direcion pues... algo me habian dicho pero no entendia nada. Ahora yase a q se refiere mas o menos, espero poder lograrlo. Muchas gracias.


salu2 8) 8) 8)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Llamando variables...
« Respuesta #6 en: 17 de Abril de 2007, 20:26:32 »
jeremylf, sin ofender, pero creo que debieras comprar un buen libro de C

Me parece que te estas confundiendo conceptos que son muy básicos, más allá de que hablemos de un PIC o de un ordenador.

Es por tu bien, sino darás tropiezos y tal vez te sientras frustrado con mucha frecuencia solo por no tener bien fijados algunos conceptos.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: Llamando variables...
« Respuesta #7 en: 18 de Abril de 2007, 11:43:52 »
Bueno, es cierto Maunix...

Concuerdo contigo en que es bueno consultar un libro, solo que a veces yo entiendo que el tiempo apremia... y los libros son un poco áridos en este tema... de hecho, sospecho que la duda de Jeremylf tiene más que ver con el area que más se complica del lenguaje C: los punteros e indirecciones de memoria...   siempre han sido muy complejos y confieso que yo aun tengo dudas al momento de manejarme con estas herramientas...

es por ello que muchos acuden al foro... aun yo...  jeje...  :-)

pero si los libros pueden resultar algo confusos o divagantes... recomiendo a Enciclopedia libre Wikipedia o Buscador Google para entender mejor...  porque es raro, pero muchas veces los libros son algo mas genericos mientras que las personas que ya se dieron muchos topes (y que son las que publican paginas webs o foros) que son mas exactos y precisos en responder a dudas...

de todas formas siempre a la orden...
Daniel 
Caracas, Venezuela 

-----------------

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Llamando variables...
« Respuesta #8 en: 18 de Abril de 2007, 23:40:37 »
Mmm, hay libros para todo y sobre todo en cuanto al lengueaje C hay libros que realmente comienzan desde bien bajo.

Soy miembro activo de este foro, como tal vez ya te hayas dado cuenta, aún así creo que los foros no deben ser el primer contacto con el conocimiento (si hablamos de ideales).

Es mejor un libro y luego venir al foro a consultar una duda puntual, a nunca leer nada de ningun libro e "imaginar" lo que significan los conceptos.  Tomar conceptos equivocados de entrada puede llevar a muchos dolores de cabeza.   He visto y sigo viendo a veces, respuestas de foristas que distan de ser siquiera acertadas... y no por una cuestión de opinión sino porque sencillamente están errados en el concepto.  Entonces, entre un libro y un forista, sugiero que se comience con el libro y luego el foro.

Habrá alguno que sepa tanto o más que el que escribió el libro pero eso no es el caso común y no por ello vamos a descartar un libro ¿no?

Wiki y google son herramientas que se deben saber utilizar.  Google encontrará todo concepto que haya escrito alguien relacionado al tema, idem Wiki.  Dichos conceptos pueden ser algo correcto o cualquier barbaridad!! de hecho hay páginas que tienen muy buen aspecto pero sin embargo el contenido es menos que bueno.

Ojo con wiki, ojo con google, usarse como herramienta pero no como UNICO medio de formación!!

Y por favor, no mal interpretar, los foros SI sirven y Si son muy útiles pero no me parece adecuado, sugerir como medio de aprendizaje una buscador de internet antes que un libro.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything