• Miércoles 6 de Noviembre de 2024, 02:40

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

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Ayuda Uso De Matriz Tridimensional En C
« en: Domingo 16 de Mayo de 2004, 20:22 »
0
Hola a todos, necesito ayuda, porque tengo que hacer una práctica en lenguaje de Programación C, que se trata de una matriz dinámica tridimensional , la primera dimensión está reservada para los alumnos, la segunda dimensión representa un curso concreto, y la terecera representa una asignatura. Todo esto es, porque se desean guardar calificaciones de alumnos, que cursan una titulación de 3 años lectivos.
Y a raiz de estos datos, tengo que averiguar las calificaciones de cada alumno, en cada curso, y en cada asignatura.


Si alguien quiere o puede ayudarme a comenzar la practica, es que no tengo mucha idea de matriz tridimensional, y una vez la utilice para averiguar las calificaciones de cada alumno,en cada curso, y en cada asignatura, entonces podré iniciar la practica. Si alguien está interesado en seguir ayudandome a elaborar la practica, pues que lo diga, y le envio el enunciado de la misma.
Muchas gracias.Saludos i82maria :lightsabre:

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #1 en: Lunes 24 de Mayo de 2004, 09:23 »
0
No se entendi del todo la diferencia entre cursos y asignaturas.
La forma de llegar a una matriz dinamica de tres dimensiones, siendo :

K = numero de alumnos.
L = numero de cursos.
M = numero de asignaturas.

y suponiendo que las clasificaciones son int

int *p = new int [K*L*M];

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #2 en: Lunes 24 de Mayo de 2004, 16:46 »
0
K = numero de alumnos.
L = numero de cursos.
M = numero de asignaturas.

y suponiendo que las clasificaciones son int

int *p = (int *)malloc (K*L*M);

aunque esta es una manera sucia, lo mejor es hacer esto pero adicionandole un nuvo vector al sebgundo creado... nada facil para un principiante.:
http://teleportmedia.com/foro/viewtopic.php?t=223
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #3 en: Lunes 24 de Mayo de 2004, 17:00 »
0
Cita de: "juank"
K = numero de alumnos.
L = numero de cursos.
M = numero de asignaturas.

y suponiendo que las clasificaciones son int

int *p = (int *)malloc (K*L*M);

aunque esta es una manera sucia, lo mejor es hacer esto pero adicionandole un nuvo vector al sebgundo creado... nada facil para un principiante.:
http://teleportmedia.com/foro/viewtopic.php?t=223
Gracias por tu respuesta, la verdad es que tienes razon es dificil para una principiante como yo, lo del uso de matriz tridimensional. Pero según veo, sería una cosa asi:

float ***M;
M =(float***) malloc(a*b*c*sizeof(float));

void pintaMatriz(float ***Matriz, int a, int b, int c);

{
 int i, j, k;
 for(i=0; i<a; i++)
    for(j=0; j<b; j++)
      for(k=0; k<c; k++)
      {
         printf("\t\t m[%d][%d][%d]: %f\n": ", i,j,k, Matriz[j][k]);
      }
    }
   }
}

Por favor, dime funcionaria una cosa asi, a la hora de poder usar la matriz, y asi averiguar las calificaciones de los alumnos, en casa curso, y en cada asignatura.
Gracias, saludos i82maria

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #4 en: Martes 25 de Mayo de 2004, 04:33 »
0
pues asi como lo haces no..
asi:
Código: Text
  1.  
  2. float *M;
  3. M =(float*) malloc(a*b*c*sizeof(float));
  4.  
  5.  

ya asi el resto depende de como lo uses...

debes tener cuidado en no superar los limites de la matriz.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #5 en: Martes 25 de Mayo de 2004, 12:19 »
0
Cita de: "juank"
pues asi como lo haces no..
asi:
Código: Text
  1.  
  2. float *M;
  3. M =(float*) malloc(a*b*c*sizeof(float));
  4.  
  5.  

ya asi el resto depende de como lo uses...

