Mostrando entradas con la etiqueta algoritmo. Mostrar todas las entradas
Mostrando entradas con la etiqueta algoritmo. Mostrar todas las entradas

domingo, 11 de noviembre de 2012

Numeros Binarios JAVA

Hola a todos,

En esta nueva entrada veremos cómo sacar el número binario dado un número entero.

Básicamente un numero binario es una combinación de ceros ( 0 ) y unos ( 1 ), que representan mediante manera exponencial números enteros. Estos números binarios salen de una operación básica como lo es la división  e invirtiendo en resultado final, por lo cual dado un número entero cualquiera dividimos sucesivamente hasta llegar a u número final 0 o 1. Todos estos necesitamos usar obtener dos resultados:

  1. El numero entero siguiente, que se da por medio de divisiones sucesivas.
  2. El residuo de la división por dos del número entero.
Podemos ver mas del concepto en WIki
// 

public class Binario {

 //para esta clase tenemos que importar la libreria para listas
 //que es import java.util.ArrayList; 
 
 public static void main(String[] args) {

  //Numero Entero que convertimos en binario
  int numero=128;
  
  //String en el cual almacenamos el valor binario resultante
  String binario="";
  
  //llamamos al metodo que convirte el numero en binario
  binario=convertirABinario(numero);
  
  //mostramos por consola el numero Binario resultante
  System.out.println("El numero Binario es " + binario);
 }
 
 /**
  * Metodo que convierte  un numero entero en binario
  * @param numero Numero entero correspondiente
  * @return cadena de texto con el numero binario resultante
  */ 
 public static String convertirABinario(int numero)
 {
  //lista donde almacenamos los valores individuales
  ArrayList binarios = new ArrayList();
  
  //variable donde almacenamos el resultado de la division 
  int aux=numero;
  
  //hacemos un ciclo while para sacar todos los valores binarios
  while(true)
  {
   //almacenamos el resultado de la operacion sea 1 o 0
   binarios.add(aux%2);
   
   //pasamos el sigiente numero
   aux/=2;
   
   if(aux<2)
    {
    //una vez obtenido todos los valores salimos del ciclo
     binarios.add(aux); 
     break;
    }
   
  }
    
  //llamamos al metodo que nos invierta la lista y obtenmos el resultado final
  return invertirLista(binarios);
 }

 
 /**
  * Metodo que invierte la lista para obtener el binario final
  * @param lista donde se encuentra los resultados binarios
  * @return con el numero binario final
  */
 public static String invertirLista(ArrayList lista)
 {
  String invertido="";
  
  for(int i=lista.size()-1;i>=0;i--)
  {
   invertido+=lista.get(i);
  }
  
  return invertido;
 }
}

martes, 17 de enero de 2012

Numeros Primos en C#

Bueno ahora vamos hacer algo muy común, Normalmente este es un ejercicio de programación que nos ayuda a comprender mejor la lógica de los problemas y comúnmente usado por los profesores, para tal enseñanza me refiero a calcular si un numero es primo o no?.

Hoy vamos hacer el programa para ver si un número ingresado por consola es primo o no.

Primero definamos el concepto de número primo:

Un numero primo es aquel numero que solo es divisible por 1 y pos si mismo, de lo contrario este número solo será un múltiplo de otro.

También cabe recordar que los números primos son Enteros y los decimales no entran en esta categoría.

Si quieres tener un mejor concepto de esto pueden ver en Wiki Numeros Primos.

Ahora en C# voy hacer  tres metodos los cuales van hacer lo mismo (Ver si el numero es primo o no), pero cada metodo va hacer mejor que el siguiente y mejor me refiero a mas optimo, bueno a qui les dejo el codigo si tienen alguna duda me comentan...=)

    class Program
    {
        
        static void Main(string[] args)
        {
            //pedimos el numero por parametro
            Console.WriteLine("Escriba el numero a identificar si es primo o no");

       //creamos la variable, convertimos el parámetro a entero ya que todo dato q pedimos entra como string

            int aux= Convert.ToInt32(Console.ReadLine());
        
  //llamamos el método que optimizamos
            verPrimo1(aux);
            verPrimo2(aux);
            verPrimo3(aux);

            Console.ReadKey();
        }

        //Este el método normal, solo veremos  hay algún numero mayor a 1 y menor q si mismo que al aplicarle el modulo "%" 
         // o si el residuo de la división es cero, esto significara que es un múltiplo de otro número y por lo tanto no es primo
         // Si con el primero no coincide ira incrementado de 1 en 1 hasta llegar a  si mismo -1
         


        public static void verPrimo1(int num) 
        {
            //una variable que identifica cuando es primo
            bool primo = false;

            //el dos es considerado como primo, por lo cual si es 2 no tendremos la necesidades meterlo en el ciclo

            if (num != 2)
            {

                //vamos hacer un ciclo, para tratar de dividir por todos los numero y determinar si es primo
                for (int i = 2; i < num; i++)
                {
                    if (num % i == 0)
                    {
                        primo = true;
                        Console.WriteLine("El numero No es primo");
                        break;
                    }
                }

            }
            //verificamos la variable en caso tal que haya recorrido y no encuentre ninguno entonces es primo
            if (!primo)
            {
                Console.WriteLine("El numero es primo");
            }
        }


        /*lo que se hará en este método es verificar si el número es primo, Pero optimizando la manera en cómo se busca
        *Si observamos el código anterior nos damos cuenta que se tiene que de 1 en 1 hasta encontrar el indicado en este método vamos a variar
        *ahora vamos a ir solo hasta la mitad del número, debido  a que por lógica la mitad superior es múltiplo de la mitad inferior
        * si solo comparamos con la mitad inferior mas 1 sería más que suficiente.*/

        public static void verPrimo2(int num)
        {
            bool primo = false;

            if (num != 2)
            {

                //vamos hacer un ciclo, para tratar de dividir por todos los numero y determinar si es primo
                for (int i = 2; i < (num/2)+1 ; i++)
                {
                    if (num % i == 0)
                    {
                        primo = true;
                        Console.WriteLine("El numero No es primo");
                        break;
                    }
                }

            }
            //verificamos la variable en caso tal que haya recorrido y no encuentre ninguno entonces es primo

            if (!primo)
            {
                Console.WriteLine("El numero es primo");
            }

        }

        //lo que aremos en esta optimización es debido a q todos los números Primos son impares entonces ya no tendremos que ir de 1 en 1
        // aremos solo q divida entre impares empezando en 1  pero sin tener efecto e ir incrementándolo de dos en dos


        public static void verPrimo3(int num)
        {
            bool primo = false;

            if (num != 2)
            {

                //vamos hacer un ciclo, para tratar de dividir por todos los numero y determinar si es primo
                for (int i = 1; i < (num / 2) + 1; i=i+2)
                {
                    if (i != 1)
                    {
                      if (num % i == 0)
                         {
                             primo = true;
                             Console.WriteLine("El numero No es primo");
                             break;
                         }
                    }
                }

            }
            //verificamos la variable en caso tal que halla recorrido y no encuentre ninguno entonces es primo
            if (!primo)
            {
                Console.WriteLine("El numero es primo");
            }

        }
    }