Você está na página 1de 16

Exerccios Abrangendo Toda Matria

Fundamentos de Algoritmos INF05008


Esta lista no para entrega, mas sim para aferir o preparo individual do aluno para as
provas; em caso de dvidas, procurar o monitor ou o/a professor/a
ATENO: DEFINIES DE DADOS, CONTRATOS E EXEMPLOS FAZEM PARTE DAS
SOLUES (quando for o caso)

Expresses Aritmticas

1. Um exerccio pede para avaliar a expresso


n
+2
3
para n = 2, n = 5 e n = 9. Usando Scheme, podemos formular tal expresso como um
programa e depois us-lo quantas vezes forem necessrias:
(define (f n)
(+ (/ n 3) 2))
Determine o resultado da expresso para n = 2, n = 5 e n = 9 mo e, depois, usando o Stepper
do DrRacket.
Tambm formule as seguintes expresses como programas:
(a) n2 + 10
(b)

1
2

n2 + 20

(c) 2

1
n

Determine os resultados para n = 2, n = 9 mo e usando o DrRacket.


2. Desenvolver o programa volume-cilindro, que consome o raio da base do cilindro e a altura
do cilindro, e calcula o volume do cilindro.
3. Desenvolver o programa altura, que calcula a altura que um foguete atinge em um dado
intervalo de tempo. Se o foguete acelera a uma taxa constante g, ele atinge a velocidade v = gt
e a altura 12 v t, em t unidades de tempo.
4. O custo total de uma obra envolve o gasto com material de construo e o custo da mo-deobra. Sabe-se que a construtora recebe um certo valor de um contratante pela execuo da obra.
Crie uma funo que calcule o lucro obtido por esta construtora ao fim de uma obra, levando-se
em considerao a quantia recebida e o seu custo. Faa a descrio completa da funo.
5. O processo de desnaturao do DNA, no qual as pontes de hidrognio existentes entre as cadeias complementares rompem-se causando a separao da cadeia dupla em duas fitas simples,

est diretamente relacionado porcentagem de ligaes entre citosina e guanina (C-G) existentes no DNA. Seja p esta porcentagem. A temperatura em graus Celsius em que 50% do DNA
est desnaturado dada por Tm = 69.3 + 0.41 p.
Considerando as porcentagens de ligaes C-G (p) dadas a seguir, determine, mo, o resultado
da expresso e, posteriormente, desenvolva um programa no DrRacket que calcule automaticamente a temperatura Tm necessria para que a desnaturao ocorra a partir da porcentagem
p de ligaes C-G contida na molcula de DNA, sendo p:
(a) 7%
(b) 28%
(c) 40%
(d) 65%
(e) 76%

Expresses Condicionais

6. Desenvolver a funo juro que produz no a taxa a ser paga mas a quantidade de juro paga. O
banco paga uma taxa constante de 4% para depsitos at $1000, taxa de 4,5% para depsitos at
$5000, e uma taxa de 5% para depsitos acima de %5000. Por exemplo, (juro 1000) produz
40.
7. Desenvolva a funo mdias que consome 4 nmeros e realiza um clculo de valor mdio com
eles. A funo deve fazer o clculo correto dependendo do valor do primeiro nmero informado: caso ele seja 1, a sada deve ser o mdia aritmtica dos outros trs valores; se for 2, o
clculo dever ser da mdia harmnica.
8. Desenvolva a funo imposto, que consome um salrio bruto e produz a quantia de imposto
devida. Para um salrio bruto de R$240 ou menos, o imposto de 0%. Para salrios entre
R$240 e R$480, o imposto de 15%. Acima de R$480, o imposto devido de 28%.
9. Sabe-se que construtoras recebem um certo valor de um contratante pela execuo de uma obra,
o qual denominado lucro bruto. Ao receber pela obra, a construtora deve descontar um valor
de imposto a ser pago ao governo, o qual de 1020.000, 15% para obras com valores entre R$
20.000 e R$ 100.000 e de 20% para obras com valor superior a R$ 100.000. O valor resultante do
desconto do imposto chamado de lucro lquido. Crie uma funo que calcule o lucro lquido
obtido por esta construtora ao fim de uma obra dado o valor desta obra e considerando-se o
imposto a ser pago. Faa a descrio completa da funo.
10. O pH uma medida que indica a acidez, neutralidade ou alcalinidade de uma soluo aquosa.
Solues com pH abaixo de 7 so ditas cidas, enquanto pH acima de 7 caracterstico de
solues bsicas. Solues neutras possuem pH igual a 7.
(a) Seguindo estas informaes, desenvolva uma funo que consome o pH de uma substncia e verifica se a mesma um cido.
(b) Repita o tem anterior, desenvolvendo agora uma funo que consome o pH de uma substncia e verifica se trata-se de uma base.

Expresses Simblicas

11. Desenhe 3 crculos que representem um semforo. Desenvolva a funo muda-cor-lmpada


