miércoles, 21 de diciembre de 2011

Primer Post Curso CITE 2011

¡Hola chavos! Oficialmente estamos ya dejando avisos en este blog. Este es nuestro primer post y aprovecho para comentarles sobre las actividades pendientes hasta el momento.

En este espacio les dejaremos algunos de los ejemplos que hayamos visto en clase así como problemas para resolver por su cuenta así que estén pendientes. Recuerden mandar sus soluciones al problema pendiente de la última clase. Necesitamos también que adjunten los casos de prueba con los que probaron su código. Las soluciones las pueden mandar a cualquiera de los mails que les dejamos. La fecha límite de recepción de soluciones es el siguente sábado (el domingo no se recibirá ningún mail). Esperamos recibir sus respuestas!

Los problemas vistos en clase fueron:

  • Rekreo
  • Edukarel
Las descricpciones de ambos están en el manual. El problema de edukarel quedó pendiente, así que su tarea es resolverlo completamente y mandar la solución y casos.


Disfruten sus vacaciones!

jueves, 3 de marzo de 2011

Clase del sabado 19 de febrero

Cada vez los problemas van siendo mas dificiles, el dia de hoy le toco a el problema de "La Marcha"

Descripción
Harto de la inseguridad, Karel como muchos otros ciudadanos, marcho del Angel de Reforma al Zócalo de la Ciudad de México el domingo 27 de junio.

Al final de la marcha, impresionado por la cantidad de gente, Karel se dio a la tarea de obtener el número total de participantes en la marcha.


Problema
Tu tarea consiste en escribir un programa que le permita a Karel conocer la cantidad total de hombres y mujeres que asistieron a la marcha.

Consideraciones
-La marcha se representa como un rectángulo de zumbadores con su esquina inferior izquierda en la posición (1,2) que puede tener un ancho máximo de 90 columnas y una altura máxima de 90 filas.
-Todas las casillas de dicho rectángulo tienen 1 ó 2 zumbadores, en donde 1 zumbador representa a una mujer y 2 zumbadores representan a un hombre.
-Al inicio del programa Karel se encuentra en la posición (1,1) orientado hacia el norte.
-Inicialmente, Karel no tiene zumbadores en la mochila.
-Karel deberá dejar en la posición (1,1) una cantidad de zumbadores igual al número de mujeres en la marcha, y en la posición (2,1) una cantidad de zumbadores igual al número de hombres que asistieron a la marcha.
-No importa la posición final ni la orientación con la que termine Karel.
-No importa si Karel levanta o no a los participantes de la marcha.

Ejemplo Mundo Inicial
Imagen

Mundo Final
Imagen

Solucion

iniciar-programa
    define-nueva-instruccion camina como inicio
        avanza;
        si no-junto-a-zumbador entonces inicio
            gira-izquierda;
            gira-izquierda;
            mientras frente-libre hacer inicio
                avanza;
            fin;
            gira-izquierda;
            avanza;
            gira-izquierda;
            avanza;
        fin;
    fin;
    define-nueva-instruccion regresa como inicio
        gira-izquierda;
        mientras frente-libre hacer inicio
            avanza;
        fin;
        gira-izquierda;
        avanza;
        gira-izquierda;
    fin;
    define-nueva-instruccion recoge como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si junto-a-zumbador entonces inicio
                coge-zumbador;
                camina;
                recoge;
            fin sino inicio
                camina;
                recoge;
                deja-zumbador;
            fin;
        fin sino inicio
            regresa;
        fin;
    fin;
    define-nueva-instruccion dejamitad como inicio
        si algun-zumbador-en-la-mochila entonces inicio
            deja-zumbador;
            deja-zumbador;
            dejamitad;
            coge-zumbador;
        fin;
    fin;
    inicia-ejecucion
        avanza;
        recoge;
        avanza;
        dejamitad;
        apagate;
    termina-ejecucion
finalizar-programa

miércoles, 23 de febrero de 2011

Clase 12 de febrero

Este dia se hizo un problema mas complicado:


Autopista

10a OMI, Durango 2005

Descripción

En Beeperópolis han construido su primera autopista. La autopista esta delimitada por paredes y atraviesa la ciudad de norte a sur, debido a las irregularidades del terreno, el ancho de la autopista varía a lo largo de la misma.
Sin embargo, los habitantes tienen un grave problema ya que no cuentan con la línea central que divide los carriles de ida y de vuelta. Afortunadamente Karel es jefe de tránsito y siempre esta dispuesto a resolver los problemas de Beeperopolis, por lo que se ha dado a la tarea de dibujar dicha línea.

Problema

Ayuda a Karel a poner la línea divisoria en la autopista, esta será formada por zumbadores y deberá dividir por la mitad la autopista desde el norte hasta el sur.
No debe de quedar ningún zumbador en una posición que no pertenezca a la línea divisoria. En cada posición de la línea divisoria, deberá haber únicamente un zumbador.

Consideraciones

  • Karel lleva un número INFINITO de zumbadores en su mochila.
  • Karel inicia en cualquier lugar del extremo norte de la autopista con dirección al sur.
  • No hay paredes ni zumbadores dentro de la autopista.
  • En cualquier fila de la autopista, el espacio entre ambas paredes es un número impar desconocido.
  • La línea deberá estar formada por montones de 1 zumbador y deberá ser de ancho 1 y no deberá haber zumbadores en ningún otro lugar de la autopista.
  • No importa la posición ni orientación final de Karel.

