• Jueves 14 de Noviembre de 2024, 23:16

Autor Tema:  Traspuesta de una matriz  (Leído 15023 veces)

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Traspuesta de una matriz
« en: Domingo 27 de Diciembre de 2009, 17:35 »
0
Hola a todos. Ya se que éste es un tema tratado con anterioridad en el foro, pero he mirado todos los post anteriores y no me entero de nada. Supongo que debe ser porque aún no sé utilizar correctamente funciones y procedimientos (se supone que debo hacer el ejercicio sin usarlos). El tema es que mi código no hace nada, creo que el problema está en la declaración del array que guarda la matriz.

El ejercicio dice así: Escribir un algoritmo que lea por teclado una matriz cuadrada de tamano 'n' y muestre por pantalla su traspuesta.

Mi código es el siguiente:

Código: C
  1.  
  2.  

#include <stdio.h>
#include <stdlib.h>

/*Algoritmo -> Traspuesta de una matriz*/
int main (void){
   //DECLARACION DE VARIABLES
   int m;               //el tamaño de la matriz   
   int matriz[m][m];      //la matriz cuadrada
   int fila, columna;      //contadores de la lectura de la matriz origen
   int i, j;            //contadores de la traspuesta
   int aux;            //intermedia de la traspuesta
   int a, b;            //contadores del resultado
   /*Leer variables*/
   printf("Inserte tamaño de la matriz cuadrada: ");
   scanf("%i", &matriz[m][m]);
   
   //OPERACIONES
   /*Escribir la matriz origen*/
   for(fila=0; fila<=m-1; fila++){
      for(columna=0; columna<=m-1; columna++){
         printf("Escriba valor en la posicion (%i,%i): ", fila, columna);
         scanf("%i", &matriz[fila][columna]);
      }
   }
   /*Traspuesta de la matriz origen (guardada en el mismo array)*/
   for(i=0; i<=m-1; i++){
      for(j=0; j<=m-1; j++){
         aux = matriz[j];
         matriz[j] = matriz[j];
         matriz[j] = aux;
      }
   }
   
   //RESULTADOS
   /*Mostrar la traspuesta*/
   for(a=0; a<=m-1; a++){
      for(b=0; b<=m-1; b++){
         printf("%2i", matriz[a]);
      }
      printf("n");
   }
   
   return 1;   
}
Código: C
  1.  
  2.  



Aver si me orientais un poco. Gracias a todos!

Un saludo desde Granada!

locazopro

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Traspuesta de una matriz
« Respuesta #1 en: Lunes 28 de Diciembre de 2009, 05:15 »
0
tienes un error en la declaración de tu matriz, no puedes hacer esto:

Código: C
  1.  
  2. int m; //el tamaño de la matriz
  3. int matriz[m][m]; //la matriz cuadrada
  4.  
  5.  

en C, tienes que declarar el tamaño de la matriz que necesitas explícitamente, por ejemplo: int matriz[10][10].
Si quieres hacerlo de forma dinámica entonces estas obligado a utilizar punteros y alguna función tipo malloc para realizar la tarea.

Espero te sirva.

Saludos!

undertakos

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
    • http://www.bespel.com
Re: Traspuesta de una matriz
« Respuesta #2 en: Lunes 28 de Diciembre de 2009, 06:12 »
0
investiga la funcion malloc como te lo comente en el otro post masomenos seria algo asi
Citar
/* malloc example: string generator*/
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i,n;
  char * buffer;

  printf ("How long do you want the string? ");
  scanf ("%d", &i);

  buffer = (char*) malloc (i+1);
  if (buffer==NULL) exit (1);

  for (n=0; n<i; n++)
    buffer[n]=rand()%26+'a';
  buffer='';

  printf ("Random string: %sn",buffer);
  free (buffer);

  return 0;
}

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Traspuesta de una matriz
« Respuesta #3 en: Domingo 3 de Enero de 2010, 10:35 »
0
Buenos días. Lamento decir que sigo sin saber como se utiliza la función malloc, como tantas otras... pero...
... ya tengo un código que me funciona. Es algo simple pero hace lo que tiene que hacer.

Os lo envío y mil gracias por todo. La verdad es que vuestras ayudas estimulan un montón...

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

Un saludo!