Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chona en 10 Marzo 2020, 06:18 am



Título: Matriz en C++
Publicado por: chona en 10 Marzo 2020, 06:18 am
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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM 20
  5.  
  6. int main (void){
  7.   int matriz_a[NUM][NUM];
  8.   int matriz_b[NUM][NUM];
  9.   int dimension;    
  10.   int fila, columna;
  11.  
  12.   printf("Numero de filas/columnas: ");
  13.   scanf("%i", &dimension);      
  14.   if(dimension < 1 || dimension > NUM){
  15.      return EXIT_FAILURE;
  16.   }
  17.  
  18.   /*Escribir la matriz*/
  19.   printf("Introduzca la matriz origen: \n");
  20.   for(fila=0; fila<dimension; fila++){
  21.      for(columna=0; columna<dimension; columna++){
  22.         printf("elemento[%i][%i]: ", fila, columna);
  23.         fflush(stdout);
  24.         scanf("%i", &matriz_a[fila][columna]);          
  25.      }
  26.   }
  27.   printf("\n");
  28.  
  29.   /*Mostrar la matriz origen*/
  30.   printf("Matriz origen:\n");
  31.   for(fila=0; fila<dimension; fila++){
  32.      for(columna=0; columna<dimension; columna++){
  33.         printf("%2i", matriz_a[fila][columna]);
  34.      }
  35.      printf("\n");
  36.   }
  37.   printf("\n");
  38.  
  39.   /*Hacer la matriz traspuesta*/
  40.   for(fila=0; fila<dimension; fila++){
  41.      for(columna=0; columna<dimension; columna++){
  42.         matriz_b[columna][fila]=matriz_a[fila][columna];
  43.      }
  44.   }
  45.  
  46.   /*Mostrar la traspuesta*/
  47.   printf("Traspuesta de la matriz origen:\n");
  48.   for(fila=0; fila<dimension; fila++){
  49.      for(columna=0; columna<dimension; columna++){
  50.         printf("%2i", matriz_b[fila][columna]);
  51.      }
  52.      printf("\n");
  53.   }
  54.   printf("\n");
  55.   return 0;
  56. }


Título: Re: Matriz en C++
Publicado por: Serapis en 10 Marzo 2020, 17:04 pm
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):
Código:
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:
Código:
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