Autor Tema: pueden los nombres de variables contener variables en su nombre?  (Leído 4274 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Se que suena raro pero necesito hacer lo siguiente

teniendo una variable que se llama mod_1 , quiero lograr que ese 1 de mod_1 pueda modificarse de acuerdo a algo , es decir

if a = 0 mod_1 es mod_1
if b = 0 mod_1 sera ahora mod_2 pero sin declarar a mod_2 , si no que mod_1 vaya cambiando dinamicamente

espero haber sido claro... :lol:

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #1 en: 24 de Marzo de 2007, 17:32:58 »
ya al decir mod_2 estas declarando otra variable, sería como especie de un arreglo, o lo que quieres es cambiarle en nombre a la variable??


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #2 en: 24 de Marzo de 2007, 17:40:27 »
tengo que hacer 12 modulos de programacion para un control electronico de potencia , que en funcion del horario cargado , el modulo n toma el control:

ejemplo : de 2 a 4 de la mañana : temperatura a 30 grados y 4 luces prendidas modulo 1
                    4 a 6 de la mañana : temperatura a 25 grados y 2 luces prendidas modulo2
la idea es contar con algun artilugio para ahorrar codigo y no tener que escribir los 12 codigos , si no que al poner que el modulo n es el 3 por ejemplo , que todo el entorno de variables se transforme al 3 :(

los 12 modulos los tengo que mostrar en un lcd 128 x 64 y tienen que estar todos definidos antes de empezar la tarea

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #3 en: 24 de Marzo de 2007, 17:44:00 »
mas o menos entiendo tu idea fastyx , una forma que propongo es que debes conocer la dirección donde alojes esa variable, y después al quererla cambiar, los hagas a través de un puntero, es decir, conociendo la casilla del registro es suficiente para modificar el contenido de esa casilla.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #4 en: 25 de Marzo de 2007, 06:35:03 »
Las variables no pueden cambiar su nombre en el transcurso del programa.

Lo que si puedes usar, es la operación condicional, que tiene el siguiente formato:
Código: C
  1. c = ( a < b ) ? a : b ;

Donde declaras variables c, a y b, en c se almacenará el resultado, y las variables a y b son variables condicionales. La instrucción, hace la operación de que si a es menor que b, si es así, c = a, en caso contrario, c = b.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #5 en: 25 de Marzo de 2007, 12:59:58 »
¿Y no servirá un array bidimensional?

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #6 en: 25 de Marzo de 2007, 21:14:22 »
Para lo que dices, que no es tan raro, necesitas hacer uso de los punteros...

te dejo un link para que aprendas a usarlos...

http://www.lugro.org.ar/biblioteca/cursos/cursoc/Punteros.pdf




Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #7 en: 26 de Marzo de 2007, 04:15:41 »
Yo te sugiero que utilizes dos metodos antes nombrados, no entiendo muy bien lo que quieres hacer pero me parece que unas forma en la que podrias realizarlo es utilizar para las  variables, vectores de la forma:

NombreVariable [ Localidades ]

Tambien podrias utilizar una funcion a la cual le pasaras como variable el numero de localidad que utilizaras de acuerdo a la hora con lo cual podras acceder asi a las variables segun el parametro que mandes por ejemplo:

Código: C
  1. Funcion(int x)
  2. {
  3.       Leds=Led[x];
  4.       temp=tempera[x]
  5. }

 :-/ :-/ :-/
Utilizando estas herramientas de programacion podras cambiar las variables de acuerdo a un parametro,y solo tendras que definir una vez

Claro que hay muchas formas tu debes decidir que utilizar.

Suerte

« Última modificación: 26 de Marzo de 2007, 04:20:05 por RiBerZerO »
No SUEÑES tu vida, VIVE tu sueño

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #8 en: 26 de Marzo de 2007, 06:24:42 »
Define con la directiva #define 10 nombres para 10 direcciones. Luego, haz que mod sea el numero 1 (declaras mod como variable puntero, es decir int* mod;) y le asignas la direccion del primer modulo, mediante los anteriores defines.

la idea es contar con algun artilugio para ahorrar codigo y no tener que escribir los 12 codigos , si no que al poner que el modulo n es el 3 por ejemplo , que todo el entorno de variables se transforme al 3 :(


En este caso, coloca "estrategicamente" mediante la directiva #locate las variables para cada modulo a lo largo de la RAM, y luego incrementa el puntero de modulo mediante eso. Por ejemplo, supongamos MOD_n  e i_n , j_n y k_n.
Código: [Seleccionar]
MOD_1 -> 0x200
i_1 -> 0x201
j_1-> 0x202
k_1-> 0x203
MOD_2 ->0x204
i_2 ->0x205
j_2 ->0x206
k_2 ->0x207
... y sucesivamente...
Luego seria simplemente (suponiendo que mod es una variable puntero), llamar a i_n mediante "*(mod+1)",j_n mediante "*(mod+2)" y k_n mediante "*(mod+3)". Si cambias el valor de mod, incrementando en cuatro (200,204,...) estarias cambiando de juego de variables, si te das cuenta.

Espero que te haya servido. un saludo.

Desconectado vicent

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 144
    • Web de Vicent
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #9 en: 26 de Marzo de 2007, 08:52:09 »
Yo creo que es más fácil y sencillo de entender el uso de Vectores bidimensionales, tal como te indica más arriba Nocturno.

Puedes utilizarlo de esta forma, verás como es muy sencillo.

Código: [Seleccionar]
int i;
int control[12][2]; //Digo 2 porque supongo que quieres almacenar tempartura y número de luces encendidas

// Después dependiendo de que modulo sea con la variable i lo cambiarías.
// Por ejemplo, para acceder a la temperatura del módulo 3 podrías hacer:

i =  2; // Los vectores empiezan en 0

control[i][0]; //Para leer o escribir en ella.



Si en cambio quisieras tener luces activadas independientes, podrías crear el vector de acuerdo a cuantas luces quieras, por ejemplo:

Código: [Seleccionar]
int i, j;
int control[12][6]; //Suponemos que vas a guardar temperatura y 5 luces distintas para cada módulo.

// Para encender o apagar una luz, sería tan fácil como:

i = #numero de módulo;
j = #número de luz; //Fíjate que ahora no tienes que poner el (numero de luz-1), ya que en la posicion 0 está la temperatura.
                           //Puedes poner la luz directamente, si fuera para la luz numero 3, pondrías j = 3

control[i][j]; //Para activar o desactivar la luz escogida

Espero haberte ayudado.

Un saludo. Au.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #10 en: 26 de Marzo de 2007, 12:04:22 »
La otra alternativa es la de usar macros con reemplazo de cadenas de texto.  De esta forma, el amigo fastyx no tiene que complicarse con punteros o arreglos si es que no domina el tema.

No los he usado en C pero si los usé mucho en assembler y me han dado muy buenos resultados.  Sería bueno ver si en C, en el compilador que usas, está disponible el reemplazo de cadenas de texto.

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 RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #11 en: 26 de Marzo de 2007, 15:15:18 »
 :-/ yo creo que hay varias maneras, pero nececitamos saber en concreto el problema ya que no sabemos como es que quiere acceder a las variables y que guardaran estas, si nos pudieras indicar estariamos mas entrados en el tema

Saludos a todo el foro :-/
« Última modificación: 26 de Marzo de 2007, 15:18:25 por RiBerZerO »
No SUEÑES tu vida, VIVE tu sueño

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #12 en: 26 de Marzo de 2007, 23:10:19 »
Amigos :imaginen un solo modulo de control electronico y doce programaciones diarias que deben poderse ver en un display de128 x 64
           
            los modulos de programacion incluyen : control de temperatura , potencias de luces y un lapso de funcionamiento.

           para lo cual estoy haciendo mod1, mod 2 mod 3 .

           como cada modulo en forma generica , hace lo mismo ( obviamente cambiando el seteo de la temp de las luces y del lapso ) en lugar de poner
           luz_mod_1 luz_mod_2 etc  ( que es lo que estoy haciendo con un millon de nombres de variables ) quiero usar un modelo universal en donde yo tenga
           que cambiar el subindice de donde estoy parado y situarme en el modulo n .

         El tema es que si aparece la necesidad de cambiar el seteo del modulo 5 por ejemplo digamos en lugar de 24 grados darle 29 , el modulo que se                   encuentra corriendo en ese momento , digamos el 2 , no debe verse afectado mientras yo cambio ese seteo.

        En realidad lo tengo casi terminado , pero me parece una cagada lo que hice... aca les muestro a modo de ejemplo las variables declaradas en el .h

int8 q1, q2, seg, minuto , hora , dia , valdia1  ,valdia2 , mes , bisi , val1 , val2 , valmes1 ,
     valmes2 , valhora2 , valhora1 , year, new_year , new_mes , new_dia , new_hora , new_minuto ,
     valminuto1 , valminuto2 ;  //, dds;
int16 hora_minuto ,ini_mod1 ,ini_mod2 ;
int8 

     L1_1 ,L2_1 , L3_1 , L4_1 , L5_1 , L6_1 ,
     act1_si, act1_no , activar1 , hora_mod1 , minuto_mod1 , tempe_mod1 ,

     L1_2 ,L2_2 , L3_2 , L4_2 , L5_2 , L6_2 ,
     act2_si, act2_no , activar2 , hora_mod2 , minuto_mod2 , tempe_mod2 ,
     
     L1_3 ,L2_3 , L3_3 , L4_3 , L5_3 , L6_3 ,
     act3_si, act3_no , activar3 , hora_mod3 , minuto_mod3 ,
     
     L1_4 ,L2_4 , L3_4 , L4_4 , L5_4 , L6_4 ,
     act4_si, act4_no , activar4 , hora_mod4 , minuto_mod4 ,
     
     L1_5 ,L2_5 , L3_5 , L4_5 , L5_5 , L6_5 ,
     act5_si, act5_no , activar5 , hora_mod5 , minuto_mod5 ,
     
     L1_6 ,L2_6 , L3_6 , L4_6 , L5_6 , L6_6 ,
     act6_si, act6_no , activar6 , hora_mod6 , minuto_mod6 ,
     
     L1_7 ,L2_7 , L3_7 , L4_7 , L5_7 , L6_7 ,
     act7_si, act7_no , activar7 , hora_mod7 , minuto_mod7 ,
     
     L1_8 ,L2_8 , L3_8 , L4_8 , L5_8 , L6_8 ,
     act8_si, act8_no , activar8 , hora_mod8 , minuto_mod8 ,
     
     L1_9 ,L2_9 , L3_9 , L4_9 , L5_9 , L6_9 ,
     act9_si, act9_no , activar9 , hora_mod9 , minuto_mod9 ,
     
     L1_10 ,L2_10 , L3_10 , L4_10 , L5_10 , L6_10 ,
     act10_si, act10_no , activar10 , hora_mod10 , minuto_mod10,
     
     L1_11 ,L2_11 , L3_11 , L4_11 , L5_11 , L6_11 ,
     act11_si, act11_no , activar11 , hora_mod11 , minuto_mod11 ,
     
     L1_12 ,L2_12 , L3_12 , L4_12 , L5_12 , L6_12 ,
     act12_si, act12_no , activar12 , hora_mod12 , minuto_mod12 ;

seguro tiene que haber un modo mas elegante ....
     


         
           

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #13 en: 26 de Marzo de 2007, 23:12:21 »
disculpen la falta de consideracion   ..... les agradezco a todos el haber contestado. lo que pasa es que tengo el cerebro quemado de tanto pensar...

Desconectado RiBerZerO

  • PIC12
  • **
  • Mensajes: 52
Re: pueden los nombres de variables contener variables en su nombre?
« Respuesta #14 en: 27 de Marzo de 2007, 02:47:30 »
 :-/ a ver que te parecen las siguientes definiciones  :-/
Código: C++
  1. int8 L[5][11];       //Para las variables de formato L1_6 donde L[No. de led][Modulo]
  2. int8 act_si[11];     //formato act1_si donde acr_si[Modulo]
  3. int8 act_no[11];     //formato act1_no donde acr_no[Modulo]
  4. int8 activar[11];    //formato activar1 donde activar[Modulo]
  5. int8 hora_mod[11];   //Para el formato hora_mod1 donde hora_mod[modulo]
  6. int8 minuto_mod[11]; //Para el formato minuto_mod donde minuto_mod[modulo]
  7. int8 tempe_mod[11];  //Para el formato tempe_mod donde tempe_mod[modulo]

Bueno pongo 11 modulos por que se utiliza tambien el 0 y para moverte solo tienes que poner algo como esto bueno varia mucho con respecto al uso del programa pero lo puedes utilizar a tu manera

Código: C
  1. for(cont=0;cont<12;cont++)
  2.             act_no[cont];

y para la doble

Código: C
  1. for(i=0;i<6;i++)
  2.    for(j=0;j<12;j++)
  3.        L[i][j];

esto es para realizar un barrido en entre las diferentes casillas de las variables pero tu puedes utilizar cualquiera sin problemas utilizando los indices que son los que estan entre corchetes
No SUEÑES tu vida, VIVE tu sueño


 

anything