que consome um smbolo que denota uma cor (por exemplo verde, amarelo, ou vermelho),
muda a cor do semforo (apaga a luz anterior e acende o crculo correspondente ao smbolo
consumido) e produz true ou false (no caso da cor no ser uma das acima indicadas).
12. O ndice IMC foi desenvolvido pela Organizao Mundial de Sade (OMS) como forma de
medir a sade de um indivduo com base em seu peso e altura. Sua frmula dada por IM C =
peso
.
altura2
(a) Desenvolva uma funo que consome o peso e a altura de um indivduo e calcula o seu
IMC de acordo com a frmula acima. Teste a funo para alguns casos, dentre os quais:
i.
ii.
iii.
iv.

60kg, 1,63m
80kg, 1,70m
51.5kg, 1,68m
105kg, 1,85m

(b) Desenvolva uma funo que consome o peso e a altura de um indivduo e verifica se este
indivduo est acima do peso normal, retornando true em caso positivo e false em caso
negativo. Para determinar o estado de sade do indivduo, baseie-se na tabela abaixo fornecida pela OMS. Teste a funo para alguns casos, dentre os quais os exemplos fornecidos
no item (a).
Situao
Abaixo do peso
Peso normal
Sobrepeso
Obesidade Grau I
Obesidade Grau II
Obesidade Grau II

ndice (IMC)
Abaixo de 18.4
18.5 24.9
25.0 29.9
30.0 34.9
35.0 39.9
Acima de 40

(c) Desenvolva uma funo que dados o peso e altura de um indivduo, retorna a situao de
sua sade em relao ao seu IMC seguindo as informaes contidas na tabela acima. Teste
a funo para alguns casos, dentre os quais os exemplos fornecidos no item (a).
13. Com base nas informaes fornecidas no exerccio 10, desenvolva um programa que consome
o pH de uma substncia e retorna ao usurio o tipo de substncia, isto , se a mesma cida,
neutra ou bsica.
14. Um tipo sangneo se baseia na presena ou ausncia de duas protenas, A e B, na superfcie
das clulas vermelhas do sangue. Adicionalmente, o tipo sanguneo controlado por um par
de genes, denominado gentipo, cada qual podendo se apresentar em trs formas: iA , iB e i.
Como duas protenas esto envolvidas, h quatro combinaes possveis, ou seja, quatro tipos
sanguneos (grupos ABO):
tipo A: apenas a protena A est presente. Gentipo: iA iA ou iA i.
tipo B: apenas a protena B est presente. Gentipo: iB iB ou iB i.
tipo AB: ambas as protenas esto presentes. Gentipo: iA iB .
tipo O: nenhuma das protenas est presente. Gentipo: ii.

Simplificando a representao dos genes, tal que iA = A, iB = B e i = i, desenvolva um


programa que recebe como entrada o tipo sanguneo de um casal, cada qual sendo composto
por dois smbolos representando os respectivos genes, e o tipo sanguneo de uma criana, dado
tambm na forma de dois smbolos designando seu gentipo, e verifica se possvel que haja
parentesco entre o casal e a criana. Seguindo a explicao acima sobre os tipos sanguneos e
seus respectivos gentipos, a entrada A i A A i i dever gerar a sada No.

Estruturas

15. Considere as seguintes definies de estruturas:


(a) (define-struct filme (ttulo produtor))
(b) (define-struct namorado (nome cabelo olhos fone))
(c) (define-struct colega (nome nmero))
(d) (define-struct CD (artista ttulo preo))
(e) (define-struct camisa (material tamanho fabricante))
Quais so os seletores e o construtor em cada caso?
16. Fornea a definio de estrutura que representa caas de uma fora area. Assuma que um caa
tem 4 propriedades essenciais: nome (por ex. F22, Tornado ou MIG22), acelerao, velocidade mxima e alcance. Desenvolva a funo dentro-alcance? que consome um caa e a
distncia de um alvo (a partir da base do caa). Esta funo determina se o caa pode atingir o
alvo. Desenvolva tambm a funo alcance-reduzido que consome um caa e produz um
novo caa no qual o alcance reduzido a 80% do alcance original.
17. Escreva a definio da estrutura e a definio de dados para representar um instante de tempo
a partir da meia-noite. Um instante de tempo consiste de 3 nmeros: hora, minutos e segundos.
18. Desenvolva a funo instante->segundos que consome uma estrutura instante-de-tempo
(exerccio anterior) e produz o nmero de segundos decorridos desde a meia-noite, representada pela estrutura.
Exemplo:
(instante->segundos (make-instante-de-tempo 12 30 2)) retorna 45002.
19. Defina uma estrutura horrio, que contm as informaes de hora e minuto de um determinado horrio.
20. Desenvolva uma funo que calcule a diferena de horas entre um horrio h1 e um horrio h2,
sendo que estes so fornecidos conforme a estrutura definida no tem anterior. Considere as
horas numeradas de 0 a 23. (Dica: Lembre-se que, caso a hora do primeiro horrio seja maior
do que a hora do segundo, isto significa que o segundo horrio acontecer no dia seguinte.)
21. Desenvolva uma funo que consuma duas estruturas horrio e produza como resposta
quantos minutos faltam do primeiro horrio para o segundo.
22. Defina uma estrutura data, que contm as informaes de dia, ms e ano de uma determinada
data.
23. Desenvolva uma funo que calcule a diferena de meses entre uma data data1 e uma data
data2, sendo que estas so fornecidas conforme a estrutura definida no item anterior.

