[ Foro de C# ]

Ejercicio 4.7.6

24-Feb-2020 19:53
Facundo Puerto
2 Respuestas

Tengo un problema en este ejercicio. Lo intenté de varias maneras pero básicamente consiste en que utilizando "array.sort()" con un array (el cual tiene una capacidad mas grande de los datos ingresados ya que si no lo limito me da un error) no ordena los datos ingresados, sino todos. Es decir que si ingreso 10 y 6 en vez de quedarme 6|10 (ordenado) queda 0|0 (ya que limite que solamente muestre la cantidad de datos ingresados).
Este es el código:


using System;
using System.Text;
class ConsoleApp46
{
    static void Main(string[] args)
    {
        int cont = 0, i;
        string[] numero = new string[10000];
        int[] numero2 = new int[10000];

        do
        {

            Console.Write("ingrese numero {0}: ", cont + 1);
            numero[cont] = Console.ReadLine();

            if (numero[cont] != "fin")
            {
                numero2[cont] = Convert.ToInt32(numero[cont]);

                Array.Sort(numero2);

                for (i = 0; i <= cont; i++)
                {
                    Console.Write("{0}|", numero2[i]);
                }

                Console.Write("\ningrese una tecla.. ");
                Console.ReadKey();

                cont += 1;
            }

            Console.Clear();

        } while (numero[cont] != "fin");

    }
}


Espero haberme explicado bien.


24-Feb-2020 20:24
Facundo Puerto

Hola. Quería informar que pensándolo y probando he encontrado una solución a este problema.
lo que hice (por si a alguien le sucede lo mismo y le interesa) es hacer que , en cada ciclo del while, se cambie el límite del array a la variable cont (que almacena la cantidad de veces que el usuario ha ingresado un dato) y se guarde los datos del array de string en el de enteros con un for.


Así quedo mi código.
using System;
using System.Text;
class ConsoleApp46
{
    static void Main(string[] args)
    {
        int cont = 0, i;
        string[] numero = new string[10000];
        int[] numero2=new int[10000];

        do
        {

            Console.Write("ingrese numero {0}: ", cont + 1);
            numero[cont] = Console.ReadLine();

            if (numero[cont] != "fin" && cont != 0)
            {
                for (i = 0; i <= cont; i++)
                {
                    if (i == 0)
                    {
                        numero2 = new int[cont+1];
                    }
                    numero2[i] = Convert.ToInt32(numero[i]);
                }

                Array.Sort(numero2);

                for (i = 0; i <= cont; i++)
                {
                    Console.Write("{0}|", numero2[i]);
                }

                Console.Write("\ningrese una tecla.. ");
                Console.ReadKey();

                
            }
            cont += 1;
            Console.Clear();

        } while (numero[cont-1] != "fin");

    }
}


Espero no tener segmentos redundantes.


25-Feb-2020 16:17
Nacho Cabanes (+62)

Pero ahí tienes dos arrays en vez de uno.

Si está sobredimensionado, por lo general no podrás usar Array.Sort en su formato básico, sino una variante sobrecargada a la que le indica también el punto de inicio y la cantidad de datos a ordenar:

https://docs.microsoft.com/es-es/dotnet/api/system.array.sort?view=netframework-4.8#System_Array_Sort_System_Array_System_Int32_System_Int32_

 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)