Programación General => C/C++ => Mensaje iniciado por: chuvaca007 en Martes 22 de Julio de 2008, 21:54
Título: crear una matriz puntero de dimensión variable
Publicado por: chuvaca007 en Martes 22 de Julio de 2008, 21:54
Buenas tarde, foreros. Necesito una ayuda de Uds. Necesito hacer un programa en C, que sirva para almacenar una matriz puntero de dimensión variable, es decir, que la dimensión de la matriz dependa de un valor de entrada del usuario. No sé si es posible hacer eso.
void solicitar(int tam2, float *matriz2[tam2][tam2]) { int a,b; for(a=0;a<tam2;a++) { for(b=0;b<tam2;b++) { printf("Introduzca el valor del término de la fila %d y la columna %d: ",a+1,b+1); scanf("%f",&*matriz2[a]); } } }
void main() { int tam,g,h; printf("Coloca la dimensión de la matriz a la cual deseas invertir: "); scanf("%d",&tam); float *matriz[tam][tam]; solicitar(tam,*matriz[0:tam-1][0:tam-1]); clrscr(); printf("La matriz introducida es: n"); for(g=0;g<tam;g++) { for(h=0;h<tam;h++) { printf("%f ",*matriz[g][h]); } printf("n"); } getch(); }
Pero siempre me da errores porque supuestamente las dimensiones de la matriz deben ser constantes para el programa y no pueden ser definida por el usuario. Si alguién me puede decir como hacerle entender al compilador que la dimensión de la matriz la determinará el usuario con el valor introducido se lo agradecería mucho. Saludos
Título: Re: crear una matriz puntero de dimensión variable
Publicado por: Iganguli en Miércoles 23 de Julio de 2008, 22:58
puedes probar con un puntero doble ej: float **mat, despues pides al usuario que determine el tamaño pidiendo filas y columnas, y con "new" o "malloc" creas la matriz en el double puntero;
Código: Text
printf("da las filas");
scanf("%d", &filas);
printf("da las columnas");
scanf("%d", &columnas);
**mat = new float[filas];
for( i = 0; i < filas; i++)
*mat[i] = new float[columnas];
y asi haces la matriz
Título: Re: crear una matriz puntero de dimensión variable
Publicado por: Elforious en Viernes 25 de Julio de 2008, 08:01
Pero recuerda que cuando definís un puntero con new, tenés que eliminarlo con delete.
Código: Text
**mat = new float[filas];
// demás código...
delete mat;
Variable dinámica que creas, variable dinámica que destruyes.
Título: Re: crear una matriz puntero de dimensión variable
Publicado por: Iganguli en Viernes 25 de Julio de 2008, 18:53
Citar
Pero recuerda que cuando definís un puntero con new, tenés que eliminarlo con delete
en este caso se hace asi
Código: Text
for( int = 0; i < filas; ++i)
delete [] mat[filas]
delete [] mat
Título: Re: crear una matriz puntero de dimensión variable
Publicado por: m0skit0 en Lunes 28 de Julio de 2008, 14:49
Tened en cuenta que new() es de C++ y no de C. Para C puro, utilizad malloc() y free(). Saludos.