Capítulo III: ... Números y Deuteronomio... V1.2

 

 

1.- Saludos

 

            De nuevo soy RAZiEL del grupo K-FoR; y me alegra comunicaros, que ¡Me han llegado E-Mails! dándome sugerencias, pidiéndome ayuda con algún que otro programa, así como algunos que desean formar parte de nuestro grupo...

 

            Con respecto a la sugerencia de que al terminar el curso, haga un documento en el que se recojan todos los capítulos de  éste, lo veo una buena idea; es más, ya he comenzado a trabajar en ello...

 

            Ya sabéis, para cualquier duda, sugerencia o crítica constructiva: raziel@telepolis.com o si queréis visitar nuestra site: www.pagina.de/kfor; ¿OK?

 

            Sólo eso, y siguiendo con los antiguos pactos de familia... vayamos a lo nuestro.

 

2.- Un poco de Teoría

           

            Bien, ya que estamos un peldaño un poco mas arriba de la creación de los KeyGens, vamos a tratar concretamente dos temas que me parecen de lo más interesante: ALEATORIEDAD y PERMUTABILIDAD...

 

            Si habéis cursado alguna vez la asignatura de estadística, obviamente, éstos dos conceptos los habréis tenido hasta en la sopa, en caso contrario, permitidme que os ilustre sobre cada uno de ellos...

 

·         2.1 Aleatoriedad Numérica; Absoluta y Relativa

 

El término aleatorio, es empleado, para designar a aquello que depende del azar o de la suerte. Por ejemplo, si yo os digo que penséis un número aleatorio de una cifra; pensaréis en un número al azar entre el 0 y el 9...  ¿verdad?

 

Principalmente podemos distinguir 2 tipos de aleatoriedad:

 

o        Relativa: Si está condicionada, es decir, no hay la misma probabilidad de que salgan escogidos ciertos números, debido a  preferencias que hacen que nos inclinemos más por la elección de unos u otros...

 

El ejemplo anterior, sería un caso de aleatoriedad relativa, ya que de forma involuntaria, escogeríamos ciertos valores y, debido a nuestras preferencias, desecharíamos otros, que “en teoría”, tendrían la misma probabilidad de ser escogidos...

 

o        Absoluta: Si no está condicionada; es decir, la misma probabilidad de elección de todos los números...

 

En una calculadora cualquiera, por ejemplo, sí podríamos hablar de aleatoriedad absoluta, ya que, ésta no se inclinaría hacia ciertos valores y desecharía otros... ¿porqué?, porque las máquinas no tienen preferencias, a no ser; claro está, que las truquemos...

 

¿Porqué este rollo?, veréis, existen ciertos programas, que generan números de serie, aleatorios absolutos o siguiendo pautas determinadas (aleatorios relativos). En ambos casos, se nos puede dar una situación similar a ésta:

 

Imaginemos que extraes un serial de un programa, se lo das a un conocido para que lo registre en su computadora y paradójicamente; no le funciona... ¿Por qué?, pues una de las razones, podría ser lo comentado anteriormente...

 

·         2.2 Permutabilidad...

 

Definimos la permutabilidad, como la propiedad de cambiar el orden de las cosas, ya sean números, letras...

 

Un ejemplo claro, en plan pasatiempos: Encuentra un nombre propio a partir de la palabra dada...

      Palabra: NOAMLO.

 

            Así, te están diciendo claramente: Permuta hasta obtener un nombre propio...

            Pues bien; permutando y permutando llegados a: MANOLO.

 

            No creo que haga falta explicar el procedimiento...

 

¿Porqué la permutabilidad?, pues fácil, numerosos programas permutan nuestro nombre hasta ponerlo de forma apropiada para el cálculo del número de serie.

 

Un caso sencillo, darle la vuelta: RAZiEL > LEiZAR > Calculo del serial...

 

Algo más complejo: RAZiEL > AZRiEL > EliRAZ > elIraz > Cálculo del serial...

 

            Bien; pues pasemos a la práctica... pero antes, como siempre... un poco de programación...

 

3.- Algo de programación

 

            Si bien, la permutabilidad se hace a través de bucles y demás, existen instrucciones tanto en VB como en D para el cálculo de números aleatorios...

 

            Comentario Sabroso: Vamos a trabajar con números enteros, para mayor comodidad...

 

·         3.1 En Delphi

 

o        3.1.1 Aleatoriedad

 

La aleatoriedad, viene expresada según un rango numérico; es decir, si queremos que el programa calcule números dentro de un determinado rango; hemos de declararlo así:

 

§         Declaración

 

Random (Numero); > Siendo Numero el valor máximo que se usará para el cálculo de números aleatorios...

 

Es decir, si ponemos:

 

Random (50); > Se calcularán números entre 0 y 50; ¿OK?

 

OJO! El rango por defecto está entre 0 y 1 ¿OK?

 

§         Ejemplo

 

var            

s: string;                            Declaramos una variable s, que del tipo cadena

begin

s:= intTostr(Random (50)); Convertimos el número que nos da el Random y lo asignamos a s

CajadeTexto.text:= s;         Mostramos el número en una caja de texto

end;

 

o        3.1.2 Permutabilidad

 

Hemos de emplear Bucles para ir moviendo los caracteres a nuestro antojo, o hacerlo manualmente... hay infinitas formas de hacerlo, dependiendo de la destreza del programador y de su imaginación, claro está, por ejemplo, si quisiéramos revertir una cadena:

 

Procedure TForm1.Button1Click(Sender: TObject);

 

var

Variable1: String;

Caracter: String;

I, Longitud, Posicion: Integer;

 

begin

Variable1:= Edit1.Text;                         Asigna a Variable el contenido de una caja de texto

Longitud:= Strlen(pchar(Edit1.Text));     Asigna la longitud de la cadena a una variable llamada longitud

Posicion:= Longitud;                             Mismo paso que el anterior pero a una variable llamada Posicion

 

For I:= 1 to Longitud do                        Inicio del Bucle para revertir la cadena

    begin

         Caracter := Variable1[Posicion];               Coge un carácter de la cadena

         Edit2.Text := Edit2.Text + Caracter;          Lo asigna a la caja de texto 2

         Posicion := Posicion - 1;                           Decrementamos la posición en 1 hasta llegar al principio

    end;                                                            Fin del Bucle

end;

 

end.

 

·         3.2 En Visual Basic

 

Al igual que en D; hemos de declarar la generación de números aleatorios en un rango determinado, en caso contrario, se generarán, números no enteros entre 0 y 1

 

o        3.2.1 Aleatoriedad

 

§         Declaración

 

Para producir enteros aleatorios en un rango determinado se utiliza esta fórmula:

 

Int((límitesup - límiteinf + 1) * Rnd + límiteinf)

 

·         Siendo:

 

            Int: Declaración de número entero.

                       Límitesup: Límite Superior del Rango

Límiteinf: Límite Inferior del Rango

            Rnd: Función de aleatoriedad

                                   1: Valor Constante

 

       Es decir;  Si queremos generar un valor aleatorio entre 1 y 6:

 

      Int((61 +1)* Rnd + 1)

 

                         Si simplificamos:

 

Int((6 * Rnd) + 1)

...

 

§         Ejemplo

 

valora = Int((6 * Rnd) + 1)  Genera un valor aleatorio entre 1 y 6, lo almacena en valora

Text1.Text = valora            Asigna dicho valor a una caja de texto

 

o        3.2.2 Permutabilidad

 

El mismo ejemplo que en D, pero en VB...

 

Private Sub Command1_Click()

 

Variable1 = Text1.Text              Asigna a Variable el contenido de una caja de texto

Longitud = Len(Text1.Text)        Asigna la longitud de la cadena a una variable llamada longitud

Posicion = Longitud                   Mismo paso que el anterior pero a una variable llamada Posicion

 

For I = 1 To Longitud                Inicio del Bucle para revertir la cadena

 

Caracter = Mid(Variable1, Posicion, 1)     Coge un carácter de la cadena

Text2.Text = Text2.Text + Carácter        Lo asigna a la caja de texto 2

Posicion = Posicion 1                            Decrementamos la posición en 1 hasta llegar al principio

 

Next                                         Fin del Bucle

 

End Sub

 

            Ahora, algo de prácticas, pero no para mí, sino para vosotros...  

 

4.- Ejercicios

 

Antes que nada, deciros, que al terminar el curso, voy a publicar la solución de todos los ejercicios que he ido recomendando; ya me están llegando las soluciones para que las publique; Gracias a todos, y en especial a AFA que ha sido el primero...

 

·         Primer ejercicio: La cadena introducida ha de ser de 8 caracteres. Cálculo de un número aleatorio entre 0 y 10, si el número es mayor o igual que 5; entonces pasa a ASCI todos los caracteres de la cadena introducida, y los suma, en caso contrario, sólo pasa a ASCI los valores primero y quinto, y los multiplica. Muestra el Resultado en una caja de texto.

 

·         Segundo ejercicio: La cadena introducida ha de ser de 15 Caracteres; revierte los caracteres de la cadena, una vez hecho esto, cambia el tercer carácter por el séptimo y el cuarto por el undécimo. Muestra el Resultado en una caja de texto.

 

·         Tercer ejercicio: Calcula un número aleatorio entre 0 y 50, dependiendo del número dado, se le resta a cada uno de los caracteres en ASCI la división de dicho número entre 10 (únicamente la parte entera, no la decimal). Suma de todos los caracteres. Muestra el Resultado en una caja de texto.

 

5.- Agradecimientos

 

Bueno, esto es todo por hoy, ya me marcho, no sin antes dar las Gracias a mi grupo [K-FoR] por su apoyo moral, a Txeli, Karpoff, al Profe, AFA y a todos los Miembros de Tutoriales 2000 , y por supuesto, a todos los que hacéis posible que este mundo sea menos comercial cada día.

 

            Ya sabéis, para alguna recomendación, consulta, o crítica constructiva: Raziel@telepolis.com, y también por si me he equivocado en algo del código, si he dicho algo que no era así...

 

            Un Abrazo a todos : RAZiEL.

 

Porque somos muchos...

www.000webhost.com