• Nenhum resultado encontrado

trabalho2

N/A
N/A
Protected

Academic year: 2021

Share "trabalho2"

Copied!
5
0
0

Texto

(1)

Curso de Sistemas de Informação / Engenharia de Computação DECEA - UFOP

Linguagens de Programação 2o semestre de 2011

Professor: Rodrigo Geraldo Ribeiro

e-mail: [email protected]

1 Diversão com Eletrônica Analógica

Resistores são componentes elétricos / eletrônicos muito utilizados para re-dução de corrente em circuitos. A medida do quanto de resistência possui um resitor é medida em Ohms (Ω) e este valor é usualmente descrito usando um código formado por cores. As duas primeiras cores do código represen-tam os dois dígitos mais signicativos do valor, a terceira cor representa uma potência de 10.

A tabela seguinte apresenta o signicado de cada uma das cores em suas respectivas posições:

Cor 1a pos. 2a pos. 3a pos. (Mult.)

Preto 0 0 100 Marrom 1 1 101 Vermelho 2 2 102 Laranja 3 3 103 Amarelo 4 4 104 Verde 5 5 105 Azul 6 6 106 Violeta 7 7 107 Cinza 8 8 108 Branco 9 9 109 Ouro - - 10−1 Prata - - 10−2

Como exemplo, considere o seguinte código: Verde-Azul-Amarelo. Como as duas primeiras cores são Verde e Azul, temos que os dois dígitos mais signicativos deste resistor são: 5 e 6. O multiplicador (terceira cor) deve ser 104.

Desta maneira, temos que o resistor de código Verde-Azul-Amarelo possui uma resistência de 56 × 104Ω.

Considere o seguinte tipo de dados Haskell, que representa as cores uti-lizadas para codicar valores de resistência:

data Color = Black | Brown | Red | Orange | Yellow | Green | Blue | Violet | Gray | Gold | Silver

deriving (Eq, Ord)

e a seguinte tabela que representa os possíveis valores associados a cada cor:

(2)

type Table = [(Color, [Maybe Float])] table :: Table

table = [(Black, [Just 0.0, Just 0.0, Just 0.0]), (Brown, [Just 1.0, Just 1.0, Just 10.0]), (Red, [Just 2.0, Just 2.0, Just 100.0]), (Orange, [Just 3.0, Just 3.0, Just 1000.0]), (Yellow, [Just 4.0, Just 4.0, Just 10000.0]), (Green, [Just 5.0, Just 5.0, Just 100000.0]), (Blue, [Just 6.0, Just 6.0, Just 1000000.0]), (Violet, [Just 7.0, Just 7.0, Just 100000000.0]), (Gray, [Just 8.0, Just 8.0, Just 1000000000.0]), (Gold, [Nothing, Nothing, Just 0,1]),

(Silver, [Nothing, Nothing, Just 0,01])]

Observe que o valor table é uma lista de pares formados por um valor de tipo Color e uma lista de valores de tipo Maybe Float, onde uma posição da lista representa uma determinada coluna na tabela. Por exemplo, a cor vermelho (representada pelo valor Red) possui como valores associados à primeira, segunda e terceira coluna os números 2, 2 e 102 respectivamente e

isto é representado no valor table pelo par (Red, [Just 2.0, Just 2.0, Just 100.0]). Quando um determinado valor não está presente na tabela, este é representado por Nothing.

Com base no anteriormente apresentado, desenvolva o que se pede: 1. Desenvolva a função

value :: Color -> Int -> Maybe Float

que recebe como parâmetros uma cor e um número inteiro correspon-dente ao número de uma coluna da tabela de valores de cores e retorna o valor associado à cor e a respectiva posição desta na tabela. Caso o número da coluna seja inválido (menor que 0 ou maior que 3), sua função deve retornar como resultado o valor Nothing.

2. Considere agora, o seguinte tipo de dados que representa um resistor: data Resistor = Resistor [Color] deriving (Eq, Ord) Um resistor de código Vermelho-Marrom-Amarelo seria representado pelo seguinte valor:

(3)

(a) A representação de resistores utilizando o tipo Resistor permite que um resitor seja construído utilizando um número arbitrário de cores, o que é incorreto, já que o código de cores é formado apenas por três posições. Desenvolva a função

valid :: Resistor -> Bool

que retorna verdadeiro se o resistor fornecido como parâmetro possui 3 e somente 3 cores.

(b) Utilizando a função value denida por você no exercício 1, dena a função:

resistence :: Resistor -> Float

que calcula o valor numérico do código de cores deste resistor. Como exemplo considere:

resistence (Resistor [Red, Brown, Yellow]) = 210000.0 3. Resistores são mais úteis quando unidos para formar circuitos.

Consi-dere o seguinte tipo de dados que representa circuitos: data Circuit = Parallel Circuit Circuit

