Programación General > C/C++

 Modificar Valores de una Matriz

(1/2) > >>

darioup:
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:
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++ --- #define ROWS 3#define COLS 3...int i, j;...for(i=0; i<ROWS; i++){    for(j=0; j<COLS; j++)    {        PC3[i][j] = 1; // <-- Mi valor    }}...  En el anterior ejemplo, coloco todos los valores de la matriz a uno

darioup:
: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 ---...float PC3[3][3]={{250, 250, 0}, {500, 80, 0}, {585, 537, 0}};pinta(*PC3);PC3 = {{216, 248, 0}, {297, 146, 0}, {267, 78, 0}}; //esta parte esta mal pro ojala se entienda la ideapinta(*PC3);PC3 = {{300, 250, 0}, {60, 15, 0}, {26, 81, 0}};pinta(*PC3);...  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:
Tal vez un memmove?


--- Código: Text --- #include <string.h> ...     float S0[3][3] = {{250, 250, 0}, {500, 80, 0}, {585, 537, 0}};    float S1[3][3] = {{216, 248, 0}, {297, 146, 0}, {267, 78, 0}};     float S[3][3];     memmove(S,S0,sizeof(S));     memmove(S,S1,sizeof(S));  
En todo caso usando un puntero sería mas eficiente siempre y cuando no tengas intencion de modificar los valores del arreglo.

jormar arellano:
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++ --- ...#include <string.h>      /* incluye memcpy( ... ) */...void copiar(float mat[3][3],        float a, float b, float c,        float d, float e, float f,        float g, float h, float i){    float aux[3][3] = {{a,b,c}, {d,e,f}, {g,h,i}};    memcpy(mat, aux, sizeof(aux));}...int main(){...    // En caso de que quieras colocar los valores manualmente    copiar(mat, 3,5,30, 21,1,0, 32,87,9);   // imprimir mat     copiar(mat, 32,51,310, 231,16,10, 3,4,67);   // imprimir mat ...    // En caso de que tengas todos los valores nuevos en otra matriz    float mat_aux[3][3] = {{81.8, 4, 3},{81.8, 4, 3},{81.8, 4, 3}};    memcpy(mat, mat_aux, sizeof(mat));    // imprimir mat...}  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++ --- mat[0][0] = 100;mat[0][1] = 45;...  
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 :) )

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa