none
No quiero mostrar múltiplos de 5 RRS feed

  • Pregunta

  • La finalidad es realizar un botón que me genere 1000 valores random en un txt y me los ordene en un listview de menor a mayor. Eso ya lo logre pero no quiero me tome los múltiplos de 5 al 100.

    0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

    No se si sea algo así:

    int mul = 0;

    for (mul = 0; mul < 100; mul++)
                    if (mul % 5 == 0)

    private void btnRanF_Click(object sender, EventArgs e)
            {
                Random r = new Random();
                datos = new int[1000];

                for (int i = 0; i < datos.Length; i++)
                    datos[i] = r.Next(100);


                using (StreamWriter writer = new StreamWriter("C:\\Practica3\\valores.txt", false))
                {
                    for (int i = 0; i < datos.Length; i++)
                    {
                        writer.WriteLine(datos[i].ToString());
                    }
                }

                int can = datos.Count(); // Cantidad de locaciones
                this.lstIntercambios.Items.Clear();

                for (int i = 0, k = 0; i < can - 1; i++)
                {
                    k = i;
                    for (int j = i + 1; j < can; j++)
                    {
                        if (datos[k] > datos[j])
                        {
                            k = j;
                            this.lstIntercambios.Items.Add(datos[k] + "con" + datos[i]);
                        }
                    }
                    int tem = datos[i];
                    datos[i] = datos[k];
                    datos[k] = tem;
                }
                LlenarListBox();
            }

    Alguna ayuda?
    Gracias por su tiempo...

    martes, 1 de noviembre de 2016 23:19

