lunes, 15 de noviembre de 2010

C Matriz transpuesta

Materia: Lenguajes de Programación-Puntos extras

Una matriz esta compuesta de filas(reng) y columnas(col), la matriz transpuesta es una matriz que cambia las columnas por las filas.



Implementé mi programa en C, de la siguiente forma:
Primero se incluye la librería <stdio.h> y enseguida defino la variable MAX y el doy un valor de 10, esto es para poder declarar la matriz y que tenga ese número máximo de filas y columnas, y podemos modificar ese valor máximo directamente en el código del programa.
Enseguida declaro mi función principal int main(int argc, char** args), y dentro de ella empiezo a escribir todo el código, se declaran las variables que voy a usar, todas son de tipo enteros tengo la variable matriz[MAX][MAX], reng, col, i=0 y j=0, matriz es el arreglo bidimensional que el usuario va a llenar, reng y col indical el numero de renglones y columnas que el usuario quiera, y la i y j se utilizan como auxiliares para ir leyendo las posiciones del arreglo, después también nos auxiliamos de ellas para imprimir la matriz original, y la matriz transpuesta.
Entonces ahora empiezo a leer los datos del usuario, con dos for uno cumple la función de ir llenando la fila y el otro de saltar al siguiente fila para que sea llenada, es posible que se preste a confusión, la parte de mi código en donde pido al usuario que inserte una valor para cada posición del arreglo ya que tengo "i+1" y "j+1", es simplemente para que se vea "bonito", si no el código empezaría diciendo "Escriba los valores [0][0]", para mi es mejor que se vea [1][1], después de que se cumple el ciclo de llenado, ahora se pasa a la rutina para imprimir los valores de forma de una matriz, para que el usuario pueda comparar la matriz original a la matriz transpuesta, después de la rutina de imprimir la matriz original, viene el "truco", imprimir la matriz transpuesta es muy sencillo solo se intercambia en el for el orden en que se impriman los datos, en vez de imprimir matriz[i][j], se imprime matriz[j][i].
El %6d lo utilicé para dar espacio entre los números.

El código:


#include<stdio.h>
#define MAX 10
int main(int argc, char** args)
{
int matriz[MAX][MAX], col, reng, i=0, j=0;
printf("Cuantas columnas quieres ");
scanf("%d", &col);
printf("Cuantos renglones quieres ");
scanf("%d", &reng);
for(i = 0;i < reng;i++)/*RUTINA PARA LEER LOS DATOS*/
{
for(j = 0;j < col;j++){
printf("ESCRIBE LOS VALORES [%d][%d]==>\t", i+1, j+1);
scanf("%d", &matriz[i][j]);
}
}
printf("\n\n\t\tMatriz original");/*RUTINA PARA IMPRIMIR*/
printf("\n\n");
for(i = 0;i < reng;i++){
printf("\n\t\t");
for(j = 0;j < col;j++){
printf(" %6d ", matriz[i][j]);
}
}
printf("\n\n\t\tMatriz transpuesta");/*IMPRIMIR MATRIZ TRANSPUESTA*/
printf("\n\n");
for(i = 0;i < col;i++){
printf("\n\t\t");
for(j = 0;j < reng;j++){
printf(" %6d ", matriz[j][i]);
}
}
printf("\n\n\n");
}




Ejecuciónes:



Código para descargar aquí.

