Universidad Simón Bolívar
Departamento de Computación y Tecnología de la Información
CI2615 - Algoritmos y Estructuras I
Septiembre - Diciembre 2002
Tarea 6
(Bloque B, Jueves)
1.- Se
desea construir un programa que dibuje varios círculos horizontalmente, todos
con centro sobre el eje horizontal del
sistema de coordenadas. Los datos de entrada serán la coordenada horizontal del
centro del círculo que estará en el extremo izquierdo (xizq),
el radio de los círculos (radio), la distancia entre los centros de los
círculos consecutivos (distancia), y la cantidad de círculos deseados
(cantidad). La especificación normal (que utiliza el predicado hayCírculo definido en la tarea anterior para la
especificación de la Máquina de Trazado) es la siguiente:
[ const
xizq, radio, distancia, cantidad: entero;
var mtConCírculos: MaquinaTrazados;
{ ......
precondición ..........}
CírculosConsecutivos
{( Vi:
0 <= i < cantidad : hayCirculo(mtConCirculos, xizq + i*
distancia, 0, radio))}
]
(a) Indique cuál debe ser la precondición (la más
débil posible, es decir, el mínimo requerimiento necesario para poder dibujar
los círculos deseados).
(b) Construya una iteración (sin demostrar su correctitud) que resuelva el problema CírculosConsecutivos
utilizando el siguiente invariante, el cual requiere una nueva variable entera
k:
0 <= k <= cantidad
^
( Vi: 0<= i < k : hayCirculo(mtConCirculos, xizq + i*
distancia, 0, radio))
(c) Construya otra iteración (de nuevo sin demostrar
su correctitud) que resuelva el problema con el
siguiente invariante, que también una
nueva variable entera k:
0 <= k <=cantidad
^
( Vi: k <= i < cantidad : hayCirculo(mtConCirculos, xizq + i*
distancia, 0, radio))
2.-
Dar las especificaciones del siguiente problema, el programa que lo resuelve y
probar la correctitud.
Una
persona requiere conocer cuánto dinero tendrá al final de 12 meses con un
depósito bancario de 10.000.000 Bs., a
una tasa mensual de 2 %.