Respuestas

  • Hola ProgramadorAECF,

    Puedes crear una lista de tipo int para almacenar los valores y luego lo ordenas usando OrderBy(..).

    Algo como :

        Random rand = new Random();
        List<int> numeros = new List<int>();
    
        while (numeros.Count < 1000)
        {
            int num = rand.Next(1, 1021);
    
            //Si es múltiplo de 5 y es menor o igual a 100 no lo tomo
            if (num % 5 == 0 && num <= 100)
                continue;
    
            //Si el número no existe en mis lista lo agrego
            if (!numeros.Contains(num))
                numeros.Add(num);
        }

    Y teniendo la lista cargada, para ordernarlo.

     foreach(var n in numeros.OrderBy(x => x))
     {
        this.listView1.Items.Add(n.ToString());
     }
    
      MessageBox.Show(String.Format("Hay {0} números aleatorios",numeros.Count));

    Entendiendo la lógica podrás acoplarlo a tu código.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:17
    miércoles, 2 de noviembre de 2016 0:00
  • Deleted
    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:16
    miércoles, 2 de noviembre de 2016 0:02
  • Deleted
    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:41
    miércoles, 2 de noviembre de 2016 0:23
  • Solo tengo una duda, como haría para ordenar de menor a mayor mi archivo de texto
    tendría que usar un order by?

    Hola ProgramadorAECF,

    Aunque puedes usar Sort como ya te mencionaron, puedes usar el OrderBy(..).

     string[] lineas = File.ReadAllLines("MiRutaArchivo.txt");
    
     foreach (var ln in lineas.OrderBy(x => Convert.ToInt32(x)))
     {
         this.listView1.Items.Add(ln);
     }


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:41
    miércoles, 2 de noviembre de 2016 0:31
  • Hola ProgramadorAECF,

    Tu archivo de texto almacena los números aleatorios y ahora quieres ordenarlos ? En caso sea correcto podrías implementar :

    try
    {
        string ruta = @"C:\Practica3\valores.txt";
    
        //Obtiene el contenido del archivo de texto
        string[] lineas = File.ReadAllLines(ruta);
    
        //Sobreescribe el archivo con los datos ordenados
        File.WriteAllLines(ruta, lineas.OrderBy(x => Convert.ToInt32(x)));
    
        MessageBox.Show("Ordenado!!");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    Si te das cuenta puedes 'escribir' un archivo usando el File, el cual puedes enviarle un arreglo de datos evitando tener que hacer un recorrido mediante un for.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 1:33
    miércoles, 2 de noviembre de 2016 0:58

Todas las respuestas

  • Hola ProgramadorAECF,

    Puedes crear una lista de tipo int para almacenar los valores y luego lo ordenas usando OrderBy(..).

    Algo como :

        Random rand = new Random();
        List<int> numeros = new List<int>();
    
        while (numeros.Count < 1000)
        {
            int num = rand.Next(1, 1021);
    
            //Si es múltiplo de 5 y es menor o igual a 100 no lo tomo
            if (num % 5 == 0 && num <= 100)
                continue;
    
            //Si el número no existe en mis lista lo agrego
            if (!numeros.Contains(num))
                numeros.Add(num);
        }

    Y teniendo la lista cargada, para ordernarlo.

     foreach(var n in numeros.OrderBy(x => x))
     {
        this.listView1.Items.Add(n.ToString());
     }
    
      MessageBox.Show(String.Format("Hay {0} números aleatorios",numeros.Count));

    Entendiendo la lógica podrás acoplarlo a tu código.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:17
    miércoles, 2 de noviembre de 2016 0:00
  • Deleted
    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:16
    miércoles, 2 de noviembre de 2016 0:02
  • Muchas gracias, eso era lo que buscaba.
    miércoles, 2 de noviembre de 2016 0:17
  • Solo tengo una duda, como haría para ordenar de menor a mayor mi archivo de texto
    tendría que usar un order by?
    miércoles, 2 de noviembre de 2016 0:19
  • Deleted
    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:41
    miércoles, 2 de noviembre de 2016 0:23
  • Solo tengo una duda, como haría para ordenar de menor a mayor mi archivo de texto
    tendría que usar un order by?

    Hola ProgramadorAECF,

    Aunque puedes usar Sort como ya te mencionaron, puedes usar el OrderBy(..).

     string[] lineas = File.ReadAllLines("MiRutaArchivo.txt");
    
     foreach (var ln in lineas.OrderBy(x => Convert.ToInt32(x)))
     {
         this.listView1.Items.Add(ln);
     }


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 0:41
    miércoles, 2 de noviembre de 2016 0:31
  • Me ordena el listview, pero sigue sin ordenarme el archivo de texto que tengo en mi carpeta Practica3
    lo estoy usando mal? 
    tambien intente usar el order by, pero tampoco me ordena el archivo, solo en el listview

      Así estoy usando el sort

     using (StreamWriter writer = new StreamWriter("C:\\Practica3\\valores.txt", false))
                {
                    for (int i = 0; i < datos.Length; i++)
                    {
                        writer.WriteLine(datos[i].ToString());

                    }
                    Array.Sort(datos);
                    Array.Sort(datos, (a, b) => a.CompareTo(b));
                    Array.Sort(datos, (a, b) => b.CompareTo(a));
                }

    asi estoy usando el order by, sustitui el arreglo lineas y lo cambie por datos, que es el que tengo 

                        

    using (StreamWriter writer = new StreamWriter("C:\\Practica3\\valores.txt", false))
                {
                    for (int i = 0; i < datos.Length; i++)
                    {
                        writer.WriteLine(datos[i].ToString());

                    }
                    foreach (var ln in datos.OrderBy(x => Convert.ToInt32(x)))
                    {
                        this.lstSeleccion.Items.Add(ln);
                    }
                }

    enserio gracias por su tiempo.

    miércoles, 2 de noviembre de 2016 0:41
  • Hola ProgramadorAECF,

    Tu archivo de texto almacena los números aleatorios y ahora quieres ordenarlos ? En caso sea correcto podrías implementar :

    try
    {
        string ruta = @"C:\Practica3\valores.txt";
    
        //Obtiene el contenido del archivo de texto
        string[] lineas = File.ReadAllLines(ruta);
    
        //Sobreescribe el archivo con los datos ordenados
        File.WriteAllLines(ruta, lineas.OrderBy(x => Convert.ToInt32(x)));
    
        MessageBox.Show("Ordenado!!");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    Si te das cuenta puedes 'escribir' un archivo usando el File, el cual puedes enviarle un arreglo de datos evitando tener que hacer un recorrido mediante un for.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta ProgramadorAECF miércoles, 2 de noviembre de 2016 1:33
    miércoles, 2 de noviembre de 2016 0:58
  • Muchas gracias

    miércoles, 2 de noviembre de 2016 1:33
  • Deleted
    miércoles, 2 de noviembre de 2016 2:07