Juan Camilo Muñoz Castelblanco

Ejercicios de la lectura 3

Baldwin, Douglas. Algorithms and Data Structures : The Science of Computing.

 

3.4       Consider the problem of making Robin the robot back up one tile. The precise preconditions and postconditions for this problem are as follows:

Preconditions:

·  There are no obstructions within two tiles of Robin, in any direction

Postconditions:

·  Robin is one tile behind (relative to its original direction) its original position.

·  Robin is facing in its original direction.

Prove that each of the following algorithms correctly solves this problem:

ALGORITHM 1

 

   Algorithm 1
      robin.turnLeft();
      robin.turnLeft();
      robin.move();
      robin.turnLeft();
      robin.turnLeft();

 

Precondicion

No hay obstaculos para que Robin se mueva dos azalejos en cualquier direccion.

Teorema

Despues de que el algoritmo finalice Robin está una posicion atrás de la posicion original y está mirando hacia la direccion original.

Demostración:

En las dos primeras líneas Robin gira hacia la izquierda, es decir queda mirando en el sentido contrario a la posicion original.

Luego se mueve una vez robin.move(); así queda una posición atrás de la original.

Finalmente en las dos últimas líneas gira hacia la izquierda dos veces y queda mirando en el mismo sentido de la posición original.

Cuando el algoritmo finaliza la poscondicion se cumple.

 

 

ALGORITHM 2

 
Algorithm 2
      robin.turnLeft();
      robin.move();
      robin.turnLeft();
      robin.move();
      robin.turnLeft();
      robin.move();

              robin.turnLeft();

Precondicion

No hay obstaculos para que Robin se mueva dos azalejos en cualquier direccion.

Teorema

Despues de que el algoritmo2 finalice Robin está una posicion atrás de la posicion original y está mirando hacia la direccion original.

Demostración:

El primer paso es girar hacia la izquierda, luego Robin se mueve un tile, al girar a la izquierda y desplazarse una posicion el robot queda mirando en la direccion opuesta a la original. Luego vuele a girar a la izquierda y avanza una posicion y queda ubicado exactamente una posicion atrás de la original.

Al volver a girar hacia la izquierda Robin resulta mirando en la misma direccion de la posicion original. Esto satisface la poscondicion

 

ALGORITHM 3

 

   Algorithm 3
      robin.turnRight();
      robin.turnRight();
      robin.move();
      robin.turnLeft();

            robin.turnLeft();

 

Precondicion

No hay obstaculos para que Robin se mueva dos azalejos en cualquier direccion.

Teorema

Despues de que el algoritmo3 finalice Robin está una posicion atrás de la posicion original y está mirando hacia la direccion original.

Demostración:

Robin se mueve dos veces a la derecha y avanza una posicion, de ésta manera queda una posicion atrás de la posicion original y en sentido opuesto. Al girar dos veces de nuevo a la derecha el robot queda mirando en la misma dirección de la posición original, lo cual cumple con la poscondición.

 

 

3.5   Explain why each of the following is or is not a valid use of modus ponens:

1.      Birds have wings. Having wings implies being able to fly. Therefore, birds are able to fly.

Tener alasà ser capaz de volar

        Los pájaros tienen alas       .                                                                                           Los pájaros son capaces de volar

Aplica correctamente modus ponens puesto que concluimos la consecuencia del antecedente que es que los pájaros tienen alas.

2.      Sue always wears sunglasses when driving. Sue is driving now. Therefore, Sue is wearing sunglasses now.

Sue está manejando à Sue usa gafas de sol

        Sue está manejando ahora       .                                                                                           Sue está usando gafas de sol

Aplica correctamente modus ponens puesto que concluimos la consecuencia (Sue está usando gafas de sol) del antecedente.

3.      Dogs do not have wings. Having wings implies being able to fly. Therefore, dogs can't fly.