Ejemplo mundo inicial
Mundo final


    Solucion

    iniciar-programa
        define-nueva-instruccion inicia como inicio
            gira-izquierda;
            gira-izquierda;
            gira-izquierda;
            mientras frente-libre hacer inicio
                avanza;
            fin;
            gira-izquierda;
            gira-izquierda;
        fin;
        define-nueva-instruccion mide-mitad como inicio
            si frente-libre entonces inicio
                avanza;
                avanza;
                mide-mitad;
                avanza;
            fin sino inicio
                gira-izquierda;
                gira-izquierda;
            fin;
        fin;
        define-nueva-instruccion busca-abajo como inicio
            mientras derecha-bloqueada y frente-libre hacer inicio
                avanza;
            fin;
            si derecha-bloqueada entonces inicio
               gira-izquierda;
            fin sino inicio
                gira-izquierda;
                gira-izquierda;
                gira-izquierda;
                avanza;
            fin;
        fin;
        inicia-ejecucion
            mientras no-orientado-al-norte hacer inicio
                inicia;
                mide-mitad;
                deja-zumbador;
                mientras frente-libre hacer inicio
                    avanza;
                fin;
                gira-izquierda;
                gira-izquierda;
                busca-abajo;
            fin;
            apagate;
        termina-ejecucion
    finalizar-programa

    Clase sabado 22 de enero

    Hola, esta clase, vimos una pequeña introduccion a la recursividad explicandola con el problema de medir distancia, el problema consiste en:

    Medir distancia

    Karel se encuentra en la posicion 1,1 viendo hacia el este. Karel tiene que caminar hasta la pared que se encuentra frente de el algunos pasos adelante y dejar el numero de zumbadores igual a la distancia que recorrio.

    Ejemplo mundo inicial
    Mundo final




    Solucion:

    iniciar-programa
        define-nueva-instruccion mide como inicio
            si frente-libre entonces inicio
                avanza;
                mide;
            fin;
            deja-zumbador;
        fin;
        inicia-ejecucion
            mide;
            apagate;
        termina-ejecucion
    finalizar-programa

    Otro problema que se hizo fue el de multiplicar por dos

    Descripcion

    Nuestro querido Karel nos ha visitado en la FAMAT y como resultado aprendío a
    multiplicar por 2, tristemente perdio el código donde le mostraba como multiplicar. Tu
    misión es escribir un programa que multiplique por 2.

    -Karel inicia mirando al Este, en la posición (1,B)
    -Karel debe llegar a las coordenadas (2B,1), poner un beeper (el único que carga) y termina.
    -No hay obstaculos en tu camino
    -Antes de correr tu programa asegurate de ponerle un beeper a Karel en su beeper_bag



    Solucion

    iniciar-programa
        define-nueva-instruccion multiplica como inicio
            si frente-libre entonces inicio
                avanza;
                multiplica;
                avanza;
                avanza;
            fin sino inicio
                gira-izquierda;
                avanza;
            fin;
        fin;
        inicia-ejecucion
            gira-izquierda;
            gira-izquierda;
            gira-izquierda;
            multiplica;
            apagate;
        termina-ejecucion
    finalizar-programa

    viernes, 21 de enero de 2011

    Clase 18 de diciembre

    Hola, bueno pues este dia resolvimos un problema y medio a continuacion pongo la solucion de ellos

    Problema C-1

    Descripcion
    Escribe un programa que, con los beepers que Karel tenga disponibles en su bolsa, construya una escalera del número apropiado de escalones.
    Consideraciones
    • Karel inicia mirando al Norte, en la esquina inferior izquierda de su mundo.
    • Karel siempre tendrá un número triangular de beepers en su bolsa al iniciar el programa.
    • No hay obstáculos en tu camino
    • No importa en que posición y orientación tenga Karel al finalizar.

    Ejemplo de prueba con 6 beepers

    Solucion

      
    Codigo
    iniciar-programa
    define-nueva-instruccion comienza como inicio
        si algun-zumbador-en-la-mochila entonces inicio
            deja-zumbador;
        fin;
    fin;
    define-nueva-instruccion subir como inicio
        mientras junto-a-zumbador hacer inicio
           avanza;
        fin;
    fin;
    define-nueva-instruccion cambia-fila como inicio
        gira-izquierda;
        gira-izquierda;
        gira-izquierda;
        avanza;
        gira-izquierda;
        gira-izquierda;
        gira-izquierda;
    fin;
    define-nueva-instruccion baja como inicio
        mientras frente-libre hacer inicio
            deja-zumbador;
            avanza;
        fin;
        deja-zumbador;
        gira-izquierda;
        gira-izquierda;
    fin;
        inicia-ejecucion
            comienza;
            mientras algun-zumbador-en-la-mochila hacer inicio
                subir;
                cambia-fila;
                baja;
            fin;
            apagate;
        termina-ejecucion
    finalizar-programa

    El problema 2 es el siguiente:

    Igualando las columnas

    Descripción del problema:
    Incialmente Karel se encuentra orientado al ESTE en la posición (1,6) de su mundo. Comenzando por la primera columna donde esta Karel y hacia la derecha hay 10 columnas de zumbadores de diferentes alturas. Cada columna es una secuencia ininterrumpida de posiciones con 1 zumbador (ver figura de ejemplo). Las columnas tienen alturas diferentes que pueden ir desde 1 hasta 20.
    A la derecha de las 15 columnas hay una pared vertical que se eleva hasta la posición 30.
    Debes escribir un programa que haga que Karel iguale la altura de todas las columnas pasando zumbadores de una columna a otra.
    Importante: No debe de haber mas de un zumbador por posición.
    NOTA: En los casos de prueba que se utilizarán para calificar tu programa, el número de zumbadores será tal, que siempre se podrá igualar la altura de todas las columnas.

     Solución del mundo de ejemplo:
     La solucion de este problema se dara hasta que este completa en la clase.