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

Slides:



Advertisements
Apresentações semelhantes
Puzzles com barcos: Nível fácil
Advertisements

Criando aplicações WEB
Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação: uma Abordagem Funcional
Introdução à Programação: uma Abordagem Funcional
Introdução à Programação: uma Abordagem Funcional
Introdução à Programação: uma Abordagem Funcional
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1.
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1.
Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução à Programação: uma Abordagem Funcional Programação I Eng. de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi 2010/1.
Departamento de Informática Universidade Federal do Espírito Santo
Capítulo 1 A linguagem da Lógica Proposicional
N Rainhas Descrição do Problema Satisfação de Restrições (CSP)
Profa. Rita de Cassia Fernandes Academia de Ensino Superior
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução à Programação: uma Abordagem Funcional PD I – Eng. Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
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.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
O TABULEIRO de xadrez na posição inicial
Sistemas lineares.
Prof. M.Sc. Fábio Francisco da Costa Fontes Agosto
PORTAS LÓGICAS Prof. Wanderley.
Orientação a Objetos: Encapsulamento e Classificação
Problema da Aceitação ATM
Arte, Diversão, Esporte…
Estrutura de indexação Modelos de RI
Introdução Objetivos Justificativa Estrutura do Trabalho
Integração de Processos CMOS
Universidade Federal da Bahia – UFBA
REA TRANSFORMAÇÕES DE LORENTZ Adaptado da apostila de Física IV – IFUSP – de autoria de Manoel R. Robillota et al. Evento: Algo que realmente acontece.
Abordagem Estratégica ao Teste de Software
José Mauro Nazareth Juliano Rodrigues Rossi Pablo Santana Satler
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Professores Claudia Boeres e Estefhan Dazzi Wandekoken 2010/1.
Elsa Mendonça 27 Janeiro 2005 AVALIAÇÃO ECOTOXICOLÓGICA DE ÁGUAS NATURAIS E RESIDUAIS CURSO.
Trabalho de Engenharia de Software 2
Uma ferramenta para Geração de Mutantes para linguagem C#.
Trabalho de Engenharia de Software 2
Jane Cristina do Nascimento Waldow
Dominós mágicos Você já teve a oportunidade de conhecer um pouco sobre os quadrados mágicos, agora que tal por em prática o que aprendeu em uma atividade.
MATRIZES REAIS (1ª AULA ).
Projeto Jogo da Velha Maria Aparecida Amorim Sibaldo Mozart de Melo Alvez Júnior Rosângela Teixeira da Silva Universidade Federal de Alagoas Mestrado em.
Física Geral e Experimental I Prof. Ms. Alysson Cristiano Beneti
Simplificação de Expressões Booleanas e Circuitos Lógicos
Pontifícia Universidade Católica de Goiás
XADREZ O JOGO DE XADREZ DESENVOLVE A IMAGINAÇÃO, A CONCENTRAÇÃO E CONTRIBUI PARA FORMAR O ESPÍRITO DE INVESTIGAÇÃO, ALÉM DE INSTIGAR A CRIATIVIDADE E DESENVOLVER.
CENTRO UNIVERSITÁRIO Franciscano
Oberdan B. Ferreira Polimorfismo Oberdan B. Ferreira
Programação dinâmica e jogos de tabuleiro: Um estudo
Desenho elétro-eletrônico
Determinantes Conceito Representação Propriedades
Visão da estratégia nacional para a agricultura e desenvolvimento rural CRESCIMENTO SUSTENTÁVEL DO SECTOR AGROFLORESTAL EM TODO O TERRITÓRIO NACIONAL.
Procedimentos de Distribuição – PRODIST Destaques, inovações e a importância para o setor elétrico brasileiro Autores: Renato Eduardo, Hugo Lamin e Carlos.
Pontifícia Universidade Católica de Goiás
INTRODUÇÃO.
Mariana Afonso Turma: M
DISCIPLINA: PAISAGISMO ALUNO: LUIZ ALBERTO SILVEIRA
ARRANJO FÍSICO CÉLULAS
Busca Combinatorial e Métodos de Heurística
Pontifícia Universidade Católica de Goiás Departamento de Engenharia Curso de Graduação em Engenharia de Produção ENG 1004 – Linguagem de Programação para.
Aprendendo Xadrez online
Resolução de Problemas Sistemas de Produção Prof. Cláudio M. N. A. Pereira.
GUIA DE AULA Prof. DIEISON ALBERTO. Nesta primeira aula irei explicar um pouco que será trabalhado em sala de aula. Nossas aulas serão 3 vezes na semana.
Gestão da Qualidade Aula 12 Prof. Pablo.
Paridade Uma das estruturas mais básicas do conjunto dos números naturais é a sua divisão em números pares e ímpares. A paridade, isto é, a qualidade de.
Transcrição da apresentação:

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

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

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.

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

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

Testando a solução

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)

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

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.

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.

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

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

Solução

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

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

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?

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

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

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

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

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

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

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

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

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

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)

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

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

Processo de teste

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

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