• Jueves 14 de Noviembre de 2024, 23:18

Autor Tema:  Modificar Valores de una Matriz  (Leído 9326 veces)

darioup

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Modificar Valores de una Matriz
« en: Martes 16 de Marzo de 2010, 22:31 »
0
hola  a to2, creo q la pregunta es muy simple pro hace mucho q lo hice y ahora no lo recuerdo
bueno este es mi caso
tengo una matriz de este tipo

float PC3[3][3]={{250, 250, 0}, {500, 80, 0}, {585, 537, 0}};

ahora bien quiero cambiar los valores de to2 los campos de la matriz algo asi como

PC3 = {{216, 248, 0}, {297, 146, 0}, {267, 78, 0}};

lo que no quiero es
PC3[0][0] = 216;
PC3[0][1] = 248;
PC3[0][2] = 0;
... etc

ayuda please...

jormar arellano

  • Nuevo Miembro
  • *
  • Mensajes: 10
  • Nacionalidad: ve
    • Ver Perfil
Re: Modificar Valores de una Matriz
« Respuesta #1 en: Miércoles 17 de Marzo de 2010, 01:23 »
0
Amigo, te basta con dos iteraciones anidadas (típico en operaciones con matrices). La idea es recorrer todas las posiciones de las filas y, en cada una, recorrer todas las posiciones de las columnas:
Código: C++
  1.  
  2. #define ROWS 3
  3. #define COLS 3
  4. ...
  5. int i, j;
  6. ...
  7. for(i=0; i<ROWS; i++)
  8. {
  9.     for(j=0; j<COLS; j++)
  10.     {
  11.         PC3[i][j] = 1; // <-- Mi valor
  12.     }
  13. }
  14. ...
  15.  
  16.  
En el anterior ejemplo, coloco todos los valores de la matriz a uno

darioup

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Modificar Valores de una Matriz
« Respuesta #2 en: Miércoles 17 de Marzo de 2010, 01:46 »
0
:bad: nooop
no quiero recorrer toda la matriz o limpiarla, quiero sobreescribir sus campos por valores escritos por el programador, para un programa de graficacion donde los campos de la matriz son X, Y, alpha; entonces los X, Y son muy cambiantes, y solo quiero reutilizar la variable matriz

Código: C
  1. ...
  2. float PC3[3][3]={{250, 250, 0}, {500, 80, 0}, {585, 537, 0}};
  3. pinta(*PC3);
  4. PC3 = {{216, 248, 0}, {297, 146, 0}, {267, 78, 0}}; //esta parte esta mal pro ojala se entienda la idea
  5. pinta(*PC3);
  6. PC3 = {{300, 250, 0}, {60, 15, 0}, {26, 81, 0}};
  7. pinta(*PC3);
  8. ...
  9.  
  10.  
como son muchas lineas las q se pintan quiero ahorrar un poco de codigo
ya lo tengo resuelto con una funcion q copia cada elemento en el campo adecuado de la matriz
algo asi como
PC3[0][0] = 300;
PC3[0][1] = 345;
...

me quedo muy mona mi funcion, hace q me ahorre un buen de lineas de codigo, pro queria saber si existe algo mas practico auque creo q no...

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Modificar Valores de una Matriz
« Respuesta #3 en: Miércoles 17 de Marzo de 2010, 02:35 »
0
Tal vez un memmove?

Código: Text
  1.  
  2. #include <string.h>
  3.  
  4. .
  5. .
  6. .
  7.  
  8.     float S0[3][3] = {{250, 250, 0}, {500, 80, 0}, {585, 537, 0}};
  9.     float S1[3][3] = {{216, 248, 0}, {297, 146, 0}, {267, 78, 0}};
  10.  
  11.     float S[3][3];
  12.  
  13.     memmove(S,S0,sizeof(S));
  14.  
  15.     memmove(S,S1,sizeof(S));
  16.  
  17.  

En todo caso usando un puntero sería mas eficiente siempre y cuando no tengas intencion de modificar los valores del arreglo.

jormar arellano

  • Nuevo Miembro
  • *
  • Mensajes: 10
  • Nacionalidad: ve
    • Ver Perfil
Re: Modificar Valores de una Matriz
« Respuesta #4 en: Miércoles 17 de Marzo de 2010, 02:57 »
0
Oka, ya creo que entendí lo que quieres... deseas cambiar el valor de la misma variable (matriz) con valores cableados en el código fuente, pero de forma elegante, o corta...

Si ese es tu propósito, lo mejor es hacerlo con una función que te haga el trabajo (tal y como dices). Aca te dejo mi propuesta:
Código: C++
  1.  
  2. ...
  3. #include <string.h>      /* incluye memcpy( ... ) */
  4. ...
  5. void copiar(float mat[3][3],
  6.         float a, float b, float c,
  7.         float d, float e, float f,
  8.         float g, float h, float i)
  9. {
  10.     float aux[3][3] = {{a,b,c}, {d,e,f}, {g,h,i}};
  11.     memcpy(mat, aux, sizeof(aux));
  12. }
  13. ...
  14. int main()
  15. {
  16. ...
  17.     // En caso de que quieras colocar los valores manualmente
  18.     copiar(mat, 3,5,30, 21,1,0, 32,87,9);
  19.    // imprimir mat
  20.  
  21.     copiar(mat, 32,51,310, 231,16,10, 3,4,67);
  22.    // imprimir mat
  23.  
  24. ...
  25.     // En caso de que tengas todos los valores nuevos en otra matriz
  26.     float mat_aux[3][3] = {{81.8, 4, 3},{81.8, 4, 3},{81.8, 4, 3}};
  27.     memcpy(mat, mat_aux, sizeof(mat));
  28.     // imprimir mat
  29. ...
  30. }
  31.  
  32.  
La función memcpy es una de las formas más rápidas de copiar tus valores de un lugar a otro; en efecto, es más rápido que hacer:
Código: C++
  1.  
  2. mat[0][0] = 100;
  3. mat[0][1] = 45;
  4. ...
  5.  
  6.  

Por ultimo, si lo que quieres es hacer debug, o cambiar los valores de variables durante la ejecución del programa, te recomiendo que uses gdb, o alguno por el estilo (aunque no creo que nada de esto último es lo que buscas, pero no esta de más mencionarlo :) )

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Modificar Valores de una Matriz
« Respuesta #5 en: Miércoles 17 de Marzo de 2010, 03:21 »
0
Efectivamente memcpy es mejor que memmove, memmove se usa cuando existe riesgo de solapamiento entre origen y destino. :P

darioup

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Modificar Valores de una Matriz
« Respuesta #6 en: Miércoles 17 de Marzo de 2010, 03:32 »
0
:good: EXCELENTE creo q esto es de lo mejor, no conocia el memcpy muchas gracias