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]); } } }