24. Desenvolva uma funo que consuma duas estruturas data e produza como resposta quantos
dias faltam da primeira data para a segunda. Para efeitos de clculo, considere que todos os
meses tm mesmo nmero de dias.
25. Em poca de eleies, voc foi encarregado de criar um programa para a informatizao da
eleio na cidadezinha de Abandonados do Sul. Para tanto, apresente o qu pedido:
(a) Escreva a definio de dados de uma estrutura candidato que armazena dados para um
candidato a prefeito. Cada candidato a prefeito identificado por seu nome, pelo nmero
do partido e pela quantidade de votos recebidos.
(b) D dois exemplos da criao de estruturas para armazenar dados de candidatos a prefeito.
(c) Crie uma funo que, dadas as informaes sobre dois candidatos na disputa de um segundo turno, gere como resultado o nome do candidato eleito. Em caso de empate, o
vencedor o candidato cujos dados foram fornecidos primeiro.
(d) Faa uma funo que, a partir das informaes sobre dois candidatos que disputaram
o segundo turno, diga qual foi a porcentagem de votos vlidos obtida pelo candidato
vencedor.
26. Defina uma estrutura time, a qual armazena o nome e o nmero de pontos ganhos de um time
de futebol e uma estrutura partida que armazene dados sobre um jogo de futebol. Para cada
partida, so dados o time local, o time visitante, o nmero de gols marcados pelo time local e o
nmero de gols marcados pelo time visitante.
27. Escreva uma funo resultado-partida, a qual, sendo fornecidos os dados de uma partida (definida conforme exerccio anterior), apresenta o resultado da mesma da seguinte forma:
Local, se houve vitria do time local;
Visitante, se houve vitria do time visitante;
Empate, se no houve vencedor.
28. Escreva uma funo atualiza-ptos que recebe dados de um time e de uma partida deste time
(definidos no exerccio 26) e, dependendo do resultado, atualiza os seus pontos. Considerandose que uma vitria vale 3 pontos, um empate vale 1 ponto e uma derrota no d ponto algum,
a funo deve gerar como sada uma estrutura que contenha os dados do time em questo com
a sua pontuao atualizada.
29. Voc foi designado para criar um sistema de busca de doadores de sangue em um hospital
utilizando o Racket. Cada paciente est registrado em uma espcie de banco de dados atravs
de seu nome e tipo sanguneo (despreze o fator Rh). Desenvolva uma funo que consome as
informaes de dois pacientes e verifica se o segundo paciente pode ser doador de sangue para
o primeiro. Lembre que o tipo sanguneo O o doador universal e o tipo sanguneo AB o
receptor universal.

Tipos Mistos

30. Uma revenda de automveis classifica seus veculos em 2 classes: populares e de luxo.
(a) Construa uma estrutura (com a respectiva definio de dados) para descrever a classe
automveis populares. Os atributos relevantes desta classe so: o modelo do automvel,
o ano, o rendimento (em km/l) e o preo;

(b) Construa uma estrutura (com a respectiva definio de dados) para descrever a classe
automveis de luxo. Os atributos relevantes desta classe so: o modelo do automvel, o
ano, a cor e o preo;
(c) Faa uma definio de dados para o tipo automvel, que pode conter tanto automveis
populares quanto automveis de luxo.
31. Desenvolva a funo rea que consome ou um crculo ou um quadrado e calcula sua rea.
32. Exercise 7.2.1. Desenvolva estruturas necessrias para a definio de uma coleo de animais
de um zoolgico. A coleo inclui:
zebras, sobre as quais interessam o nmero de listras e o volume ocupado por cada uma
delas;
elefantes, cujos atributos relevantes so a cor e o volume ocupado;
macacos, sobre os quais devemos saber o nvel de inteligncia e o volume ocupado.
As estruturas criadas devem permitir armazenar os dados pertinentes de cada animal, mas
tambm permitir que todos sejam tratados genericamente como animais.
Aps isto, crie uma funo cabe? que, dados 3 animais e o volume total disponvel para
transporte, indica de se possvel transportar estes 3 animais juntos.

Listas

33. Seja l a lista (cons 10 (cons 20 (cons 5 empty))).


