¿Por qué no funciona bien este programa en C?

El programa trata de introducir dos matrices de orden elegido por el usuario así como sus números, y multiplicar la primera por la segunda, el problema se encuentra en la función multiplicación (int multi), pero no se ni donde ni porque solo que no realiza la operación correctamente.

(Se que probablemente no hagan falta tantas variables es solo para saber cual va con cual)

Espero que el código se entienda.

#include<stdio.h>
int m, n, q, w, i, j, t,c,d,a,b,r,v ;
int intro(int X[100][100],int a,int b);
int multi(int A[100][100],int m, int n, int B[100][100],int q,int C[100][100]);
int imprime_mat(int X[100][100],int a,int b);
main()
{
printf( introduzca las dimensiones de la primera matriz =>\n );
printf( filas:\n );
scanf( %d ,&m);
printf( columnas:\n );
scanf( %d ,&n);
printf( introduzca las dimensiones de la segunda matriz=>\n );
printf( filas:\n );
scanf( %d ,&w);
printf( columnas:\n );
scanf( %d ,&q);
int A[100][100], B[100][100], C[100][100];
if(n==w)
{
printf( introduzca la primera matriz =>\n );
intro (A, m, n);
imprime_mat (A,m,n);
printf( introduzca la segunda matriz =>\n );
intro(B,w,q);
imprime_mat(B,w,q);
multi( A, m, n, B, q ,C);
imprime_mat(C,m,q);
system( pause );
}
else
{
printf( Para multiplicar matrices el numero de columnas de la primera );
printf( ha de ser igual al numero de filas de la segunda\n );
system( pause );}
}
int intro(int X[100][100],int a,int b)
{
for (c=0;c<a;c++)
{ for(d=0;d<b;d++)
{
printf( introduzca el elemento %d,%d de la matriz\n , c+1,d+1);
scanf( %d ,&X[c][d]);
}
}
system( pause );}
int multi(int A[100][100],int m,int n, int B[100][100], int q, int C[100][100])
{t=0;
j=0;
i=0;
for(t=0;t<m;t++)
{
for(j=0;j<q;j++)
{ for(i=0;i<n;i++)
{C[t][j]+=A[t]*B[j];
return C[t][j]; }
}
}
}
int imprime_mat(int X[100][100],int a,int b)
{printf( la matriz dada es:\n );
for ( v = 0 ; v < a ; v++ ){
for ( r = 0 ; r < b ; r++ ) {
printf ( %d , X [ v ] [r ] ) ;
}
printf ( \n ) ; // Imprime una linea en blanco cada vez
// que se termina de impri mir una fila .
}
printf( la matriz es de orden %dx%d\n ,a,b);}

1 respuesta

Respuesta
1

En primer lugar, defines como variables globales todas las variables de tipo local, luego no le das un nombre significativo a ninguna variable. Después, multiplicas matrices bidimensionales como matrices unidimensionales y pretendes que devuelva una matriz en lugar de un entero. Por ultimo, mejor que utilizar arrays para insertar parámetros y devolver resultados, deberías usar punteros, que es mucho mas limpio y profesional de hacer las cosas.

De todos modos le he echado un vistazo y prueba a cambiar la función multi de la siguiente forma a ver si te funciona.

int multi(int A[100][100],int m,int n, int B[100][100], int q, int C[100][100]){
t=0;
j=0;
i=0;
for(t=0;t<m;t++) {
for(j=0;j<q;j++) {
for(i=0;i<n;i++) {
C[t][j]+=(A[t]*B[j]);
}
}
}
}

Por cierto, si en una función no devuelves nada, declárala como void no como int.

Saludos y estaría genial que te leyeses un buen libro de introducción a la programación y otro de programación en lenguaje C.

Ademas, tienes que revisar todos los printf y scanf por que faltan comillas en todos ellos.

Para utilizar la función system necesitas incluir el fichero stdlib. H y pause va entre comillas, así system ("pause").

Por ultimo defines arrays en mitad del código y no al principio de la función, como marcan los libros de estilo de programación.

Corrige todos estos fallos y es posible que tu código funcione.

No se ha copiado bien la función multi la primera vez, la que funciona es

int multi(int A[100][100],int m,int n, int B[100][100], int que, int C[100][100]){
t=0;
j=0;
i=0;
for(t=0;t<m;t++) {
for(j=0;j<que;j++) {
for(i=0;i<n;i++) {
C[t][j]+=(A[t]*B[j]);
}
}
}
}

No se copia bien la función, debes sustituir

C[t][j] += (A[t]*B[j])

por

C[t][j] += (A[t]*B[j])

Gracias, aunque cuando respondiste ya lo solucioné pero muchas gracias, Tengo un libro de C, de "Losada", Estoy empezando ahora a programar en la carrera y estoy llegando a punteros pero aun no me he metido con ellos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas