Crear matriz puntero de dimensión variable
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.
Yo comencé mi código de la siguiente forma:
/*comienzo.c*/
#include <stdio.h>
#include <conio.h>
#include <new.h>
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][b]);
}
}
}
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 se lo agradecería.
Saludos
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.
Yo comencé mi código de la siguiente forma:
/*comienzo.c*/
#include <stdio.h>
#include <conio.h>
#include <new.h>
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][b]);
}
}
}
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 se lo agradecería.
Saludos
Puedes hacer que la matriz sea un doble puntero:
double **a;
Pides al usuario el tamaño de la matriz: int n, m;
Y guardas memoria gracias a la función calloc:
a = (double ** ) calloc(m, sizeof(double *));
if(a == NULL )
{
printf("nERROR: No hay suficiente.n");
exit(1);
}
for( i=0; i<n; i++ )
{
a[i] = (double *) calloc(n, sizeof(double));
if( a[i] == NULL)
{
printf("nERROR: No hay suficiente memoria.n");
exit(1);
}
}
Luego ya puedes pedir los valores recorriendo la matriz.
double **a;
Pides al usuario el tamaño de la matriz: int n, m;
Y guardas memoria gracias a la función calloc:
a = (double ** ) calloc(m, sizeof(double *));
if(a == NULL )
{
printf("nERROR: No hay suficiente.n");
exit(1);
}
for( i=0; i<n; i++ )
{
a[i] = (double *) calloc(n, sizeof(double));
if( a[i] == NULL)
{
printf("nERROR: No hay suficiente memoria.n");
exit(1);
}
}
Luego ya puedes pedir los valores recorriendo la matriz.