[Perl] Funcion rand (Random:Numero & Caracteres Aleatoreos)

Iniciado por OzX, 25 Abril 2008, 21:23 PM

0 Miembros y 1 Visitante están viendo este tema.

OzX

La Funcion rand Es Ocupada para generar Numeros Aleatoreos, y asi tambien poder generar caracteres aleatoreos previamente declarados.

rand num

Por Default (o Por Defecto) la Funcion Si no es Declarada el valor "num" Entregara Valores entre 0 y 1. (Emplearemos un For Para Repetir el Procedimiento 10 veces para hacer notar la funcion )

#!/usr/bin/perl <new-bytes.net>
for ($x=0;$x<=10;$x++){
$rand= (rand);
print "$rand\n";
}
Resultado:

CitarC:\Documents and Settings\Administrador\Escritorio\Perl Example>rand.pl
0.14404296875
0.146453857421875
0.6453857421875
0.147125244140625
0.595123291015625
0.045440673828125
0.850067138671875
0.8536376953125
0.437652587890625
0.86004638671875
0.694091796875
Declarando el Valor Num.

#!/usr/bin/perl <new-bytes.net>
for ($x=0;$x<=10;$x++){
$rand= (rand(10));
print "$rand\n";
}


Resultado:
Citar
C:\Documents and Settings\Administrador\Escritorio\Perl Example>rand.pl
8.53668212890625
6.02081298828125
3.3087158203125
5.16754150390625
4.58984375
7.8265380859375
9.10797119140625
0.7781982421875
8.75030517578125
2.305908203125
4.96124267578125
Ahora Bien que pasa si no Queremos Numeros Decimales Sino mas Bien Numeros Enteros?

int (rand(10))

Int: Quiere Decir Entero.

#!/usr/bin/perl <new-bytes.net>
for ($x=0;$x<=10;$x++){
$rand= int(rand(10));
print "$rand\n";
}
Resultado:

CitarC:\Documents and Settings\Administrador\Escritorio\Perl Example>rand.pl
6
8
9
7
8
5
8
9
0
7
4
Pero Que Pasa si quiero Generar Numeros Aleatoreos Entre Dos Valores?. Por Ejemplos Numeros Entre 15 y 20 ?

#!/usr/bin/perl <new-bytes.net>
for ($x=0;$x<=10;$x++){
$rand= int(rand(15)) + 5;
print "$rand\n";
}

Resultado:

CitarC:\Documents and Settings\Administrador\Escritorio\Perl Example>rand.pl
13
7
11
15
9
18
19
8
14
19
17
Algo que me Gustaria Aclarar, Si tu Quieres un Random Entre por ej 200 y 250.
$rand= int(rand(200)) + 50;
Entre 30 y 40
$rand= int(rand(30)) + 10;
Entre 500 y 1200
$rand= int(rand(500)) + 600;

No Se deve Ingresar el Numero Inicial y el Final, Sino Mas Bien lo que le Falta al Valor de num para llegar al otro parametro.
500+600= 1200.
Por Ende Generara Numeros Entre 500 y 1200.


Generar Caracteres Aleatoreos.

Citar#!/usr/bin/perl <new-bytes.net>
@caracteres = qw (a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  @ < > ¡ ? ¿ ~);

for ($x=0;$x<=10;$x++){

$rand = int(rand( @caracteres));
$caracter_rand = $caracteres[$rand];
print "$caracter_rand\n";

}
Resultado:

CitarC:\Documents and Settings\Administrador\Escritorio\Perl Example>rand.pl
w
q
H
?
R
a
z
B
l

G
Ahora Veamos Por Parte:

Citar@caracteres = qw (a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  @ < > ¡ ? ¿ ~);
Matriz o array llamada Caracteres, en donde puede contener en si multiples datos, con los parametros qw hacemos que los datos sean tomados por separado por espacios, porque si no tuviera esos dos parametros tendria que separar cada dato por una coma. y se hace algo lioso.

Citarfor ($x=0;$x<=10;$x++){
Ciclo For Empieza en 0 y Termina en 10, En Cada Pasada Se va Sumando 1.

Citar$rand = int(rand( @caracteres));
$caracter_rand = $caracteres[$rand];
la variable $rand recorre todo el array y cuenta cuantos datos tiene el array, luego de eso seleciona entre 0 y el la cantidad total de datos del array un numero al azar. y la guarda.

Luego $caracter_rand , contiene la variable $caracteres que esta relacionada con el array  @caractereres.. Me detendre un Momento para Explicar Algo QUe esta dentro de los Conceptos Basico pero Nunca esta demas Volvera a Explicarlo .

Por Ej Tenemos

Citar
@letras = qw (uno dos tres cuatro cinco seis);
Ahora como Puedo Llamar o imprimir en pantalla el cuarto valor? (Ojo cuarto valor no el valor que dice cuatro¡)

Citar
$letras[4];
Resultado:

Citarcinco
Porque? Porque los Arrays Empiezan Desde 0.

0=uno
1=dos
3=tres
4=cuatro
5=cinco
6=seis

Ya teniendo ese Concepto Claro, Volvamos con los Random.


$caracter_rand = $caracteres[$rand];

Aqui Tomara el Valor de $rand (valor aleatoreo tomado de 0 y la cantidad total de caracteres del array  @caracteres) y lo ingresara dentro de las casillas,si por ej, $rand tomo el valor de 5.

Citar$caracter_rand = $caracteres[5];
Citar}
Cierra el Ciclo.


Con Esta Funcion y con Imaginacion se Puede hacer Muchas Cosas...

Por Ejemplo:

Gracias a La ProxyList.new-bytes.net Podemos Ocupar Nuestras Aplicacion Con Proxy. y Tener en una variable Cada Proxy.


Citaruse LWP::Simple;

system ("cls");

#============================================SUB PROXY============================================================#

syswrite STDOUT, "\n
  • Carganndo Proxy: ";

    $url="http://proxylist.new-bytes.net/list.txt";

    $fichero = "proxy.txt";
    mirror("$url", $fichero);

    open(ARCHIVOPROXY,"$fichero");
    @proxy=<ARCHIVOPROXY>;
    $x=0;
    foreach ( @proxy)
    {
    # print " Numero : $x : $proxy[$x]";
    $x++;
    }
    close (ARCHIVOPROXY);
    $y=$x-2;

    #$x cantidad de proxy
    print "$x Obtenidos \n ";

    #===============================================FIN SUB PROXY====================================================#

    $num = int(rand( @proxy));
    $proxy_rand = $proxy[$num];

    print "Proxy Selecionado Por Rand: $proxy_rand\t <www.new-bytes.net>";

Spora

Ok, Pero si quiero hacer esto con numeros decimales?
O sea:

Prtotipo

//Para calcular numeros aleatoreos de numeros reales.
double random(float, float, int);


El int para es para la variable de de lugar decimal, si el usuario quisiese escoger el lugar decimal, a cuantos lugares.

Definicion

//Para calcular numeros aleatoreos para numeros reales.
double random(float num1, float num2, int num3)
{
   //Para darle valor a result.
   double result;

    //Para darle valor entero a num1 y num2.
   int
      num1 = num1 * 100,
      num2 = num2 * 100;

   result = num1 + rand() % (num2 - num1 +1)

      static_cast <float> (result);

      return result;
}

Oye si pongo el int num3 como argumento en la lista de parametros de la definicion, tengo que definirlo adentro de la funcion?

Gracias, espero que "Anyone" contetste!  ;D