Projeto de Programação Departamento de Informática – CT XVII Engenharia de Computação Programação I - 2009/1 Maria Claudia Boeres MOONLANDER Hudson Martins.

Slides:



Advertisements
Apresentações semelhantes
Continuidade: sem interrupções
Advertisements

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 Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1.
Moonlander Projeto Computacional. Função: pilotar nave terreno pilotar nave terreno = (estado1,estado2) Onde estado1 representa o foguete horizontal e.
Departamento de Informática Universidade Federal do Espírito Santo
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
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 Engenharia de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi Wandekoken 2010/1.
Computação Gráfica I Conteúdo: Professor:
ANÁLISES DE REGRESSÃO.
Conceitos e Propriedades
The Cyclops Project German-Brazilian Cooperation Programme on IT CNPq GMD DLR Departamento de Informática e Estatística - INE/CTC/UFSC Computação Gráfica:
Modelo Relacional.
SQL Structured Query Language (continuação)
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 32 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.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Aula 02.
Aula 02 continuação.
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Programação Lógica ProLog
Dispositivos de Visualização e Rasterização
Criando uma Animação.
Introdução à Linguagem Prolog
Algoritmos para Seleção Simples
Raciocínio Aproximado
Geometria Computacional Interseção de Segmentos
BCC101 – Matemática Discreta
LINGUAGEM C.
Funções em C Universidade do Estado de Santa Catarina
Outras Transforações de Imagens
Construção de Compiladores
PHD 5729 SIMULAÇÃO HIDROLÓGICA
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Professores Claudia Boeres e Estefhan Dazzi Wandekoken 2010/1.
Aplicações com FPGA Aula 10
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Inteligência Artificial
CURSO DE MATEMÁTICA BÁSICA
PLANO CARTESIANO Produção: Patrizia Lovatti.
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Listas: Haskell x Prolog
Unidade 2. Dependência Linear e Base
Cálculo relacional Lílian Simão Oliveira.
©André Santos, Programação Funcional Generalizações André Santos.
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Trabalho de Introdução a Ciência da Computação
Lógica de Programação/ Algoritmos Engenharia Produção 2014
Projeto de Programação Compra de passagens aéreas.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Elsa Carvalho 18 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Estruturas de.