Qual o valor retornado pelas seguintes expresses?
(a) (rest l)
(b) (first (rest l))
(c) (rest (rest l))
(d) (first (rest (rest l)))
(e) (rest (rest (rest l)))
34. Escreva a definio de dados para listas de dois smbolos. Depois desenvolva a funo contem-boneca?
que consome uma lista de exatamente dois smbolos e determina se apenas um deles boneca.
35. Fornea a definio de dados para a classe de listas de booleanos. Esta classe contm todos as
listas de booleanos (de tamanho arbitrrio).
36. Desenvolva a funo contm? que consome um smbolo e uma lista de smbolos e determina
se um determinado smbolo ocorre ou no na lista.
37. Desenvolva a funo quantos-nmeros? que consome uma lista de nmeros e produz o
nmero de tens na lista.
38. Desenvolva a funo checa-intervalo? que consome uma lista de medidas de temperaturas (nmeros) e checa se todas as medidas esto entre 5 e 45 graus Celsius.
39. Desenvolva a funo delta que consome duas listas de preos. A primeira representa o estoque no incio de um perodo de tempo e a segunda, o estoque no final do perodo. A funo
produz um nmero que a diferena entre os estoques. Se o valor do estoque aumentou, o
resultado deve ser positivo; caso contrrio, negativo.

40. Defina a funo preo-mdio. Ela consome uma lista de preos e produz o preo mdio.
41. Assumindo-se que nenhum empregado deve trabalhar mais que 100 horas por semana, reescreva a funo horas->salrio a fim de que ela tambm teste se a lista de horas trabalhadas
por semana contm nmeros acima de 100. Em caso afirmativo, a funo deve produzir a seguinte string: muitas horas trabalhadas.
42. Desenvolva a funo converte-euro que converte uma lista de valores em dlares americanos para uma lista de valores em euros. Assuma que a taxa de converso (cmbio) 1.22.
43. Desenvolva a funo nome-rob que consome uma lista de nomes de brinquedos (smbolos)
e substitui o smbolo rob por R2D2. Posteriormente, generalize da a funo para que ela
consuma uma lista de nomes de brinquedos e 2 smbolos denominados novo e antigo, de forma
a produzir uma nova lista de brinquedos substituindo todas as ocorrncias de antigo por novo.
44. Adapte a funo contm-boneca? j vista para que ela consuma um inventrio (ver cap. 10)
ao invs de uma lista de smbolos.
45. Desenvolva a funo preo-de que consome um nome de um brinquedo e um inventrio e
produz o preo deste brinquedo.
46. Desenvolva a funo concatena-strings, que recebe uma lista no-vazia do tipo lista-de-strings
e retorna a concatenao de todas as strings da lista. Por exemplo:
(concatena-strings (cons Fundamentos de Algoritmos
(cons uma disciplina
(cons muito legal! empty))))
===>
"Fundamentos de Algoritmos uma disciplina muito legal!"

Use a funo string-append :


especficas.

string string -> string para concatenar duas strings

47. Um cozinheiro deve preparar uma receita. Antes de comear, ele precisa ter certeza de que
possui todos os ingredientes necessrios. Para ajudar esse cozinheiro, apresente a definio de
dados do tipo lista-de-ingredientes e crie um programa que, a partir da lista de ingredientes em estoque e da lista de ingredientes da receita, retorne OK se todos os ingredientes
estiverem disponveis. Caso contrrio, o programa deve informar quais ingredientes esto faltando.
48. Um nibus percorre uma determinada linha, passando por diversas paradas. Apresente a definio de dados para lista-de-paradas e crie um programa que indique se possvel utilizar
este nibus para um deslocamento de uma parada inicial at uma parada final. Assuma que o
percurso de volta o inverso do percurso de ida.
49. Dadas trs listas l1, l2 e l3 do tipo lista-de-nmeros, definido abaixo, crie um programa
que diga qual das trs listas possui mais nmeros dentro de um intervalo fechado entre dois
nmeros ini-int e fim-int.
;;
;;
;;
;;

Uma lista-de-nmeros ou
- empty, ou
- (cons n ldn), onde
n : number

;; ldn : lista-de-nmeros

50. (4 pontos) O sistema de uma locadora de DVD controla a lista de filmes que a locadora possui.
Cada filme registrado com um ttulo, um gnero e um valor de locao. Sabendo que o
sistema deve ainda controlar uma lista de filmes locados, a qual tem a mesma estrutura da lista
de filmes, mas contm apenas os filmes correntemente locados, faa o qu pedido:
(a) Escreva as definies de dados necessrias para o sistema em questo.
(b) Desenvolva uma funo que atualize os preos de locao dos filmes da lista. Os reajustes
devem ser feitos de acordo com o gnero do filme:
Romance: aumento de 10%;
Demais gneros: reduo de 5%.
(c) Crie uma funo que, dada uma lista de ttulos de filmes que um cliente queira locar,
verifique quais destes filmes esto disponveis.
51. A agncia de namoros NamoreMe possui um cadastro com os perfis de seus usurios. Para
cada usurio, so armazenados os seguintes dados:
Nome (string)
Sexo (m ou f)
Preferncia de parceiro (m ou f)
Para facilitar a identificao de potenciais correspondncias entre perfis, crie um programa
encontra-pares. Este programa deve, dado um perfil de usurio, identificar a lista de perfis
que se encaixam na preferncia deste perfil e que busquem algum com o perfil recebido. No
esquea de fazer as definies de dados necessrias.
52. Relembrando o exerccio 14, a respeito de tipos sanguneos, reformule o programa para que
agora a entrada seja dada na forma de lista, contendo o gentipo dos pais e o gentipo da criana. Exemplo: (cons A (cons i (cons A (cons A (cons i (cons i empty)))))).
53. Relembrando o exerccio 29 sobre doao de sangue, aprimore o seu programa para que a entrada passe a consistir dos dados de um paciente aguardando por doao e de uma lista com
os dados de todos os doadores cadastrados no sistema hospitalar e retorne uma lista com os
doadores compatveis encontrados.

