Hola buenas, estoy haciendo una calculadora de matrices en C usando funciones, y tengo un par de dudas, espero que puedan ayudarme.
Cuando llamo a la función pedirMatriz(); y empiezo a introducir los datos, no le estoy pasando bien los datos guardados en las variables de las filas y columnas que tienen las matrices, porque me pide todo el rato que introduzca datos para la fila 1 y una columna nueva, y no para, no se si me explico.
También me saltan warnings al llamar a la función pedir matriz, que son los siguientes:
c:119:16: warning: 'filasMA' may be used uninitialized on this function
c:119:16: warning: 'columnasMA' may be used uninitialized on this function
c:119:16: warning: 'filasMB' may be used uninitialized on this function
c:119:16: warning: 'columnasMB' may be used uninitialized on this function
Se que pone que deberia usarlas sin inicializar, pero no se como hacerlo :( y me va a saltar el mismo error cuando le pase esos parámetros a las funciones que se encargarán de sumar y multiplicar las matrices :(
El código que tengo es este:
Código:
#include <stdio.h>
#define MAX_FILAS 5 /* Número máximo de filas que puede tener una matriz */
#define MAX_COLUMNAS 5 /* Número máximo de columnas que puede tener una matriz */
#define FALSE 0 /* Cuando el valor de la sentencia es falso, devuelve un 0 */
#define TRUE 1 /* Cuando el valor dela sentencia es verdadero, devuelve un 1 */
/* ---------- Declaración de los prototipos de las funciones ---------- */
void pedirDimensiones (int *filasMA, int *columnasMA, int *filasMB, int *columnasMB);
int menu (void);
void pedirMatriz (int matrizA[MAX_FILAS][MAX_COLUMNAS], int matrizB[MAX_FILAS][MAX_COLUMNAS], int filasMA, int columnasMA, int filasMB, int columnasMB);
int main(void) {
/* ---------- Declaración de constantes ---------- */
int filasMA, columnasMA; /* Almacenan el número de filas y columnas que tiene la Matriz A */
int filasMB, columnasMB; /* Almacenan el número de filas y columnas que tiene la Matriz B */
/* ------------ Programa principal ------------ */
printf("\n\n** Introduccion de los datos de las matrices **");
/* Llamada a la función pedirDimensiones() */
pedirDimensiones(&filasMA, &columnasMA, &filasMB, &columnasMB);
/* Imprime por pantalla las dimensiones válidas introducidas por teclado */
printf("\nLas dimensiones de la Matriz A son %d Filas por %d Columnas.", filasMA, columnasMA);
printf("\nLas dimensiones de la Matriz A son %d Filas por %d Columnas.", filasMB, columnasMB);
/* Llamada a la función menu() */
menu();
return 0;
}
/* ---------- Definición de funciones ---------- */
/* Lee de teclado las filas y columnas de los arrays con los que se va a operar */
void pedirDimensiones (int *filasMA, int *columnasMA, int *filasMB, int *columnasMB)
{
printf("\n\nNumero de Filas de la Matriz A(1-5): ");
scanf("%d", &*filasMA);
/* Cuando el usuario introduce un valor incorrecto el bucle comienza hasta que se introduce un valor válido */
while (*filasMA<1 || *filasMA>MAX_FILAS)
{
printf("Numero de Filas de la Matriz A(1-5): ");
scanf("%d", &*filasMA);
}
printf("Numero de Columnas de la Matriz A(1-5): ");
scanf("%d", &*columnasMA);
/* Cuando el usuario introduce un valor incorrecto el bucle comienza hasta que se introduce un valor válido */
while (*columnasMA<1 || *columnasMA>MAX_COLUMNAS)
{
printf("Numero de Columnas de la Matriz A(1-5): ");
scanf("%d", &*columnasMA);
}
printf("\nNumero de Filas de la Matriz B(1-5): ");
scanf("%d", &*filasMB);
/* Cuando el usuario introduce un valor incorrecto el bucle comienza hasta que se introduce un valor válido */
while (*filasMB<1 || *filasMB>MAX_FILAS)
{
printf("Numero de Filas de la Matriz B(1-5): ");
scanf("%d", &*filasMB);
}
printf("Numero de Columnas de la Matriz B(1-5): ");
scanf("%d", &*columnasMB);
/* Cuando el usuario introduce un valor incorrecto el bucle comienza hasta que se introduce un valor válido */
while (*columnasMB<1 || *columnasMB>MAX_COLUMNAS)
{
printf("Numero de Columnas de la Matriz B(1-5): ");
scanf("%d", &*columnasMB);
}
}
/* Muestra el menú por pantalla y lee de teclado la opción seleccionada */
int menu (void)
{
/* Variables locales de menu() */
int opcion; /* Opción seleccionada por el usuario */
int matrices_con_datos; /* Comprueba si se han introducido datos en las matrices */
int filasMA, columnasMA, filasMB, columnasMB;
int matrizA[MAX_FILAS][MAX_COLUMNAS], matrizB[MAX_FILAS][MAX_COLUMNAS];
/* Inicializa el valor a FALSE indicando que las matrices están vacías */
matrices_con_datos=FALSE;
do
{
printf("\n\n 1. - Introducir datos en las matrices");
printf("\n 2. - Sumar matrices (A+B)");
printf("\n 3. - Multiplicar matrices (A*B)");
printf("\n 4. - Salir");
printf("\n\nSeleccione opcion: ");
scanf("%d", &opcion);
switch (opcion)
{
case 1: /* El usuario introduce los datos de las matrices */
printf("\nIntroducir datos en las matrices");
/* Llamada a la función pedirMatriz(); */
pedirMatriz(matrizA, matrizB, filasMA, columnasMA, filasMB, columnasMB);
/* Llamada a la función verMatriz(); */
/* verMatriz(); */
break;
case 2: /* Suma las matrices */
printf("\nSumar matrices");
/* Comprueba si se han introducido datos en las matrices */
if (matrices_con_datos==FALSE)
{
printf("\n\nNo se han introducido datos en las matrices");
}
/* Si se han introducido datos en las matrices, se llama a la función sumarMatriz() */
else
{
/* Llamada a la función sumaMatrices() */
}
break;
case 3: /* Multiplica las matrices */
printf("\nMultiplicar matrices");
/* Comprueba si se han introducido datos en las matrices */
if (matrices_con_datos==FALSE)
{
printf("\n\nNo se han introducido datos en las matrices");
}
/* Si se han introducido datos en las matrices, se llama a la función multiplicarMatriz() */
else
{
/* Llamada a la función multiplicarMatriz() */
}
break;
case 4: /* Finaliza el programa */
break;
/* Cuando se introduce un valor numérico diferente a los especificados en el menú, muestra un mensaje de error */
default: printf("\nOpcion incorrecta");
}
} while(opcion!=4);
return opcion;
}
/* Rellena las filas y columnas del array matriz indicadas en los parámetros filas y columnas con valores enteros leídos del teclado */
void pedirMatriz(int matrizA[MAX_FILAS][MAX_COLUMNAS], int matrizB[MAX_FILAS][MAX_COLUMNAS], int filasMA, int columnasMA, int filasMB, int columnasMB)
{
int i, j; /* Recorren las filas y las columnas de las matrices A y B */
printf("\n\n** Matriz A **\n\n");
/* Pide los datos de la matriz A */
for(i=0; i<filasMA; i++)
{
for(j=0; j<columnasMA; j++)
{
printf("Fila [%d] Columa [%d]: ", i+1,j+1);
scanf("%d",&matrizA[i][j]);
}
}
printf("\n\n** Matriz B \n\n**");
/* Pide los datos de la matriz B */
for(i=0; i<filasMB; i++)
{
for(j=0; j<columnasMB; j++)
{
printf("Fila [%d] Columa [%d]: ", i+1,j+1);
scanf("%d",&matrizB[i][j]);
}
}
}