Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Dominic91 en 2 Septiembre 2019, 23:02 pm



Título: Matrices
Publicado por: Dominic91 en 2 Septiembre 2019, 23:02 pm
la duda que tengo es como guardar el resultado de la suma de 2 matrices bidimensionales en una matriz unidimensional

programa:
Código
  1. using namespace std;
  2.  
  3. int main(){
  4.    char opc;
  5.    do{
  6.    fflush(stdin);
  7.    int s,S;
  8.    int matriz[3][2];
  9.    int matriz2[3][2];
  10.    int matrizResultante[3][2];
  11.    int indiceFila, indiceColumna=0;
  12.    printf("Bienvenido, ¿Desea realizar una suma de matrices?-----SI o NO \n");//Se da la bienvenida y se realiza la pregunta al usuario//
  13. printf("1---SI \n");
  14. printf("2---NO \n");//opciones a elegir para el usuario//
  15. cin>>s;
  16. switch(s){
  17.  
  18. case 1:
  19. for(indiceFila=0; indiceFila<3; indiceFila++)
  20.    {
  21.        for(indiceColumna=0; indiceColumna<2; indiceColumna++)
  22.        {
  23.            printf("Dame un numero para la matriz 1\n");
  24.            scanf("%i", &matriz[indiceFila][indiceColumna]);
  25.        }
  26.    }
  27.     for(indiceFila=0; indiceFila<3; indiceFila++)
  28.    {
  29.        for(indiceColumna=0; indiceColumna<2; indiceColumna++)
  30.        {
  31.            printf("Dame un numero para la matriz 2\n");
  32.            scanf("%i", &matriz2[indiceFila][indiceColumna]);
  33.        }
  34.    }
  35.    for(indiceFila=0; indiceFila<3; indiceFila++)
  36.    {
  37.        for(indiceColumna=0; indiceColumna<2; indiceColumna++)
  38.        {
  39.            matrizResultante[indiceFila][indiceColumna]=matriz[indiceFila][indiceColumna] + matriz2[indiceFila][indiceColumna];
  40.        }
  41.    }
  42.    for(indiceFila=0; indiceFila<3; indiceFila++)
  43.    {
  44.        for(indiceColumna=0; indiceColumna<2; indiceColumna++)
  45.        {
  46.            printf("El resultado de la matriz es %i\n",matrizResultante[indiceFila][indiceColumna]);
  47.        }
  48.    }
  49.     case 2://en caso de que el usuario acepte la segunda opcion, lo enviara a este caso//
  50. cout<<"Gracias por haber utilizado el programa :) ¿desea realizar otra suma?\n";//pregunta al usuario si desea continuar o salir del prgorama//
  51. cout<<"Digite 's' para repetir el proceso\n ";//indicacion de opcion//
  52. cin>>S;
  53. scanf("%c",&opc);
  54.  }
  55.  
  56.    }
  57.    while(opc=='s'||opc=='S');//mientras se cumpla la variable el programa se repetira//
  58.   return 0;
  59. }

por su atencion gracias


Título: Re: Matrices
Publicado por: Serapis en 3 Septiembre 2019, 01:37 am
Una matriz de varias dimensiones, en realdad puedes verla como una matriz de una sola dimensión.

en la mayoría d elenguajes, las dimensiones de una matriz, viene ordenadas por filas no por columnas, luego es lo mismo que leer el texto de un libro, donde el número de línea vendría a ser la segunda dimensión, y cada palabra en la línea la primera dimensión (la primera a la derecha)...
Así un array como este: array(0-9, 0-3), en memoria estaría posicionado así:
 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3

Es decir ppuedes transformarlo en un array unidmensional simplemente recalculando las psoiciones con cada dimension, la primera (la de la derecha, siempre es correlativa), la siguiente, aumenta desde 0, hasta la cantidad que tiene precisamente la dimension previa, etc... si hay más dimensiones...

en cuanto a la cantidad de ítems del array unidimensional, será la multiplicación de los elementos de cada dimensón
Luego:

Código:

cantidad = arraybid1(cantidaddim1 * cantidaddim2 * ... )
memoria para arraunidim(0 a cantidad -1)

Bucle y 0 a 9
    Bucle x 0 a 3
        arrayunidim(n) = arraybid1(y, x) + arraybid2(y, x)
        n +=1
    siguiente
siguiente

En realidad es algo bastante simplón a lo que cualquiera con algo de lógica puede llegar... o simplemente repasando la documentación del lenguaje respecto d elos arrays.

La escuela del mínimo esfuerzo, hace programadores mediocres. Considera estudiar la documentación para tener una base sólida.