Funes Compostas e Definies Locais

54. Desenvolva a funo raiz-da-equao que resolve equaes de grau 2. Esta funo consome
3 coeficientes, a, b e c e calcula a raiz dependendo destes coeficientes. Se a = 0, a funo deve
produzir o smbolo degenerada. Se b2 < 4ac, a funo deve produzir a string no h soluo
2
real. Se b2 = 4ac a funo deve produzir a nica soluo b
2a . Se b > 4ac a funo produz as
duas razes sob a forma de uma lista de 2 nmeros (um

b+ b2 4ac
2a

e o outro

b b2 4ac
).
2a

55. Desenvolva um programa que ordena, em ordem crescente, lista de mensagens (emails) pela
data (dia apenas) deste email. Considere que:
uma estrutura email definida da seguinte forma:
(define-struct email (remetente dia texto))

um email uma estrutura


(make-email remetente dia texto)
onde remetente e texto so strings e dia um nmero.
Defina o(s) outro(s) tipo(s) de dado(s) antes de apresentar a funo.
56. Seguindo o enunciado do exerccio anterior, modifique o programa para que ordene os emails
pelo remetente. (Dica: use string<?).
57. Ainda considerando a questo de ordenao dos emails, desenvolva uma funo de alta ordem para ordenar emails pela data que receba como argumento tambm a forma de ordenao
(crescente ou decrescente, atravs de funes apropriadas).
58. Considere a funo procura, que determina se um nmero ocorre ou no em uma lista de
nmeros. Como pode ser observado, esta funo pode ter que percorrer toda a lista para determinar isto.
;; procura : nmero lista-de-nmeros -> boolean
(define (procura n ldn)
(cond
[(empty? ldn) false]
[else (or (= (first ldn) n) (procura n (rest ldn)))]))
Desenvolva uma funo procura-ordenado que determina a mesma coisa, mas que se aproveita do fato de que a lista est ordenada segundo algum critrio.
59. Explique porque cada uma das expresses abaixo sintaticamente incorreta:
1. (local ((define x 10)
(y (+ x x)))
y)
2. (local ((define (f x) (+ (* x x) (* 3 x) 15))
(define x 100)
(define f@100 (f x)))
f@100 x)
3. (local ((define (f x) (+ (* x x) (* 3 x) 14))
(define x 100)
(define f (f x)))
f)
60. Determine quais das seguinte expresses so legais e quais no so, e explique porque.
1. (define A-CONSTANT
(not
(local ((define (odd an)
(cond
[(= an 0) false]
[else (even (- an 1))]))
(define (even an)
(cond
[(= an 0) true]

[else (odd (- an 1))])))


(even a-nat-num))))
2. (+ (local ((define (f x) (+ (* x x) (* 3 x) 15))
(define x 100)
(define f@100 (f x)))
f@100)
1000)
3. (local ((define CONST 100)
(define f x (+ x CONST)))
(define (g x y z) (f (+ x (* y z)))))
61. Avalie manualmente as seguintes expresses:
1. (local ((define (x y) (* 3 y)))
(* (x 2) 5))
2. (local ((define (f c) (+ (* 9/5 c) 32)))
(- (f 0) (f 10)))
3. (local ((define (odd? n)
(cond
[(zero? n) false]
[else (even? (sub1 n))]))
(define (even? n)
(cond
[(zero? n) true]
[else (odd? (sub1 n))])))
(even? 1))
4. (+ (local ((define (f x) (g (+ x 1) 22))
(define (g x y) (+ x y)))
(f 10))
555)
5. (define (h n)
(cond
[(= n 0) empty]
[else (local ((define r (* n n)))
(cons r (h (- n 1))))]))
(h 2)
62. Use uma expresso local para organizar a funo para encontrar descendentes de olhos azuis,
vista em aula.
63. Considere a seguinte definio de funo:
;; maximo : Lista-de-nmeros -> Nmero
;; Determinar o maximo nmero da lista no vazia
(define (maximo ldn)

(cond
[(empty? (rest ldn)) (first ldn)]
[else (cond
[(> (first ldn) (maximo (rest ldn))) (first ldn)]
[else (maximo (rest ldn))])]))
Notar que ambas as clusulas da expresso cond computam (maximo (rest ldn)). Logo,
esta uma candidata natural a uma expresso local. Reformule a funo dada usando a expresso local e teste ambas as verses com (list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20). Qual o efeito? Explique.
64. Considere a seguinte definio de funo e considere inventrio conforme definido anteriormente neste curso:
;; menos-de-1 : inventrio -> inventrio
;; Cria um inventrio a partir de inventrio dado com
;; todos os tens que custam menos de $1
(define (menos-de-1 inv)
(cond
[(empty? inv) empty]
[else (cond
[(<= (item-preo (first inv)) 1.00)
(cons (first inv) (menos-de-1 (rest inv)))]
[else (menos-de-1 (rest inv))])]))
J que ambas as clusulas da expresso cond extraem o primeiro tem de um inventrio, reformule o exemplo usando a expresso local.

