Universidade Federal do Espírito Santo
Introdução à Programação
uma Abordagem Funcional
Programação I
Prof.ª Claudia Boeres
[email protected]
CT VII - Sala 32
Departamento de Informática
Centro Tecnológico
Universidade Federal do Espírito Santo
Co-Autoria: Veruska Zamborlini e Clebson Oliveira
A arte de resolver problemas
• Só se aprende a resolver problemas através da experiência;
• A ajuda do professor não deve vir através da apresentação pura e
simples de uma solução;
• É muito importante não se conformar com uma única solução;
A arte de resolver problemas
Na busca pela solução de um problema, nossa ferramenta principal é
o questionamento;
●
Aprenda desde cedo a buscar um aprimoramento da sua técnica
para resolver problemas;


Crie uma sistematização.
A arte de resolver problemas
Compreensão do problema
 Planejamento
 Desenvolvimento:
 construção da solução;
 planejamento do teste;
 execução do teste;
 codificação da solução;
 teste com o uso do computador.
 Avaliação do processo e seus resultados

A arte de resolver problemas
Deseja-se escrever um programa que permita determinar a menor
quantidade de cédulas necessárias para pagar uma dada quantia em
Reais.
A arte de resolver problemas

Compreensão do problema:
 Cédulas de 1, 5, 10, 50 e 100

Planejamento

Desenvolvimento:
ncedulas q = (div q 100) +
(div (mod q 100) 50) +
(div (mod (mod q 100) 50) 10) +
(div (mod (mod (mod q 100) 50) 10) 5)+
(div (mod (mod (mod (mod q 100) 50) 10) 5) 1)
A arte de resolver problemas
●
●
Avaliação do processo e seus resultados:
➔ Há uma outra forma de resolver o problema?
➔ Pode-se deixar a solução mais clara?
➔ Melhore seu código
➔ Crie uma base de testes
Outra versão:
nMinCedulas2 q = n100 + n50 + n10 + n5 + n1
where
n100 = div q 100
r100 = mod q 100
n50 = div r100 50
r50 = mod r100 50
n10 = div r50 10
r10 = mod r50 10
n5 = div r10 5
r5 = mod r10 5
n1 = div r5 1
Princípios para resolução de
problemas
Abstração
Generalização
Instanciação
Modularização
Abstração
Escreva a expressão que determina a hipotenusa de um
triângulo de lados 4 e 10.
Hugs> sqrt((10 * 10) + (4 * 4))
Hugs> 10.770329614269007
E se quisermos chamar várias vezes essa mesma expressão?
hipotenusa = sqrt((10 * 10) + (4 * 4))
Generalização
Porque escrever uma definição de hipotenusa que retorna
sempre o mesmo valor, ao invés de generalizá-la?
hipotenusa x y = sqrt((x * x) + (y * y))
Instanciação
Uma vez definida a função genérica para cálculo da
hipotenusa, podemos instanciá-la para diferente valores de
catetos:
Hugs> hipotenusa 10 4
10.770329614269007
Hugs> hipotenusa 35 18
39.357337308308857
Hugs> hipotenusa 9 12
15.0
Modularização
Modularização
a
e
b
c
d
Modularização
Modularização
areaTotal a b c d e =
areaRetangulo a b
+ areaRetangulo (hipotenusa a d) e
+ areaAzul a c d
where
areaAzul a c d = areaRetangulo c d +
areaTrianguloRetangulo d a
areaTrianguloRetangulo x y = (x * y)/2
areaRetangulo x y = x * y
areaAzul a c d = d*c +
areaTrianguloRetangulo d a
areaTrianguloRetangulo x y = (x * y)/2
a
e
b
c
d
Exercício



Descreva o algoritmo para calcular o volume das peças a seguir;
Implemente esse algoritmo em Haskell;
Crie uma bateria de testes e teste seu programa.
Download

Slide 1 - claudiaboeres