• Sábado 21 de Septiembre de 2024, 19:41

Autor Tema:  Ayuda Uso De Matriz Tridimensional En C  (Leído 16061 veces)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #25 en: Sábado 5 de Junio de 2004, 14:32 »
0
Cita de: "Zholo"
Hola


float ***M;
int i, j, k;
int tamaño;

la forma de pedir memoria seria asi

Código: Text
  1. **M=(int *)malloc(sizeof(float)*i);
  2.  
  3. for(j=0;j<i;j++)
  4.  {
  5.   *M[j]=(int *)malloc(sizeof(int)*d[j].numero_anyo);
  6.   for(k=0;k<d[j].numero_anyo;k++)
  7.    M[j][k]=(int*)malloc(sizeof(int)*5);
  8.  }
  9.  


donde i es la cantidad de alumnos

y para liberar la memoria seria

Código: Text
  1. for(j=0;j<i;j++)
  2.  {
  3.   for(k=0;k<d[j].numero_anyo;k++)
  4.    free(M[j][k]);
  5.   free(*M[j]);
  6.  }
  7. free(**M);
  8.  

y para ver la nota de algun alumno

seria algo asi:

M[0][0][0]//la nota de la primera asignatura del primer periodo del primer alumno

M[5][2][3]//la nota de la cuarta asignatura del tercer periodo del sexto alumno


espero que esto te aclara algunas dudas

cualquier cosa estoy para servirte........
Muchas gracias, por todo lo que me stás ayudando, pero pasando a float, lo que me dijiste, la manera de reservar la matriz podria ser esta?.

float ***reservaMatriz(int a, int b, int c)
{

  float ***M;
  int i, j;
  M =(float ***)malloc(a*sizeof(float**));
  for(i=0; i<a; i++)
  M = (float**)malloc(b*sizeof(float*));
   for(j=0;j<b;j++)
   M[j] = (float *)malloc(c*sizeof(float));
   return M;
}
Por fa, cuando puedas me lo miras a ver si está bien.
Gracias

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #26 en: Miércoles 9 de Junio de 2004, 19:55 »
0
Citar
float ***M;

**M=(float *)malloc(sizeof(float)*i);

for(j=0;j<i;j++)
{
 *M[j]=(float *)malloc(sizeof(float)*3);
 for(k=0;k<d[j].numero_anyo;k++)
  M[j][k]=(float*)malloc(sizeof(float)*5);
}

i es la cantidad de alumnos

asi obtendrias una una matriz de M[3][5]

si fuesen 10 alumnos la matriz seria M[10][3][5]

espero que me entiendas, pones los * donde estan los que te mando yo....

espero que te sirva

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #27 en: Miércoles 9 de Junio de 2004, 21:37 »
0
Cita de: "Zholo"
Citar
float ***M;

**M=(float *)malloc(sizeof(float)*i);

for(j=0;j<i;j++)
{
 *M[j]=(float *)malloc(sizeof(float)*3);
 for(k=0;k<d[j].numero_anyo;k++)
  M[j][k]=(float*)malloc(sizeof(float)*5);
}

i es la cantidad de alumnos

asi obtendrias una una matriz de M[3][5]

si fuesen 10 alumnos la matriz seria M[10][3][5]

espero que me entiendas, pones los * donde estan los que te mando yo....

espero que te sirva
Gracias por tu ayuda eres un cielo.
Me está sirviendo de mucho.
Saludos Mercedes

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #28 en: Sábado 19 de Junio de 2004, 14:01 »
0
Cita de: "i82maria"
Cita de: "Zholo"
Citar
float ***M;

**M=(float *)malloc(sizeof(float)*i);

for(j=0;j<i;j++)
{
 *M[j]=(float *)malloc(sizeof(float)*3);
 for(k=0;k<d[j].numero_anyo;k++)
  M[j][k]=(float*)malloc(sizeof(float)*5);
}

i es la cantidad de alumnos

asi obtendrias una una matriz de M[3][5]

si fuesen 10 alumnos la matriz seria M[10][3][5]

espero que me entiendas, pones los * donde estan los que te mando yo....

espero que te sirva
Gracias por tu ayuda eres un cielo.
Me está sirviendo de mucho.
Saludos Mercedes
Hola aqui estoy de nuevo, he tardado en contestarte, porque he estado muy liada con los examenes, veras aqui tengo el codigo entero de todo lo que tu me dijiste, pero no me compila bien.Por favor, si puedes ayudarme, necesito esta practica, para mi examen, tengo que comprenderla bien, y saberla hacer, y estoy super apurada.Porque me resulta de muy dificil comprension.
Gracias por todo.
Saludos Mercedes

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>



struct alumno
{

  char DNI[10];
  char nombre[25];
  char apellidos[50];
  int numero_agno;
 
 };
 
 typedef struct alumno DATOSALUMNO;
 

 
main()
{

FILE *fp;
FILE *ficbin;
DATOSALUMNO *d;
char car;
char dni[10];
int i,j,k;
char nombre[25];
char apellidos[50];
int numero_agno;


if((fp=fopen("alumnos.txt", "r"))== NULL)
{
    printf("El fichero alumnos.txt no existe\n"); //abrimos el fichero texto para lectura
   getch();
 return -1;
   
}
else
{
    i= 0;
    while(!feof(fp))//cuenta cuantos alumnos hay en el archivo
    {
        fscanf(fp, "%d %s", &j, dni); /*j sera para el numero identificativo*/
     i++; /*i cuenta las filas*/
     }
     d = (DATOSALUMNO*)malloc(sizeof(DATOSALUMNO)*i); // crea una estructura de
                                                  //tipo  puntero
                                                  //para guardar los alumnos
       
     fseek(fp, 0, SEEK_SET); //posiciona el puntero
     for(j=0; j<i; j++) //inicializa la estructura a 0
     {
          d[j].DNI[0] = '\0';
          d[j].nombre[0] = '\0';
          d[j].apellidos[0] = '\0';
          d[j].numero_agno = '\0';
     }
     i = 0; /*cuenta las filas*/
     while(!feof(fp)) //coloca los datos en la estructura
     {
         fscanf(fp, "%d %s", &j, d.DNI);
         i++;    
     }
   fclose(fp);
         
  if((ficbin =fopen("alumnos.bin", "wb"))== NULL)
 {
    printf("El fichero no se puede crear\n"); //abrimos el fichero texto para lectura
   getch();
  return -1;
}
else
{
    for(j=0;j<i;j++)//pide los datos restantes
    {
        system("clear");
        fflush(stdin);
        printf("Datos del alumnos con DNI: %s\n\n",d[j].DNI);
        printf("Introduzca los Apellidos: ");
       gets(d[j].apellidos);
      fflush(stdin);
       printf("Introduzca el Nombre: ");
         gets(d[j].nombre);
      fflush(stdin);
         printf("Introduzca el Numero de años: ");
        scanf("%d",&d[j].numero_agno);
        fflush(stdin);
    fwrite(&d, sizeof(DATOSALUMNO), 1, ficbin); /*guarda los datos en
                                                  un archivo binario*/
     }

}
fclose(ficbin);
free(d);


}



float ***M;
**M=(float *)malloc(sizeof(float) *i);

(for j= 0; j<i; j++)
{
    *M[j] = (float)malloc(sizeof(float)*3);
    for(k=0; k<d[j].numero_agno; k++)
    M[j][k]=(float*)malloc(sizeof(float)*5);
}
/*i es la cantidad de alumnos M[3][5]*/
/*M[5][2][3] seria la 4ºasignatura del 3º año del sexto alumno*/