Estruturas Autorreferenciveis e com Referncia Mtua

65. Simule manualmente as chamadas e confirme que (ancestral-olhos-azuis? empty)


retorna false. Faa o mesmo para (ancestral-olhos-azuis? Gustav) (no necessrio
realizar todas as chamadas; concentre-se nas principais). Obs.: Para este e outros exemplos
sobre rvores, consideraremos a rvore usada no exemplo visto em aula.
66. Desenvolva a funo conta-pessoas que consome uma rvore cujos nodos so membros de
uma famlia, e produz o nmero de pessoas na famlia.
67. Desenvolva a funo idade-mdia que consome uma rvore cujos nodos so membros de
uma famlia, e produz a idade mdia das pessoas na famlia.
68. Desenvolva a funo cores-dos-olhos que consome uma rvore cujos nodos so membros
de uma famlia, e produz uma lista de todas as cores de olhos que ocorrem na famlia. Uma cor
de olhos pode ocorrer mais de uma vez na lista.
Dica: use a operao append que consome 2 listas e produz a concatenao delas.
69. Considere a seguinte definio de dados:
(define-struct n (val esq dir))
Uma AB (rvore binria) ou

- false, ou
- (make-n val esq dir),
onde val nmero, esq e dir so AB

Defina a funo valores-AB que, dada uma rvore binria de entrada, retorna uma lista com
os valores de todos os ns da rvore (em qualquer ordem).
70. Escreva uma funo acha-maior-AB que encontre o maior valor armazenado em uma rvore
binria.
71. Apresente um programa converte-rvores, o qual, dada uma AB, converte esta estrutura
em uma ABP.
72. Desenvolva a funo contem-ab? que consome um nmero n e uma rvore binria cujos
nodos so nmeros. Se a rvore contiver o nmero em algum dos nodos, retornar true, seno
false.
73. Desenvolva a funo pesquisar-ab que consome um nmero e uma rvore binria cujos
nodos contm estruturas que armazenam dados sobre um determinado contribuinte. As informaes relevantes sobre contribuintes so: seu CPF e seu nome; alm disto os nodos precisam
apontar para os nodos anterior (esquerda) e posterior (direita). Esta funo produz o nome do
contribuinte caso o nmero exista na rvore e false em caso contrrio.
74. Desenvolva a funo na-ordem que consome uma rvore binria referente a contribuintes e
produz uma lista de todos os CPF destes contribuintes. Tal lista deve conter os nmeros na
ordem em que aparecem na rvore, da esquerda para a direita.
Dica: use a funo append: lista lista -> lista que concatena 2 ou mais listas.
75. Desenvolva a funo pesquisar-abp que consome um nmero n e uma ABP (rvore binria
de pesquisa). Se a rvore contiver um nodo cuja estrutura tem o CPF igual a n, a funo retorna
o nome do contribuinte. Caso contrario, produz false. Compare com o resultado produzido
pela funo pesquisar-ab (ver exerccio nesta lista).
76. Desenvolva a funo insere-n. A funo recebe uma ABP B, um nmero n e um smbolo s.
A funo cria uma nova ABP igual a anterior mas com a adio do n com valores n e s.
77. Desenvolva a funo constri-ABP a partir de uma lista-de-nmeros. Use as listas exemplos
apresentadas na pgina 204 do livro.
Uma lista-de-nmeros-e-smbolos :
empty
(cons (list id nome) lnum) onde id um nmero, nome um smbolo, e lnum uma
lista-de-nmeros-e-smbolos
78. Simule manualmente (descendente-olhos-azuis?
(descendente-olhos-azuis? Bettina).

Eva), bem como

79. Desenvolva a funo quo-longe? que determina quo longe, na rvore, est um dado
genitor de um de seus descendentes de olhos azuis, caso haja algum. Se um dado genitor
tem olhos azuis, a distncia zero. Em caso contrrio, se pelo menos um de seus filhos tem
olhos azuis, a distncia um, e assim por diante. Se nenhum descendente tiver olhos azuis,
ento a funo deve retornar false.

