Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/11/2015, 10:58
david_rep_15
 
Fecha de Ingreso: noviembre-2015
Ubicación: Madrid
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Pregunta Calculadora de Matrices con funciones

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