Hay momentos en que la memoria falla y no se puede hacer mas, estoy retomando la programacion en c++, pero no recuerdo.
necesito de vuestra ayuda,
primero si esta bien declarado la estructura.
luego mi pregunta es como hago, cuando creo la matriz y reservo dinamicamente espacio en la memoria, la llamo para ingresarle datos
ej. matriz->datos = 1
no recuerdo si es correcto y ya ha esta hora estoy fundido .
agradezo de antemano cualquier ayuda o aventon que me puedan dar para avanzar .
este es mi codigo, esta guardado como trabajo.c, y compilado con Turbo C++ 3.0
Código:
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<ALLOC.H> typedef struct { int N, M; float **datos; }matriz; void ImprimirMatriz(const matriz m,int N,int M){// int i,f,j,c; for(i=0;i<N;i++){ printf("\n|"); for(j=0;j<M;j++){ printf("\t%i\t| ",*(*(m.datos+i)+j)); } } printf("\n\n"); } matriz MatrizCrear(int N, int M){ matriz *m; int i; m->datos=((float**)malloc(N*sizeof(float*))); if(m->datos==NULL){ printf("\n\t\tERROR:MEMORIA INSUFICIENTE"); getch(); exit(-1); } for(i=0;i<N;i++) *(m->datos+i)=((float*)malloc(M*sizeof(float))); if(*(m->datos+i)==NULL){ printf("\n\t\tERROR:MEMORIA INSUFICIENTE"); getch(); exit(-1); } } matriz MatrizCrearIdentidad(int N){ matriz *m; int f,c; for (f=0;f<N;f++){ for (c=0;c<N;c++){ if(f == c){ m->datos[f][c] = 1; } else{ m->datos[f][c] = 0; } } } getch(); } void LeerMatriz(matriz m, int N, int M){ int i,j; for(i=0;i<N;i++){ for(j=0;j<M;j++){ printf("ingrese dato %i.%i : ",i,j); scanf("%i",*(m.datos+i)+j); } } } void MatrizDestruir(matriz m, int N){ /* free(m.N); free(m.M); free(m.datos); free(m); */ } //void MatrizInicializar(matriz m, int N, int M, double v){ void MatrizInicializar(matriz m, int N, int M, float v){ int i,j; for(i=0;i<N;i++){ for(j=0;j<M;j++){ *(m.datos+i)+j = &v; } } } //-> matriz MatrizCrear(int N, int M) //-> matriz MatrizCrearIdentidad(int N); //-> void MatrizDestruir(matriz m, int N); //-> void MatrizInicializar(matriz m, int N, int M, double v); //void MatrizCopiar(matriz a, const matriz b, int N, int M); //int MatrizComparar(const matriz a, const matriz b, int N, int M); //void MatrizSumar(matriz c, const matriz a, const matriz b, int N, int M); //void MatrizRestar(matriz c, const matriz a, const matriz b, int N, int M); //int MatrizMultiplicar(matriz c, const matriz a, int N, int M, const matriz b, int S, int T) ; //double MatrizProductoPunto(const matriz a, const matriz b, int N, int M); //void MatrizTraspuesta(matriz a, const matriz b, int N, int M); //void MatrizAdjunta(matriz a, const matriz b, int N); //double MatrizDeterminante(const matriz a, int N); //void MatrizInversa(matriz a, const matriz b, int N); //-> void LeerMatriz(matriz m, int N, int M); //-> void ImprimirMatriz(const matriz m, int N, int M); void main(){ matriz *m; int N,M; float v; clrscr(); printf("Ancho : "); scanf("%i",&N); printf("Largo : "); scanf("%i",&M); ImprimirMatriz(m,N,M); MatrizCrear(N,M); MatrizCrearIdentidad(N); LeerMatriz(m,N,M); MatrizInicializar(m,N,M,v); getch(); }