Tener alasà ser capaz de volar

         Los perros tienen alas         .                                                                                             Los perros son capaces de volar

Aplica correctamente modus ponens. Si negamos el antecedente concluimos la negación del consecuente.

4.      Birds fly. Having wings implies being able to fly. Therefore, birds have wings.

Tener alasà ser capaz de volar

           Los pájaros vuelan           .                                                                                           Los pájaros tienen alas

En éste caso no se aplica correctamente modus ponens, ya que sólo permite deducir la consecuencia del antecedente y no en dirección contraria (Si los pájaros vuelan entonces tienen alas).

5.      If A and B are both positive, and A < B, then 1/A > 1/B. 2 < 2.5, and 2.5 < 3. Therefore, 1/2.5 lies between 1/2 and 1/3.

Si A y B son positivos y A < Bà 1/A > 1/B

Aplicando correctamente modus ponens tenemos:

       2 < 2.5    .                                                                                                      1/2 > 1/2.5

       2.5 < 3    .                                                                                                      1/2 .5> 1/3

De lo anterior que 1/2 > 1/2.5 > 1/3

6.      Any composite number is the product of two or more prime numbers. 18 is composite. Therefore, 18 is the product of two or more prime numbers.

Número compuesto à es producto de dos o más números primos

                 18 es un número compuesto             .                                                                                          18 es producto de dos o más números primos

Aplica correctamente modus ponens puesto que concluimos la consecuencia del antecedente.

 

 

7.      Any composite number is the product of two or more prime numbers. 18 is composite. Therefore, 18 = 3×3×2.

Número compuesto à es producto de dos o más números primos

  18 es un número compuesto  .                                                                                          18 = 3 x 3 x 2

Aunque la conclusión es correcta no se está aplicando adecuadamente modus ponens puesto que no concluimos la consecuencia del antecedente.

8.      If a baseball player drops the ball, then he or she is a bad baseball player. I once saw a college baseball player drop the ball. Therefore, all college baseball players are bad baseball players.

Jugador de béisbol deja caer la bola à Es mal jugador de béisbol

   Un jugador universitario de béisbol dejó caer la bola .                                                                                          Todos los jugadores universitarios son malos

No aplica correctamente modus ponens puesto que si un jugador universitario deja caer la bola de béisbol no podemos concluir que TODOS los jugadores de la universidad son malos jugadores de béisbol.

9.      Any person who hand-feeds piranhas is crazy. Therefore, this book's first author is crazy.

Quien da de comer de su mano a las pirañas à Está loco

No hay razones suficientes concluir que el autor principal del libro está loco. No se aplica correctamente modus ponens.

3.6  Which steps in the correctness proof for the secondsSinceMidnight method would be invalid if hour or minute included a fractional part? What if hour were greater than 23, or minute or second greater than 59?

class Time{
       private int hour;
       private int minute;
       private int second;
 
       public void setTime(int h, int m, int s) {
           hour = h;
           minute = m;
           second = s;       }
public int secondsSinceMidnight() {
       return (hour * 60 + minute) * 60 + second;    }
       }

· Las variables hour, minute no pueden tener parte fraccionaria, ya que en el algoritmo están declaradas como private int y el programa al compilarlo arrojaría una excepción.       

Si éstas variables contienen parte fraccionaria en el método secondsSinceMidnight(), la expresión (hour * 60 + minute) no computa el número de minutos entre la medianoche y hour:minute:0. Al mutiplicar el anterior resultado por 60 y sumarlo con seconds no tendríamos el total de segundos trasncurridos según las exigencias de la poscondición

· Si  la variable hora fuera mayor que 23 o las variables minutos o segundos fueran mayores a 59 igualmente la prueba de correctitud estaría bien hecha ya que contempla ésta restricción. De no ser así no retornaría el número de segundos transcurridos desde la medianoche inmediatamente anterior hasta el tiempo hour:minute:second.

Hosted by www.Geocities.ws

1