sábado, 2 de outubro de 2010

Problema 2.8

Este problema obedece à mesma matriz dos da ficha 2: aplicar a expressão que relaciona os dados ao resultado. Uma vez mais, começamos por identificar os dados: o raio e a altura de um cilindro e ainda a constante Pi. É-nos dito para usar como aproximação de Pi o valor 3.14159. Traduzindo o enunciado podemos apresentar a solução seguinte.

def area_cilindro(raio, altura):
"""
Calculo da área de um cilindro, conhecidos o raio da base
e a altura.
"""
return 2 * 3.14159 * raio * altura + 2 * (2 * 3.14159 * raio ** 2)

Um dos problemas que se colocam a quem programa é que os seus programas destinam-se a ser usados, lidos, modificados por outros. Muitas vezes até pelos próprios. Tudo isso leva a que os programas sejam modulares e claros. Estas propriedades estão ausentes mesmo num programa tão pequeno e simples como o anterior. Vamos tentar melhorá-lo.

def area_cilindro(raio, altura):
"""
Calculo da área de um cilindro, conhecidos o raio da base
e a altura.
"""
lateral = 2 * 3.14159 * raio * altura
base = 2 * 3.14159 * raio ** 2
return lateral + 2 * base

Nesta solução dividimos o nosso problema em dois sub-problemas. Obtemos o resultado de cada um e associamos esses objectos a nomes significativos. Depois é só combinar esses resultados para obter o resultado final. Concordarão que está mais legível!

Mas podemos ainda pensar no aspecto modularidade e reutilização de código. Para tal criamos duas definições auxiliares.


def area_lateral(raio, altura):
""" Calculo da área lateral de um cilindro."""
return 2 * 3.14159 * raio * altura

def area_circulo(raio):
""" Calculo da área da base de um cilindro."""
return 3.14159 * raio ** 2

def area_cilindro(raio, altura):
""" Calculo da área de um cilindro."""
area_lat = area_lateral(raio,altura)
area_base = area_circulo(raio)
return area_lat + 2 * area_base

A legibilidade mantém-se e passamos a ter duas definições autónomas que podemos usar para outros cálculos, como por exemplo a área de um círculo.

Sem comentários:

Enviar um comentário