39 comentarios:

  1. joder super util no, lo proximo, MUHISIMAS GRACIAS

    ResponderEliminar
  2. Eres la mujer más hermosa que jamás haya visto

    ResponderEliminar
  3. MUY BUEN EJERCICIO ME SIRVIÓ MUCHO

    ResponderEliminar
  4. Gracias por segunda ocasion no encontraba la forma de hacerlo gracias

    ResponderEliminar
  5. Disculpa, pero el programa solo me pide que le de valores y cuando termino de poner valores se cierra automaticamente ¿Qué hago?

    ResponderEliminar
    Respuestas
    1. Antes de la ultima llave que cierra el programa ponle un
      getch();
      ya que esto pausa el programa

      Eliminar
    2. muy bueno este programa me sirvió de mucho

      Eliminar
    3. muy bueno este programa me sirvió de mucho

      Eliminar
  6. HOla muchas gracias muy bueno el codigo, queria hacerte una pregunta, yo necesito generar una matriz con todos los elementos en cero excepto aquellos para los que i+j sea par (para estos elementos generar un valor aleatorio con la función rand).

    yo lo que hice es
    void matrizcero()

    {
    int mat[3][3];
    int i,j;
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    mat[i][j]=0;
    if((mat[i+j][i+j]%2)==0)
    {
    mat[i+j][i+j]=rand();
    }
    }
    }
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    printf("%d",mat[i][j]);

    }
    printf("\n");
    }
    }

    pero quiero saber si la comparacion esta bien porq realemnte me da la matriz pero solo la primera fila con los numeros aleatorios y las otras dos en cero, no creo que me este haciendo lo correcto, te agradezco la ayuda.

    ResponderEliminar
  7. como pones una imagen de fondo cuando ejecutas el .c ?

    ResponderEliminar
  8. Saludos! necesito matriz transpuesta pero con numeros complejos, el introducir numeros complejos ya lo tengo solo necesito hacer transpuestas si me pudieras ayudar! Saludos! :P

    ResponderEliminar
  9. te pongo el codigo #include
    using namespace std;
    void main (void)
    {
    int r,c,matrixA[50][50],matrixA2[50][50],varA1,varA2,auxA1,auxA2;
    //PRIMER MATRIZ
    cout<<"Ingresa el numero de columnas de la matriz: ";cin>>r;
    cout<<"Ingresa el numero de filas de la matriz: ";cin>>c; //INGRESA COLUMNAS Y RENGLONES
    for(varA1=0;varA1>matrixA[varA1][varA2];
    }
    }
    for(auxA1=0;auxA1>matrixA2[auxA1][auxA2];
    }
    }
    cout<<endl<<" PRIMER MATRIZ "<<endl; //MUESTRA ACOMODADA LA PRIMER MATRIZ
    auxA1=0;
    auxA2=0;
    for(varA1=0;varA1<r;varA1++)
    {
    cout<<endl;
    for(varA2=0;varA2<c;varA2++)
    {
    cout<<" "<<matrixA[varA1][varA2]<< " + ";
    cout<<" "<<matrixA2[auxA1][auxA2]<< "i";
    auxA2++;
    }
    while(auxA2!=0)
    {auxA2--;
    }
    auxA1++;
    }
    cout<<endl<<endl;
    /*
    cout<<"\n"<<"\t"<<"Matriz transpuesta";
    cout<<"\n";
    for(b=0; b<r; b=b+1)
    {
    cout<<"\n"<<"\t"<<"\t";
    for(a=0; a<c; a=a+1)
    {
    cout<<x[a][b]<<" ";
    }
    }
    cout<<"\n"; */
    system ("pause");

    }

    ResponderEliminar
  10. gracias!!! ya comprendo un poco mas :)

    ResponderEliminar
  11. me has salvado la vida mujer! :D gracias muchas xD

    ResponderEliminar
  12. buenass !! necesito este ejercicio por favorrr :( Dada una matriz A de n*n, se quiere obtener otra matriz R de n*n tal que: R=A*A(transpuesta)
    nota: No debe utilizar otra matriz aparte de A y R. Por favor ayudamee

    ResponderEliminar
  13. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  14. Muchas gracias, me sirvio para hacer mi tarea de c++ XD

    ResponderEliminar
  15. hola, oie no me acepta colocar getch(); ? y se cierra después de visualizar instantáneamente.

    ResponderEliminar
  16. 1000 gracias!! Me ahorraste mucho tiempo de programación =D

    ResponderEliminar
  17. me ayudo mucho!
    Pregunta
    -1 Para sumar una matriz con numeros aleatorios solo me suma la primera fila y columna o las suma todas?
    ya q me dices q con numeros aleatorios solo genera la primera columna y rellena lo demas con 0

    ResponderEliminar
  18. Haga un procedimiento que reciba una matriz A mxn el valor N y M debe de ser solicitado por el usuario al inicio del sistema y devuelva la matriz transpuesta de A. La matriz transpuesta se obtiene cambiando las filas a columnas..... Alguien con esto en Python por favor

    ResponderEliminar
  19. yo tengo que hacer este , pero no se el como hacerlo ,Haga un procedimiento que reciba una matriz A nxn y genere una nueva que sea * vertical y la otra *horizontal

    ResponderEliminar
  20. En C++ tambien funciona asi, con una 4x3 por ejemplo
    //Escribir un programa que llene una matriz A de 4x3 de la siguiente manera: En la primera columna aleatorios entre 0 y 15
    //En la segunda columna aleatorios pares entre 0 y 20. En la tercera columna la suma de la primera y segunda columna,
    // muestre la matriz en pantalla, Llene y muestre una matriz B de 3x4 que será la matriz traspuesta de A
    #include
    #include
    #include
    int main()
    {
    using namespace std;
    int A[4][3], B[3][4];
    srand(getpid());
    for (int i=0; i<4; i++)
    {

    for (int j=0; j<3; j++)
    {
    A[i][0]=rand()%16;
    A[i][1]=2*rand()%10;
    A[i][2]=A[i][1]+A[i][0];

    }
    cout<<endl;

    }
    cout<<endl;
    cout<<"Matriz A; "<<endl;
    for (int i=0; i<4; i++)
    {

    for (int j=0; j<3; j++)
    {
    cout<<setw(5)<<A[i][j];
    }
    cout<<endl;
    }
    cout<<"Matriz B "<<endl;
    for (int i=0; i<3; i++)
    {

    for (int j=0; j<4; j++)
    {

    cout<<setw(5)<<A[j][i];

    }
    cout<<endl;

    }
    return 0;
    }

    ResponderEliminar
    Respuestas
    1. en el include eran iostream, cstdlib y iomanip, en devc++

      Eliminar
  21. Con el avance de la computación deberían los lenguajes LAN contener librerías para el tratamiento oportuno de estructuras matriciales, así por ejemplo, todo lenguaje distinto a matLab que por su naturaleza es matemático, debería de implementar la función de traspuesta de una matriz.

    Comparto el link del programa en C++
    https://tutorias.co/arrays-visual-c-traspuesta-de-una-matriz/

    ResponderEliminar
  22. quiero el codigo de matriz transpuesta en html usando el editor de codigo sublime text

    ResponderEliminar
  23. Muchísimas gracias, me acabas de hacer la vida súper fácil, en serio te agradezco.

    ResponderEliminar
  24. amigos si alguien Usa hackeEarth aquí está la versión de puras input y output primero tengo las columnas y luego los renglones
    #include

    int main()
    {

    int tam1;
    int tam2;

    scanf("%d",&tam1);
    scanf("%d",&tam2);

    int matriz[tam1][tam2];


    for ( int i = 0; i < tam1; i++){
    for ( int j = 0; j < tam2; j++){
    scanf("%d",&matriz[i][j]);
    }
    }

    for ( int i = 0; i < tam1; i++){
    for ( int j = 0; j < tam2; j++){
    printf("%d",matriz[i][j]);

    }
    printf("\n");
    }
    for(int i = 0;i < tam2;i++){
    for( int j = 0;j < tam1;j++){
    printf("%d", matriz[j][i]);
    }
    printf("\n");
    }
    }

    ResponderEliminar