• Sábado 20 de Abril de 2024, 07:22

Autor Tema:  Asignar valores a arrays directamente.  (Leído 2297 veces)

Kassen

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Asignar valores a arrays directamente.
« en: Sábado 12 de Mayo de 2012, 23:09 »
0
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.

Eriol

  • Nuevo Miembro
  • *
  • Mensajes: 7
  • Nacionalidad: 00
    • Ver Perfil
Re:Asignar valores a arrays directamente.
« Respuesta #1 en: Domingo 13 de Mayo de 2012, 19:29 »
0
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. }
« última modificación: Domingo 13 de Mayo de 2012, 19:35 por Eriol »

david_lomber

  • Miembro activo
  • **
  • Mensajes: 34
  • Nacionalidad: mx
  • Impossible is nothing, just do it!!
    • Ver Perfil
    • Pelis DVDRip
Re:Asignar valores a arrays directamente.
« Respuesta #2 en: Miércoles 16 de Mayo de 2012, 03:04 »
0
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!!
« última modificación: Miércoles 16 de Mayo de 2012, 03:08 por david_lomber »

Kassen

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Asignar valores a arrays directamente.
« Respuesta #3 en: Miércoles 16 de Mayo de 2012, 07:04 »
0
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.

Manzanit0

  • Nuevo Miembro
  • *
  • Mensajes: 15
  • Nacionalidad: es
  • Sometimes we can’t feel the vibe of our heart...
    • Ver Perfil
    • Lapso de Imaginación
Re:Asignar valores a arrays directamente.
« Respuesta #4 en: Miércoles 30 de Mayo de 2012, 23:16 »
0
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);
« última modificación: Miércoles 30 de Mayo de 2012, 23:21 por Manzanit0 »