A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.

Apresentações semelhantes


Apresentação em tema: "Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2."— Transcrição da apresentação:

1 Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2

2 RESOLVENDO PROBLEMAS – Os movimentos do cavalo no xadrez Considere o jogo de xadrez, onde peças são movimentadas em um tabuleiro dividido em 8 linhas e oito colunas. Considere ainda os movimentos do cavalo, a partir de uma dada posição, conforme diagrama a seguir, onde cada possível movimento é designado por mi. No esquema, o cavalo localizado na posição (5, 4) pode fazer oito movimentos, onde o primeiro deles, m1, levaria o cavalo para a posição (7,5).

3 Os movimentos do cavalo m3 m2 5 m4 m1 4 C 3 m5 m8 2 m6 m

4 PROBLEMA 1 Escreva uma função que determina se, a partir de uma dada posição, o cavalo pode ou não realizar o primeiro movimento. Vamos chamá-la de pmov, e denominar seus parâmetros (a posição corrente), de x e y.

5 Instâncias de pmov INSTÂNCIARESULTADO pmov 5 4 True pmov 8 1 False pmov 1 1 True pmov 1 8 False

6 Solução pmov x y = (x + 2 <= 8 ) && (y + 1 <= 8)

7 Testando a solução

8 Estendendo o problema pmov x y=(x + 2 <= 8 ) && (y + 1 <= 8) smov x y=(x + 1 <= 8 ) && (y + 2 <= 8) tmov x y=(x - 1 >= 1 ) && (y + 2 <= 8) qmov x y=(x - 2 >= 1 ) && (y + 1 <= 8) qtmov x y=(x - 2 >=1 ) && (y - 1 >= 1) sxmov x y=(x - 1 >= 1 ) && (y - 2 >= 1) stmov x y=(x + 1 = 1) omov x y=(x + 2 = 1)

9 Identificando abstrações pmov x y=f (x + 2 ) && f( y + 1) smov x y=f (x + 1) && f (y + 2) tmov x y=g (x - 1) && f (y + 2) qmov x y=g (x - 2) && f (y + 1) qtmov x y=g (x - 2) && g (y – 1) sxmov x y=g (x - 1) && g (y – 2) stmov x y=f (x + 1 ) && g (y – 2) omov x y=f (x + 2) && g (y – 1) f w=w <= 8 g w=w >= 1

10 Análise da solução Clareza - Na medida em que agora está explicitado, que todas as oito funções para verificar os movimentos possuem estrutura semelhante e que todas estão usando funções para verificar a ultrapassagem das bordas; Manutenção - Se nosso tabuleiro mudasse, ou seja, passasse a ter 9 linhas por nove colunas, bastaria alterar a função f e tudo estaria modificado, ao invés de termos que alterar as oito definições. Reuso - As duas funções que testam as bordas poderiam ser usadas para construir funções para avaliar o movimento de outras peças do jogo de xadrez.

11 PROBLEMA 2 Sabemos que para cada posição alguns movimentos podem ser realizados e outros não. Como ordenamos os movimentos no sentido anti-horário, gostaríamos de obter, para uma dada posição, dos movimentos que podem ser realizados, aquele que possui o menor índice.

12 Qual o menor índice de movimento possível? 8m4 m1C1 7 C3 m5 6 m8 m6 5 m7 4 3 m2 m3 2 m1 m4 1C4 C

13 Instâncias de qualmov Instânciaresultado qualmov 8 13 qualmov 8 85 qualmov 3 71 qualmov 1 11

14 Solução

15 Codificando a solução qualmov x y=if pmov x y then 1 else if smov x y then 2 else if tmov x y then 3 else if qmov x y then 4 else if qtmov x y then 5 else if sxmov x y then 6 else if stmov x y then 7 else if omov x y then 8 else 0

16 Análise da solução qualmov x y=if not (pert x 1 8) || not (pert y 1 8) then 0 else if pmov x y then 1 else if smov x y then 2 else if tmov x y then 3 else if qmov x y then 4 else if qtmov x y then 5 else if sxmov x y then 6 else 7 where pert x a b = a = b && x >= a && x <= b

17 REVISITANDO O PROBLEMA 1 Observando a solução encontrada para o problema 1, constatamos que embora a noção de movimento do cavalo seja única, quem precisar saber se um dado movimento é válido, precisará conhecer o nome das oito funções. Embora seja cedo para falarmos de interface homem-máquina, já dá para dizer que estamos sobrecarregando nosso usuário ao darmos oito nomes para coisas tão parecidas. Será que temos como construir uma só função para tratar o problema?

18 Melhorando a interface pmov x y smov x y tmov x y qmov x y qtmov x y sxmov x y stmov x y omov x y mov m x y

19 Exemplo de avaliação da função mov ? mov True ?

20 Codificação da Solução mov m x y = if not (pert m 1 8) || not (pert x 1 8) || not (pert y 1 8) then False else if m == 1 then pmov else if m == 2 then smov else if m == 3 then tmov else if m == 4 then qmov else if m == 5 then qtmov else if m == 6 then sxmov else if m == 7 then stmov else omov where pmov =... smov =... tmov =......

21 Análise da solução nova solução < >8 < >8 < >8

22 Codificação da solução mov m x y = if not (pert m 1 8)|| not(pert x 1 8) || not(pert y 1 8) then False else if m <= 4 then if m<= 2 then if m== 1 then pmov else smov else if m==3 then tmov else qmov else if m<= 6 then if m==5 then qtmov else sxmov else if m == 7 then stmov else omov where pmov =... smov =... tmov =......

23 Número de comparações número de valores esquema linear (número médio) esquema binário (número máximo)

24 Exemplo da aula anterior y1 y2 B E x1 x2 F A D C O ponto P(x,y) pertence a qual região?

25 Solução qualRegiao x y x1 y1 x2 y2 = if pertenceLosango x y a1 b1 a2 b2 then 'E' else if pertenceRetangulo x y x1 y1 x2 y2 then if x < xc then if y > yc then 'B' else 'C' else if y > yc then 'A' else 'D' else 'F' where a1 = x1 b1 = (y1 + y2)/2 a2 = (x1 + x2)/2 b2 = y2 xc = a2 yc = b1

26 Continuação do script pert x a b = a =a && x <= b pertenceRetangulo x y a b c d = pert x a c && pert y b d pertenceLosango x y a b c d = acimaReta x y a b e f && acimaReta x y e f g h && abaixoReta x y a b c d && abaixoReta x y c d g h where e = c f = 2*b-d g = 2*c-a h = b

27 Final do script acimaReta x y a b c d = y >= m * (x-a) + b where m = (d-b)/(c-a) abaixoReta x y a b c d = y <= m * (x-a) + b where m = (d-b)/(c-a)

28 Quais instâncias escolher? P1 P2 F A D C E B

29 Quais valores devemos escolher? xy resultado esperado resultado obtido diagnóstico 33EEok 12.5BB ok 24BBOk 15FF ok Pontos representantes de classes de equivalência

30 Processo de teste

31 Exercício: faça um script para determinar se um ponto pertence à area cinza. Faça um plano de teste. r r r r C

32 O ponto P (x, y) pertence a qual das áreas 1, 2, 3 e 4? P (x, y) ? a a/2 C (x1, y1)


Carregar ppt "Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2."

Apresentações semelhantes


Anúncios Google