16
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres [email protected] CT VII - Sala 34 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Co-Autoria: Veruska Zamborlini e Clebson Oliveira

Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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

Programação IProf.ª Claudia Boeres

[email protected]

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

Page 2: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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;

Page 3: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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.

Page 4: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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

Page 5: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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.

Page 6: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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)

Page 7: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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

Page 8: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

Princípios para resolução de problemas

Abstração

Generalização

Instanciação

Modularização

Page 9: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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))

Page 10: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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))

Page 11: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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

Page 12: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

Modularização

Page 13: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

Modularização

a

b

c

d

e

Page 14: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

Modularização

Page 15: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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

Page 16: Introdução à Programaçãoclaudiaboeres.pbworks.com/w/file/fetch/106151007/Aula3-ProgI.pdf · Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia

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.