Hola, soy estudiante de 1º de ingenieria informatica y ando un poco liado con los lenguajes de programacion. Hasta ahora me he acostumbrado mas a pascal que ha C y hay cosas que hago en el primero y que no se como hacer en el segundo. Uno de esos problemas es el uso de procedimientos dentro de otros procedimientos. En concreto una de las practicas consiste en realizar un programa que opere con dos matrices dadas por el usuario. Quiero incluir en un procedimiento llamado "menu" el resto de procedimientos de manera que, segun introduzcas una de las opciones, realice el procedimiento deseado. Al no saber como hacerlo, lo tengo incluido en la funcion main() pero me gustaria cambiarlo de lugar. Añado el codigo para ver si alguien me sabe decir como hacerlo, las partes en las que tengo el problema estan resaltadas con varios espacios en blanco y una frase entre asteriscos. Hay otro par de dudas que me gustaria que alguien me resolviera; en el mismo procedimiento menu tengo un bucle while que hace que se repita un mensaje de error cuando se introduce una opcion no valida. El problema es que no me funciona. Se que es porque no tengo bien puesta la condicion unida con && pero no se como es. Tambien tengo otro procedimiento al final del codigo que ni siquiera se si esta bien escrito y que me gustaria saber como implementar. Se trata de preguntar al usuario si desea realizar otra operacion al finalizar la anterior
Me ha quedado un poco largo pero bueno, espero que alguien me pueda ayudar
Saludos
/*Programa que realiza varias operaciones sobre dos matrices introducidas por el usuario*/
#include <stdio.h>
#define N 2
void leer_matrices (int a1[][N], int a2[][N]); /*Pide al usuario valores para las matrices*
/
void visualizar_A (int a1[][N]); /*Visualiza la matriz A*/
void visualizar_B (int a2[][N]); /*Visualiza la matriz B*/
void menu (int *op);/*Menú de operaciones con las matrices*/
/*Operaciones con las matrices*/
void sumar_matrices (int a1[][N], int a2[][N], int a3[][N]);
void traspuesta (int a1[][N]);
void visualizar_filas (int a1[][N]);
void visualizar_columnas (int a1[][N]);
void elemento_mayor (int a1[][N], int *max);
void visualizar_mayor (int *max);
void posicion_mayor (int a1[][N], int max);
/*Opción de realizar otra operación o salir del programa*/
void repetir (char *resp);
main ()
{
int opcion; /*Variable para elegir opción*/
int A[N][N], B[N][N], C[N][N];/*Matrices a introducir y matriz suma*/
int max;/*Variable en la que se guardará el elemento mayor de la matriz A*/
char resp;/*Variable para la respuesta a la función repetir*/
leer_matrices (A,B);
visualizar_A (A);
visualizar_B (
;
elemento_mayor (A,&max);
menu (&opcion);
***********Esta es la parte que quiero introducir en el
procedimiento menu*****************************
switch (opcion)
{
case 1:sumar_matrices (A,B,C);
break;
case 2:traspuesta (A);
break;
case 3:visualizar_filas (A);
break;
case 4:visualizar_columnas (A);
break;
case 5:visualizar_mayor (&max);
break;
case 6:posicion_mayor (A,max);
break;
case 7:break;
}
*******************Hasta aqui****************
}
void leer_matrices (int a1[][N], int a2[][N])
{
int i,j,valor;
printf ("Introduzca los valores de la primera matriz\n\n");
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
printf ("Introduzca el valor [%d][%d]\n",i,j);
scanf ("%d",&valor);
a1
[j] = valor;
}
}
printf ("Introduzca los valores de la segunda matriz\n\n");
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
printf ("Introduzca el valor [%d][%d]\n",i,j);
scanf ("%d",&valor);
a2[j] = valor;
}
}
}
void visualizar_A (int a1[][N])
{
int i,j;
printf ("Matriz A:\n\n");
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
printf ("%4d",a1[j]);
}
printf ("\n");
}
printf ("\n");
}
void visualizar_B (int a2[][N])
{
int i,j;
printf ("Matriz B:\n\n");
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
printf ("%4d",a2[j]);
printf ("\n");
}
printf ("\n");
}
******************* Este es el procedimiento en el que
quiero meter la parte que resalte antes****************
void menu (int *op)
{
int opcion;
printf ("************* M E N U ****************\n\n");
printf (" 1.- Sumar matrices \n");
printf (" 2.- Traspuesta de A \n");
printf (" 3.- Visualizar A por filas \n");
printf (" 4.- Visualizar B por filas \n");
printf (" 5.- Elemento mayor de A \n");
printf (" 6.- Posición del elemento mayor de A \n");
printf (" 7.- Salir \n\n");
printf (" Introduzca una opción: ");
scanf ("%d",&opcion);
printf ("\n");
**********Aqui iria la parte que tengo en main*************
**********Y aqui empieza el bucle que no me funciona********
while ((opcion<=0) && (opcion>=8))
{
printf ("Ha introducido una opción no valida\n");
printf ("Vuelva a introducir una opción: ");
scanf ("%d",&opcion);
printf ("\n");
}
*op = opcion;
printf ("\n");
}
void sumar_matrices (int a1[][N], int a2[][N], int a3[][N])
{
int i,j;
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
a3[j] = a1[j] + a2[j];
}
printf ("Valor de la matriz C:\n\n");
for (i = 1; i<= N; i++)
{
for (j = 1; j<= N; j++)
printf ("%4d",a3[j]);
printf ("\n");
}
printf ("\n");
}
void traspuesta (int a1[][N])
{
int i,j;
printf ("Matriz traspuesta de A:\n\n");
for (i = 1; i <= N; i++)
{
for (j = 1; j<= N; j++)
printf ("%4d",a1[j]);
printf ("\n");
}
printf ("\n");
}
void visualizar_filas (int a1[][N])
{
int i,j;
for (i = 1; i <= N; i++)
{
printf ("Fila %d =>",i);
for (j = 1; j <= N; j++)
printf ("%4d",a1[j]);
printf ("\n");
}
printf ("\n");
}
void visualizar_columnas (int a1[][N])
{
int i,j;
for (i = 1;i <= N; i++)
{
printf ("Columna %d =>",i);
for (j = 1; j <= N; j++)
printf ("%4d",a1[j]);
printf ("\n");
}
printf ("\n");
}
void elemento_mayor (int a1[][N], int *max)
{
int i,j;
*max = a1[1][1];
for (i = 1; i<= N; i++)
{
for (j =1; j<= N; j++)
{
if (a1[j] > *max)
*max = a1[j];
}
}
}
void visualizar_mayor (int *max)
{
printf ("El elemento mayor de A es %d",*max);
printf ("\n");
}
void posicion_mayor (int a1[][N],int max)
{
int i,j;
for (i = 1; i <= N; i++)
{
for (j = 1; j<= N; j++)
if (a1[j] >= max)
{
printf ("La posición del elemento mayor de A es [%d][%d]",i
,j);
}
}
printf ("\n");
}
**********Este es el procedimiento que no se como introducir*********
void repetir (char *resp)
{
printf ("¿Desea realizar otra operación (s/n): ");
while (*resp != 's')
{
printf ("¿Desea realizar otra operación? (s/n): ");
scanf ("%c",&resp);
}
}