none
Problemas con Programación Orientada a Objetos RRS feed

  • Pregunta

  • Hola.

    Tengo un problema y no encuentro la forma de como resolverlo.

    El problema que se me presenta es realizar una aplicación que contenga una clase y que ésta ordene datos en forma ascendente y descendente, el detalle es que puedo ordenar datos de forma ascendente y descendente, pero no lo puedo resolver con clases.

    Se que para realizar la ordenación de datos puedo utilizar lo siguiente:

    #include "stdafx.h"
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
    	int Tamaño;
    
    	Console::ForegroundColor = ConsoleColor::White;
    
    	Console::Write("¿Cuantos Valores?: ");
    
    	Tamaño = Convert::ToInt32(Console::ReadLine());
    
    	array <int>^ Vector = gcnew array <int> (Tamaño);
    	
    	Array::Resize(Vector, Tamaño);
    
    	for (int i = 0; i <= Vector->GetUpperBound(0); i++)
    	{
    		Console::Write("Número {0}: ", i + 1);
    
    		Vector[i] = Convert::ToInt32(Console::ReadLine());
    	}
    
    	int Aux;
    
    	for (int k = 1; k <= Vector->Length - 1; k++)
    	{
    		for (int i = 0; i <= Vector->GetUpperBound(0) - k; i++)
    		{
    			if (Vector[i] < Vector[i + 1])
    			{
    				Aux = Vector[i];
    
    				Vector[i] = Vector[i + 1];
    
    				Vector[i + 1] = Aux;
    			}
    
    		}
    	}
    
    	Console::Write("\nLos Números Ordenados son:\n");
    
    	for (int i = 0; i <= Vector->GetUpperBound(0); i++)
    	{
    		Console::WriteLine(Vector[i]);
    	}
        Console::ReadKey(true);
    
        return 0;
    }

    Hasta el momento no encuentro la manera de como resolver el programa, he querido hacerlo por mi cuenta pero me ha sido imposible.


    Estudiante de Sistemas Informáticos.

    viernes, 16 de marzo de 2012 2:08

Respuestas

Todas las respuestas

  • 
    

    borrado


    • Marcado como respuesta P. Mata miércoles, 21 de marzo de 2012 14:52
    • Editado JulioCésar miércoles, 13 de febrero de 2013 12:09
    viernes, 16 de marzo de 2012 13:48
  • El código de Julio es bueno en realidad y lo que hace es utilizar la clase std::vector<> de STL de C++ no manejado en conjunto con la función, también de STL, std::sort().  Excelente.

    Yo simplemente le dejo como inquietud que si lo quiere hacer con clases de .Net entonces lo que necesita es crear una clase que implemente IComparer<int>.  Encontrará bastante información en el foro y otras partes de cómo implementar dicha clase.  Luego cambie de un array a un List<int> ya que ésta tiene el método Sort() que recibe como argumento una instancia de la clase comparadora, que sería la que implementa IComparer<int>.

    Eso sí, los datos intrínsecos de .net como int no necesitan comparadores adicionales a menos que usted quiera un ordenamiento especial.  Un simple ordenamiento de los números dentro de un List<int> puede hacerse con la llamada a Sort() que no requiere de ningún argumento, pues int (o su clase Int32) implementa la interfase IComparable<int> que sirve de igual manera.

    Así que en resumidas cuentas:  Ordenar ascendente para un List<int> no ocupa nada más.  Creo que para ordenar descendente sí ocuparía un comparador.  Pero si List<int> tiene un método Reverse(), entonces puede ordenar con Sort() y luego usar Reverse() para obtener el orden descendente.


    Jose R. MCP

    viernes, 16 de marzo de 2012 14:21
    Moderador
  • Hola.

    He probado tu código y funciona de maravilla. Pero me inquieta el código, porque vengo de programar en Visual Basic  y en C++ sólo  se programar lo básico (No se nada sobre los Punteros y ese tipo de cosas). Y hay líneas en tu código que no las entiendo aún.

    Yo lo que hago para programar con clases, es que las agrego manualmente.

    Y luego en la Clase ya agregada, empiezo a trabajar el código:

    #pragma once
    ref class Metodo_Burbuja
    {
    public:
    	Metodo_Burbuja(void);
    
    
    };

    ¿Sería lo mismo, trabajar como lo has hecho tú, pero en esa clase o habría diferencias?.

    Gracias por el código.


    Estudiante de Sistemas Informáticos.

    domingo, 18 de marzo de 2012 0:27
  • Hola.

    Me empezaré a informar sobre lo que has comentado, ya que es nuevo para mí.


    Estudiante de Sistemas Informáticos.

    domingo, 18 de marzo de 2012 0:30