Unir dos matrices en una matriz mas grande en c

Iniciado por JosselynGreen, 3 Diciembre 2019, 08:09 AM

0 Miembros y 1 Visitante están viendo este tema.

JosselynGreen

Hola! muy buen dia. Estoy haciendo una funcion que tiene que unir el valor de dos matrices en una sola.
Intente hacer dos ciclos for, para recorrer la matriz de 10 filas x 5 columnas, con un if, si el  valor de la columna es menor a 5, que introduzca el primer arreglo, pero tengo problema al poner el sigguiente arreglo  o matriz en la parte que resta del arreglo. Dejo la funcion que crea las matrices y la que las une. ¿como podria resolverlo?




#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void  menu();
void  crearMatriz();
void  suma();
void  intersec();
void  restaab();
void  restaba();
void  exclusion();
void  buscar();
void  destruir();
//numeros aleatorios diferentes
  int o, p;
      int n,m,j,i;
      int matriz[5][5];
      int matriz1[5][5];
      //variable a agregar

//Funcion principal
int main()
{
menu();
    return 0;
}

//Funcion menu, en donde mandamos a llamar las demas funciones dentro del switch
void  menu(){
    int opc;
    int op=1;
    do{
        int opSwitch=0;
        printf("0. Salir\n");       
        printf("1. Crear Conjuntos A y B\n");
        printf("2. Union de A y B\n"); 
        printf("3. Interseccion de A y B\n");
        printf("4. Resta de A-B\n");
        printf("5. Resta de B-A\n");
        printf("6. Exclusion\n");
        printf("7. Buscar numero en los conjuntos\n");        
        printf("8. Destruir Conjuntos\n");
        printf("Selecciona una opcion:\n");

        scanf("%d",&opSwitch);

        switch(opSwitch){
       
            case 0:{
                op=0;
            }
            break;
            case 1:
            if(matriz[1][1]>0 && matriz1[1][1]>0){
printf("\nLa matriz debe ya tiene valores y debe ser destruida para poder ser creada nuevamente!");
printf("\nPara regresar al menu principal oprima 1");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
            crearMatriz();
}
            break;
            case 2:

            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
            suma();
}
            break;
            case 3:
            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1 ==>:");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
    intersec();
}
            break;
            case 4:
            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1 ==>:");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
    restaab();
}
            break;
            case 5:
            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1 ==>:");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
    restaba();
}
            break;
            case 6:
            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1 ==>:");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
    exclusion();
}
            break;
            case 7:
            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1 ==>:");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
    buscar();
}
            break;
            case 8:
            if(matriz[1][1]==0 && matriz1[1][1]==0)
            {
printf("\nLa matriz no tiene valores, debe ser creada primeramente!");
printf("\nPara regresar al menu principal oprima 1 ==>:");
scanf("%d",&opc);
switch(opc){
case 1:
menu();
break;
default: printf("\nOpcion invalida\n");
}

}
else{
    destruir  ();
}
            break;           
            default: printf("Opcion Invalida\n");
        }


        system("cls");
    }while(op);   
      system("pause");   
}

//crear y Llenar las matrices con valores aleatorios
void  crearMatriz(){
srand(time(NULL));
//Par de ciclos que rellenan las matrices con valores aleatorios
        for(i=0;i<5;i++){
               for(n=0;n<5;n++){
                     matriz[i][n]= 1 + rand() % (51 - 1); //la matriz 1 es igual a los valores random entre 1 y 50
                                              }
                          }
        for(j=0;j<5;j++){
               for(m=0;m<5;m++){
                     matriz1[j][m] = 1 + rand() % (51 - 1); //la matriz 2 es igual a los valores random entre 1 y 50
                                              }
                        }
            //Par de ciclos que muestran las dos matrices guardadas           
            printf("Las matrices guardadas son: \n\n");
        printf("Matriz A\n");
      for(i=0;i<5;i++){
                for(n=0;n<5;n++){
                      printf("[%02d]",matriz[i][n]);
}
                         printf("\n");
                          }
                          printf("\n");
                 printf("Matriz B\n");                         
      for(j=0;j<5;j++){
                for(m=0;m<5;m++){
                      printf("[%02d]",matriz1[j][m]);
}
                         printf("\n");
                          }
                       
      system("pause");   
}

//2. Unión de A y B
void  suma(){

//ciclo que suma las dos matrices
int sumam[10][5];
for(o=0;o<10;o++){        
for(p=0;p<5;p++){
       
        if(o<5){
        sumam[o][p]= matriz[o][p];
}

if(o>5){
for(o=5; o<10; o++){
for(p=0; p<5; p++){
sumam[o][p]= matriz1[o][p];
}
}
}
                          }
                   }
            //Par de ciclos que muestran las dos matrices guardadas en la opcion 1           
            printf("\nLas matrices guardadas en la opcion 1, son: \n\n");
        printf("Matriz A\n");
       for(i=0;i<5;i++){
                for(n=0;n<5;n++){
                      printf("[%02d]",matriz[i][n]);
}
                         printf("\n");
                          }
                         
                          printf("\n");
                          printf("Matriz B\n");
       for(j=0;j<5;j++){
                for(m=0;m<5;m++){
                      printf("[%02d]",matriz1[j][m]);
}
                         printf("\n");
                          }       

//ciclo que muestra la matriz resultante de la union           
printf("\nLa matriz resultante de la suma de la Matriz A y la Matriz B, es: \n\n");
      for(o=0;o<10;o++){
                for(p=0;p<5;p++){
                      printf("[%02d]",sumam[o][p]);
}
                         printf("\n");
                          }
           
      system("pause");

K-YreX

El problema está en la línea 256.
Estás accediendo fuera de los límites de matriz1 al empezar el bucle con o = 5.
Además esa función es muy ineficiente...
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;