Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > C / C++ > Crear matriz puntero de dimensión variable
-Foros de debate

C / C++
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Crear matriz puntero de dimensión variable
Enviado por chuvaca007 el día 22 de julio de 2008

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

 
Re: Crear matriz puntero de dimensión variable
Enviado por hadrien el día 22 de julio de 2008

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.

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network