Foros del Web » Programación para mayores de 30 ;) » C/C++ »

cambiar orden de filas en una matriz

Estas en el tema de cambiar orden de filas en una matriz en el foro de C/C++ en Foros del Web. hola quisiera saber como hacer para que una matriz: 1 2 3 4 5 6 7 8 9 quede de la siguiente forma 7 8 ...
  #1 (permalink)  
Antiguo 08/08/2009, 01:23
 
Fecha de Ingreso: agosto-2009
Mensajes: 1
Antigüedad: 14 años, 8 meses
Puntos: 0
cambiar orden de filas en una matriz

hola quisiera saber como hacer para que una matriz:
1 2 3
4 5 6
7 8 9

quede de la siguiente forma

7 8 9
4 5 6
1 2 3
  #2 (permalink)  
Antiguo 08/08/2009, 20:29
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: cambiar orden de filas en una matriz

Disfrutalo:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int print_r(int *arr, int h, int w);
  4. int cambiar(int *arr, int h, int w, int row1, int row2);
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.     int array[3][3] = {10, 20, 30,
  9.                        40, 50, 60,
  10.                        70, 80, 90};
  11.     int alto = 3, ancho = 3;
  12.     print_r(array[0], alto, ancho);
  13.     cambiar(array[0], alto, ancho, 0, 1);
  14.     print_r(array[0], alto, ancho);
  15.     printf("\nPresione la tecla enter para continuar...");
  16.     getchar();
  17.     return 0;
  18. }
  19.  
  20. int print_r(int *arr, int h, int w){
  21.     printf("\n");
  22.     int i, j, t = h * w;
  23.     for(i = 0; i < h; i++){
  24.         for(j = 0; j < w; j++)
  25.         printf("[%d][%d] = %d  ", i + 1, j + 1, *(arr + i*h + j));
  26.             printf("\n");
  27.     }
  28.     return 0;
  29. }
  30.  
  31. int cambiar(int *arr, int h, int w, int row1, int row2){
  32.     int j, aux;
  33.     if (h < 2)
  34.         return 1;
  35.  
  36.     for(j = 0; j < w; j++){
  37.         aux = *(arr + h*row1 + j);
  38.         *(arr + h*row1 + j) = *(arr + h*row2 + j);
  39.         *(arr + h*row2 + j) = aux;
  40.     }
  41.  
  42.     return 0;
  43. }
  #3 (permalink)  
Antiguo 09/03/2016, 21:44
 
Fecha de Ingreso: marzo-2016
Mensajes: 2
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: cambiar orden de filas en una matriz

Hola, en mi caso lo que busco es desplazar los valores de las columnas, 1 posición hacía la izquierda, algo similar a esto:

1 2 3 4 --> 2 3 4 1
1 2 3 4 --> 2 3 4 1
1 2 3 4 --> 2 3 4 1
1 2 3 4 --> 2 3 4 1

Inicialmente requería un movimiento hacía la derecha, pero ahora es al lado contrario. No logró encontrar la manera de hacer el cambio. Agradezco su apoyo.

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. //desplaza filas a la columnas a la derecha//
  4. #define kFILAS 5
  5. #define kCOLS 4
  6. typedef int TMatriz[kFILAS][kCOLS];
  7.  
  8. void leerMatriz(TMatriz matriz)
  9. {
  10. int i, j;
  11. for(i=0; i< kFILAS; i++)
  12. for(j=0; j< kCOLS; j++)
  13. {
  14. printf("Introduzca el elemento (%d, %d):", i, j);
  15. scanf("%d", &matriz[i][j]);
  16. }
  17. }
  18. void correrMatriz(TMatriz matriz)
  19. {
  20. int i;
  21. int j;
  22. int temp;
  23.  
  24. /* procesamos cada una de las filas */
  25. for (i = 0; i < kFILAS; i++){
  26. /* resguardo del valor de la ultima columna */
  27. temp = matriz[i][kCOLS - 1];
  28.  
  29. /* los elementos restantes los desplazamos */
  30. for (j = kCOLS - 1; j > 0; j--)
  31. matriz[i][j] = matriz[i][j - 1];
  32.  
  33. /* actualizamos el primer elemento */
  34. matriz[i][j] = temp;
  35. }
  36. }
  37.  
  38. void escribirMatriz(TMatriz matriz)
  39. {
  40. int i, j;
  41. for(i=0; i< kFILAS; i++)
  42. {
  43. for(j=0; j< kCOLS; j++)
  44. printf("%d ", matriz[i][j]);
  45. printf("\n");
  46. }
  47. }
  48. int main()
  49. {
  50. TMatriz matriz;
  51. leerMatriz(matriz);
  52. printf("Matriz original:\n");
  53. escribirMatriz(matriz);
  54. correrMatriz(matriz);
  55. printf("Matriz desplazada: \n");
  56. escribirMatriz(matriz);
  57. system("pause");
  58. return(0);
  59. }

Última edición por adriandeltoro; 10/03/2016 a las 00:27 Razón: Cambió de código
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:32.