Autor Tema: C++ Ordenar matrices numéricas pedir filas y columnas y datos cout endl cin for  (Leído 21079 veces)

bucanero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
  • i am deadpool
    • Ver Perfil
buenas soy nuevo por aquí, alguien me puede ayudar con un ejercicio donde debo almacenar en una matriz NxM, y ordenarlo de menor a mayor. Lo tengo casi listo, el problema es que cuando lo ordena me modifica también la dimensión de la matriz es decir si se introduce NxM quedara en pantalla ordenado MxN.

Tambien tengo otra duda, que tal si deseo que la matriz quede ordenada de menor a mayor pero que sea en forma de serpiente, me explico,
1      6 -> 7
2      5      7
3 -> 4      8
claro sea de las dimensiones que sea ejemplo: 3x4, 5x2, 2x2. pero que cuando quede ordenado no cambie o varíe o invierta las dimensiones.

Hasta los momentos tengo esto:

Código: [Seleccionar]
#include <iostream>
 
using namespace std;
 
int main(void)
{
     int f,c,aux=0;
     int matriz[100][100];
     
     //lleno la matriz
     cout<<"\nIntroducir Tamaño De La Fila:    ";
     cin>>f;
     cout<<"\nIntroducir Tamaño De La Columna: ";
     cin>>c;
     cout<<endl;
     
    for(int i=0; i<f; i++)
    {
        for(int j=0; j<c; j++)
        {
             cout<<"Introducir Datos: ";
             cin>>matriz[i][j];
        }
    }
   
    //imprimo la matriz como se llena
    cout<<"\nLos Datos De La Matriz Fueron Introducidos Asi:"<<endl;
    for(int i=0; i<f; i++)
    {
        for(int j=0; j<c; j++)
        {
            cout<<matriz[i][j]<<" ";
        }
        cout<<endl;
    }
 
     //ordeno la matriz de menor a mayor
     for(int i=0; i<f; i++)
     {
        for(int j=0; j<c; j++)
        {
            for(int x=0; x<f;x++)
            {
                for(int y=0; y<c; y++)
                {
                    if(matriz[i][j]<matriz[x][y])
                    {
                        aux=matriz[i][j];
                        matriz[i][j]=matriz[x][y];
                        matriz[x][y]=aux;
                    }
 
                }
            }
         }
    }
 
    //imprimo la matriz ordenada de menor a mayor (pero me invierte las dimensiones)
    cout<<"\nLos Datos De La Matriz Fueron Ordenados de Menor a Mayor:"<<endl;
    for(int i=0; i<c; i++)
    {
        for(int j=0; j<f; j++)
        {
            cout<<matriz[j][i]<<" ";
        }
        cout<<endl;
    }
   
    cout<<endl;
    system("pause");

}


Gracias y espero su ayuda
« Última modificación: 15 de Marzo 2016, 16:51 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola bucanero antes de poder responder necesitaría saber con ejemplos qué es lo que se quiere hacer.

Por ejemplo supongamos la matriz:

(8     3     11)
(4     1      7)
(22    9     5)

Podemos ordenar por filas y el resultado sería:

(3      8    11)
(1      4     7)
(5    9    22 )

O podemos ordenar por columnas y el resultado sería:

(4     1     5)
(8      3     7)
(22    9    11)

O podemos hacer un orden absoluto de izquierda a derecha y de arriba a abajo y el resultado sería:

(1     3     4)
(5      7     8 )
(9     11    22)

¿Qué tipo de ordenación quieres realizar? ¿Puedes poner ejemplos?

Saludos

bucanero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
  • i am deadpool
    • Ver Perfil
Buenas Alex,  la matriz tiene que iniciar en el último puesto y ascender en forma de serpiente por ejemplo tengo la matriz
8    3  11
4    1    7
22  9    5

Y debe quedar así

22       5  《  4
11       7        3 
9  《   8         1 > último puesto y sube

La matriz debe ser nxm es decir 2x5 ó 4 x3 ... no importa la dimensión siempre debe iniciar en el ultimo puesto. Si me entiendes? Si añado otra columna y los números 45, 50, 60 esta debería que dar así

45  《    22       5  《  4
50          11       7        3 
60           9  《   8         1 > último puesto y sube     

« Última modificación: 16 de Marzo 2016, 14:23 por bucanero »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, pues quizás es torpeza mía, a ver si lo entiendo. Partimos de

8    3  11
4    1    7
22  9    5

Ordeno los números de mayor a menor y resulta: 22, 11, 9, 8, 7, 5, 4, 3, 1

Ahora empiezo a colocar y  pongo los números en la primera columna

22
11
9

Sigo en la siguiente columna pero con el orden al revés

22 5
11 7
9  8

Y ahora sigo en la siguiente columna y otra vez al revés (esto sería "como una serpiente"):

22   5    4
11   7    3
9    8    1

El número más grande lo tengo arriba a la izquierda.

Pero cuando añades 45, 50 y 60 no está el número más grande arriba a la izquierda ¿Por qué?


bucanero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
  • i am deadpool
    • Ver Perfil
He allí la cuestión no es sea de mayor a menor, es que inicia en el u timo puesto abajo y allí sigue como una serpiente hasta donde cuantas columnas sean por eso se dificulta cuando sea de nxm si agregó la columna que dijiste, el 60 quedaría abajo pero si agregó otra nueva columna el numero mayor estaría arriba

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola

Tal y como yo lo entiendo si partimos de

40   8    3  11
10   4    1    7
60   22  9    5


Ponemos el 60 en primera posición y vamos rellenando hacia abajo:

60  9   8   1
40  10  7   3
22  11  5   4


No entiendo qué significa "inicial en el último puesto abajo"

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".