¿Me podrías ayudar con este programa?

Mi pregunta era que si me podías ayudar con un programa en c que tengo que hacer. El caso es que tengo que hacer en un mismo programa las funciones sumar matrices, matriz por escalar y mostrar matriz y no me termina de salir porque no me compila, ¿podrías decirme donde tengo el fallo? Gracias
#include <stdio.h>
#include <stdlib.h>
#define SUMAR 1
#define ESCALAR 2//Declaramos las constantes necesarias para la ejecución del switch.
void MostrarMatriz(float **m,int n)//Función que muestra la matriz introducida por teclado de forma matemática.
{
int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%.2f",m[j]);
printf(",");
}
printf("\n");
}
}
/*
void SumarMatrices(float **ma,float **mb,float **sum,int n)//Función que alberga el algoritmo necesaria para la suma de matrices es decir,la suma de cada entradaa
{
int i,j;
printf("La matriz suma queda:\n\n");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
sum[j]=ma[j]+mb[j];//Algoritmo.
}
}
void MatrizPorEscalar(float **ma,float **mb,int e,int n)//Multiplica una matriz por un escalar introducido por teclado.
{
int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
mb[j]=(e)*(ma[j]);//Se alamacena el resultado en otra matriz.
}
}
}
*/
main()//Función principal que recoge todas las demás.
{
int opcion,*p1,*p2,n,e,i,a,b;
float **ma,**mb,**sum,*v,*inv;
printf("Practica 1\n");
while(1)//Bucle infinito hasta que sea introducida la opción salir.
{
printf("\n1.Sumar dos matrices cuadradas\n2.Multiplicar una matriz por un escalar\n3.Mostrar matriz.\n4.Salir\n\n");
printf("Elija una opcion:");
scanf("%d",&opcion);
if(opcion==5)//Salimos del bucle si la opción es 5.
break;
switch(opcion)
{
case SUMAR://Caso3,sumar dos matrices.
{
printf("\nIntroduzca dimension del la matriz\n");
scanf("%d",&n);
ma=(float **)malloc(n*sizeof(float*));//Reservamos memoria para el puntero que apunta al otro punter.
for(i=0; i<n; i++)//Reservamos memoria para la dimensión de cada una de las bifurcaciones del puntero principal(arriba).
ma=(float*)malloc(n*sizeof(float));
LeerMatriz(ma,n);
printf("\nMatriz:\n\n");
MostrarMatriz(ma,n);
printf("\n");
mb=(float **)malloc(n*sizeof(float*));//El mismo procedimiento.
for(i=0; i<n; i++)
mb=(float*)malloc(n*sizeof(float));
printf("\nIntroduzca la segunda la matriz(de igual dimension)");
LeerMatriz(mb,n);
printf("\nMatriz:\n\n");
MostrarMatriz(mb,n);
printf("\n");
sum=(float**)malloc(n*sizeof(float*));//Reservamos memoria para la matriz que va a recoger la información del algoritmo,mediante el mismo procedimiento.
for(i=0; i<n; i++)
sum=(float*)malloc(n*sizeof(float));
SumarMatrices(ma,mb,sum,n);
MostrarMatriz(sum,n);
free(ma);
free(mb); //Liberamos la memoria reservada con anterioridad para las matrices.
free(sum);
printf("\n");
break;
}
case ESCALAR:
{
printf("\nIntroduzca dimension del la matriz\n");
scanf("%d",&n);
ma=(float **)malloc(n*sizeof(float*));//Reservamos memoria de la misma forma que antes.
for(i=0; i<n; i++)
ma=(float*)malloc(n*sizeof(float));
LeerMatriz(ma,n);
printf("\nMatriz:\n\n"); //Llamamos a las funciones correspondientes con las salidas y lecturas necesarias.
MostrarMatriz(ma,n);
printf("\n");
mb=(float **)malloc(n*sizeof(float*));
for(i=0; i<n; i++)
mb=(float*)malloc(n*sizeof(float));
printf("\nIntroduzca el escalar \n");
scanf("%d",&e);
MatrizPorEscalar(ma,mb,e,n);
printf("\nMatriz:\n\n");
MostrarMatriz(mb,n);
free(ma);
free(mb); //Liberamos la memoria reservada con anterioridad para las matrices.
printf("\n");
}
}
}
system("PAUSE");
return 0;
} //FIN//

1 respuesta

Respuesta
El problema está en la línea 72:
ma=(float*)malloc(n*sizeof(float));
Estás asignando a la variable ma, que es de tipo float**, un valor de tipo float*.
¿Me podrías decir como arreglarlo para que compile? Le sigo dando el valor y no me compila. ¿Qué debo escribir en esa linea si es ahí donde esta el fallo? Gracias tío
en vez de asignar: ma = (float*)..., lo que tienes que asignar es:
ma = (float**)...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas