La alternativa
Introducción
En este capítulo vamos a ver una de las estructuras fundamentales de la algoritmia: «la estructura de elección» o «la alternativa». Como su nombre indica, permite elegir un tratamiento, entre varios posibles, según las condiciones establecidas en función del contexto y de los datos que hay que tratar.
En el segundo apartado se presenta la alternativa, con ayuda de un ejemplo trivial interpretado en varias versiones. La finalidad es mostrar el uso de la estructura nueva especificando el vocabulario. En el tercer apartado encontraremos ejercicios resueltos y en el último, ejercicios de aplicación.
Definición de la alternativa
Este apartado no propone una definición formal de la alternativa. Solo la presenta mediante un ejemplo con diferentes versiones que permiten especificar algunos puntos de método.
Ejemplo: ordenar dos variables
Consideramos dos datos a y b de un tipo T cualquiera, pero comparables. En otras palabras, los datos de tipo T son mutuamente comparables. Por lo tanto, hay una relación de orden total, representada por ≤, en los datos de tipo T.
Esto significa que, dados dos elementos a y b de tipo T, siempre se pueden comparar, por ejemplo: para designar cuál es inferior o igual al otro. Los datos a y b pueden ser números, como números enteros, por ejemplo, pero esa no es la única posibilidad. También pueden ser caracteres o cadenas de caracteres, como frases que se utilizan habitualmente, por ejemplo, porque el orden alfabético, entre otros, permite compararlos. Para indicar que el tipo T es cualquiera, pero que todos los datos de tipo T se pueden comparar entre ellos, por convención escribiremos:
a, b: T COMPARABLE
Así se indica que el tipo T deriva del tipo COMPARABLE, o que todos los datos de tipo T también son de tipo COMPARABLE. Otra manera de representar la misma idea es especificar que a y b pertenecen al tipo (T, ≤):
a, b: (T, ≤)
Queremos escribir un algoritmo que clasifique a y b en orden creciente.
Se trata de escribir la definición de una serie de instrucciones que dejan a y b tales que a ≤ b. Entonces ya se puede dar la especificación del algoritmo con lo que hemos aprendido en el capítulo «Programas directos». El algoritmo que aparece aquí debajo proporciona esta especificación.
Algoritmo 1: Especificación de la clasificación de dos datos comparables |
Algoritmo clasificar
# Clasifica ‘a' y ‘b' en orden creciente.
Entrada
a, b: T COMPARABLE
poscondición
a ≤ b
fin clasificar
En la realización de este algoritmo, solo aporta alguna novedad la operación de clasificación de los dos números. Vamos a verla en detalle:
# Clasificación de dos datos comparables en orden creciente.
si
a...
Ejercicios resueltos
Ejercicio resuelto 1: Ordena tres datos comparables |
Dados tres datos de tipo T que es un derivado de COMPARABLE.
Escribir el algoritmo que clasifica estos tres datos en orden creciente.
Solución
Las especificaciones son sencillas y se parecen a las de ordenar dos elementos.
Algoritmo 10: Ordena tres datos comparables: Especificación |
Algoritmo clasificar3
# Clasifica ‘a', ‘b' y ‘c' en orden creciente.
Entrada
a, b, c: T COMPARABLE
poscondición
a ≤ b ≤ c
fin clasificar3
Sin embargo, la realización es menos evidente que la de la clasificación de dos elementos. Empezamos por poner a y b en orden:
si
a > b
entonces
# a > b; falta colocar ‘c'
intercambiar(a, b) # a < b; falta colocar ‘c'
Colocar ‘c' respecto a ‘a' y ‘b'
si no
# a ≤ b; falta colocar ‘c'.
Colocar ‘c' respecto a ‘a' y ‘b'
fin si
Así, una vez puestos en orden a y b, falta colocar c respecto a estos dos valores. La operación descrita por la frase «Colocar c respecto a ‘a’ y ‘b’» es independiente del valor que toma la expresión booleana a > b, condición de la primera prueba realizada con estos valores. Ya tengamos a > b o a ≤ b, habrá que hacer «Colocar ‘c’ respecto a ‘a’ y ‘b’». Esto se muestra mediante el hecho de que esta operación de colocación debe realizarse en las dos alternativas. Por lo tanto, esta operación de colocación no depende del valor de la expresión booleana a < b y quizás se puede sacar de la alternativa. Esto vuelve a factorizar la operación de colocación de c respecto a los valores de a y b. Entonces se obtiene:
si
a > b
entonces
# a > b; falta colocar...
Ejercicios
Encontrará propuestas de soluciones para los ejercicios 1, 2, 3 y 8 en los elementos para descargar disponibles desde la página Información.
Ejercicio 1: Sucesor de un DÍA de la semana |
El tipo DÍA define por enumeración un día de la semana. En el ejercicio que determina el día del 1 de mayo de un año dado, también se ha especificado una función sucesor para un día de la semana. Falta dar una definición de esta función.
Dar una definición completa de la función sucesor para un día de la semana.
Todavía no disponemos de las herramientas que nos permitirán dar una definición «elegante» de esta función. Lo haremos más adelante.
Ejercicio 2: Números, suma y producto |
Dados dos números cualesquiera.
Clasificarlos respecto a su suma y a su producto.
Así, por ejemplo, dados a = -15 y b = 6, se obtiene a x b < a < a + b < b cuyos sus valores son, en orden: -90, -15, -9 y 6.
Ejercicio 3: Descuento |
Un comerciante hace un descuento del 5 % en todas las compras con un importe comprendido entre 100 y 500 €, y del 8 % en los importes superiores.
Escribir el algoritmo de cálculo del importe del descuento en una compra dada.
Ejercicio 4: Otra vez una media |
En un sistema de calificaciones de 0 a 20, donde 20 es la nota más...
Resumen
En este capítulo hemos visto la alternativa. Es una estructura algorítmica que permite elegir un tratamiento entre varios, según los valores de un conjunto de predicados. Estos valores se obtienen a partir del estado del sistema de software. Con frecuencia, los tratamientos resultantes inducen un cambio de este estado. La alternativa se denota de distintas maneras, que solo deben cumplir con la exigencia de que los algoritmos obtenidos sean legibles y correctos.
Las instrucciones operativas de un algoritmo, como, de hecho, las de un programa informático, no dicen nada sobre los estados intermedios del sistema obtenido tras la ejecución de estas instrucciones. Aclarar estos estados es de principal importancia para garantizar que el algoritmo es correcto. Sin embargo, la alternativa es una excepción en la medida en que la opción que prepara resulta del valor de predicados que expresan una propiedad del estado en el que se encuentra el sistema de software.