Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: creiko en 15 Junio 2016, 10:01 am



Título: hacer matriz 5 *5 y ordenar los numero de la última fila de mayor a menor
Publicado por: creiko en 15 Junio 2016, 10:01 am
buenas lo que tengo que hacer es una matriz de 5*5
coger la ultima fila y ordenar sus numero de mayor a menor

ejemplo:

5 3 2 4 6
8 4 8 4 3
9 2 3 1 7
5 7 9 3 1
2 8 4 3 6

ordenada deberia quedar asi

5 3 2 4 6
8 4 8 4 3
9 2 3 1 7
5 7 9 3 1
8 6 4 3 2


hice lo mismo pero con columnas y me da perfecto
pero no lo puedo hacer con las filas

dejo lo que hice con las columna central de una matriz espero que alguien em de uan idea o me ayude gracias
Código
  1. #include "stdio.h"
  2. #include "conio.h"
  3. #include "string.h"
  4. #include "windows.h"
  5. #include "stdlib.h"
  6. #include "time.h"
  7. #include "iostream"
  8. #include "stdlib.h"
  9.  
  10. main ()
  11. {
  12. int i,j,ma[5][5];
  13. int temp;
  14. printf("\tEsta es la Matriz Original: \n");
  15. for(i=0;i<5;i++)
  16. {
  17. for(j=0;j<5;j++)
  18. {
  19. ma[i][j]=1+rand()%(9);
  20. }
  21. }
  22. for(i=0;i<5;i++)
  23. {
  24. for(j=0;j<5;j++)
  25. {
  26. printf("%d ",ma[i][j]);
  27. }
  28. printf("\n");
  29. }
  30. for(int i = 0; i < 5-1; i++)
  31. for(int j = 0; j < 5; j++)
  32.  
  33. if(ma[j][2] < ma[i+1][2])
  34.  
  35. {
  36. temp = ma[j][2];
  37. ma[j][2] = ma[i+1][2];
  38. ma[i+1][2] = temp;
  39. }
  40. printf("\n Matriz Organizada por la columna central: \n");
  41. for( int i = 0; i < 5; i++)
  42. {
  43. printf("\n");
  44. for(int j = 0; j < 5; j++)
  45. printf("% d",ma[i][j]);
  46. }
  47. }
  48.  
  49.  
  50.  



Título: Re: hacer matriz 5 *5 y ordenar los numero de la última fila de mayor a menor
Publicado por: class_OpenGL en 15 Junio 2016, 13:57 pm
¿Cuál es exactamente el problema? Da la impresión de que ni tu mismo entiendes el código xDD. Di el problema más concretamente que tienes :D


Título: Re: hacer matriz 5 *5 y ordenar los numero de la última fila de mayor a menor
Publicado por: AlbertoBSD en 15 Junio 2016, 14:07 pm
Tienes que seleccionar un algoritmo de ordenamiento.

Y de preferencia tratar solo a los ultimos 5 elementos como u  arreglo individual.

Te dejo uno de mis videos sobre matrices

U-zA-VvOllM

Si usas ese metodo puedes posteriormente solo apuntar a los 5 ultimos con:

Código
  1. int *ordenar = NULL;
  2. //...
  3. ordenar = &matriz[N*M- 5]

y ordenar solo un arreglo lineal de 5 numeros.

Saludos


Título: Re: hacer matriz 5 *5 y ordenar los numero de la última fila de mayor a menor
Publicado por: creiko en 15 Junio 2016, 16:13 pm
lo que pasa es que no me muestra bien los resultados

Matriz original

1 7 9 6 4
9 3 3 7 1
8 2 6 9 2
5 5 5 9 5
6 4 2 5 4

deberia quedar asi

1 7 9 6 4
9 3 3 7 1
8 2 6 9 2
5 5 5 9 5
6 5 4 4 2

pero me los muestra así
ahí el error
1 7 9 6 4
9 3 3 7 1
8 2 6 9 2
5 5 5 9 5
6 6 6 6 4


