ordenamineto de matrices c++

Iniciado por parnner, 14 Mayo 2020, 02:28 AM

0 Miembros y 1 Visitante están viendo este tema.

parnner

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 (cpp) [Seleccionar]

#include <iostream>
using namespace std;
void ordenar (int[][3],int);
void llenar (int[][3],int);
void imprimir(int[][3],int);
main()
{
int fila;
int A [fila][3];
    llenar(A,fila);
return 0;
}
void llenar(int A [][3],int x)
{
cout<<"ingrese numero de filas"<<endl;
cin>>x;
for(int i=0;i<x;i++)
{
for(int j=0;j<3;j++)
{
cout<<"ingrese los elementos de la matriz"<<endl;
cin>>A[i][j];
}
}
cout<<"esta es la matriz desordenada"<<endl;
imprimir(A,x);
cout<<endl;
cout<<"este es la matriz ordenada"<<endl;
ordenar(A,x);
}
void imprimir(int A[][3],int x)
{
for(int i=0;i<x;i++)
{
for(int j=0;j<3;j++)
{
cout<<"["<< A[i][j]<<"]";
}
}
}
void ordenar(  int A [][3],int x)
{
for(int i=0;i<x;i++)
{
for(int j=0;j<3;j++)
{
for(int y=0;y<i;y++)
{
for(int z=0;z<3;z++)
{
if(A[i][j]< A[x][y])
{
int aux=A[i][j];
A[i][j]=A[x][y];
                   A[x][y]=aux;
}
}
}
}
}
imprimir(A,x);
}





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

K-YreX

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 (cpp) [Seleccionar]

for(int i = 0; i < FILAS * COLUMNAS; ++i){
  cout << "Fila: " << i / COLUMNAS << " - Columna: " << i % COLUMNAS << endl;
}


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++:

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 (cpp) [Seleccionar]

for(int i = 1; i < filas * columnas; ++i){...}
for(int i = 1; i <= filas * columnas - 1; ++i){...}
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;