domingo, 5 de septiembre de 2010

Estructura de programacion FOR

La estructura de control for es una de las mas utilizadas
nos sirve para hacer iteraciones y generalmente la utilizamos
cuando conocemos la cantidad de veces que necesitamos iterar,
aunque es posible utilizar el for para iterar infinitamente.


la estructura de control for consta de cuatro elementos
for( tarea_de_inicializacion ; parte_condicional ; tarea_final_por_iteración)
{
    código a ejecutar en cada iteración



nota:Ninguna de las áreas es indispensable y puede ir vacía


Tarea de inicializacion: Se ejecuta solo una vez, al inicio antes de empezar a iterar
por lo general declaramos las variables de control, pero podemos hacer
cualquier cosa, imprimir por ejemplo y podemos ejecutar mas de una instrucción



ejemplo




int i=10;


PrintStream out= System.out;
   for(out.println("1"),out.println("2");i<1;i++);

imprime 
1
2
Y es todo lo que hace
También podemos declarar múltiples variables 
en este ejemplo crearemos un arreglo con 5 elementos
y lo guardaremos en otro arreglo pero con los elementos invertidos, 
Aquí también utilizamos que la tarea final por iteración  ejecute mas de una 
instrucción. como imprimir, asignar, llamar funciones, eso si cada instrucción 
tiene que estar separada por comas en vez de punto y coma":" 
dentro de esta area se puede escribir un sistema operativo completo 
si tienen el suficiente ingenio.






int [] a1 = {6,7,8,9,10};
    int [] a2 = new int[a1.length];
    for(int i=0,j=a1.length-1; i< a1.length;i++,j--)
        a2[i] = a1[j];
Para imprimirlo
    for(int i=0;i<a2.length;System.out.println(a2[i++]));


En el siguiente ejercicio mostraremos el orden de ejecucion de cada uno de los elementos de la estructura de control excepto la parte condicional la cual se ejecuta antes de la tarea final por iteración






int i=0;





for(out.println("se imprime una vez al inicio");i<10;out.println("se imprime después y muchas veces"),i++)
        out.println("se imprime primero y muchas veces");

La salida es

se imprime una vez al inicio
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces
se imprime primero y muchas veces
se imprime después y muchas veces

para iterar infinitamente simplemente no ponemos nada en la parte condicional
Ejemplo:





for(;;System.out.println("jeje"));
esto imprime infinitamente "jeje"

también en conjunto con el for podemos utilizar las instrucciones continue,break,return
para cambiar el comportamiendo de las iteraciones
por ejemplo para imprimir todos los números del 1 al 20 pero sin imprimir los que estan entre 5 y el 15
También utilizamos el break para parar de iterar en el for cuando va en el 20 y no continuar hasta el 30. Si queremos para en algún momento y salirnos de la función podemos utilizar en vez del break el return






for(int i=1;i<30;i++)
{
        if( i>=5 && i<=16)
            continue;

        System.out.println(i);

        if( i== 20)
            break;
}
la salida es 
1
2
3
4
17
18
19
20
Asi es compañaros en desvelos si quieren tener un mejor código o escribir que asegure su permanencia en la empresa (Job security en ingles) escribiendo código que solo ustedes entienden y que posiblemente también van a olvidar no duden en utilizar las ventajas del for.

Algoritmo BucketSort en java

Hola querido publico
hoy hablaremos sobre un algoritmo BucketSort el cual sirve para dos cosas:

  1. Para ordenar un conjunto de datos.
  2. Para que los maestros puedan poner tareas.


Este algoritmo consiste en iterar sobre todo el conjunto de datos e ir añadiendo esto datos a una serie de listas finitas que contendrán datos con un rango de valores.

Cada una de estas listas tendrá un conjunto con datos que sera mas fácil ordenarlos
por lo que las comparaciones necesarias se reducen drasticamente.


Como veras este algoritmos sirve para simplificar el ordenamiento y se puede usarse solo o con cualquier otro algoritmo de ordenamiento.

El Lenguaje que utilizaremos hoy sera Java, pues es en el lenguaje en que están solicitando implementar el algoritmo y por que nos gusta java.


    1 import java.util.*;
    2 
    3 
    4 public class BucketSort
    5 {
    6 
    7     public static Vector<Integer> sort(Vector<Integer> lista, int inferior,int superior)
    8     {
    9         int rango= (superior-inferior);
   10         int bucket_size = rango/10;
   11 
   12         Vector<Vector> listas = new Vector<Vector>();
   13         /* creamos las listas de ordenamiento */
   14         for(int i=0;i<10;i++)
   15             listas.addElement(new Vector<Integer>());
   16 
   17         /*
   18            agregamos cada uno de los elemento en la lista que corresponde
   19          */
   20         for(int i=0;i<lista.size();i++)
   21         {
   22             /* calculamos en la lista que le corresponde */
   23             int casilla = (lista.elementAt(i)-inferior)/bucket_size;
   24             /* Agregamos el elemento a la lista calculada */
   25             Vector<Integer> vCasilla = listas.elementAt(casilla);
   26             vCasilla.addElement(lista.elementAt(i));
   27         }
   28 
   29         /* Ordenamos las listas con un metodo de ordenamiento
   30            en este caso utilizaremos el mismo metodo de ordenamiento
   31            el BucketSort recursivo.  */
   32         Vector<Integer> out= new Vector<Integer>();
   33         for(int i=0;i<listas.size();i++)
   34         {
   35             int inf= inferior+(i*bucket_size);
   36             int sup= inferior+(i*bucket_size)+bucket_size;
   37             /* en tmp vamos a guardar cada una de las listas pero ya ordenadas */
   38             Vector<Integer> tmp = null;
   39             /* si el rango es igual a 1 quiere decir que ya no hay por que ordenar si la lista tiene un elemento quiere decir que la lista esta ordenada */
   40             if( sup-inf == 1 || listas.elementAt(i).size() == 1)
   41             {
   42                 tmp =listas.elementAt(i);
   43             }
   44             else
   45             {
   46                 /*si no se cumple ninguna de las condiciones anteriores entonces la lista no esta ordenada pero procedemos a ordenarla */
   47                 tmp =  BucketSort.sort(listas.elementAt(i),inf,sup);
   48             }
   49             /*
   50                temp contiene los elementos de una lista ordenada
   51                Agregamos todos los elementos de las listas a una sola lista
   52              */
   53             for(int j=0;j<tmp.size();j++)
   54                 out.addElement(tmp.elementAt(j));
   55         }
   56         /*regresamos el contenido de todas las listas en una sola */
   57         return out;
   58     }
   59     public static void main(String [] args)
   60     {
   61         Random r = new Random();
   62         Vector<Integer> lista = new Vector<Integer>();
   63 
   64         for(int i=0;i<1000;lista.addElement(r.nextInt(1000)),i++);
   65         System.out.println("Imprimiendo generados");
   66         for(int i=0;i<lista.size();System.out.println(lista.elementAt(i++)));
   67 
   68         Vector<Integer> resultado = BucketSort.sort(lista,0,1000);
   69         System.out.println("Imprimiendo resultados");
   70         for(int= 0;i<resultado.size();i++)
   71             System.out.println(resultado.elementAt(i));
   72 
   73     }
   74 
   75 }

sábado, 4 de septiembre de 2010

Crear un array sin elementos repetidos y aleatoriamente

Hoy vamos a llenar un array con valores aleatorios sin que se repitan.
Esto es muy útil para crear algunos juegos.


public static void main(String [] args)
{
    int array_size= 4;
    int arreglo[][] = new int[array_size][array_size];
    //declaramos el arreglo que nos va a ser de mucha ayuda
    Vector<Integer> v = new Vector<Integer>();
    //La clase random para generar los números aleatorios
    Random random= new Random();
    while(v.size() < 16 )
    {
        //el rango de números generados debe ser igual o mayor al tamaño del arreglo
        //si no queremos que nuestro programa se ejecute por los siglos de los siglos
        int temp = random.nextInt(array_size*array_size);
        //de paso aprovechamos las cualidades del java 1.5 y nos crea el integer Automaticamente
        if( !v.contains(temp))
            v.addElement(temp); //agregando el dato primitivo como si fuera objeto
                                // automaticamente lo agrega como Integer
    }
    //listo ya tenemos nuestros números generados aleatoriamente
    //ahora lo vamos a guardar en el vector bidimensional
    int k=0;
    for(int i=0;i<array_size;i++)
        for(int j=0;j<array_size;j++)
            arreglo[i][j]=v.elementAt(k++).intValue();//niños no lo intentéis con java 1.4
/*
    listo ya tenemos un arreglo bidimensional con valores aleatorios
    imprimimos los valores generados todo dentro del mismo for para
    variar y no tener código tan aburrido
*/
    for(int i=0,j=0;i<16;j=i%4,System.out.print(arreglo[i/4][i%4]+(j==3? "\n":"\t")),i++);
}

domingo, 22 de agosto de 2010

Codigos Gratis

con voz dramatica
Tienes una tarea o proyecto de programación y no sabes por donde empezar o no tienes tiempo?
con voz de persona exitada y jadeante.
ya no tienes por que preocuparte.

por que nosotros te hacemos la tarea y totalmente gratis. No te prometemos que saques 10 pero tu código funcionara y sera 100% gratis.

nos decimos expertos en C/C++, Java, Objetive-C
y le movemos decentemente a bash,perl, php,js y un laaaaaaaaargo etc.


solo escribe un correo a
codigogratis@rocketmail.com
detallando de que se trata tu proyecto, el lenguaje de programación que deseas, y el dia en que entregaras tu tarea/proyecto.

Te escribiremos  un correo informandote si haremos o no tu proyecto,
pues es posible que no podamos atender todas las peticiones.

ok es gratis pero cual es el truco?
Dias despues de la entrega de tu tarea. nosotros publicaremos el código aquí.
tambien podemos hacerte tu codigo sin publicarlo por una modica cantidad monetaria.