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í.

19 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. Gracias por segunda ocasion no encontraba la forma de hacerlo gracias

    ResponderEliminar
  4. 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
  5. 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
  6. como pones una imagen de fondo cuando ejecutas el .c ?

    ResponderEliminar
  7. 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
  8. 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
  9. me has salvado la vida mujer! :D gracias muchas xD

    ResponderEliminar
  10. 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
  11. Este comentario ha sido eliminado por el autor.

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

    ResponderEliminar