Matriz en C++

Iniciado por chona, 10 Marzo 2020, 06:18 AM

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

chona

Hola tengo una duda y es que me piden una matriz m=n que lo defineremos como N y calcular la transpuesta  por ejemplo
N=3

1  2  3
4  5  6
7  8  9

mt
1  4  7
2  5  8
3  6  9

Mi duda es que tengo que llenar la matriz por filas y no entiendo muy bien eso por decir dar la entrada a
1  2  3 y asi sucesivamente


Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

#define NUM 20

int main (void){
   int matriz_a[NUM][NUM];
   int matriz_b[NUM][NUM];
   int dimension;   
   int fila, columna;
 
   printf("Numero de filas/columnas: ");
   scanf("%i", &dimension);       
   if(dimension < 1 || dimension > NUM){
      return EXIT_FAILURE;
   }

   /*Escribir la matriz*/
   printf("Introduzca la matriz origen: \n");
   for(fila=0; fila<dimension; fila++){
      for(columna=0; columna<dimension; columna++){
         printf("elemento[%i][%i]: ", fila, columna);
         fflush(stdout);
         scanf("%i", &matriz_a[fila][columna]);         
      }
   }
   printf("\n");

   /*Mostrar la matriz origen*/
   printf("Matriz origen:\n");
   for(fila=0; fila<dimension; fila++){
      for(columna=0; columna<dimension; columna++){
         printf("%2i", matriz_a[fila][columna]);
      }
      printf("\n");
   }
   printf("\n");

   /*Hacer la matriz traspuesta*/
   for(fila=0; fila<dimension; fila++){
      for(columna=0; columna<dimension; columna++){
         matriz_b[columna][fila]=matriz_a[fila][columna];
      }
   }

   /*Mostrar la traspuesta*/
   printf("Traspuesta de la matriz origen:\n");
   for(fila=0; fila<dimension; fila++){
      for(columna=0; columna<dimension; columna++){
         printf("%2i", matriz_b[fila][columna]);
      }
      printf("\n");
   }
   printf("\n");
   return 0;
}

Serapis

Tranponer un matriz es intercambiar las dimensiones en e array (operando con uno de 2 dimensiones, como haces en el prsente caso). Puede entenderse de otra manera cuando se usa un array unidimensional...

Creemos primero un array de 10 de ancho por 6 de alto, y además partiendo de un unidiemnsional (al caso un string o un array de chars-bytes, como se prefiera considerar):

funcion CrearArray
    entero x, y , n
    string s
    array de chars t(0 To 5, 0 To 9)

    s = "En un lugar de la Mancha de cuyo nombre no quiero acordarme."
    bucle para y desde 0 a 5
        Bucle para x desde 0 a 9
            t(y, x) = s.CharEnPosicion(n)
            imprimir en misma línea  t(y, x) + " "  // el espacio es por claridad... se pued e omitir
            n += 1
        siguiente
        saltar a otra linea
    siguiente


    // t = TrasponerArray(t, x, y)   // 10, 6
fin funcion


El resultado de imprimir en el bucle interior cada línea será:

E n   u n   l u g a
r   d e   l a   M a
n c h a   d e   c u
y o   n o m b r e   
n o   q u i e r o   
a c o r d a r m e .


Hemos dejado la llamada a la función trasponer comentada, hasta ver que se imprime como aparece justo encmima de esta línea...

Ahora la trasposición, que se verá lo simple que es en un array de 2 dimensiones:

arary de chars() = funcion TrasponerArray( arrayChars T(), entero Ancho, entero Alto)
    entero x, y , n
    string s
    array de chars s(ancho , Alto)  // nota el cambio del tamaño de cada dimensión, antes era (alto, ancho)

    bucle para x desde 0 a Ancho - 1     
        Bucle para y desde 0 a Alto - 1
            s(x, y) = t(y, x)

            imprimir en la misma línea s(x, y) + " "
        siguiente
        saltar a otra linea
    siguiente     

    devolver s
fin funcion


El resultado será:

E r n y n a
n   c o o c
  d h     o
u e a n q r
n     o u d
  l d m i a
l a e b e r
u     r r m
g M c e o e
a a u     .


finalmente nota, que si solo te piden imprimir traspuesto el array, no es preciso crear ni asignar el nuevo array, basta poner en primer luegar el bucle de la dimensión y dentro el bucle de la otra dimensión