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

jueves, 13 de octubre de 2011

Torneo Interno de Programación (TIP) ACM 2011 en el ITCM

Hace 2 semanas dio inicio el TIP en el ITCM, un concurso de programacion en JAVA en el cual se concursaba en equipos 3 personas. La semana pasada fue la segunda fase, y mañana se cumple ya una semana de esa segunda fase.

Los problemas que se realizaron en la primer fase fueron:
Feel Good, un problema acerca de calcular el nivel de felicidad en un rango de dias. Usando arreglos, y haciendo todas las combinaciones posibles de 2 a n elementos para conjuntos de numeros contiguos... etc.

JavaVsC, era un problema basicamente de modificar un string, si encontraba una mayuscula, cambiara minuscula y agregar guion bajo, y viceversa.

Y a mi parecer el de dificultad dificil fue el de las torres de Hanoi, dado una estrategia a seguir contabilizar el numero de pasos que tardarias en resolverlo.

La segunda fase tambien fueron tres problemas, aunque un poco mas dificiles:
Youth's Hostel, un problema de obtener maximos, con restriccion. Acomodar en una matriz el mayor numero de camas, de tal forma que se pudiera acceder a ellas mediante el pasillo

Un problema de tautogramas, verificar si un string dado era un tautograma o no.

Y el ultimo problema era uno de unas "piedras" que se iban apilando y se queria escalar por ellas, pero tenian que tener una diferencia de altura menor a X numero... etc. Vaya, tenia su chiste el problema.

Al ver en la primer fase que por lo menos la mitad de los equipos resolvio 1 problema, dos equipos resolvieron 2 problemas y un equipo los tres problemas. Pues en la segunda fase se intento ver si el nivel de programación era más alto, pero no fue asi, los problemas fueron más complejos, requerian mas tiempo para poder analizarlos detenidamente y encontrar un patron o solución. Con lo que solo se logro como maximo se resolviera un problema.

Con este post solo queria relatar un poco de como fue el torneo de programacion aqui en el ITCM, del cual hasta ahorita no tenemos muchas noticias. Pero esperemos pronto nos digan con exactitud quienes pasaron a la siguiente ronda.

domingo, 12 de junio de 2011

Programación Java. Problema 02: Re-acomodar arreglos y matrices

Continuando con los problemas de programación, que básicamente intento sean de lógica y cualquiera en cualquier lenguaje los podría plantear y resolver (aunque aquí la solución propuesta la pongo en java). Bueno, en fin, continuemos.

Problema
En el caso que tuviéramos un arreglo de números de cualquier longitud. Re-acomodar los números moviendo el primer numero a la ultima posición, y el ultimo a la primer posición, el segundo numero a la penúltima posición y el penúltimo a la segunda, y así sucesivamente.

Digamos el arreglo:
0 1 2 3 4 5 6 7 8 9
Re-acomodarlo a:
9 8 7 6 5 4 3 2 1 0
También podríamos elaborar un programa que haga algo similar, pero con una matriz

La matriz:
0  1  2   3  4  5  6  7  8  9
10 11 12 13 14 15 16 17 18 19
Re-acomodarla a:
 9  8  7  6  5  4  3  2  1  0
19 18 17 16 15 14 13 12 11 10
Solución:
Al igual que el problema pasado, el código de la solución lo pondré mañana.
Básicamente se podría resolver con un ciclo for.

sábado, 11 de junio de 2011

Programación Java. Problema 01: Ordenar datos / números.

 En el caso que tuviéramos un arreglo de números, y los quisiéramos ordenar, ya sea para obtener el numero mayor, el menor, el dato que se repite más veces, etc. Tendríamos que re ordenar el arreglo, acomodando los números ya sea del menor al mayor, o del mayor al menor.

Para esto existen diversos métodos. Como el método de la burbuja (bubble sort), shaker sort, quick sort, etc.

Durante los temas que iré poniendo, estaré obviando mucho lo que es la explicación, y solo daré un enunciado del problema y en algunas ocasiones el código del problema resuelto, aunque existen diversas formas de resolver algunos problemas, y cada código seria distinto.

Problema.
Dado un numero entero N, crear un arreglo de N elementos. Llenar el arreglo con numeros generados aleatoriamente del 1 al 20, o ingresarlos manualmente. Imprimir el arreglo generado, ordenar los números del menor al mayor e imprimirlos.

Solución:
Intentar resolverlo en base a su lógica, intenten no buscar ningún método de ordenamiento en Internet (en caso de no conocerlos).

Solución propuesta 1
//Despues de tener un arreglo con numeros enteros.
for(i=0; i < arreglo.length; i++ ) {
   for(j=1;jarreglo[j]){
          aux = arreglo[i]; //Guardamos en una variable aux, el valor actual de arreglo[i]
          arreglo[i]=arreglo[j]; //Sobreescribimos arreglo[i]
          arreglo[j]=aux;  //Sobreescribimos arreglo[j]
      }//Fin del IF
   } //Fin del for anidado
}//Fin del primer for
//Fin del programa

Solución propuesta 2:
//Despues de tener un arreglo llamado "values" con numeros enteros.
do {
    boolean swapped = false;
    for(var i = 0; i < values.length; i++) {
      if (values[i] > values[i+1]) {
        int temp = values[i];
        values[i] = values[i+1];
        values[i+1] = temp;
        swapped = true;
      }
    }
  }
  while(swapped == true)


Básicamente se cambian de lugar los 2 números que se comparan, en caso que uno sea mayor al otro.

En la siguiente pagina pueden encontrar una animación donde se explica un poco mejor el funcionamiento de esta solución propuesta, conocida como el método de la burbuja.
http://algorithms.openmymind.net/sort/bubblesort

También les dejo un video del "Baile del Bubble Sort"
http://www.youtube.com/watch?v=lyZQPjUT5B4

Fuente: http://algorithms.openmymind.net/sort/bubblesort

miércoles, 18 de febrero de 2009

Principios de programación - Algoritmos y Diagramas de Flujo

Bueno, ahora con el inicio del nuevo semestre en las escuelas, me a tocado una materia de especialidad que a mi parecer será interesante ir comentando algunas cosas de las que voy aprendiendo (o que ya sabia). Para los lectores o personas que necesitan este tipo de información.

Antes de empezar a programar, en cualquier lengüaje, es bueno tener las bases y todo ese tipo de cosas que muchas veces creemos no nos va a servir de nada xD.

Lo primero es saber que es un algoritmo, un diagrama de flujo y un pseudo-codigo.

Para hacerlo de forma simple, solo dejo una explicacion sencilla.

Algoritmo: Es una secuencia de pasos a seguir para llegar a un resultado.

Diagrama de Flujo: Es una forma grafica de expresar el algoritmo.

Pseudocodigo: Viene siendo como el algoritmo ya pensado de una forma en como va a quedar en el codigo. Con esto me refiero, es una serie de instrucciones de codigo mezcladas con palabras de nuestra lengüa.

Para más informacion, siempre esta Google, o la Wikipedia en donde podran encontrar mejores definiciones y más información.