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
-
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.
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:
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:
-
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:
Random rnd1 = new Random();
for (int i = 0; i < numerosIngresar; i++)
{
numeroArray[i] =rnd1.Next(5000) ;
}
A ver si te funciona!!
-
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)
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]);
}
}
}
}
-
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!!
-
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
-
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