Iniciar sesión

Ver la versión completa : [Ayuda] Como genero un numero aleatorio de 13 cifras en c++ ???



cannavaro
07/01/2009, 14:26
Estoy haciendo un proyecto de mi escuela pero me hace falta una funcion que me genere un numero aleatorio de 13 cifras en c++, por favor tirenme un cable en esto
gracias

Jurk
07/01/2009, 14:46
utiliza la funcion random() o rand() (no se como se lama exactamente) para generar un numero entre 0 y 1. Multiplicalo por diez y truncalo con trunc
Despues, repite la operacion, y lo multiplicas con 10

pseudocodigo
y=0
for i=1 to 13 do
{
x=random()
x=x*10
x=trunc(x)
y=y+x^(i-1)


}

DMusta1ne
07/01/2009, 15:20
¡Gracias Jurk!

¡De nada monstruo!

swapd0
07/01/2009, 15:33
Que practica mas rara, un entero de 32bits llega hasta los 4 mil millones, esto es 10 cifras.

cannavaro
07/01/2009, 17:41
utiliza la funcion random() o rand() (no se como se lama exactamente) para generar un numero entre 0 y 1. Multiplicalo por diez y truncalo con trunc
Despues, repite la operacion, y lo multiplicas con 10

pseudocodigo
y=0
for i=1 to 13 do
{
x=random()
x=x*10
y=y+x^(i-1) ////man esta parte de aqui no la entiendo, igual que


}


y=y+x^(i-1) ////man esta parte de aqui no la entiendo, igual que lo que me pusistes arriba de trunc, si me pudieran dar el codigo en c++, no deve ser muy largo, otra cosa en un edit no se puede poner un numero de mas de 10 caracteres???

Jurk
07/01/2009, 18:12
editado

< - >
y=0
for i=1 to 13 do
{
x=random()
x=x*10
x=trunc(x)
y=y+x^(i-1)


}

swapd0
07/01/2009, 18:15
lo del edit (un TextControl o algo parecido) sera porque con 32bit solo se llega hasta 4.294.967.296 o lo que es lo mismo 10 cifras.

una version con strings, despues lo conviertes a lo que quieras.


std::string numero;
for ( int i=0; i<13; ++i )
numero.append('0' + 10*rand()/RAND_MAX);

rand() te genera un entero entre 0 y RAND_MAX (mira la documentacion)

puede que sea necesario hacer un casting a char despues de hacer la suma ('0' + xxx), ademas habria que cambiar el codigo por si la primera cifra es cero genere una nueva. Eso se deja como ejercicio[wei] (siempre he odiado cuando en los libros ponia eso)

Jurk
07/01/2009, 18:16
x^y es elevar un numero a la potencia y
truncar el quitar los numeros que hay despues de la coma

Espero que esta explicacion sea de ayuda, ya que yo me llevo mejor con Pascal que con c++

swapd0
07/01/2009, 18:19
editado

< - >
y=0
for i=1 to 13 do
{
x=random()
x=x*10
x=trunc(x)
y=y+x^(i-1)


}
deberia ser
y= y + x *10 ^ i-1;
suponiendo que ^ sea elevar a la potencia n, ya que en C/C++ es un or exclusivo (XOR de bits para los amigos)

Jurk
07/01/2009, 18:19
¡De nada monstruo!

Jurk, no postees con la cuenta de DMusta1ne!!

dardo
07/01/2009, 19:34
x^y es elevar un numero a la potencia y
truncar el quitar los numeros que hay despues de la coma

Espero que esta explicacion sea de ayuda, ya que yo me llevo mejor con Pascal que con c++

Pero te pasa lo mismo que en Pascal, me parece que a menos que compile en 64 bits no te cabe un número de 13 cifras en un entero largo y no se yo si aún así.

Para mi que lo que le han pedido sin decírselo es que se haga una clase que le permita trabajar con dígitos de mayor longitud que un entero largo y que en esa clase incluya un método para generar un número aleatorio perteneciente a esa clase.

Tendría que implementar el producto y el resto de funciones matemáticas elementales y si se aburre demasiado la potencia (a parir del producto es lo más fácil).

NO le habrán explicado listas enlazadas hace poco, porque suena al típico problema relacionado.

sereno
07/01/2009, 22:36
Yo tambien creo que tendrá que usar un vector, lista o cadena (a gusto del consumidor).
Supongo que el proximo ejercicio será crear una clase y sobrecargar los operadores.
Creo que alguna vez hice alguna practica de ese estilo, en estructura de datos.