1 / 32

Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica

Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2. RESOLVENDO PROBLEMAS – Os movimentos do cavalo no xadrez.

gage
Download Presentation

Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

  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

  6. Solução

  7. Testando a solução

  8. Estendendo o problema

  9. Identificando abstrações

  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?

  13. Instâncias de qualmov

  14. Solução

  15. Codificando a solução

  16. Análise da solução

  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

  19. Exemplo de avaliação da função mov

  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 ifm == 1 then pmov else ifm == 2 then smov else ifm == 3 then tmov else ifm == 4 then qmov else ifm == 5 then qtmovelse ifm == 6 then sxmov else if m == 7 then stmovelse omovwhere pmov = ... smov = ... tmov = ... ...

  21. Análise da solução nova solução

  22. Codificação da solução

  23. Número de comparações

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

  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 <= b && x >=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? F 4 P2 B A E C P1 D 1 5 1

  29. Quais valores devemos escolher? Pontos representantes de classes de equivalência

  30. Processo de teste

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

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

More Related