[ Foro de C ]

Menú modificar matrices

02-Dec-2021 04:24
Xoán Araújo
1 Respuestas

Alguien sabe decirme el motivo de xq no funciona bien este código? Igual es una tonteria pero de verdad que me hace cosas rarísimas. No está acabado, por eso hay funciones sin usar. Hay veces que se ejecuta el bucle del menú varias veces seguidas, y cuando guardo una matriz hay elementos que se guardan mal.

#include <stdio.h>
#include <stdbool.h>
#define TITLE 'PROGRAMA MATRICES'
#define OP1 'D'
#define OP2 'M'
#define OP3 'S'
#define OP4 'R'
#define OP5 'E'

void getmatrix(int n,int matrix[n][n]);
void printmatrix(int n, int matrix[n][n]);
void changematrix(int n, int matrix[n][n]);
int sum();
int dif();
int selectOption();
void explainMenu();
void manageMenu();

void printmatrix(int n, int matrix[n][n]){

   printf("Matriz actual:\n");
   int r,c;
   for(r=0;r<n;r++){
       for(c=0;c<n;c++){
           if(c!=0)
               printf("%s%3d%s","",matrix[r][c],(c==n-1?"]\n":""));
           else
               printf("%s%d%s","[",matrix[r][c],(c==n-1?"]\n":""));
       }
   }
}

void getmatrix(int n,int matrix[n][n]){
   int r,c;

   printf("De que orden quieres que sea la matriz?\n");
   scanf("%d",&n);
   printf("Define los elementos de la matriz de orden %dx%d:\n",n,n);
   for(r=0;r<n;r++){
       for(c=0;c<n;c++){
           printf("%dx%d?:",r+1,c+1);
           scanf("%d",&matrix[r][c]);
       }
   }
   printmatrix(n,matrix);
}

void changematrix(int n, int matrix[n][n]) {
   int row, column;
   printf("Que posicion de la matriz (%dx%d) quieres modificar? Ej: \"1x2\"\n", n+1, n+1);
   scanf("%d%*c%d", &row, &column);
   row--;
   column--;
   printf("Que valor quieres que tenga el elemento de posicion %dx%d\n", row+1, column+1);
   scanf("%d", &matrix[row][column]);
   printf("La matriz se ha modificado.\n");
   printmatrix(n,matrix);
}

void pausar() {
   printf("\nPulse la tecla ENTER para continuar...\n");
   getchar();
}

int selectOption(){
   char option;
   printf("Selecciona la opcion [%c] [%c] [%c] [%c] [%c]\n",OP1,OP2,OP3,OP4,OP5);
   scanf("%c",&option);
   return option;
}

void explainMenu(){
   //printf("%s\n\n",TITLE);
   printf("Opciones del programa:\n"
          "D) Definir la matriz\n"
          "M) Modificar la matriz\n"
          "S) Suma un numero entero a un elemento de la matriz\n"
          "R) Resta un numero entero a un elemento de la matriz\n"
          "E) Salir del programa\n");

}

void manageMenu(){
   int n=0;
   int matrix[n][n];

   bool repeat=true;
   do{
   explainMenu();
       switch (selectOption()) {
           case OP1:
               getmatrix(n, matrix);
               pausar();
               break;
           case OP2:
               changematrix(n,matrix);
               pausar();
               break;
           case OP3:
               pausar();
               break;
           case OP4:
               pausar();
               break;
           case OP5:{
               repeat=false;
               printf("----------------------------------------\n"
                      "------------FIN DEL PROGRAMA------------\n"
                      "----------------------------------------\n");
               break;
           }
           default:
               printf("Error en el programa.");
               break;
       }
   } while (repeat);
}

int main() {
/*    int N = 3;
   int matrix[N][N];

   printf("Define la matriz que vas a modificar en el programa.\n"
          "----------------------------------------------------\n");
   getmatrix(N,matrix);*/
   manageMenu();

   return 0;
}


02-Dec-2021 04:35
Xoán Araújo

Lo puse 2 veces el post porque pensaba q no se había subido jaja, en el otro está mejor puesto creo






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)