debes tener cuidado en no superar los limites de la matriz.
Pero al ser una matriz tridimensional no se deben usar punteros triples?. Por favor, cuando puedas me lo aclaras, porque a mi me habian dicho que era con puntero triple. Gracias.
Saludos desde Andalucia

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #6 en: Martes 25 de Mayo de 2004, 14:56 »
0
de la froma en como te mostre en el link de la pagina de teleport media esta hecho con puntero doble para hacer una matriz bidimensional,
para hacer una matriz tridimencional con el metodo no 'cochino'
sera como esta en ese link pero con un puntero triple y asignando un nuevo vector a la segunda dimension del vactor.

no es nada facil..
trata de entender el codigo fuente de la matriz bidimensional creada dinamicamente (en el link que cocoloque arriba)y una vez lo hayas entendido intenta crear el de tres dimensiones.

AHhhhhhhhhhhhhhhhhhhhhhh :scream:

ahora que leo tu post completo me doy cuenta que en ningun momenmto dices que la matriz tiene que ser creada dinamicamente o si?

Lo que pasa es que me deje guiar por el post de Noel Solw que trata de explicar algo asi...

lo siento lo que hay que hacer es esto:

Código: Text
  1.  
  2.  
  3.  
  4. K = numero de alumnos.
  5. L = numero de cursos.
  6. M = numero de asignaturas.
  7.  
  8. float datos[K][L][M];
  9.  
  10.  

Lo siento te estaba complicando mucho la vida para algo tan sencillo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #7 en: Martes 25 de Mayo de 2004, 16:58 »
0
La pregunta era sobre una "matriz dinamica tridemnsional",
por eso vuelvo a mi propuesta original.
Por supuesto, si la matriz es estatica, el problema es completamente trivial y puede resolvers perfectamente como dice el Sr. Ingeniero.
Como ejemplo, te envio un ejemplo de como manipular una matriza dinamica, llenarla de valores consecutivos y exponerla en la pantalla.
Exito ! ! !

// program matrix.cpp
// matriz dinamica tridimencional.
// written in Borland C++ - ver 4.5

#include <iomanip.h>
#include <iomanip.h>

int GetDim(char x)
{
   int dim = -1;
   while(dim <= 0)
   {
      cout << x << " = ";
      cin >> dim;
   }
   return dim;
}   // GET DIM

void Init(int *a,int K,int L,int M)
{
   int counter = 0;
   for(int i = 0;i < K;i++)
      for(int j = 0;j < L;j++)
         for(int k = 0;k < M;k++)
            a[L*M*i + M*j + k] = counter++;
}   // INIT

void Show(int *a,int K,int L,int M)
{
   for(int i = 0;i < K;i++)
   {
      for(int j = 0;j < L;j++)
      {
         for(int k = 0;k < M;k++)
            cout << setw(5) << a[L*M*i + M*j + k];
         cout << endl;
      }
      cout << endl << endl;
   }
   cout << endl << endl;
}   // SHOW

void main()
{
   int K = GetDim('K'),
       L = GetDim('L'),
       M = GetDim('M');
   cout << endl;
   int *a = new int[K*L*M];
   Init(a,K,L,M);
   Show(a,K,L,M);
   cout << "end of program - good bye ! ! !" << endl;
   delete []a;
}   // MAIN

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #8 en: Martes 25 de Mayo de 2004, 17:06 »
0
Cita de: "Noel Solw"
La pregunta era sobre una "matriz dinamica tridemnsional",
por eso vuelvo a mi propuesta original.
Por supuesto, si la matriz es estatica, el problema es completamente trivial y puede resolvers perfectamente como dice el Sr. Ingeniero.
Como ejemplo, te envio un ejemplo de como manipular una matriza dinamica, llenarla de valores consecutivos y exponerla en la pantalla.
Exito ! ! !

// program matrix.cpp
// matriz dinamica tridimencional.
// written in Borland C++ - ver 4.5

#include <iomanip.h>
#include <iomanip.h>

int GetDim(char x)
{
   int dim = -1;
   while(dim <= 0)
   {
      cout << x << " = ";
      cin >> dim;
   }
   return dim;
}   // GET DIM

void Init(int *a,int K,int L,int M)
{
   int counter = 0;
   for(int i = 0;i < K;i++)
      for(int j = 0;j < L;j++)
         for(int k = 0;k < M;k++)
            a[L*M*i + M*j + k] = counter++;
}   // INIT

