elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ordenamineto de matrices c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ordenamineto de matrices c++  (Leído 2,201 veces)
parnner

Desconectado Desconectado

Mensajes: 1


Ver Perfil
ordenamineto de matrices c++
« en: 14 Mayo 2020, 02:28 am »

buenas noches tengo un problema con un programa de ordenar una matriz pero no ordena este es ek codigo gracias por su colaboracion

Código
  1. #include <iostream>
  2. using namespace std;
  3. void ordenar (int[][3],int);
  4. void llenar (int[][3],int);
  5. void imprimir(int[][3],int);
  6. main()
  7. {
  8. int fila;
  9. int A [fila][3];
  10.     llenar(A,fila);
  11. return 0;
  12. }
  13. void llenar(int A [][3],int x)
  14. {
  15. cout<<"ingrese numero de filas"<<endl;
  16. cin>>x;
  17. for(int i=0;i<x;i++)
  18. {
  19. for(int j=0;j<3;j++)
  20. {
  21. cout<<"ingrese los elementos de la matriz"<<endl;
  22. cin>>A[i][j];
  23. }
  24. }
  25. cout<<"esta es la matriz desordenada"<<endl;
  26. imprimir(A,x);
  27. cout<<endl;
  28. cout<<"este es la matriz ordenada"<<endl;
  29. ordenar(A,x);
  30. }
  31. void imprimir(int A[][3],int x)
  32. {
  33. for(int i=0;i<x;i++)
  34. {
  35. for(int j=0;j<3;j++)
  36. {
  37. cout<<"["<< A[i][j]<<"]";
  38. }
  39. }
  40. }
  41. void ordenar(  int A [][3],int x)
  42. {
  43. for(int i=0;i<x;i++)
  44. {
  45. for(int j=0;j<3;j++)
  46. {
  47. for(int y=0;y<i;y++)
  48. {
  49. for(int z=0;z<3;z++)
  50. {
  51. if(A[i][j]< A[x][y])
  52. {
  53. int aux=A[i][j];
  54. A[i][j]=A[x][y];
  55.                    A[x][y]=aux;
  56. }
  57. }
  58. }
  59. }
  60. }
  61. imprimir(A,x);
  62. }
  63.  



MOD: Utiliza etiquetas de Código GeSHi para el código.


« Última modificación: 14 Mayo 2020, 04:44 am por YreX-DwX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ordenamineto de matrices c++
« Respuesta #1 en: 14 Mayo 2020, 05:27 am »

Problema 1: la variable <fila> no está inicializada. Tienes que darle un valor. No puedes crear la matriz primero en la línea 9 y pedir el número de filas que tendrá en la función que llamas después (línea 10).
Además es recomendable que utilices constantes o variables para guardar los datos, por ejemplo, el 3. Así si quieres cambiar dicho valor solo tendrás que cambiarlo en el lugar en el que declaras la variable/constante y no a lo largo de todo el programa. Digamos que es una buena práctica.

Consejo: Si la función es llenar(), que se encargue únicamente de rellenar la matriz. No tiene sentido que metas todo el programa dentro de dicha función. Separando el programa correctamente en funciones te será más fácil encontrar posibles errores en el futuro o poder hacer modificaciones en tu código.

Problema 2: El método para ordenar la matriz.
Lo mejor es tratar la matriz como un array unidimensional. Puedes utilizar un único índice que recorra todos los elementos.
Código
  1. for(int i = 0; i < FILAS * COLUMNAS; ++i){
  2.  cout << "Fila: " << i / COLUMNAS << " - Columna: " << i % COLUMNAS << endl;
  3. }

Utilizando esto puedes implementar el algoritmo burbuja como si de un array unidimensional se tratara. Te dejo el pseudocódigo para que lo conviertas a C++:
Código:
PARA i := 1 HASTA filas * columnas - 1 INCREMENTO 1 HACER
  PARA j := 0 HASTA filas * columnas - 2 INCREMENTO 1 HACER
    SI M[j / columnas][j % columnas] > M[(j+1) / columnas][(j+1) % columnas] ENTONCES
      swap(M[j / columnas][j % columnas], M[(j+1) / columnas][(j+1) % columnas])
    FIN SI
  FIN PARA
FIN PARA

Prueba a implementar el algoritmo en C++. Seguro que funciona.

PD: Al poner en el pseudocódigo (filas * columnas - 1) se incluye dicho valor. En C++ sería equivalente poner cualquiera de las dos siguientes expresiones:
Código
  1. for(int i = 1; i < filas * columnas; ++i){...}
  2. for(int i = 1; i <= filas * columnas - 1; ++i){...}


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
matrices en C#
Programación General
volterra 4 10,196 Último mensaje 18 Mayo 2010, 06:26 am
por Og.
matrices
Programación C/C++
aral90 2 2,259 Último mensaje 9 Diciembre 2011, 20:13 pm
por aral90
matrices
.NET (C#, VB.NET, ASP)
legomanticore 4 3,580 Último mensaje 14 Mayo 2012, 03:02 am
por $Edu$
matrices en c
Programación C/C++
ALONSOQ 9 4,792 Último mensaje 27 Junio 2012, 05:15 am
por twins
matrices
Programación C/C++
lorderick 3 3,079 Último mensaje 8 Septiembre 2012, 05:12 am
por CSQCasimiro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines