lunes, 10 de septiembre de 2012

Sucesión de Ulam

 En esta entrada publicare el código para realizar la sucesión de Ulam. Esta sucecion consiste en:

- Elegir un numero aleatorio.
Si es par, dividirlo entre 2; si es impar, multiplicarlo por 3 y agreguele 1.
- Obtenga enteros sucesivamente repitiendo el proceso hasta que el resultado sea igual a 1.

Ejemplo:
Numero elegido: 3

3 (impar) = 10
10 (par) = 5
5 (impar) = 16
16 (par) = 8
8 (par) = 4
4(par) = 2
2(par) = 1

Empezamos por crear un nuevo proyecto.

Seleccionamos "Aplicación de Windows Forms", asignamos un nombre y damos clic a Aceptar.



Agregaremos a nuestro formulario un "textBox" (nombre: txNumero), un "listBox"(nombre: Contenedor), y un "Button"(nombre: Resolver),


Para resolver este algoritmo es necesario utilizar un ciclo. Ya que el proceso se repetirá mientras que no obtengamos un 1 como resultado. Para esto se utilizara el ciclo "while".

La funcionalidad del el ciclo "while" consiste en que mientras no se cumpla alguna sentencia que le asignemos se estará repitiendo un proceso por un numero indefinido de veces.

Dentro del código del botón se hará lo siguiente.


El algoritmo en C# seria el siguiente:

            int contador=0;
            Int64 numero=Convert.ToInt32(txNumero.Text), temporal, par;
            Contenedor.Items.Clear();
            if (numero > 0) //Utilizado para saber si los números son positivos
            {
                txNumero.Clear(); //Limpiar textBox
                txNumero.Focus(); //Pasar el control de nuevo al textBox
                while (numero != 1) //Mientras el resultado o numero sea diferente de 1
                {
                    contador++;
                    temporal = numero; //Almacena numero
                    par = numero % 2; // saca el residuo del numero entre 2
                    if (par == 0) //Si el residuo es igual a 0 es un numero par
                    {
                        numero = numero / 2;
                        Contenedor.Items.Add(contador + ".- " + temporal + "=" + numero);
                    }
                    else //Si no es par es impar
                    {
                       numero = (numero * 3) + 1;
                        Contenedor.Items.Add(contador + ".- " + temporal + "=" + numero);
                    }
                }
            }


Contador(opcional): Utilizado para contar el numero de veces que se realizo la operación hasta que llegue a 1

numero: Utilizado para almacenar el numero inicial y los resultantes tras la operación
temporal: Utilizado para no perder el numero anterior a la operación
par: Utilizado para saber si el numero es par o impar

Porque int64?
La razón por la que estas 3 variables son "int 64" es porque en veces los numero resultantes son demasiado grandes, y no podrían ser almacenados en un "int16", o un "int32".

¿No saves descargar nuestros proyectos?


No hay comentarios:

Publicar un comentario