void Show(int *a,int K,int L,int M)
{
   for(int i = 0;i < K;i++)
   {
      for(int j = 0;j < L;j++)
      {
         for(int k = 0;k < M;k++)
            cout << setw(5) << a[L*M*i + M*j + k];
         cout << endl;
      }
      cout << endl << endl;
   }
   cout << endl << endl;
}   // SHOW

void main()
{
   int K = GetDim('K'),
       L = GetDim('L'),
       M = GetDim('M');
   cout << endl;
   int *a = new int[K*L*M];
   Init(a,K,L,M);
   Show(a,K,L,M);
   cout << "end of program - good bye ! ! !" << endl;
   delete []a;
}   // MAIN
Te agradezco tu ayuda Noel,pero insisto mi practica es en lenguaje C, no en lenguaje C++,ydebo manejar una matriz dinamica tridimensional, en C.
Gracias de todos modos.

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #9 en: Martes 25 de Mayo de 2004, 17:08 »
0
Cita de: "juank"
de la froma en como te mostre en el link de la pagina de teleport media esta hecho con puntero doble para hacer una matriz bidimensional,
para hacer una matriz tridimencional con el metodo no 'cochino'
sera como esta en ese link pero con un puntero triple y asignando un nuevo vector a la segunda dimension del vactor.

no es nada facil..
trata de entender el codigo fuente de la matriz bidimensional creada dinamicamente (en el link que cocoloque arriba)y una vez lo hayas entendido intenta crear el de tres dimensiones.

AHhhhhhhhhhhhhhhhhhhhhhh :scream:

ahora que leo tu post completo me doy cuenta que en ningun momenmto dices que la matriz tiene que ser creada dinamicamente o si?

Lo que pasa es que me deje guiar por el post de Noel Solw que trata de explicar algo asi...

lo siento lo que hay que hacer es esto:

Código: Text
  1.  
  2.  
  3.  
  4. K = numero de alumnos.
  5. L = numero de cursos.
  6. M = numero de asignaturas.
  7.  
  8. float datos[K][L][M];
  9.  
  10.  

Lo siento te estaba complicando mucho la vida para algo tan sencillo.
Juank,la matriz que tengo que manejar,debe ser dinamica, por eso creo que lo que te puse del puntero triple,queria saber si estaba bien.Por eso,te pedi,si podia mirar el codigo,es q tengo poca idea,de esto,y necesito un empujon para empezar la practica,una vez sepa si defino bien,lamatriz, y como reservar memoria,entonces ya podre  iniciarla.Al menos eso espero.De todos modos muchas gracias.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #10 en: Martes 25 de Mayo de 2004, 17:09 »
0
la solucion que das no sirve por varias razones:
1- es lenguaje c++ y se requiere en c.
2- no estas creeando una matriz en ningun momento.
    Solo estas creando un vector, lo que haces es a lo que yo
    graciosamente llamo el metodo cochino, el cual es simular con un vector una
    matriz.
3- Como bien se ha informado i82maria se necesita hacerlo con tres apuntadores
    razon por la cual nuevamente tu solucion no sirve y se ratifica el punto nro 2.

4- Tu simulacion permite acceder a las coordenadas del vector de esta manera:
Código: Text
  1. cout &#60;&#60; setw(5) &#60;&#60; a[L*M*i + M*j + k];
  2.  
lo cual solo simula una matriz pero en ningun momento es tal, simplemente es un vector unidimensional.
si fuese una matriz, INCLUSO CREADA DINAMICAMENTE se accederia asi:
a[L][M][K]
que es como se observa en el link que he posteado, aunque solo se hace con matrices bidimensionales.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #11 en: Martes 25 de Mayo de 2004, 17:14 »
0
http://teleportmedia.com/foro/viewtopic.php?t=223
revisa el link por favor..
solo si entiendes como hacer una matriz bidimensional dinamicamente podras intentar hacer una de tres dimeniones..
si aprendes y entiendes lo que esta en el link hacer en 3 dimensiones es pan comido.
Te podria hacer todo el codigo yo, y te garantizo que no me tardaria mas de 15 minutos siendo exagerado, pero no acostumbro a hacerlo, es mejor que aprendas con tu esfuerzo, porque si te dan todo el codigo hecho te garantizo que no aprenderas nada.  :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #12 en: Martes 25 de Mayo de 2004, 17:17 »
0
Cita de: "juank"
la solucion que das no sirve por varias razones:
1- es lenguaje c++ y se requiere en c.
2- no estas creeando una matriz en ningun momento.
    Solo estas creando un vector, lo que haces es a lo que yo
    graciosamente llamo el metodo cochino, el cual es simular con un vector una
    matriz.
