Programación General > C/C++
Asignar valores a arrays directamente.
(1/1)
Kassen:
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++ ---float matriz[4][4]; 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:
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++ ---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 2 3 45 6 7 89 10 11 1213 14 15 15
Edit:
Aquí puedes ver cómo queda:
--- Código: C++ ---#include <stdio.h>#include <conio.h> void imp (int v[][4]); void main (){ int v[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; imp (v); getch();} void imp (int v[][4]) //Función para imprimir la matriz.{ for (int i=0;i<4;i++) { for (int j=0;j<4;j++) { printf ("%d ",v[i][j]); } printf (" \n"); }}
david_lomber:
--- Cita de: 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++ ---float matriz[4][4]; 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.
--- Fin de la cita ---
no se por qué dices que esta mal, pero justo como dices se puede asignar:
--- Código: C++ ---int vec [2][4] = {{1,2,3,4},{5,6,7,8}};
nada más uqe tendria que ser directo:
--- Código: C++ ---float matriz[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
Saludos!!
Kassen:
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++ ---class Matriz{ typedef float Array4x4 [4][4]; Array4x4 datos; void Identidad() { datos = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}}; // Esta sentencia da error, puesto que no esta en la declaracion de la variable. }}
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:
--- Código: C++ --- float matriz[4][4]; 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++ ---matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
habría de ser:
--- Código: C++ ---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++ ---int matriz[1];scanf("%d", matriz);
Navegación
Ir a la versión completa