C/Visual C - reserva dinamica de 2 o mas matrices

 
Vista:

reserva dinamica de 2 o mas matrices

Publicado por alberto (3 intervenciones) el 07/03/2007 13:31:13
Hola muy buenas
Antes de nada agradeceros el interes.
Os llevo siguiendo algun tiempo y la verdad es que me ha servido de mucha ayuda este foro y ahora me ha surgido una duda que espero me podais solucionar.
¿es posible reservar de manera dinamica varias matrices?
como tengo que definirlas?
no tengo problemas para definir una del tipo m[f][c]con el malloc en tiempo real pero se me escapa como guardar mas de 1 y sobre todo la definicion de esas matrices.
deberia hacer una matriz de matrices (es decir una matriz de 3 dimensiones m [n] [f] [c] donde n es el numero de matrices y f ilas y columnas) o
¿deberia de hacer un vector de matrices o puedo reservar matriz a matriz?
muchas gracias de nuevo y lo siento por la chapa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:reserva dinamica de 2 o mas matrices

Publicado por Nelek (816 intervenciones) el 08/03/2007 08:07:36
Teoricamente podrias hacerlo de ambas maneras. O hacer la matriz tridimensional directamente o hacer una matriz, luego otra... y luego el vector de matrices.

El como hacerlo para la matriz 3-d en una... hay no te se contestar, pero hacerlo una despues de otra es seguir el mismo procedimiento que ya sabes hacer con m[f][c] para cada una de ellas y luego un malloc al vector de matrices con l numero de matrices que hayas elegido/reservado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:reserva dinamica de 2 o mas matrices

Publicado por alberto (3 intervenciones) el 08/03/2007 12:36:54
gracias he conseguido hacer esto pero me he vuelto a quedar todo tirado

// reserva de memoria dianimca con funciones parametrizadas

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char tipo;
tipo *** reserva(int s,int f,int c);
void datos(tipo *** ,int s,int f,int c);
void imprime (tipo *** ,int s,int f,int c);
void entradas(tipo ***,int s,int f,int c);
main()
{
int f,c,s,cont;
char resp;
tipo*** matriz;
int sala;
// configuramos la sala
printf ("cuantas salas deseas generar?");
scanf("%d",&sala);
printf("\n");
for (s=1;s<sala;s++)
{
printf("sala %d",s);
printf("filas?");
scanf ("%d",&f);
printf("\n");
printf("butacas?");
scanf ("%d",&c);
matriz=reserva(s,f,c);
// la sala ha sido configurada
// la ponemos vacia
datos(matriz,s,f,c);
imprime(matriz,s,f,c);
}
// reservamos
do
{
entradas(matriz,s,f,c);
flushall();
printf("mas reservas?\n");
scanf("%c",&resp);
} while (strchr("Nn",resp)==NULL);

}

tipo *** reserva(int s,int f,int c)
{
// reservamos una matriz de forma dinamica en tpo de ejecucion
// de tamaño fxc
int fil;
tipo *** ppa=NULL;
//salas
if((ppa=(tipo***)malloc(f*sizeof(tipo**)))==NULL)
{
printf("ERROR DE MEMORIA\n");
exit(0);
}
// f filas
if((ppa=(tipo**)malloc(f*sizeof(tipo*)))==NULL)
{
printf("ERROR DE MEMORIA\n");
exit(0);
}
// para cada fila c columnas
for(fil=0;fil<f;fil++)
{
if((ppa[fil]=(tipo*)malloc(c*sizeof(tipo)))==NULL)
{
printf("ERROR DE MEMORIA\n");
exit(0);
}
}
return (ppa);
}

void datos(tipo *** matriz,int s,int f,int c)
{
int y,z,x;
for (x=0;x<s;x++)
{
for(y=0;y<f;y++)
{
for(z=0;z<c;z++)
{
matriz[x][y][z]='N';
}
}
}
}

void imprime (tipo *** matriz,int s,int f,int c)
{
int y,z,x;

for(x=0;x<s;x++)
{
for(y=0;y<f;y++)
{
for(z=0;z<c;z++)
printf("%c",matriz[x][y][z]);
printf("\n");
}
}
}

void entradas(tipo*** matriz,int s,int f,int c)
{
int mifila,nument,z,lugar,misala;
tipo * pos;
tipo * cuales;
//tipo * sala;
//sala=(tipo *)malloc(c*sizeof(tipo));
cuales=(tipo*)malloc(c*sizeof(tipo));

imprime(matriz,s,f,c);
do
{
printf("en que sala deseas realizar la reserva?\n");
scanf("%d",&misala);
printf("en que fila?\n");
scanf("%d",&mifila);
}while (mifila<1 || mifila >f && misala<1 || misala >s);
printf("num de entradas?\n");
scanf("%d",&nument);

for (z=0;z<nument;z++)
cuales[z]='N';
cuales[z]='\0';
pos=strstr(matriz[misala-1][mifila-1],cuales);
if (pos==NULL)
printf("no existen entradas en esa fila\n");
else
{
lugar=pos-matriz[misala-1][mifila-1];
for (z=lugar;z<lugar+nument;z++)
matriz[misala-1][mifila-1][z]='S';
printf("reserva correcta\n");
imprime (matriz,s,f,c);
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:reserva dinamica de 2 o mas matrices

Publicado por Nelek (816 intervenciones) el 12/03/2007 07:31:08
Quedarte tirado no es que de mucha informacion al respecto. Di el fallo y donde te da ese fallo, si es de compilacion o si es de ejecucion... Quiza asi sea mas facil el echar una mano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar