Pregunta: | 42 - IMPLEMENTAR LAS MATRICES CON PUNTEROS EN C++ |
Autor: | Daniel |
Parece ser que hubo problemas con una pregunta que hice el otro día, así que voy a intentar aclararla: Estoy intentando implementar el tipo matrices (en C++). La manera lógica era, como ha respondido la mayoría de la gente, hacerlo con arrays. Pero esto tiene el problema de que tienes que imponer el tamaño de la matriz en el momento de la programación (si no fuera así, por favor, decirme como se hace), lo que limita mucho el programa. La otra forma lógica de hacerlo es con punteros. Con punteros té quitas el problema del tamaño, ya que en tiempo de ejecución del programa puedes decidir qué tamaño va a tener la matriz con la que vas a trabajar. Pero aparece el problema de la memoria (en el supuesto de trabajar con matrices muy grandes). Y mi pregunta sería : ¿Implementando las matrices con punteros, hay alguna forma especialmente eficiente de hacerlo? Esperando que quede aclarada la pregunta, espero vuestra contestación. |
Respuesta: | Daniel Salazar |
Hola Tocayo:
Lo que quieres hacer (matrices vía punteros) es posible con punteros dobles. Te coloco este ejemplo para enteros: int **matriz,filas,columnas; void main(){ //puedes leer los valores de filas y columnas como te convenga //acá los coloco como una asignación simple filas = 5; columnas = 3; matriz = new int* [filas]; for(int i=0;i<filas;i++) matriz[i] = new int [columnas]; //luego puedes acceder a cada posición con la notación matricial matriz[1][1] = 10; } //Espero te sea útil |
Respuesta: | jenny jenny |
hola:
con la lista de la que te hablan los demas podes usar una funcion llamada malloc que va piediendo memoria a medida que la vas usando o necesitando espero que te sirva bye pd: en el help tenes los parametros que le tenes que pasar lo que te debue es la direccion de memoria en la que vas a guardar ese nodo bye |
Respuesta: | alguien |
Lo que quieres hacer se puede hacer de varias maneras, se denomina array indeterminado; lo puedes crear por lista enlazada, arbol binario, técnicas hash(extraer el indice de un elemento del array directamente de la información guardada en él) y por array de punteros; es demasiado extenso para explicarlo aquí con detenimiento, por lo que te ruego te informes con un buen manual... |
Respuesta: | Sergio |
Si lo que pretendes es implementar las matrices has de hacerlo con una lista doblemente enlazada de punteros en caso de dos dimensiones, triplemente enlazada para tres, etc... donde el primer nivel serian las filas de la matriz, el segundo las columnas de una fila en cuestión, y así sucesivamente. En el caso de querer implementar matrices casi vacías (donde un valor se repite muchas veces), puedes prescindir de codificar este valor e implementar en la lista solo los valores que son distintos a este, incluyendo en nodo de la lista índices que te indiquen la posición de ese elemento, por ejemplo, si quieres implementar la matriz identidad de 4x4 seria algo parecido a [1000][0100][0010][0001], como el valor cero se repite mucho, se codifica solo los valores 1, de manera que cada nodo de la lista tiene un cursor que indica fila y columna del valor distindo de cero, algo parecido a [fila1,col1:1][fila2,col2:1][fila3,col3:1][fila4,col4:1] de forma que consigues representar un elemento bidimensional (matriz de 4x4) con una sola lista unidimensional, lo que simplifica el trabajo de programación y optimiza la ocupación de memoria. |
Respuesta: | Willser F. González C. |
La siguiente estructura implementa una matriz usando listas enlazadas:typedef struct NodoLa clave está en implementar las funciones que permitan ubicarse en una posición [i,j] de la lista en forma de matriz 2D. |
Respuesta: | Fernando Canzani |
Hola, soy de Uruguay, para implementar la clase matriz, te aconsejo que lo agas con punteros, con ellos te puedes crear arrays dinamicos que especificas el tamaño en tiempo de compilacion. ej: class array {private: int tamanio;con esto te definis un array de longitud tamanio en tiempo de ejecucion;
|