3- Como bien se ha informado i82maria se necesita hacerlo con tres apuntadores
    razon por la cual nuevamente tu solucion no sirve y se ratifica el punto nro 2.

4- Tu simulacion permite acceder a las coordenadas del vector de esta manera:
Código: Text
  1. cout &#60;&#60; setw(5) &#60;&#60; a[L*M*i + M*j + k];
  2.  
lo cual solo simula una matriz pero en ningun momento es tal, simplemente es un vector unidimensional.
si fuese una matriz, INCLUSO CREADA DINAMICAMENTE se accederia asi:
a[L][M][K]
que es como se observa en el link que he posteado, aunque solo se hace con matrices bidimensionales.
Gracias por entenderlo,pero insisto,en el link q me has dicho viene matriz bidimensional,y yo necesito matriz tridimensional,con lo cual a la hora de reservar memoria,creo que sera diferente,vuelve a mirar por favor,el codigo,q escribi antes a ver si es correcto.Muchas gracias.
Saludos desde Andalucia

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #13 en: Martes 25 de Mayo de 2004, 17:25 »
0
Cita de: "juank"
http://teleportmedia.com/foro/viewtopic.php?t=223
revisa el link por favor..
solo si entiendes como hacer una matriz bidimensional dinamicamente podras intentar hacer una de tres dimeniones..
si aprendes y entiendes lo que esta en el link hacer en 3 dimensiones es pan comido.
Te podria hacer todo el codigo yo, y te garantizo que no me tardaria mas de 15 minutos siendo exagerado, pero no acostumbro a hacerlo, es mejor que aprendas con tu esfuerzo, porque si te dan todo el codigo hecho te garantizo que no aprenderas nada.  :smartass:
Bueno gracias,de momento,voy a mirar de nuevo,el codigo q me dices de la matriz bidimensional,y una vez lo haya hecho te lo mando,para qe me digas si está bien.Para mi es muy importante conseguir hacer esta practica,y me gustaria mucho aprender,por eso estoy contenta desde que me apunté a este foro.Muchas gracias,por tu consejo,en cuanto lo tenga te lo mando.
Saludos :hola:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #14 en: Martes 25 de Mayo de 2004, 17:32 »
0
ok..
por cierto que el codigo que colocaste antes no sirve.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #15 en: Martes 25 de Mayo de 2004, 18:20 »
0
Cita de: "juank"
ok..
por cierto que el codigo que colocaste antes no sirve.
Hola juan,seria algo parecido,a esto:

/*MATRIZ TRIDIMENSIONAL*/
float ***M;

/*reservamos memoria*/
m =(float***)malloc(sizeof(float**)*a*b*c));

for(k=0;k<c;k++)
{
 for(j=0;j<b;j++)
 {
 for(i=0;i<a;i++)
  {
   m[a][c]='\0';
  }
 }
}


a =identificador del alumno
b = curso
c =asignatura

La nota se haria asi?
*(m + a*b*c+ b*c +c) = nota