80. Desenvolver a funo conta-descendentes que consome um nodo do tipo genitor e conta
o nmero de seus descendentes, incluindo a si mesmo. Modifique o exerccio e crie a funo
conta-descendentes-exclusivo que realiza o mesmo porm exclui a si mesmo.
81. Desenvolver a funo cor-dos-olhos que consome um genitor e produz uma lista com
todas as cores de olhos em sua rvore genealgica (seus descendentes). Uma cor pode ocorrer
mais de uma vez na lista.
82. Um catlogo de telefones armazena informaes sobre contatos de uma empresa. Cada contato
cadastrado com um nome, um nmero de telefone e um nmero de registro. Sabendo que tal
catlogo representado por uma rvore binria de pesquisa (ABP), onde o nmero de registro
usado para organizar a rvore, faa o qu pedido:
(a) Apresente a definio da estrutura de um n desta ABP;
(b) Crie uma funo que, dado o nmero de registro de um contato, apresente o nome e o
telefone deste contato.
(c) Descreva, sucintamente, quais seriam os passos necessrios para remover um determinado n dado o seu nmero de registro, detalhando estruturas de dados e funes utilizadas.
83. Uma pgina web :
(a) empty, ou
(b) (cons s wp), onde s um smbolo e wp uma pgina web, ou
(c) (cons ewp wp), onde ewp e wp so pginas web
A partir dessa definio de dados, desenvolva a funo troca. A funo recebe dois smbolos,
novo e velho, e uma pgina web wp. A funo produz uma pgina com a mesma estrutura de
wp, mas com todas as ocorrncias de velho trocadas por novo.
84. Muitos usurios no gostam de navegar em pginas web que tm muitos subnveis at que
se atinja a informao necessria. Por isso, um web designer quer medir qual a profundidade
(nmero de nveis) de uma pgina. Se uma pgina contem apenas smbolos, ento sua profundidade zero. Uma pgina que remete a uma sub-pgina tem a profundidade desta mais
um. Se uma pgina remete a diversas pginas, a profundidade dela a mxima profundidade
entre as pginas para as quais ela remete, mais um. Desenvolva a funo profundidade que
consome uma pgina web e calcula sua profundidade.
85. Desenvolver a funo tamanho-pgina que consome uma pgina web (como definida) e produz o nmero de smbolos (palavras que ela contem).
86. Desenvolva a funo ocorre-smbolo? que consome um smbolo e uma pgina web e determina se tal smbolo ocorre em algum lugar da pgina, incluindo suas sub-pginas.
87. Desenvolva a funo encontra-smbolo. Ela produz false se um dado smbolo no ocorre em
uma dada pgina ou em alguma de suas sub-pginas. Se o smbolo ocorre pelo menos uma vez,
a funo deve produzir uma lista dos cabealhos das pginas percorridas. Considere que uma
estrutura webpage contm um cabealho (um smbolo) e um corpo (uma lista de smbolos).
Dica: defina uma funo auxiliar similar mas que produza apenas true quando uma webpage
contem o smbolo desejado.

Funes de Alta Ordem

88. Descreva as seguintes classes de funes:


1.
2.
3.
4.
5.

(number -> boolean)


(boolean symbol -> boolean)
(number number number -> number)
(number -> (listof number))
((listof number) -> boolean)

89. Escreva o contrato da funo filter1 conforme definida abaixo:


(define (filter1 rel-op alon t)
(cond
[(empty? alon) empty]
[else (cond
[(rel-op (first alon) t)
(cons (first alon)
(filter1 rel-op (rest alon) t))]
[else
(filter1 rel-op (rest alon) t)])]))
90. Abstraia as 2 funes seguintes em uma nica funo chamada extremo:
;; menor : lista-de-nmeros -> nmero
;; Determinar o menor nmero de uma;; maior : lista-de-nmeros -> nmero
;; Determinar o maior nmero de uma
;; lista de nmeros
;; lista de nmeros (define (maior ldn)
(define (menor ldn)
(cond
(cond
[(empty? (rest ldn)) (first ldn)] [(empty? (rest ldn)) (first ldn)]
[else (cond
[else (cond
[(> (first ldn)
[(< (first ldn)
(maior (rest ldn)))
(menor (rest ldn)))
(first
ldn)]
(first ldn)]
[else
[else
(maior (rest ldn))])]))
(menor (rest ldn))])]))
91. Formule contratos para as seguintes funes:
(a) sort: consome uma lista de nmeros e uma funo que consome 2 nmeros (da lista
dada) e produz um booleano; sort produz ento uma lista de nmeros
(b) map que produz uma lista de nmeros e consome uma funo de nmero para nmero e
uma lista de nmeros
(c) project que produz uma lista de smbolos e consome uma lista de lista de smbolos e
uma funo de lista de smbolos para smbolo
92. Use filter1 para desenvolver uma funo que consome uma lista de smbolos e extrai todos
os smbolos que no so iguais a car. Escreva o contrato de filter1.
93. Desenvolva a funo mesmo-resultado?, a qual determina se duas funes (ambas consomem trs nmeros e produzem um nmero), produzem o mesmo resultado para 1.2, 3, 5.7.
94. Modifique as definies de ordena e insere para que elas passem a ser funes de alta ordem
onde o critrio de ordenao definido como parmetro. Denomine-as ordena-critrio e
insere-critrio.

