Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Sixtoex en 27 de Octubre 2014, 16:10

Título: Duda Como generar numeros aleatorios en c# random y rnd
Publicado por: Sixtoex en 27 de Octubre 2014, 16:10
Bueno resulta que es super extraño, quiero decir que no esta terminado 100% el código pero debe de mostrar unos ciertos valores correctamente.

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ejercicioMetodos
{
    class Program
    {
        static void Main(string[] args)
        {
 
            numeroIngresar();
            Console.ReadKey();
           
             
        }
 
        static void numeroIngresar()
        {
            int cont = 0;
            int e = 0;
            Console.WriteLine("Cuantos numeros quieres ingresar: ");
            int numerosIngresar = int.Parse(Console.ReadLine());
            int[] numeroArray = new int[numerosIngresar];
            for (int i = 0; i < numerosIngresar; i++)
            {
 
                Random rnd1 = new Random();
                numeroArray[i] =rnd1.Next(5000) ;
 
            }
                while (e < numerosIngresar)
                {
                   if(e+1 >= numerosIngresar)
                   {
                       break;
                   }
                   if(numeroArray[e]<numeroArray[e+1])
                   {
                       int auxiliar = numeroArray[e];
                       numeroArray[e] = numeroArray[e + 1];
                       numeroArray[e + 1] = auxiliar;
                   }
                   cont++;
                    if(cont == numerosIngresar)
                    {
                        break;
                    }
                    e++;
                }
            for(int j= 0 ; j < numerosIngresar;j++)
            {
            Console.WriteLine(numeroArray[j]);
            }
        }
         
    }
}

Explico lo que pasa, resulta que en estas líneas inicializo una NUEVA instancia del objeto Random:


Código: [Seleccionar]
for (int i = 0; i < numerosIngresar; i++)
            {
 
                Random rnd1 = new Random();
                numeroArray[i] =rnd1.Next(5000) ;
 
            }


Aparentemente no existe un fallo de sintaxis... pero claro cuando inicio la consola y le digo que genere 3 numeros ALEATORIOS pues sale 3 numeros igualitos..

Entonces estaba analizando el código y todo esta correctamente, entonces cogí y ejecute el DEPURADOR, y bueno la sorpresa es que cuando lo hago con el depurador, resulta que SI SALEN NUMEROS ALEATORIOS...

Entonces busco la ayuda de una mente experta en programación y que me diga por que pasa eso, me estoy volviendo loco  :bye:
Título: Re:Duda Como generar numeros aleatorios en c#
Publicado por: Mastermind en 27 de Octubre 2014, 17:19
Hola, la "aletoriedad" cuando se generan números en un computador no es tan simple como parece porque la ejecución de las máquinas es determinista, es decir, en teoría siempre te debe llevar a un mismo resultado.

El problema puede estar relacionado con que estás creando una instancia de Random en cada repetición del bucle for, con lo cual no permites que una semilla genere aleatoriedad, sino que en cada pasada vuelves a crear la semilla y por eso te vuelve a repetir los números. Prueba a sacar esa parte del código del bucle, o sea:

Código: [Seleccionar]
Random rnd1 = new Random();

for (int i = 0; i < numerosIngresar; i++)
            {
 
               
                numeroArray[i] =rnd1.Next(5000) ;
 
            }

A ver si te funciona!!
Título: Re:Duda Como generar numeros aleatorios en c# random y rnd
Publicado por: Sixtoex en 28 de Octubre 2014, 11:05
Ya terminé mi código, tengo 2 cosas que preguntar

1. ¿notáis que estoy mejorando?
2.  la otra duda que tengo, es que si puedo hacer esto mas CORTO,  es decir  podría usar 2 metodos y no 1? o por ejemplo algun tipo de consejo para hacerlo mas corto(si es que existe)

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ejercicioMetodos
{
    class Program
    {
        static void Main(string[] args)
        {
 
            numeroIngresar();
            Console.ReadKey();
 
 
        }
 
        static void numeroIngresar()
        {
            int cont = 0;
            int e = 0;
 
            Console.WriteLine("Cuantos numeros quieres ingresar: ");
            int numerosIngresar = int.Parse(Console.ReadLine());
            int[] numeroArray = new int[numerosIngresar];
            Random rnd1 = new Random();
            int ordenar = numerosIngresar;
            for (int i = 0; i < numerosIngresar; i++)
            {
                numeroArray[i] = rnd1.Next(5000);
 
            }
            for (int i = 0; i < numerosIngresar; i++)
            {
                if (i == numerosIngresar - 1)
                {
                    int contabilizar = i;
                    int x = 0;
                    double max = 9999999999999999999;
 
                    for (int j = contabilizar; j > 0; j--)
                    {
 
 
 
                        while (true )
                        {
                            if (j == 0)
                            {
                                j = i;
 
                            }
                            if (numeroArray[j] > numeroArray[j - 1])
                            {
                                int auxiliar = numeroArray[j];
                                numeroArray[j] = numeroArray[j - 1];
                                numeroArray[j - 1] = auxiliar;
                            }
 
 
                             x = x + 1;
                           
                            if (x == 1000090)
                            {
                                break;
                            }
 
                            j--;
 
                        }
 
 
 
 
                        break;
 
 
 
                    }
 
 
                }
 
 
            }
 
            for (int j = 0; j < numerosIngresar; j++)
            {
                Console.WriteLine(numeroArray[j]);
            }
        }
 
 
 
    }
}
Título: Re:Duda Como generar numeros aleatorios en c# random y rnd
Publicado por: Mastermind en 28 de Octubre 2014, 11:43
Hola, sí se nota que estás mejorando, pero de lo que no estoy seguro es de si estás aprendiendo con buenos materiales. ¿Estás siguiendo un libro o una página web, o es una asignatura...?

El código no se ve excesivamente largo, no tienes que obsesionarte por hacerlo todo muy corto (aunque tampoco debes hacerlo más largo de lo necesario).

Has escrito while (true), esto en general no es una sentencia adecuada excepto en casos muy concretos. Puedes leer sobre esto en https://www.aprenderaprogramar.com/foros/index.php?topic=1022.msg5803#msg5803

Saludos!!
Título: Re:Duda Como generar numeros aleatorios en c# random y rnd
Publicado por: Sixtoex en 28 de Octubre 2014, 12:16
Hola, sí se nota que estás mejorando, pero de lo que no estoy seguro es de si estás aprendiendo con buenos materiales. ¿Estás siguiendo un libro o una página web, o es una asignatura...?

El código no se ve excesivamente largo, no tienes que obsesionarte por hacerlo todo muy corto (aunque tampoco debes hacerlo más largo de lo necesario).

Has escrito while (true), esto en general no es una sentencia adecuada excepto en casos muy concretos. Puedes leer sobre esto en https://www.aprenderaprogramar.com/foros/index.php?topic=1022.msg5803#msg5803

Saludos!!

Estoy siguiendo este curso:
https://www.video2brain.com/es/cursos/c

y luego cuando pase ese curso, seguire con los videos de Jesus Conde, no se si lo conoces, es de youtube
Título: Re:Duda Como generar numeros aleatorios en c# random y rnd
Publicado por: Mastermind en 28 de Octubre 2014, 12:27
Sí, si los conozco... Nosotros colaboramos con esta web por lo que los cursos que recomendamos son lo de esta web: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86, si colaborara con otra web recomendaría otros  ;D