UFES Teoria dos Grafos Representação computacional de redes de fluxo Maria Claudia Silva Boeres Mestrado em Informática.
Introdução à Programação
Arnaldo Rocha1995 BANCO DE DADOS Modelo Relacional.
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
Prof. Edison Oliveira de Jesus
REPRESENTAÇÃO FUNÇÃO.
FEATURE SELECTION. Introdução  Estudo de metodologias relacionadas a seleção de atributos  Maldição da dimensionalidade  O número de atributos do desenvolvedor.
Cálculo 1 ENGENHARIA IntegraL DEFINIDA.
Distribuição. de freqüência
Funções de Alta Ordem Leonardo Lucena – IFRN, 2011 Adaptação das Transparências de Graham Hutton (
Situações de projeto - Fy.
Transcrição da apresentação:

Projeto de Programação Departamento de Informática – CT XVII Engenharia de Computação Programação I /1 Maria Claudia Boeres MOONLANDER Hudson Martins da Silva Matricula: Lucian Borges Corteletti Matricula:

Algumas primitivas novas que foram utilizadas: Primitiva Map: Função de ordem superior que aplica uma função ao longo de uma lista. somaUm xs = map f xs ou somaUm xs = map f xs where f x = x + 1 f x = x + 1 Teste: Main> somaUm [1,2,3,4,5] [2,3,4,5,6] :: [Integer] (112 reductions, 220 cells)

Algumas primitivas novas que foram utilizadas: Primitiva Filter : E uma função de ordem superior que filtra os elementos de uma lista que verificam um dado predicado. filtraPares xs = filter f xs ou filtraPares xs = filter even xs where f x = even x Teste: Main> filtraPares [2,6,5,7,89,45,5,6,1,2] [2,6,6,2] :: [Integer] (317 reductions, 539 cells)

Elaboração do script: # OrdenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno Fornece como resposta uma lista de áreas válidas de pouso existentes no terreno ordenado pela menor distância do ponto onde a nave está posicionada ordenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno = foldl insereOrdenado [ ] (areaPouso (x,y,vx,vy,fx,fy,c) terreno)

Funções Auxiliares Utilizadas: A funcao "areaPouso" tem como argumentos uma nave e um terreno essa funcao mapeia os elementos da lista "distNaveReta" e tem como saida uma lista de tuplas-2 em que o primeiro elemento e uma lista com os dois vertices do segmento de um triangulo e o segundo e a distancia da nave a esse segmento Obs: essa lista de saida da funcao "areaPouso" nao esta necessariamente ordenada pelo criterio distancia areaPouso (x,y,vx,vy,fx,fy,c) terreno = map fAux (distNaveReta (x,y,vx,vy,fx,fy,c) terreno) where fAux ((x1,y1),(x2,y2),i,dpr) = ([(x1,y1),(x2,y2)],dpr) Elaboração do script: # OrdenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno

Elaboração do script: # OrdenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno Funções Auxiliares Utilizadas: A função "insereOrdenado" tem como argumentos uma tupla-2 da forma ([Ponto],Numero) e uma lista da forma [([Ponto],Numero)], essa função tem como objetivo inserir essa tupla-2 ordenadamente (em ordem crescente) na lista seguindo o critério distancia que e representado pelo segundo elemento da tupla. Obs: nessa função a lista dada como argumento já esta em ordem crescente insereOrdenado ys (xs,x) = menoresIguais ++ [(xs,x)] ++ maiores where menoresIguais = [ (zs,y) | (zs,y) <- ys, y <= x ] maiores = [ (zs,y) | (zs,y) x ]

Elaboração do script: # OrdenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno A função distNaveReta tem como parâmetros uma nave e um terreno. Ela retorna uma lista de tuplas-4 com os dois vértices do lado de um triangulo a inclinação, dentro da permitida, e a distancia da nave do ponto onde essa se encontra ao segmento em questão que possui a inclinação dentro da permitida distNaveReta (x, y, vx, vy, fx, fy, c) terreno = [ ((a,b),(c,d),i,distPontoReta (x,y) (a,b) (c,d)) | ((a,b),(c,d),i) <- (segmentosPouso terreno)] Dado um ponto (x1,y1) a função "distPontoReta" calcula a distancia desse ponto a reta determinada passando por (x2, y2) e (x3, y3), que e um lado do triangulo distPontoReta (x1, y1) (x2, y2) (x3, y3) = (abs ( a*x1 + b*y1 + c))/(sqrt (a*a + b*b)) where a = y2-y3 b = x3-x2 c = x2*y3 - x3*y2

Elaboração do script: # OrdenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno A função segmentosPouso tem como argumento um terreno e, filtra os elementos da lista "segmentosCandidatos terreno" de tal maneira que o terceiro elemento da tupla de cada tupla esteja dentro do intervalo da inclinacao permitida segmentosPouso terreno = filter ip (segmentosCandidatos terreno) where ip (_, _, x) = if x >= (-0.1) && x <= 0.1 A função segmentosCandidatos tem como argumento um terreno e tem como saída uma lista de tuplas-3 com os dois vértices de um triangulo e a respectiva inclinação deste lado segmentosCandidatos terreno = concat (map segmentoInclinacao terreno)

Elaboração do script: # OrdenaAreaPouso (x,y,vx,vy,fx,fy,c) terreno Dados dois pontos a função inclinacao calcula a inclinação do segmento formado pelos respectivos pontos inclinacao (x1,y1) (x2,y2) | x1 == x2 = Segmento vertical | y1 == y2 = 0.0 | otherwise = (y2 - y1)/(x2 - x1) Dado um triangulo ( tupla-3) a função segmentoInclinacao devolve uma lista de tuplas-3 com dois vértices do triangulo e a respectiva inclinação desse segmento segmentoInclinacao ((a,b),(c,d),(e,f)) = [((a,b),(c,d), inclinacao (a,b) (c,d)),((a,b),(e,f), inclinacao (a,b) (e,f)),((c,d),(e,f), inclinacao (c,d) (e,f))]

A funcao "contagem" possui como argumentos uma nave e um terreno e tem como saida a pontuacao obtida pela nave ao seguir a trajetoria. Elaboração do script: # contagem (x,y,vx,vy,fx,fy,c) terreno: contagem (x,y,vx,vy,fx,fy,c) terreno = if psu == 1 then 100-p else 0 where p = (100*combustivelGasto)/c

A função "trajetoria" tem como argumentos uma nave e um terreno e fornece como saída uma tupla-3 com a lista de pontos seguidos pela nave da sua posição inicial até seu ponto de pouso, a distancia total percorrida e um valor booleano indicando se a nave pousou ou não Elaboração do script: # trajetoria (x,y,vx,vy,fx,fy,c) terreno: trajetoria (x,y,vx,vy,fx,fy,c) terreno = (trajetoNave,dist,psu) where trajetoNave = if x == fst (pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno) then trajeto1 (x,y,vx,vy,fx,fy,c) terreno else trajeto2 (x,y,vx,vy,fx,fy,c) terreno dist = if x == fst (pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno) then dist1 (x,y,vx,vy,fx,fy,c) terreno else dist2 (x,y,vx,vy,fx,fy,c) terreno psu = "X"

O trajeto1 e aplicado quando a nave esta em cima do ponto de pouso trajeto1 (x,y,vx,vy,fx,fy,c) terreno = [(x,y),(xm,ym)] where (xm,ym) = pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno O trajeto2 e aplicado quando a nave esta a esquerda ou a direita do ponto de pouso trajeto2 (x,y,vx,vy,fx,fy,c) terreno = [(x,y),(x1,y),(x2,y2)] where x1 = fst (pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno) (x2,y2) = pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno dist1 (x,y,vx,vy,fx,fy,c) terreno = abs (y1 - y2) where y1 = snd (head (trajeto1 (x,y,vx,vy,fx,fy,c) terreno)) y2 = snd (last( trajeto1 (x,y,vx,vy,fx,fy,c) terreno)) dist2 (x,y,vx,vy,fx,fy,c) terreno = (distPontoPonto k1 k2) + (distPontoPonto k2 k3) where k1 = (trajeto2 (x,y,vx,vy,fx,fy,c) terreno)!!0 k2 = (trajeto2 (x,y,vx,vy,fx,fy,c) terreno)!!1 k3 = (trajeto2 (x,y,vx,vy,fx,fy,c) terreno)!!2 Elaboração do script: # trajetoria (x,y,vx,vy,fx,fy,c) terreno:

Elaboração do script: # pilotar (x,y,vx,vy,fx,fy,c) terreno: A função "pilotar" define como será a movimentação da nave uma vez que se sabe onde se encontra o ponto de pouso pilotar (x,y,vx,vy,fx,fy,c) terreno = if segmentosPouso terreno == [ ] then (1,1) else if x == fst (pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno) then pilotarPontoAbaixo (x,y,vx,vy,fx,fy,c) terreno else if x < fst (pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno) then pilotarPontoDireito (x,y,vx,vy,fx,fy,c) terreno else pilotarPontoEsquerdo (x,y,vx,vy,fx,fy,c) terreno

Elaboração do script: # pilotar (x,y,vx,vy,fx,fy,c) terreno: pilotarPontoAbaixo define a estratégia de movimentação da nave se o ponto de pouso estiver abaixo da posição atual da nave Funções Auxiliares Utilizadas pilotarPontoDireito define a estratégia de movimentação da nave se o ponto de pouso estiver do lado direito da posição atual da nave pilotarPontoEsquerdo define a estrategia de movimentacao da nave se o ponto de pouso estiver do lado esquerdo da posicao atual da nave pontoMedioPouso (x,y,vx,vy,fx,fy,c) terreno = ( hAux (gAux(head( ladoPousoCandidato (x,y,vx,vy,fx,fy,c) terreno))))

Elaboração do script: # pilotar (x,y,vx,vy,fx,fy,c) terreno: A função "gAux" é uma função auxiliar que possui como argumento uma tupla-4 e tem como saída os dois primeiros elementos dessa tupla gAux ((x1,y1),(x2,y2),_,_) = ((x1,y1),(x2,y2)) A função auxiliar "hAux" tem como parâmetros uma tupla-2 de pontos e tem como saída uma tupla-2 com o ponto médio do segmento determinado pelos pontos passados como parâmetros hAux ((x1,y1),(x2,y2)) = (a/2,b/2) where a = x1 + x2 b = y1 + y2