| Series Circuit Circuit | Single Resistor

deriving (Eq, Ord)

Onde o construtor Single representa um circuito formado por apenas um resistor, o construtor Series representa dois circuitos de resistores em série e o construtor Parallel representa dois circuitos de resistores em paralelo. As guras 1 e 2 apresentam circuitos em série e paralelo formados por três resistores R1, R2 e R3. Supondo que r1, r2 e r3

Figura 1: Circuito de resistores em série

sejam valores do tipo Resistor, os circuitos apresentados nas guras 1 e 2 podem ser representados pelos seguintes valores do tipo Circuit, respectivamente.

circuit1 = Series (Series (Single r1) (Single r2)) (Single r3)

circuit2 = Parallel (Parallel (Single r1) (Single r2)) (Single r3)

(4)

Figura 2: Circuito de resistores em paralelo

(a) Considerando, que r1, r2, r3 e r4 são valores do tipo resistor previamente denidos, dena o circuito formado por estes resisto-res que está represisto-resentado na gura 3 utilizando um valor do tipo Circuit:

Figura 3: Circuito de resistores

(b) Um circuito representado por um valor do tipo Circuit é dito ser válido se e somente se cada um dos resistores que o compõe é válido, isto é, possui um código de cores correto. Utilizando a função valid :: Resistor -> Bool, implementada por você no item 2-a), desenvolva a função:

validCircuit :: Circuit -> Bool

que retorna verdadeiro se o valor do tipo Circuit fornecido como parâmetro for formado apenas por resistores válidos e falso caso contrário.

(c) É fato sabido que a resistência equivalente de um circuito formado por n resistores em série pode ser obtida pela seguinte fórmula:

req=Pni=1ri

onde ri é o valor em Ohms da resistência do i-ésimo resistor deste

circuito em série. Para circuitos formados por n resistores em paralelo temos que a resistência equivalente deste circuito é dada pela seguinte fórmula:

1 req =

Pn i=1r1i

Com base no apresentado, implemente a função

(5)

que calcula a resistência equivalente de um circuito utilizando as fórmulas anteriormente apresentadas e a função resistence, denida no item 2-c). Dica: Para calcular o inverso de n, isto é,

1

n, utilize a função recip (já denida na biblioteca da linguagem).

Para qualquer valor numérico n, recip n = 1 n.

4. Um problema recorrente de projetistas de circuitos é que, na maioria das vezes, não existe no mercado um resistores que possuem o va-lor exato de resistência exigido por um circuito. Nesta situação, o projetista deve criar um circuito para obter a resistência equivalente requerida em seu projeto. Neste sentido, desenvolva a função:

equivalent :: Float -> [Resitor] -> Maybe Circuit que gera automaticamente o circuito equivalente a um determinado valor de resitência. Para isso, a função equivalent recebe como parâ-metros o valor de resitência desejado e o conjunto de resitores disponí-veis. Esta função deve retornar Nothing apenas quando não é possível construir um circuito equivalente com os parâmetros fornecidos.

2 Requisitos do Trabalho

• Seu programa deve executar sobre a última versão da plataforma Has-kell.

• Toda a documentação produzida deve estar de acordo com as normas presentes no sítio desta disciplina.

• Este trabalho pode ser feito por grupos de até 3 alunos. Portanto, não haverá, sob nenhuma hipótese, grupos com mais de 3 alunos.

• Qualquer plágio implicará em ZERO para todos os alunos envolvidos. Poderão ser marcadas entrevistas a critério do professor.

Referências

Documentos relacionados

Assim, com o aprofundamento e a apreciação das perspectivas educacionais, esta estratégia não apenas vai contribuir para uma estruturação inter-pessoal

Em nosso espaço de coworking, localizado no Brooklin, você encontrá uma variedade de pensadores inovadores, focados em seus trabalhos e em metas para alcançar o sucesso.. Com

Contamos ainda com vários itens para fotografia de Newborn, toda linha de suprimentos para sublimação e um Guia de Negócios especial, com todos os nossos kits de prensas

Se o incumprimento diz respeito a não-pagamento da renda em relação a um contrato de Arrendamento de 6 meses ou mais, deve ser emitido um aviso, informando o inquilino que está

Mas, se a experiência não tiver, além do seu caráter subjetivo, uma natureza objetiva que possa ser apreendida de diversos pontos de vista, então como se poderia supor que um

Mas se a experiência não tem, além do seu carácter subjectivo, uma natureza objectiva que possa ser apreendida de muitos pontos de vista diferentes, como se poderá

estatuto dos factos acerca de como é ser um humano, ou um morcego, ou um marciano, parece que estes são factos que corporizam um ponto de vista particular. O ponto

Mais uma vez, o aluno usará a atenção para realizar esta atividade e por fim, poderão colorir de modo que trabalhe diretamente com a coordenação motora fina... Nesta atividade