SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Kassen en Sábado 12 de Mayo de 2012, 23:09

Título: Asignar valores a arrays directamente.
Publicado por: Kassen en Sábado 12 de Mayo de 2012, 23:09
Hola.

Me preguntaba si en C++ existe alguna manera rápida de asignar directamente valores a matrices mediante el lenguaje en una sola asignación. Algo tipo asi:

Código: C++
  1. float matriz[4][4];
  2.  
  3. matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Evidentemente lo que escrito esta mal y no vale puesto que esta fuera de la declaración de la variable, pero es para que se vea la idea.
Título: Re:Asignar valores a arrays directamente.
Publicado por: Eriol en Domingo 13 de Mayo de 2012, 19:29
En efecto, se puede, un poco parecido a lo que haz hecho.
Teniendo en cuenta que el primero '[4]' son las filas y el segundo las columnas y sabiendo que al declarar se va llenando por filas; declaras así:

Código: C++
  1. float matriz[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

Así, los primeros 4 números será los correspondientes a la primera fila y los siguientes 4 a la segunda y así sucesivamente. Quedaría algo así:
Código: C++
  1. 1 2 3 4
  2. 5 6 7 8
  3. 9 10 11 12
  4. 13 14 15 15

Edit:

Aquí puedes ver cómo queda:

Código: C++
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. void imp (int v[][4]);
  5.  
  6. void main ()
  7. {
  8.         int v[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  9.         imp (v);
  10.         getch();
  11. }
  12.  
  13. void imp (int v[][4]) //Función para imprimir la matriz.
  14. {
  15.         for (int i=0;i<4;i++)
  16.         {
  17.                 for (int j=0;j<4;j++)
  18.                 {
  19.                         printf ("%d ",v[i][j]);
  20.                 }
  21.                 printf (" \n");
  22.         }
  23. }
Título: Re:Asignar valores a arrays directamente.
Publicado por: david_lomber en Miércoles 16 de Mayo de 2012, 03:04
Hola.

Me preguntaba si en C++ existe alguna manera rápida de asignar directamente valores a matrices mediante el lenguaje en una sola asignación. Algo tipo asi:

Código: C++
  1. float matriz[4][4];
  2.  
  3. matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Evidentemente lo que escrito esta mal y no vale puesto que esta fuera de la declaración de la variable, pero es para que se vea la idea.

no se por qué dices que esta mal, pero justo como dices se puede asignar:

Código: C++
  1. int vec [2][4] = {{1,2,3,4},{5,6,7,8}};

nada más uqe tendria que ser directo:

Código: C++
  1. float matriz[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Saludos!!
Título: Re:Asignar valores a arrays directamente.
Publicado por: Kassen en Miércoles 16 de Mayo de 2012, 07:04
Exactamente a eso me refiero. Es decir, asignar directamente esos valores a un array ya declarado.

Por ejemplo, supongamos que tenemos la clase Matriz, en muchas ocasiones se va a usar asignaciones directas a esos arrays como por ejemplo la identidad:
Código: C++
  1. class Matriz
  2. {
  3.   typedef float Array4x4 [4][4];
  4.   Array4x4 datos;
  5.  
  6.   void Identidad()
  7.   {
  8.     datos = {{1, 0, 0, 0},
  9.                  {0, 1, 0, 0},
  10.                  {0, 0, 1, 0},
  11.                  {0, 0, 0, 1}}; // Esta sentencia da error, puesto que no esta en la declaracion de la variable.
  12.   }
  13. }

Con lo cual la única forma es hacerlo es elemento a elemento.

Realmente no es algo crucial, simplemente lo preguntaba por si existiese alguna forma, ya que se gana bastante en legibilidad del codigo y a la hora escribirlo.
Título: Re:Asignar valores a arrays directamente.
Publicado por: Manzanit0 en Miércoles 30 de Mayo de 2012, 23:16
Código: C++
  1.     float matriz[4][4];
  2.      
  3.     matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Lo que está mal es que está asignando valores a la dirección de comienzo de la matriz, no a las "casillas" propas de dicha matriz. Es decir, en vez de
 
Código: C++
  1. matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

habría de ser:
 
Código: C++
  1. int matriz[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

pero vamos, la razón es básicamente esa, que matriz es lo mismo que matriz[0][0], por así decirlo. De hecho puedes fijarte como cuando quieres usar un scanf para almacenar un valor en el primer elemento de un array tan sólo has de poner:
Código: C++
  1. int matriz[1];
  2. scanf("%d", matriz);