Your SlideShare is downloading. ×
  • Like
07 Logica Programacion
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

07 Logica Programacion

  • 1,312 views
Published

Sentencia IF y ELSE

Sentencia IF y ELSE

Published in Education , Travel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,312
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Curso de Lógica y Programación Tema 4: Ejecución condicional de instrucciones María Claudia Lara Universidad de San Buenaventura Cali Primer Semestre de 2008
  • 2. Instrucción IF/THEN/ELSE (1)
    • El segundo tipo de instrucción IF en el vocabulario de Karel es la instrucción IF/THEN/ELSE
    • La instrucción IF/THEN/ELSE resulta útil cuándo, dependiendo del resultado de alguna prueba, Karel debe ejecutar una de dos instrucciones alternativas.
    • La instrucción IF/THEN/ELSE tiene la siguiente forma general:
    IF <prueba> THEN begin <instrucción-1>; end ELSE begin <instrucción-2>; end;
  • 3. Instrucción IF/THEN/ELSE (2)
    • La forma de IF/THEN/ELSE es similar a la instrucción IF/THEN, excepto por incluir además una cláusula ELSE .
    • La forma de IF/THEN/ELSE puede verificar las mismas pruebas que la instrucción IF/THEN.
    • El error de puntuación más común en IF/THEN/ELSE consiste en colocar un punto y coma antes de la palabra reservada ELSE. No se debe colocar ningún punto y coma en ese lugar.
    • Las cláusulas THEN Y ELSE tienen la misma sangría.
    IF <prueba> THEN begin <instrucción-1>; end ELSE begin <instrucción-2>; end;
  • 4. Instrucción IF/THEN/ELSE (3)
    • Karel ejecuta esta instrucción casi de la misma forma que una IF/THEN: primero determina si <prueba> es cierto o falso en la situación presente. Si determina que <prueba> es cierto, Karel ejecuta <instrucción-1>; de lo contrario, si determina que <prueba> es falso, ejecuta <instrucción-2>. Así, dependiendo de su situación, Karel ejecuta ya sea <instrucción-1> o <instrucción-2> pero no ambas.
    IF <prueba> THEN begin <instrucción-1>; end ELSE begin <instrucción-2>; end;
  • 5. Instrucción IF/THEN/ELSE (4) Ahora se verá una nueva tarea que, convenientemente, implica la instrucción IF/THEN/ELSE. Supóngase que se desea programar a Karel para que corra una carrera de obstáculos de una milla, en donde secciones verticales de pared representan las vallas. Se sabe que las vallas tienen una altura de tan sólo una cuadra, pero pueden estar colocadas al azar entre cualesquiera dos esquinas en el curso de la carrera. Uno de los diversos cursos para esta carrera se ilustra en la figura. Situación inicial Situación final y trayectoria seguida por Karel
  • 6. Instrucción IF/THEN/ELSE (5) beginning-of-execution corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; turnoff; end-of-execution define-new-instruction corre-a-zancadas as begin IF front-is-clear THEN begin move; end ELSE begin brinca-la-valla; end; end; define-new-instruction brinca-la-valla as begin brinca; move; baja; end; define-new-instruction brinca as begin turnleft; move; turnright; end; define-new-instruction baja as begin turnright; move; turnleft; end; define-new-instruction turnright as begin turnleft; turnleft; turnleft; end; Se debe programar a Karel para moverse en línea recta mientras pueda, y brincando las vallas sólo cuando deba hacerlo. Utilizando el refinamiento paso por paso.
  • 7. Instrucción IF/THEN/ELSE (6) define-new-instruction corre-a-zancadas as begin IF front-is-clear THEN begin move; end ELSE begin brinca-la-valla; end; end; beginning-of-execution corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; corre-a-zancadas; turnoff; end-of-execution end-of-program beginning-of-program define-new-instruction turnright as begin turnleft; turnleft; turnleft; end; define-new-instruction baja as begin turnright; move; turnleft; end; define-new-instruction brinca as begin turnleft; move; turnright; end; define-new-instruction brinca-la-valla as begin brinca; move; baja; end; El orden de las instrucciones se debe invertir al incorporarlas al programa completo
  • 8. Instrucciones IF incluidas (1)
    • Las instrucciones IF incluidas se escriben en la forma de una instrucción IF incluida dentro de la cláusula THEN o ELSE de otro IF.
    • No se requieren nuevas reglas de ejecución para simular IF incluidas, pero sí se requiere seguir paso a paso las reglas establecidas.
  • 9. Instrucciones IF incluidas (2)
    • Para demostrar una instrucción IF incluida, se propone una tarea que redistribuye los zumbadores en un campo. Esta tarea requiere que Karel atraviese por un campo y coloque exactamente un zumbador en cada esquina. Debe plantar un zumbador en cada esquina vacía y levantar un zumbador de cada esquina en donde coexistan dos zumbadores. Todas las esquinas en esta tarea están limitadas a tener cero, uno o dos zumbadores. Una muestra de la situación inicial y final se ilustra en la figura. Se puede suponer que Karel cuenta con suficientes zumbadores en su bolsa como para replantar los zumbadores faltantes.
    Situación inicial Situación final Existen aproximadamente 200 trillones de campos distintos que el programa puede replantar en forma correcta (existen 3 distintas posibilidades y hay 30 esquinas en el campo. El número total de campos diferentes es 3 a la 30, en donde 3 se multiplica por sí mismo 30 veces. El número exacto de campos diferentes es 205,891,132,094,649)
  • 10. Instrucciones IF incluidas (3)
    • define-new-instruction replanta-exactamente-1-beeper as
    • begin
    • IF not-next-to-a-beeper THEN
    • begin
    • putbeeper;
    • end
    • ELSE
    • begin
    • pickbeeper;
    • IF not-next-to-a-beeper THEN
    • begin
    • putbeeper;
    • end;
    • end;
    • end;
    Situación inicial Situación final La instrucción IF incluida se encuentra dentro de la cláusula ELSE del IF externo.
  • 11. Instrucciones IF incluidas (4)
    • Se Simulará con Karel las tres posibles situaciones: en una esquina vacía, en una esquina con un beeper y en una esquina con dos beepers.
    • En la situación de la esquina vacía Karel ejecuta el IF externo y determina que no está colocado junto a un zumbador; por lo tanto, ejecuta la instrucción putbeeper de la cláusula THEN del IF externo, colocando un beeper en la esquina. En ese momento ha ejecutado completamente la cláusula THEN de la instrucción IF externa, por lo que ha terminado de ejecutar el IF externo. Debido a que solamente existe una gran instrucción IF en esta definición, Karel ha terminado de ejecutar replanta-exactamente- 1-beeper , la cual se ha verificado que es correcta en la situación en que no existe ningún beeper.
    • A continuación se supone que existe un beeper en la esquina de Karel. En este caso, Karel ejecuta el IF externo y determina que la prueba es falsa ya que sí está colocado junto a un beeper, así que comienza a ejecutar la cláusula ELSE. Esta cláusula es un bloque BEGIN/END que comprende dos instrucciones. Primero, Karel ejecuta pickbeeper, levantando el único zumbador colocado en la esquina. A continuación, Karel ejecuta la instrucción IF incluida y encuentra que no hay más beepers en su esquina; por lo tanto, ejecuta a continuación la cláusula THEN de esta instrucción IF, la cual le ordena colocar nuevamente un beeper en la esquina vacía. En este momento Karel ha concluido la instrucción IF incluida, el bloque BEGIN/END y toda la cláusula ELSE, el IF externo y toda la instrucción replanta-exactamente-1-beeper. Por lo tanto, Karel también maneja en forma correcta la situación en la que existe un zumbador.
  • 12. Instrucciones IF incluidas (5)
    • Finalmente, se supone que Karel se encuentra en una esquina en donde hay dos zumbadores. En este caso, Karel ejecuta el IF externo, determina que la prueba es falsa y después ejecuta la cláusula ELSE. Inicia el bloque BEGIN/END ejecutando primero pickbeeper, levantando uno de los dos zumbadores colocados en la esquina. En este punto Karel ha duplicado sus acciones respecto a la situación en la que solamente existe un zumbador, pero en este momento se presenta la diferencia en su ejecución. Al ejecutar la instrucción IF incluida, Karel determina que hay un zumbador en la esquina, así que se brinca a la cláusula THEN de la IF incluida. Nuevamente, Karel ha terminado de ejecutar la IF incluida, el bloque BEGIN/END, toda la cláusula ELSE, el IF externo y toda la definición de la instrucción replanta-exactamente-1-beeper. Como en los casos anteriores, el resultado es que ha dejado solamente un beeper en la esquina. Entonces, ya se ha verificado que la instrucción replanta-exactamente-1-beeper es completamente correcta.
    • Una buena regla general es evitar incluir instrucciones IF más allá del primer nivel de profundidad.
    • Para probar si el programa funciona correctamente es posible considerar el uso del viejo método de verificación y probar el programa con Karel colocado en todas las situaciones iniciales posibles, pero existen aproximadamente 200 trillones de campos distintos que este programa puede replantar en forma correcta. Resulta entonces hasta cierto punto imposible y sin sentido tratar de verificar el programa colocando a Karel en todas las situaciones iniciales posibles.
  • 13. Instrucciones IF incluidas (6)
    • Como una alternativa, será suficiente un grado de corrección basado en el siguiente argumento informal:
      • Se ha verificado que replanta-exactamente-1-beeper funciona correctamente en cualquier esquina vacía o en cualquiera que contenga uno o dos beppers
      • Se puede verificar fácilmente si el programa ordena a Karel que ejecute esta instrucción en cada una de las esquinas del campo.
      • Por lo tanto, se pueden combinar estas dos verificaciones y concluir que el programa replanta todo el campo en forma correcta.
    • En general, se puede concluir informalmente que un programa es totalmente correcto verificando que:
      • Cada instrucción definida en el programa funciona correctamente en todas las situaciones posibles en que se puede ejecutar.
      • El programa ejecuta cada instrucción definida en el momento adecuado.
      • Este método permite verificar un programa dividiéndolo en verificaciones individuales más sencillas (de la misma forma que la refinación paso por paso permite escribir un programa dividiéndolo en instrucciones individuales más sencillas)
  • 14. Taller
    • Taller individual.
    • Los problemas de esta sección requieren que se utilice la instrucción IF en sus dos formas. Trate de utilizar la refinación paso por paso en estos problemas, pero sin importar el método que emplee para obtener una solución, trate de escribir programas claros y comprensibles. Mantenga reducido el nivel de inclusión en aquellos problemas que requieran instrucciones IF incluidas. Utilice la puntuación y las reglas gramaticales adecuadas, especialmente dentro de las cláusulas THEN y ELSE de las instrucciones IF. Simule cuidadosamente cada definición y programa que escriba para asegurar que no haya errores de ejecución o de intento.
    • Defina voltea-al-sur, una instrucción nueva que hace que Karel voltee hacia el sur sin importar la dirección hacia la que está volteado inicialmente. Primero, hágalo sin utilizar voltea-al-norte como una instrucción conocida. Experimente con distintas formas de las instrucciones IF/THEN e IF/THEN/ELSE y escríbalas en el taller. Posteriormente, escriba la instrucción voltea-al-sur, suponiendo que la instrucción voltea-al-norte ya se ha definido. Esta segunda definición deberá ser mucho más sencilla y, dado que voltea-al-norte es correcta, deberá resultar mucho más fácil convencer a cualquier persona de que voltea-al-sur es correcta.
  • 15. Taller
    • Supóngase que Karel se encuentra en una esquina que contiene uno o dos zumbadores. Escriba una nueva instrucción que ordene a Karel que voltee hacia el norte si inicia su tarea en una esquina con un zumbador y que voltee hacia el sur si inicia su tarea en una esquina con dos zumbadores. Además de quedar volteado en la dirección requerida, después de que Karel haya terminado la ejecución de esta instrucción no deberá quedar ningún zumbador en la esquina. Nombre esta instrucción como encuentra-siguiente-dirección.
    • Escriba otra versión de encuentra-siguiente-dirección (véase el problema anterior). En esta versión, Karel finalmente deberá voltear en ambas direcciones, pero también deberá dejar el mismo número de zumbadores que había en la esquina en que se encontraba inicialmente.
    • Escriba una instrucción que apague a Karel si se encuentra completamente rodeado de paredes y le resulta imposible moverse en cualquier dirección. Si no se encuentra completamente rodeado, Karel deberá ejecutar esta instrucción permaneciendo encendido y quedándose en la misma esquina, volteado en la misma dirección en la cual inició su tarea. Nombre esta instrucción apágate-si-estás-rodeado. Clave: para escribir esta instrucción en forma correcta, deberá incluirse en ella una instrucción apágate. Esta combinación es perfectamente legal, pero es la primera ocasión en que utilizará una instrucción apágate fuera del bloque BEGINNING-OF-EXECUTION/END-OF-EXECUTION.
  • 16. Taller
    • Programe a Karel para que corra una carrera con obstáculos variados de una milla. El curso de la carrera es similar al de la carrera con obstáculos, pero en este problema las vallas pueden ser de una, dos o tres cuadras de alto. En la figura se ilustra una situación inicial de muestra, en la que la situación final y la trayectoria de Karel se indican a la derecha.
  • 17. Taller
    • Escriba una instrucción llamada sigue-pared-derecha suponiendo que siempre que Karel ejecuta esta instrucción hay una pared directamente a su derecha. La figura muestra los cuatro distintos cambios de posición que Karel debe ser capaz de efectuar. Esta instrucción es la piedra angular para un programa que dirige a Karel para salir de un laberinto.