Pero,una cosa,el memset,no lo conozco pa q sirve exactamente?.
Porfa,dime si voy por buen camino.Para poder empezar a averiguar las calificaciones de cada alumno.Gracias
Saluods

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #16 en: Martes 25 de Mayo de 2004, 18:46 »
0
vas mal  :(

memset sirve para llenar un area de memoria con repeticiones de nu valor especifico.

mejor has un pequeño ejercicio con lo del vector bidimencional que te coloque en el post de teleport media y maneja solo alumnos y cursos...
una vez lo tengas hecho ampliale la funcionalidad a 3 dimensiones incluyendo materias.


fijate en el codigo del post.. va uno tras otro solo que lo separe para explicar cada parte.

sigue intentandolo animo!!!
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #17 en: Martes 25 de Mayo de 2004, 20:58 »
0
Cita de: "juank"
vas mal  :(

memset sirve para llenar un area de memoria con repeticiones de nu valor especifico.

mejor has un pequeño ejercicio con lo del vector bidimencional que te coloque en el post de teleport media y maneja solo alumnos y cursos...
una vez lo tengas hecho ampliale la funcionalidad a 3 dimensiones incluyendo materias.


fijate en el codigo del post.. va uno tras otro solo que lo separe para explicar cada parte.

sigue intentandolo animo!!!

Hola Juan, aqui estoy de neuvo, lo sigo intentando, y ahora entre unos apuntes de clase, y lo que me dijiste obtengo esto.
Por favor dime si es´ta bien.
Gracias

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;
}

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #18 en: Jueves 27 de Mayo de 2004, 04:52 »
0
LA forma a la antigua en C++:
Código: Text
  1.  
  2. int ***tresD;
  3.  
  4.       tresD = new **int[i];
  5.     *tresD = new *int[j];
  6.   **tresD = new int[k]
  7.  
  8.  

SI la hora no me juega una mala paada, creo que eso es asi.
QliX=D! - From the top of Tsunami

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #19 en: Jueves 27 de Mayo de 2004, 04:55 »
0
Si queres el vector inicializado de esa forma podrias utilizar directamente cmalloc.
QliX=D! - From the top of Tsunami

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #20 en: Lunes 31 de Mayo de 2004, 19:31 »
0
Cita de: "QliX=D!"
Si queres el vector inicializado de esa forma podrias utilizar directamente cmalloc.
Perdona, pero te insisto que la practica es en lenguaje C, con lo cual, no me vale en C++. De todos modos muchsa gracias.

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #21 en: Lunes 31 de Mayo de 2004, 23:45 »
0
Hola la forma de hacr la matriz de 3 dimensiones seria algo asi

Citar
int ***M;
int i, j;
int tamaño;

M=(int ***) malloc (tamaño);

for(i=0; i< tamaño; i++)
  M=(int **) malloc(tamaño);

for(i=0; i< tamaño; i++)
 for(j=0; j< tamaño; j++)
   M[j]= (int *) malloc(tamaño);


y asi obtienes una matriz de tres dimensiones de tipo entero.

espero que te sirva.

Soy un Primor

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #22 en: Lunes 31 de Mayo de 2004, 23:59 »
0
Cita de: "JuanK"
necesito tu ayuda porfis y te lo agradecere mucho
Hola juank necesito tu ayuda sobre un programa de encriptacion de archivos, sabes se me esta dificultando el hacerlo ya que jamas habia hecho un programa sobre eso espero tu me puedas ayudar. :comp:


       bye   B)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #23 en: Martes 1 de Junio de 2004, 12:44 »
0
Cita de: "Zholo"
Hola la forma de hacr la matriz de 3 dimensiones seria algo asi

Citar
int ***M;
int i, j;
int tamaño;

M=(int ***) malloc (tamaño);

for(i=0; i< tamaño; i++)
  M=(int **) malloc(tamaño);

for(i=0; i< tamaño; i++)
 for(j=0; j< tamaño; j++)
   M[j]= (int *) malloc(tamaño);


y asi obtienes una matriz de tres dimensiones de tipo entero.

espero que te sirva.
Gracias por tu respuesta, eres muy amable, me es de gran ayuda. Y ahora para acceder a ella, como lo haria?. Porque verás se trata de una matriz tridimensional que gestiona la calificacion de los alumnos que están en tres cursos lectivos, la primera dimensión se refiere a los alumnos(numero identificativo de los alumnos), la segunda representa el curso en el que están (1 a 3), y la tecera representa una asignatura concreta de las 5 posibles. Entonces me piden obtener la califiaciónd e cada alumnos, en cada curso y por cada asignatura.
Yo quisiera saber si a la hora de reservar la memoria, en este caso seria:
M = (float ***)malloc(a*b*c*sizeof(float));

porque a, b, c son las tres dimensiones.
Pero como hago para obtener la nota, seria una cosa asi?
*(M +a *b*c+b*c+c) = nota;

Por favor, contestame en cuanto puedas.
Un saludos Mercedes

Zholo

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Ayuda Uso De Matriz Tridimensional En C
« Respuesta #24 en: Viernes 4 de Junio de 2004, 22:22 »
0
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&#60;i;j++)
  4.  {
  5.   *M[j]=(int *)malloc(sizeof(int)*d[j].numero_anyo);
  6.   for(k=0;k&#60;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&#60;i;j++)
  2.  {
  3.   for(k=0;k&#60;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........