Tarea 6
(Bloque A, Martes)
1.-
Se desea construir un programa que dibuje varios círculos concéntricos,
todos con centro en el origen del sistema de coordenadas. Los datos de
entrada serán el radio del círculo más pequeño
(rmínimo), la diferencia entre los radios
de los círculos consecutivos (distancia), y la cantidad de círculos
deseados (cantidad). La especificación normal (que utiliza el predicado hayCirculo
definido en la tarea anterior para la especificación de la Máquina
de Trazados ) es la siguiente:
[ constrminimo,
distancia, cantidad: entero;
varmtConCirculos:MaquinaTrazados;
{
...... precondición
........}
CírculosConcéntricos
{
(Vi:
0 <= i<cantidad
: hayCírculo
(mtConCírculos, 0, 0, rminimo+
i *distancia))}
]
·Indique
cual 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 ).
·Construya
una iteración (sin demostrar su correctitud)
que resuelva el problema CírculosCooncéntricos
utilizando el siguiente invariante, el cual requiere una nueva variable
entera k:
0
< = k<= cantidad
^
(Vi:
0 < =i < k : hayCírculo
(mtConCírculos, 0, 0, rminimo+
i *distancia))
·Construya
otra iteración (de nuevo sin demostrar su correctitud)
que resuelva el problema con el siguiente invariante, que también
requiere una nueva variable entera k:
0
<= k <= cantidad
^
(Vi:
k <= i < cantidad : hayCírculo
(mtConCírculos, 0, 0, rminimo+
i *distancia))
2.- Dar
las especificaciones del siguiente problema, el programa que lo resuelve
y probar la correctitud.
Un
hacendado requiere calcular cuantas hectáreas de pasto debe sembrar
en un intervalo de 10 años, para un ganado de 100 cabezas de res
. Para ello el conoce que la tasa de natalidad anual (TN) es del
20 %,y que cada 10 cabezas de ganado
requiere 1 hectárea de pasto/año para su alimentación.