introdução à programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/aula3-progi.pdf ·...

Post on 12-Oct-2020

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introdução à Programação uma Abordagem Funcional

Programação IProf.ª Claudia Boeres

boeres@inf.ufes.br

CT VII - Sala 34

Departamento de InformáticaCentro Tecnológico

Universidade Federal do Espírito Santo

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çãoEscreva 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çãoPorque 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çãoUma 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

b

c

d

e

Modularização

Modularização

a

b

c

d

e

areaTotal a b c d e = areaRetangulo a b+ areaRetangulo (hipotenusa a d) e+ areaAzul a c d

whereareaAzul a c d = areaRetangulo c d +

areaTrianguloRetangulo d aareaTrianguloRetangulo x y = (x * y)/2

areaRetangulo x y = x * yareaAzul a c d = d*c +

areaTrianguloRetangulo d aareaTrianguloRetangulo x y = (x * y)/2

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.

top related