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
#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;
}
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