10

Recurso Generativa

95. Simule todos os passos at a soluo usando a funo quick-sort quando aplicada a
(list 11 9 2 18 12 14 4 1).
96. O que acontece se usarmos quick-sort com a lista (list 11 8 7 8 14 7))? Modifique
quick-sort para que nos devolva uma lista com o mesmo tamanho da lista passada como
argumento.
97. A funo quick-sort reduz o tamanho do problema em muitos casos, mas ela muito lenta
quando se trata de problemas pequenos. Desta forma, em geral se usa quick-sort para reduzir o tamanho do problema, aliada funo ordena (vista na aula sobre o cap. 12) para
tratar os sub-problemas. Desenvolva uma verso da quick-sort que usa a funo ordena se
o tamanho da lista est abaixo de um limiar (dado como argumento).
98. Teste as funes quick-sort e ordena com o auxlio de (time (...)), para diversos tamanhos de listas e constate que ordena mais rpida para listas de at um certo tamanho.
Determine que tamanho este.
99. Escreva a funo move-bolas que, dada uma lista de bolas, move cada uma at que todas
estejam fora do limite da mesa (uma nica mesa)
100. Desafio (exerccio 12.4 do livro). Desenvolva a funo permuta que, dada uma palavra (representada como uma lista de smbolos), retorna uma lista de todas as suas possveis permutaes.
Por exemplo:
(permuta (list o l a))
====> (list (list
(list
(list
(list
(list
(list

o
o
l
l
a
a

l
a
o
a
a
l

a)
l)
a)
o)
l)
o) )

Dica 1. necessrio o uso de funes auxiliares.


Dica 2. Para iniciar, pode-se usar a estratgia da funo ordena: separar os itens da lista,
passando-os para uma auxiliar.
Dica 3. Cuidado com os tipos de retorno das funes: este exemplo ressalta a importncia do
contrato no desenvolvimento de funes complexas.
101. Alm do insertion sort e do quick sort, vistos em aula, outro mtodo de ordenao famoso
o merge sort. Neste mtodo, a lista de nmeros a serem ordenados dividida em pares de
nmeros (listas de dois nmeros consecutivos na lista original). Cada lista de pares ordenada.
Aps isso, listas de pares ordenados consecutivos so ordenados, formando listas ordenadas de
4 nmeros. Em seguida, as listas de 4 nmeros ordenados so usadas para formar listas com
oito nmeros, e assim por diante.
Apresente um programa que implemente este mtodo de ordenao. Assuma que o tamanho
da lista de entrada sempre uma potncia de 2 maior ou igual a 4.
102. Considere um conjunto de cidades de uma regio. Cada cidade possui um conjunto de estradas
que a ligam a outras cidades da mesma regio, sendo que todas as estradas possuem mo dupla.

Crie um programa que, dada uma lista de cidades e suas conexes, ache o menor caminho entre
uma cidade de origem e uma cidade de destino. O comprimento do caminho a ser considerado
o nmero de estradas a serem percorridas entre cidades; i.e., o menor caminho possvel entre duas cidades seria uma estrada que ligue as duas diretamente. No entanto, no deve ser
assumido que sempre existe uma ligao direta entre todas as cidades.
103. As Torres de Hani so um quebra-cabea que consiste em uma base contendo trs pinos. Em
um destes pinos, so colocados 3 discos, uns sobre os outros, seguindo a ordem decrescente de
dimetro (i.e, disco com maior dimetro colocado sob os demais). O desafio passar todos
os discos do pino atual para um dos outros dois sem que a ordem dos discos no novo pino seja
modificada em relao ordem atual. O pino que no nem origem e nem destino dos discos
usado como auxiliar neste processo.
Dado este problema, apresente o qu pedido:
(a) Descreva, em Portugus, os passos necessrios para solucionar este problema;
(b) Crie um programa que implemente a soluo proposta;
(c) Modifique o programa anterior para que, agora, ele funcione tambm para um cenrio de
5 pinos, em vez de 3;
(d) possvel desenvolver-se um programa genrico, o qual, dado um nmero n qualquer de
discos, encontre uma soluo?

11

Grafos

104. Crie uma funo nodos que coleta o conjunto (sem repetio) dos nodos de um grafo.
105. Desenvolva a funo prximos que cria a lista de nodos diretamente alcanveis a partir de
um dado nodo.
106. Faa uma funo encontra-rota, que devolve um caminho entre dois nodos ou false, se
no existir tal caminho.
107. Apresente uma funo possui-ciclo? que verifica se um determinado grafo dirigido possui
ciclo ou no.

Você também pode gostar