AlanChavez
Becerro
- Desde
- 25 Dic 2010
- Mensajes
- 44
- Tema Autor
- #1
Este artículo, lo escribí para mi página de artículos y tutoriales de programación, pero dado que no tengo un trafico constante de visitantes y es un tema muy consultado en foros de programación deseo compartirlo con la comunidad de ba-k.com
Yo diseñé las imagenes, asi que disculpen si están muy feas
Los colores fueron meticulosamente seleccionados para que se asemejen a la bandera de adivinen que país? :cucu: (Y no es Italia
)
Este artículo lo hice para mi pagina web y decidi compartirlo en foros del web, porque es una pregunta recurrente. Aclaro que el codigo aqui expuesto, es codigo simplemente para demostrar el concepto y no debe usarse en producción.
Fuente: Desarrollando Ideas
Una pregunta recurrente en cualquier foro de programación es la implementación de las matrices dinámicas. Este concepto se encuentra muy mitificado, haciendolo pasar muchas veces como algo de alto nivel y muy sofisticado, el objetivo de este articulo es desmitificar dicho concepto y simplificarlo al máximo.
Memoria dinámica? Que es?
Si estás leyendo esto, es muy probable que la gran mayoría de tus programas hayas conocido la cantidad de datos a almacenar de antemano. Sin embargo en problemas reales, la mayoría de las ocasiones, desconocemos la cantidad de datos a almacenar, y tenemos que echar a andar diversos recursos que los lenguajes de programación nos ofrecen, para lidiar con este problema.
Uno de ellos, es la asignación dinámica de memoria, que nos permite asignar bloques de memoria, en tiempo de ejecución, para almacenar datos en dichos bloques.
Bueno ya se que es, ahora como la programo?
C++ nos brinda el operador new y delete que asignan y liberan la memoria de una zona denominada free store (Almacén libre). A diferencia de malloc() y free() en C, new y*delete de C++ implementados como operadores y son mas fiables ya que el compilador realiza verificación de tipos cada vez que un programa aloja memoria.
Existen dos maneras muy sencillas de implementar matrices dinamicas en C/C++, la primera es creando un arreglo dinamico, y dentro de cada casilla del arreglo dinamico, creamos otro arreglo dinamico, simulando una matriz dinamica. La segunda forma, es utilizando el concepto de filas de orden mayor (row major order) o columnas de orden mayor (column major order).
Opcion 1: Arreglo de arreglos dinamicos
Un arreglo dinámico, es un arreglo comun y corriente, cuya capacidad va incrementando conforme se le van agregando datos, asi que puede ser tan grande como la memoria lo permita.
Si creamos un arreglo dinamico, en cada una de las casillas, de un arreglo dinamico, entonces obtendremos una matriz dinámica
Implementación en C
Implementacion en C++
Opcion 2: Renglones orden mayor
Disponible en mi página personal. Desde mi punto de vista es la manera mas natural de utilizar la asignación dinámica de memoria para matrices de MxN en tiempo de ejecucion.
Yo diseñé las imagenes, asi que disculpen si están muy feas


Este artículo lo hice para mi pagina web y decidi compartirlo en foros del web, porque es una pregunta recurrente. Aclaro que el codigo aqui expuesto, es codigo simplemente para demostrar el concepto y no debe usarse en producción.
Fuente: Desarrollando Ideas
Una pregunta recurrente en cualquier foro de programación es la implementación de las matrices dinámicas. Este concepto se encuentra muy mitificado, haciendolo pasar muchas veces como algo de alto nivel y muy sofisticado, el objetivo de este articulo es desmitificar dicho concepto y simplificarlo al máximo.
Memoria dinámica? Que es?
Si estás leyendo esto, es muy probable que la gran mayoría de tus programas hayas conocido la cantidad de datos a almacenar de antemano. Sin embargo en problemas reales, la mayoría de las ocasiones, desconocemos la cantidad de datos a almacenar, y tenemos que echar a andar diversos recursos que los lenguajes de programación nos ofrecen, para lidiar con este problema.
Uno de ellos, es la asignación dinámica de memoria, que nos permite asignar bloques de memoria, en tiempo de ejecución, para almacenar datos en dichos bloques.
Bueno ya se que es, ahora como la programo?
C++ nos brinda el operador new y delete que asignan y liberan la memoria de una zona denominada free store (Almacén libre). A diferencia de malloc() y free() en C, new y*delete de C++ implementados como operadores y son mas fiables ya que el compilador realiza verificación de tipos cada vez que un programa aloja memoria.
Existen dos maneras muy sencillas de implementar matrices dinamicas en C/C++, la primera es creando un arreglo dinamico, y dentro de cada casilla del arreglo dinamico, creamos otro arreglo dinamico, simulando una matriz dinamica. La segunda forma, es utilizando el concepto de filas de orden mayor (row major order) o columnas de orden mayor (column major order).
Opcion 1: Arreglo de arreglos dinamicos
Un arreglo dinámico, es un arreglo comun y corriente, cuya capacidad va incrementando conforme se le van agregando datos, asi que puede ser tan grande como la memoria lo permita.

Si creamos un arreglo dinamico, en cada una de las casillas, de un arreglo dinamico, entonces obtendremos una matriz dinámica

Implementación en C
Código:
int **matriz;
int i, int filas_dinamicas, int columnas_dinamicas;
matriz = (int**) malloc(filas_dinamicas*sizeof(int));
for(i=0;i<filas_dinamicas;i++)
{
matriz[i] = (int**)malloc(columnas_dinamicas*sizeof(int));
}
Implementacion en C++
Código:
int **matriz;
int fila_dinamica;
int columna_dinamica;
matriz = new int *[fila_dinamica];
for(int i = 0; i<=fila_dinamica; i++)
{
matriz[i] = new int[columna_dinamica];
}
Opcion 2: Renglones orden mayor
Disponible en mi página personal. Desde mi punto de vista es la manera mas natural de utilizar la asignación dinámica de memoria para matrices de MxN en tiempo de ejecucion.