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

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

Departamento de Informática Universidade Federal do Espírito Santo

Apresentações semelhantes


Apresentação em tema: "Departamento de Informática Universidade Federal do Espírito Santo"— Transcrição da apresentação:

1 Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Theme created by Sakari Koivunen and Henrik Omma Released under the LGPL license. Co-Autoria: Clebson Oliveira 1

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

3 Os movimentos do cavalo
8 7 6 m3 m2 5 m4 m1 4 C 3 m5 m8 2 m6 m7 1 3

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 seu parâmetro (a posição corrente) de (x, y). 4

5 Instâncias de pmov INSTÂNCIA RESULTADO pmov (5, 4) True pmov (8, 1)
False  pmov (1, 1)  pmov (1, 8)  False 5

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

7 Testando a solução 8 7 6 5 4 3 2 1 7

8 Estendendo o problema smov (x, y) pmov (x, y) =
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 <= 8 ) && (y - 2 >= 1) omov (x,y) (x + 2 <= 8 ) && (y - 1 >= 1) 8

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 9

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. 10

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. 11

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

13 Instâncias de qualmov Instância resultado qualmov 8 1 3 qualmov 8 8 5
13

14 Solução 14

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 15

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 else if smov x y then else if tmov x y then else if qmov x y then else if qtmov x y then else if sxmov x y then else if stmov x y then 7 else 8 where pert x a b = a <= b && x >= a && x <= b 16

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. 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? 17

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

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

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 = 20

21 Análise da solução nova solução
<1 1 2 3 4 5 6 7 8 >8 21

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 = ... ... 22

23 esquema binário (número máximo)
Número de comparações número de valores esquema linear (número médio) esquema binário (número máximo) 8 4 100 50 7 1000 500 10 500000 20 23


Carregar ppt "Departamento de Informática Universidade Federal do Espírito Santo"

Apresentações semelhantes


Anúncios Google