Programación General > C/C++

 Matrices por listas doblemente enlazadas

<< < (5/5)

rkneko:
ok...entonces el crearmatriz q tengo queda asi:


--- Código: C++ ---void CrearMatriz (Matriz &M,int f, int c){    M.nf=f;    M.nc=c;     M.m = new Columnas[c];    Columnas *aux;    aux = new Columnas[c];    Filas *aux1;     for (int i=0;i<f;i++)    {        aux1 = new Filas[f];            for (int j=0;j<c;j++)            {                aux -> sig_columna;            }                                   }} 


esta parte del codigo entonces que realiza? la reserva de memoria y yasta no?

gracias x seguir ahi :)

m0skit0:
Bien, hoy que estoy más despejado, te cuento:

Haces la reserva 2 veces, que es algo que veo superfluo:


--- Código: C++ ---M.m = new Columnas[c];[...]aux = new Columnas[c]; Si lo que quieres es recorrer Columnas sin modificar el valor de M.m, entonces sustituye la asignación de aux por:


--- Código: C++ ---aux = M.m Así apuntas a las columnas que ya has creado y no creas otras nuevas, que es lo que haces.

Aparte, creo que tu código de creación de filas está mal (no puedo comprobarlo en estos momentos). Ya que tú mismo has definido las filas dentro de las columnas, entonces es más lógico recorrer las columnas y asignarles las filas y no viceversa como los has hecho. Algo tan sencillo como:


--- Código: C++ ---int i;[...]//Recorremos todas las columnasfor (i=0;i<c;i++){    //Creamos las filas de la columna actual    aux->filas = new Filas[f];    //Pasamos a la siguiente columna    aux = aux->sig_columna;} 
Espero no haberme equivocado en nada  <_<  Ya me cuentas.

rkneko:
muyyy buenas y gracias x seguir ahi :)

ya consegui el crearmatriz(), abase de comerme el depurador aver que hacia y ya he conseguido gracias a tu consejo de quitar uno d las asignaciones, aqui no tengo el codigo pero funciona y me reserva la memoria tatas como columnas y filas tenga :)) ya entendi eso.. gracias a Dios!!

jeje aora a ota cosa... y es lo de recorrer para que me inserte los datos, lo haria como tu pero nos dijeron que recorremos una fila, y en esa fila ahi tantas columnas como hallamos creado, lo tengo puesto así en los structs asique debo ceñirme a eso, hare lo que me has dicho pero cambiando el orden d filas y columnas y en cuanto pueda te comento porque es lo unico que me queda, asipues muuuuuuchas gracias y ya t dire :)

un saludo!

EI: juntando mensajes.

aux = aux->sig_columna;

eso hace que pase a la siguiente column de la fila??

m0skit0:

--- Cita de: "rkneko" ---lo haria como tu pero nos dijeron que recorremos una fila, y en esa fila ahi tantas columnas como hallamos creado, lo tengo puesto así en los structs asique debo ceñirme a eso,
--- Fin de la cita ---
Tú tienes puesto en las declaraciones de tipos que las filas pertenecen a las columnas (por decirlo de alguna forma) y no al revés. Si te fijas, te va a resultar difícil recorrer filas asignando las columnas porque el tipo Filas no tiene ninguna referencia a qué columna pertenece, pero las columnas sí hacen referencia a las filas que poseen.

Para hacerlo al revés (recorrer filas y no columnas) sin caer en un lío, te aconsejo que cambies tus tipos:


--- Código: C ---struct Columnas{    char dato;        // char para introducir el caracter    Columnas *sig_columna;  }; struct Filas{    Columnas *columnas;    Filas *sig_fila;}; struct Matriz {    int nf;    // numero filas    int nc;   //numero columnas    Filas *m;   }; Así puedes usar el código que te puse sin mucha modificación.


--- Cita de: "rkneko" ---aux = aux->sig_columna;
eso hace que pase a la siguiente column de la fila??
--- Fin de la cita ---
Bueno, como ya te he dicho, según tus tipos, son las columnas las que tienen filas, y con aux = aux->sig_columna pasas a la siguiente columna (como está comentado en el código que te puse).

rkneko:
ok hecho queda, gracias! :)

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa