Autor Tema: Duda array  (Leído 2274 veces)

Waldillo

  • Moderador
  • PIC16F
  • ******
  • Mensajes: 851
  • Casado con PIC infiel con ARM
    • El Rincon del Debug
Duda array
« en: Agosto 08, 2012, 11:40:51 am »
Quiero conseguir una multiplicación por 5 sin hacerlo como tal.

Tengo lo siguiente:
const short int tengo[4] = { 0, 1, 2, 3};
const short int objetivo[4] = { 0, 5, 10, 15};

a=function(tengo[2]); // a=10;
unsigned short int function(uint8_t u8Index)
{
  uint32_t u32Ret = 0;
  u32Ret = (uint32_t)objetivo[u8Index];
  
  return (unsigned short int) u32Ret;
}

Ahora tengo lo siguiente...

Tengo un vector con los siguientes valores.

const short int tengo[4] = {5, 10, 15, 20};

En principio puedo leer el valor de tengo pero a priori no tengo el indice del vector (la clave). Merece la pena tratar de conseguir el indice o no merece la pena ese coste computacional y hacerlo con un switch clásico.

A alguien se le ocurre algo??

Gracias por adelantado

BrunoF

  • PIC16F
  • ***
  • Mensajes: 721
Re: Duda array
« Respuesta #1 en: Agosto 08, 2012, 01:30:03 pm »
MMno logro entender lo que querés hacer.  :pared

el_vpi

  • Moderador
  • PIC18F
  • ******
  • Mensajes: 1348
Re: Duda array
« Respuesta #2 en: Agosto 08, 2012, 03:32:24 pm »
mmm... a ver si entiendo la idea.
Basicamente queres tener un arreglo con un valor de entrada (tengo) y otro de salida, por asi llamarlo (objetivo) que tiene el resultado de una función dependiente del valor de entrada, pero esto lo queres hacer con valores fijos y no poniendo una formula.
Si es asi y sabiendo que el n-avo valor de la tabla de entrada le corresponde el n-avo de la de salida, interpreto que nunca usarias el valos de lo apuntado en el primer array, es asi ? o usas para algo ese valor ?
Perdon, pero no logro entender bien que queres hacer.

Gracias, Daniel.

Waldillo

  • Moderador
  • PIC16F
  • ******
  • Mensajes: 851
  • Casado con PIC infiel con ARM
    • El Rincon del Debug
Re: Duda array
« Respuesta #3 en: Agosto 09, 2012, 05:10:42 am »
Lo que trato de hacer es una multiplicacion por 5 sin hacerla.

En el caso de lo siguiente se hace facil:

Tengo un array a[4]= {0, 1 ,   2 , 3};
Tengo un array b[4]= {0, 5 , 10 ,15};

el valor a[1] = 1; Tiene indice 1 y valor 1. El indice no lo sé a priori, pero el valor es el mismo que el indice y utilizo el valor de a como indice para coger el valor con indice 1 del array b[1] = 5

a[0] = 0  b[0] = 0
a[1] = 1  b[1] = 5 etc


La cuestión es que yo no tengo a[4]= {0, 1 ,   2 , 3}; si no a_prima[4]= {0, 2 ,   4 , 6};

jukinch

  • Amigo de uControl
  • PIC12F
  • ******
  • Mensajes: 110
Re: Duda array
« Respuesta #4 en: Agosto 09, 2012, 07:56:02 am »
Es decir, querés guardar una tabla de multiplicar?

Waldillo

  • Moderador
  • PIC16F
  • ******
  • Mensajes: 851
  • Casado con PIC infiel con ARM
    • El Rincon del Debug
Re: Duda array
« Respuesta #5 en: Agosto 09, 2012, 11:17:01 am »
Quiero conseguir una multiplicacion de un valor por 5. No guardar nada, solo la transformacion del valor a_prima[2] = 4 del que solo tengo el valor 4 a el valor 20.

BrunoF

  • PIC16F
  • ***
  • Mensajes: 721
Re: Duda array
« Respuesta #6 en: Agosto 09, 2012, 11:26:55 am »
No deberías entonces guardar:

 a_prima[4]= {0*5, 2*5 ,   4*5 , 6*5};

directamente?

Saludos.

Waldillo

  • Moderador
  • PIC16F
  • ******
  • Mensajes: 851
  • Casado con PIC infiel con ARM
    • El Rincon del Debug
Re: Duda array
« Respuesta #7 en: Agosto 09, 2012, 12:25:15 pm »
a_prima por diversas razones debe ser la que es.
a_prima[4]= {0, 2 ,4 ,6};
y dependiendo del valor de a_prima que esté leyendo sacar su valor multiplicado por 5.

jukinch

  • Amigo de uControl
  • PIC12F
  • ******
  • Mensajes: 110
Re: Duda array
« Respuesta #8 en: Agosto 09, 2012, 12:46:49 pm »
Y así?
Código: [Seleccionar]
#include <stdio.h>

int main(void)
{
// ---------------------------------------------------------------------------

unsigned char indice=0;
int resultado=0;
int a_prima[4]= {0, 2 ,4 ,6};

for (indice=0;indice<4;indice++)
{
resultado=a_prima[indice]*5;
printf("%d ,",resultado);

}

system("PAUSE");
return 0;
}