K = numero de alumnos.L = numero de cursos.M = numero de asignaturas.y suponiendo que las clasificaciones son intint *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
pues asi como lo haces no..asi:Código: Text float *M;M =(float*) malloc(a*b*c*sizeof(float)); ya asi el resto depende de como lo uses...debes tener cuidado en no superar los limites de la matriz.
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 DIMvoid 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++;} // INITvoid 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;} // SHOWvoid 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
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 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 K = numero de alumnos.L = numero de cursos.M = numero de asignaturas. float datos[K][L][M]; Lo siento te estaba complicando mucho la vida para algo tan sencillo.
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: Textcout << setw(5) << a[L*M*i + M*j + k]; 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.
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.
ok..por cierto que el codigo que colocaste antes no sirve.
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!!!
Si queres el vector inicializado de esa forma podrias utilizar directamente cmalloc.
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);
necesito tu ayuda porfis y te lo agradecere mucho
Hola la forma de hacr la matriz de 3 dimensiones seria algo asiCitarint ***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.