Código
  1. #include "windows.h"
  2. #include "stdlib.h"
  3. #include "time.h"
  4. #include "iostream"
  5. #include "stdlib.h"
  6.  
  7. main ()
  8. {
  9. int i,j,ma[5][5];
  10. int temp;
  11. srand (time(NULL));
  12.  
  13. printf("\tEsta es la Matriz Original: \n");
  14. for(i=0;i<5;i++)
  15. {
  16. for(j=0;j<5;j++)
  17. {
  18. ma[i][j]=1+rand()%(9);
  19. }
  20. }
  21. for(i=0;i<5;i++)
  22. {
  23. for(j=0;j<5;j++)
  24. {
  25. printf("%d ",ma[i][j]);
  26. }
  27. printf("\n");
  28. }
  29. for(int i = 0; i < 5-1; i++)
  30. for(int j = 0; j < 5; j++)
  31.  
  32. if(ma[4][j] < ma[4][i+1])
  33.  
  34. {
  35. temp = ma[4][i];
  36. ma[4][j] = ma[4][i+1];
  37. ma[4][i+1] = temp;
  38. }
  39. printf("\n Matriz Organizada por la ultima fila: \n");
  40. for(i=0;i<5;i++)
  41. {
  42. for(j=0;j<5;j++)
  43. {
  44. printf("%d ",ma[i][j]);
  45. }
  46. printf("\n");
  47. }
  48. }
  49.  
  50.  


Título: Re: hacer matriz 5 *5 y ordenar los numero de la última fila de mayor a menor
Publicado por: class_OpenGL en 15 Junio 2016, 16:55 pm
Prueba con el siguiente fragmento

Código
  1. for(i = 0; i < 5-1; i++) {
  2. for(j = i+1; j < 5; j++) { // Tendrías que empezar por i+1
  3. if(ma[4][i] < ma[4][j]) { // La comparación estaba mal
  4. temp = ma[4][i];      // En general, los cambios estaban mal
  5. ma[4][i] = ma[4][j];
  6. ma[4][j] = temp;
  7. }
  8. }
  9. }


Título: Re: hacer matriz 5 *5 y ordenar los numero de la última fila de mayor a menor
Publicado por: creiko en 15 Junio 2016, 22:33 pm
Después de tanto hacer ya lo pude solucionar me llevo un poco de tiempo
estaba mal en las condiciones como decias

Código
  1. #include "stdio.h"
  2. #include "conio.h"
  3. #include "string.h"
  4. #include "windows.h"
  5. #include "stdlib.h"
  6. #include "time.h"
  7. #include "iostream"
  8. #include "stdlib.h"
  9.  
  10. main ()
  11. {
  12. int i,j,ma[5][5];
  13. int temp;
  14. srand (time(NULL));
  15.  
  16. printf("\tEsta es la Matriz Original: \n");
  17. for(i=0;i<5;i++)
  18. {
  19. for(j=0;j<5;j++)
  20. {
  21. ma[i][j]=1+rand()%(9);
  22. }
  23. }
  24. for(i=0;i<5;i++)
  25. {
  26. for(j=0;j<5;j++)
  27. {
  28. printf("%d ",ma[i][j]);
  29. }
  30. printf("\n");
  31. }
  32. for(int i = 0; i < 5-1; i++)
  33. for(int j = 0; j < 5; j++)
  34.  
  35. if(ma[j][2] >  ma[i+1][2])
  36.  
  37. {
  38. temp = ma[j][2];
  39. ma[j][2] = ma[i+1][2];
  40. ma[i+1][2] = temp;
  41. }
  42. printf("\n Matriz Organizada por la columna central: \n");
  43. for( int i = 0; i < 5; i++)
  44. {
  45. printf("\n");
  46. for(int j = 0; j < 5; j++)
  47. printf("% d",ma[i][j]);
  48. }
  49. }
  50.