Exercícios da cadeira de Introdução à Programação
|
|
|
- Gabriel Graça Barata
- 9 Há anos
- Visualizações:
Transcrição
1 Exercícios da cadeira de Introdução à Programação Cláudia Antunes Ana Cardoso Cachopo João Cachopo Francisco Couto António Leitão Inês Lynce César Pimentel H. Sofia Pinto Ano Lectivo 2002/2003 Parte I
2 i Prefácio Este documento reúne os exercícios propostos nas aulas práticas da cadeira de Introdução à Programação da Licenciatura em Engenharia Informática e de Computadores do Instituto Superior Técnico nos anos lectivos 1998/1999, 1999/2000, 2000/2001 e 2001/2002. Esta compilação destina-se a ser usada nas cadeiras da Licenciatura em Engenharia Informática e de Computadores (LEIC), da Licenciatura dos Sistemas de Informação e Multimédia (LESIM) e da Licenciatura em Engenharia de Redes de Comunicação e de Informação (LERCI) no ano lectivo 2002/2003. Alguns destes exercícios correspondem à tradução de exercícios propostos no livro de texto referido na bibliografia (opcional) da cadeira: Harold Abelson and Gerald Jay Sussman with Julie Sussman, Structure and Interpretation of Computer Programs, Second Edition, MIT Press, Sempre que tal se verifique aparece associado ao número do exercício uma indicação do número que o exercício tem no referido livro. Inês Lynce (editora)
3 CONTEÚDO 1 Conteúdo 1 Noções básicas 2 2 Procedimentos compostos 4 3 Processos gerados por procedimentos 10 4 Procedimentos de ordem superior 13 5 Tipos Abstractos de Informação 20 6 O Desenvolvimento de programas 35
4 1 NOÇÕES BÁSICAS 2 1 Noções básicas Exercício 1.1 Traduza as seguintes expressões para a notação prefixa:! Exercício 1.2 (Livro 1.2) Traduza a seguinte expressão para a notação prefixa: " $#%&'( ) ) Exercício 1.3 (Livro 1.1 e outros) Em baixo é apresentada uma sequência de expressões. Diga qual é o resultado impresso pelo interpretador de Scheme quando é avaliada cada uma dessas expressões. Assuma que a sequência é avaliada pela ordem apresentada. 10 ( ) (- 9 1) (/ 6 2) (+ (* 2 4) (- 4 6)) (+ (* (+ (* 2 3) 4) 5) 6) (/ (* (/ (* 2 3) 3) 4) 4) (+ (- (+ (- (+ 1 2) 3) 4) 5) 6) (- (+ (- (+ (- 1 2) 3) 4) 5) 6) (define a 3) (define b (+ a 1))
5 1 NOÇÕES BÁSICAS 3 (+ a b (* a b)) (= a b) (and (<= a b)(even? a)(odd? b)) (max (quotient a 2)(remainder b 2))
6 H 8 2 PROCEDIMENTOS COMPOSTOS 4 2 Procedimentos compostos Exercício 2.1 Avalie as seguintes expressões: ((lambda (x)(+ x 2)) 5) ((lambda (x y)(+ x y)) 1 2) (lambda (x)(* x x)) ((lambda (x y)(+ (* 2 x) y)) 5 3) ((lambda (x y) (+ (* 2 x) (* 3 y))) 1 2) Exercício 2.2 Defina um procedimento que calcula o perímetro de uma circunferência *,+.-0/. Exercício 2.3 Defina um procedimento que calcula a área de uma circunferência /. Exercício 2.4 Defina um procedimento que calcula o volume de uma esfera /. Exercício 2.5 Defina um procedimento que calcula o volume de uma casca esférica de raio interior /98 e raio exterior /. Exercício 2.6 Defina um procedimento que calcula a altura : a que se encontra um objecto que se deixa cair de uma altura :9; com velocidade inicial 4; ao fim de um tempo <. BC!.DEFG (:=+>:; <? + Exercício 2.7 Defina um procedimento chamado hipotenusa que, dados os comprimentos dos dois catetos de um triângulo rectângulo, calcula o comprimento da hipotenusa. Dados os comprimentos dos catetos 1 e H do triângulo, a hipotenusa : é calculada como: :,+I 1 Exercício 2.8 Defina um procedimento chamado perimetro que, dados os comprimentos dos dois catetos de um triângulo rectângulo calcula o seu perímetro. O perímetro de uma figura geométrica é a soma dos comprimentos de todos os seus lados.
7 2 PROCEDIMENTOS COMPOSTOS 5 Exercício 2.9 (Livro 1.1) Em baixo é apresentada uma sequência de expressões. Diga qual é o resultado impresso pelo interpretador de Scheme quando é avaliada cada uma dessas expressões. Assuma que a sequência é avaliada pela ordem apresentada. (define a 3) (define b (+ a 1)) (if (and (> b a) (< b (* a b))) b a) (cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (else 25)) (+ 2 (if (> b a) b a)) (* (cond ((> a b) a) ((< a b) b) (else -1)) (+ a 1)) Exercício 2.10 Escreva um procedimento anónimo em Scheme que recebe dois números e devolve o maior deles. Exercício 2.11 Defina o procedimento max3 que recebe três números como argumentos e devolve o maior deles. Exercício 2.12 (Livro 1.3) Defina um procedimento que recebe três números como argumentos e devolve a soma dos quadrados dos dois maiores. Exercício 2.13 (Livro 1.4) Repare que o nosso modelo de avaliação permite a existência de combinações cujos operadores são expressões compostas. Use esta observação para descrever o comportamento do seguinte procedimento: (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) Exercício 2.14 Suponha que a tem o valor 5. Diga qual o valor resultante da avaliação da expressão:
8 H R + H R H R 2 PROCEDIMENTOS COMPOSTOS 6 (let ((a 3) (b (* a 4))) (+ a b)) Exercício 2.15 Qual é o valor resultante da avaliação da expressão que se segue? Reescreva esta expressão utilizando uma expressão lambda. (let ((x 5)) (let ((x 3) (y (* x 2))) (+ x y))) Exercício 2.16 Avalie a expressão que se segue. Reescreva-a utilizando a forma especial let. ((lambda (x) (+ x ((lambda (x) (* 2 x)) 3))) 2) Exercício 2.17 Considere a seguinte expressão matemática: JLK JLKMN 1. Escreva um procedimento calc-expr que calcule o seu valor. 2. Usando a estrutura de blocos, garanta que o seu procedimento recebe sempre um argumento correcto ( JPOQ ). 3. Comente as afirmações seguintes: (a) Neste caso, não havia necessidade de utilizar a estrutura de blocos. (b) Neste caso, convém utilizar a forma especial let. (c) Neste caso, não devo definir o procedimento cubo. (d) O procedimento cubo, se for definido, deve ser definido dentro do procedimento calc-expr. Exercício 2.18 O número de combinações de D S)T D D A S)T D D>U A objectos R a R pode ser calculado pela seguinte função: SVT D DWU A U se RE+ se RE+ se DYX Q A D A R, DZX[Q e R X[Q C
9 + K R PROCEDIMENTOS COMPOSTOS 7 1. Escreva um procedimento que calcula o número de combinações de D objectos R a R. Use a estrutura de blocos para garantir que o seu procedimento recebe sempre os argumentos correctos: inteiros superiores ou iguais a zero e DYO R. 2. Sabendo que existem 49 números possíveis para o totoloto e que cada chave tem 6 números diferentes, calcule o número de chaves existentes. 3. Sabendo que cada aposta custa 40$00, quanto dinheiro teria que gastar para ter a certeza que ganhava um primeiro prémio? Exercício 2.19 Defina o procedimento factorial que recebe um número como argumento e calcula o factorial desse número. Note que R + R]\ e QK + U(K. Exercício 2.20 Modifique o procedimento anterior para que, no caso de R ser negativo, o factorial devolva zero. Note que esse teste só deve ser feito uma vez. Exercício 2.21 Defina um procedimento que calcula uma potência inteira de J. Note que J J_^ + ;. J=àJb^c e Exercício 2.22 Modifique o procedimento anterior para que passe também a conseguir calcular potências em que o expoente é negativo. Note que Jdc^ + ef. Exercício 2.23 Modifique o procedimento anterior para que passe a tratar correctamente os casos Q^, com R negativo e Q ;. Exercício 2.24 Considere definidos os seguintes procedimentos: add1, sub1 e zero?, que somam um ao seu argumento, subtraem um ao seu argumento, ou testam se o seu argumento é igual a zero, respectivamente. Com base neles (ou seja, sem utilizar procedimentos como,, ` seguintes procedimentos:,, +, g, X ), defina os 1. O procedimento soma, que recebe dois inteiros superiores ou iguais a zero x e y, e calcula a soma entre eles. 2. O procedimento igual?, que dados dois inteiros superiores ou iguais a zero x e y, retorna verdadeiro se eles forem iguais e falso caso contrário. 3. O procedimento menor?, que dados dois inteiros superiores ou iguais a zero x e y, indica se x é menor que y.
10 J 2 PROCEDIMENTOS COMPOSTOS 8 4. O procedimento diferenca, que calcula a diferença entre dois inteiros superiores ou iguais a zero x e y. 5. O procedimento produto, que calcula o produto entre dois inteiros superiores ou iguais a zero x e y. Para definir este procedimento pode também usar o procedimento soma. 6. O procedimento divisao-inteira, que calcula a divisão inteira entre dois inteiros positivos J e h. A divisão inteira entre J e h é o máximo inteiro i tal que ij\khml. Para definir este procedimento pode usar os procedimentos diferenca e menor?. Exercício 2.25 (Adaptado do Livro 1.6) A Alice não percebe porque é que o if precisa de ser uma forma especial. Porque é que não o posso definir como um procedimento normal em termos do cond? pergunta ela. Eva, uma amiga sua, diz que isso é possível e define uma nova versão do if: (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))) A Eva demonstra o programa à Alice: (new-if (= 2 3) 0 5) 5 (new-if (= 1 1) 0 5) 0 Encantada, a Alice usa o new-if para re-escrever o procedimento que calcula a potência: (define (potencia base exp) (new-if (= exp 0) 1 (* base (potencia base (- exp 1))))) O que é que acontece quando a Alice tenta calcular potências? Explique. Exercício 2.26 (Livro 1.15) O seno de um ângulo (especificado em radianos) pode ser calculado usando a aproximação sin JPn J se J for suficientemente pequeno, e a identidade trigonométrica sin J J + sin sin J para reduzir o valor do argumento de sin. (Para este exercício, vamos considerar que um ângulo é suficientemente pequeno se a sua magnitude não for maior que 0.1 radianos.) Estas ideias estão incorporadas nos procedimentos seguintes:
11 2 PROCEDIMENTOS COMPOSTOS 9 (define (cube x) (* x x x)) (define (sine angle) (define (p x) (- (* 3 x) (* 4 (cube x)))) (if (<= (abs angle) 0.1) angle (p (sine (/ angle 3))))) 1. Quantas vezes é que o procedimento p é aplicado quando avaliamos (sine 12.5)? 2. Qual é a ordem de crescimento em espaço e número de passos (em função de 1 ) usados pelo processo gerado pelo procedimento sine quando avaliamos (sine a)? Exercício 2.27 Considere uma versão do jogo do NIM em que dois jogadores jogam alternadamente. No início do jogo existe uma série de palitos. Em cada jogada, cada jogador pode remover 1, 2 ou 3 palitos. Quem remover o último palito ganha o jogo. Defina os seguintes procedimentos para criar um programa que joga ao NIM: 1. O procedimento ganha?, que recebe como argumento o número de palitos ainda existentes. Este procedimento deve devolver o valor lógico verdadeiro se o jogador que vai jogar agora pode ganhar o jogo se jogar da melhor forma possível, e falso caso contrário. Sugestão: utilize o procedimento perde? da alínea seguinte. 2. O procedimento perde?, que recebe como argumento o número de palitos ainda existentes. Este procedimento deve devolver o valor lógico verdadeiro se o jogador que vai jogar agora vai perder o jogo se o adversário jogar da melhor forma possível, e falso caso contrário. Sugestão: utilize o procedimento ganha?. 3. O procedimento nim, que recebe como argumento o número de palitos ainda existentes e devolve o número de palitos que o jogador a jogar nessa situação deve remover para ganhar o jogo. Sugestão: utilize o procedimento perde?.
12 8 + R + 3 PROCESSOS GERADOS POR PROCEDIMENTOS 10 3 Processos gerados por procedimentos Exercício 3.1 (Adaptado do Livro 1.9) Cada um dos seguintes procedimentos define um método para adicionar dois inteiros positivos em termos dos procedimentos add1, que incrementa o seu argumento de uma unidade, e sub1, que decrementa o seu argumento de uma unidade. (define (soma a b) (define (soma a b) (if (zero? a) (if (zero? a) b b (add1 (soma (sub1 a) b)))) (soma (sub1 a) (add1 b)))) Usando o modelo da substituição, ilustre o processo gerado por cada procedimento ao avaliar (soma 4 5). Estes processos são iterativos ou recursivos? Porquê? Exercício 3.2 Para cada um dos seguintes procedimentos, que geram processos recursivos, defina novas versões dos procedimentos que gerem processos iterativos. 1. (define (produto x y) (if (zero? x) 0 (+ y (produto (- x 1) y)))) 2. (define (div x y) (if (< x y) 0 (+ 1 (div (- x y) y)))) Exercício 3.3 Utilizando os procedimentos zero? e sub1, defina o procedimento par?, que verifica se um número inteiro superior ou igual a zero é par ou não. 1. Usando um processo recursivo 2. Usando um processo iterativo Exercício 3.4 Defina um procedimento que calcula uma potência inteira de J usando um processo iterativo. J5òJ_^c e J ;. Note que Jb^ + Exercício 3.5 Escreva um procedimento para calcular o valor de Fqp R Fqp J J_ J_r J K K K J utilizando a expansão em série: Jts K CC.C
13 3 PROCESSOS GERADOS POR PROCEDIMENTOS Usando um processo recursivo 2. Usando um processo iterativo Assuma que já existem os procedimentos fact e pot que calculam o factorial e a potência, respectivamente. O seu procedimento deve receber, para além do valor em radianos para o qual quer calcular o seno, o número de termos que devem ser considerados. Exercício 3.6 Defina um procedimento para calcular aproximações de -, usando a fórmula - +! CC.C CC.C O procedimento deve receber o número de termos a utilizar para calcular a aproximação. 1. Usando um processo recursivo 2. Usando um processo iterativo Exercício 3.7 Considere o seguinte procedimento: (define (misterio x n) (if (= n 0) 0 (+ (* x n)(misterio x (- n 1))))) 1. Mostre a evolução do processo gerado pela avaliação de (misterio 2 3). 2. O procedimento apresentado é um procedimento recursivo? Justifique. 3. O procedimento apresentado gera um processo recursivo ou iterativo? Justifique. 4. Se o procedimento gerado é recursivo (iterativo), transforme o procedimento de forma a que gere um processo iterativo (recursivo). Exercício 3.8 Considere definidos os seguintes procedimentos: add1, sub1 e zero?, que somam um ao seu argumento, subtraem um ao seu argumento, ou testam se o seu argumento é igual a zero, respectivamente. Com base neles (ou seja, sem utilizar procedimentos como,, ` seguintes procedimentos:,, +, g, X ), defina os 1. Defina o predicado positivo?+ que recebe um número qualquer (positivo ou negativo) e indica se ele é positivo. 2. Defina o procedimento simetrico que recebe um número qualquer (positivo ou negativo) e devolve o simétrico desse número.
14 J 3 PROCESSOS GERADOS POR PROCEDIMENTOS Defina o teste de igualdade de dois números quaisquer (positivos ou negativos). 4. Defina o procedimento divisao-inteira-positiva, que calcula a divisão inteira entre dois inteiros positivos J e h. A divisão inteira entre J e h é o máximo inteiro i tal que i$\khpl. Para definir este procedimento pode usar os procedimentos diferenca e menor?. 5. Defina o procedimento divisao-inteira que calcula a divisão inteira entre dois números quaisquer (positivos ou negativos). Exercício 3.9 Escreva um procedimento para calcular a soma dos dígitos de um número natural. Por exemplo, (soma-digitos 12345) tem o valor 15. Utilize os procedimentos primitivos quotient e remainder, que calculam, respectivamente, a divisão inteira entre dois números e o resto da divisão inteira entre dois números. Exercício 3.10 Escreva um procedimento capaz de escrever no ecrã a série dos números pares. O procedimento deve receber o número de termos da série. A forma especial display permite escrever para o ecrã. Reescreva o procedimento de modo a passar a escrever no ecrã a série dos números ímpares. Exercício 3.11 Escreva um procedimento que recebe um inteiro positivo e devolve um inteiro que é apenas constituído pelos dígitos ímpares do número original. Por exemplo, (digitos-impares ) tem o valor 15. Utilize os procedimentos primitivos quotient e remainder, que calculam, respectivamente, a divisão inteira entre dois números e o resto da divisão inteira entre dois números. Assuma que o inteiro fornecido a este procedimento tem pelo menos um dígito ímpar. Exercício 3.12 O espelho de um número é o resultado de inverter a ordem de todos os seus algarismos. Por exemplo, o espelho de 123 é 321 e o espelho de é Utilizando os procedimentos primitivos quotient e remainder, escreva em Scheme um procedimento que recebe um número inteiro e calcula o seu espelho. O seu procedimentos não tem de verificar se o argumento recebido é um número inteiro.
15 :? 4 PROCEDIMENTOS DE ORDEM SUPERIOR 13 4 Procedimentos de ordem superior Exercício 4.1 Diga qual o resultado de avaliar cada uma das seguintes formas. Considere que estas são fornecidas ao avaliador de Scheme pela ordem apresentada (e consequentemente cada forma é dependente das anteriores). Se a avaliação de uma forma não produzir nada, escreva nada. ((lambda (x)(+ x ((lambda (x) (+ 2 x)) 3))) 2) ((lambda (f x y)(+ x y)) * 2 3) ((lambda (* + x y z)(* x (+ y z))) + * 1 2 3) ((lambda (x)((lambda (y)(* y 2))(+ x 3))) 4) (define a 8) ((lambda (op)(op a)) odd?) ((lambda (op a)(op a)) odd? 9) Exercício 4.2 Escreva em Scheme um procedimento anónimo que recebe um procedimento e um número e que devolve o resultado de aplicar o procedimento ao quadrado do número. O seu procedimento não tem de verificar se o argumento recebido é um número. Exercício 4.3 Defina um procedimento de ordem superior que recebe procedimentos para calcular as funções reais de variável real f(x) e g(x) e que se comporta como a seguinte função matemática: JL +u JN Considere que os procedimentos quadrado e cubo já estão definidos: (define (quadrado x) (* x x)) (define (cubo x) (* x x x)) JN Exercício 4.4 Escreva um procedimento em Scheme chamado soma-fun que recebe como argumento dois procedimentos correspondentes a funções reais de variável real, fun1 e fun2 e devolve o procedimento correspondente à função que resulta de somar fun1 e fun2. Por exemplo, definindo:
16 R + 4 PROCEDIMENTOS DE ORDEM SUPERIOR 14 (define (f1 x) (+ x 3)) (define (f2 y) (* y 10)) então ((soma-fun f1 f2) 12) tem o valor 135. Exercício 4.5 Considere definido o procedimento sum: (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) Diga o que fazem as seguintes chamadas a esse procedimento: 1. (sum (lambda (x) x) 4 add1 500) 2. (sum (lambda (x) (sqrt x)) 5 (lambda (x) (+ x 5)) 500) 3. (sum (lambda (x) (sum (lambda (x) x) 1 add1 x)) 1 add1 5) Exercício 4.6 (Livro 1.30) O procedimento sum apresentado acima gera recursão linear. No entanto, pode ser escrito de forma a gerar um processo iterativo. Mostre como é que isso poderia ser feito preenchendo as expressões que faltam na definição que se segue: (define (sum term a next b) (define (iter a result) (if <??> <??> (iter <??> <??>))) (iter <??> <??>)) Exercício 4.7 Com base no procedimento sum, escreva um procedimento para calcular o valor de Fqp R utilizando a expansão em série: Fqp J J K J K J r K J s K CC.C J Assuma que já existem os procedimentos fact e pot que calculam o factorial e a potência, respectivamente. O seu procedimento deve receber, para além de J, o número R de termos que devem ser considerados. Exercício 4.8 (Livro 1.31)
17 4 PROCEDIMENTOS DE ORDEM SUPERIOR O procedimento sum é apenas o mais simples de um vasto número de abstracções semelhantes, que podem ser capturadas como procedimentos de ordem superior. Escreva um procedimento análogo chamado product, que retorna o produto dos valores de uma função para pontos pertencentes a um intervalo. Mostre como definir o factorial em termos do product. Use também o product para calcular aproximações de - usando a fórmula - + v! C.C.C v C.C.C 2. Se o seu procedimento product gerar um processo recursivo, escreva um que gere um processo iterativo. Se gerar um processo iterativo, escreva um que gere um processo recursivo. Exercício 4.9 (Livro 1.32) 1. Mostre que sum e product são ambos casos especiais de uma noção ainda mais geral chamada accumulate, que combina uma coleção de termos, usando uma função de acumulação geral: (accumulate combiner null-value term a next b) Accumulate recebe como argumentos o mesmo term e as mesmas especificações do intervalo a e b, bem como um procedimento combiner (de 2 argumentos) que especifica como é que o termo corrente deve ser combinado com a acumulação dos termos precedentes e um null-value, que especifica qual o valor a usar quando os termos acabam. Escreva o procedimento accumulate e mostre como é que sum e product podem ser definidos como simples chamadas a accumulate. 2. Se o seu procedimento accumulate gerar um processo recursivo, escreva um que gere um processo iterativo. Se gerar um processo iterativo, escreva um que gere um processo recursivo. Exercício 4.10 Considere as seguintes definições para um procedimento que devolve a primeira derivada de uma função: (define dx ) (define (deriv f) (lambda (x) (/ (- (f (+ x dx))(f x)) dx))) Com base nas definições anteriores, escreva um procedimento que recebe uma função e um Ow inteiro R (R ) e devolve a drivada de ordem R da função. Utilize o procedimento deriv.. Nota: a derivada de ordem R de uma função é a derivada da derivada de ordem R Exercício 4.11 (Livro 1.34) Suponha que definimos o procedimento
18 4 PROCEDIMENTOS DE ORDEM SUPERIOR 16 (define (f g) (g 2)) Assim, temos: (f quadrado) 4 (f (lambda (z) (* z (+ z 1)))) 6 O que acontece se (perversamente) pedirmos ao interpretador para avaliar (f f)? Explique. Exercício 4.12 A conversão de valores é uma operação comum em programação. Por exemplo, convertemse temperaturas em graus Farenheit para graus Centígrados, horas locais em Lisboa para horas locais em Nova Iorque, etc. 1. Escreva um procedimento em Scheme chamado converte que recebe o procedimento correspondente à função de conversão e o valor a converter e devolve o valor convertido. Por exemplo, se Far-Cent for o procedimento correspondente à função de conversão de graus Farenheit em Centígrados definido como (define (Far-Cent f) (/ (* 5 (- f 32)) 9)) a avaliação de (converte Far-Cent 32) tem o valor Escreva um procedimento chamado Lis-NY para converter uma hora local em Lisboa (um número inteiro entre 0 e 23) para a hora local em Nova Iorque (onde são menos cinco horas do que em Lisboa). Tenha cuidado com a passagem da meia noite. Utilize o procedimento converte da alínea anterior e o procedimento Lis-NY para mostrar qual a hora em Nova Iorque quando são 3 da manhã em Lisboa. Exercício 4.13 Suponha que f é um procedimento em Scheme que corresponde à realização de uma função estritamente crescente de números naturais para números naturais. Por exemplo, f pode ser o procedimento quadrado que tem, entre outros, os seguintes valores: n (f n) Escreva um procedimento em Scheme chamado procura que recebe como argumentos o procedimento f, um valor objectivo e dois valores inicial e final, pertencentes ao domínio de f, e determina se o valor objectivo se encontra entre a sequência de valores (f inicial) (f final). No caso de este se encontrar, o valor do procedimento procura é x tal que (f x) = objectivo, em caso contrário o valor do procedimento procura é 0. Por exemplo, (procura quadrado ) tem o valor 5 e (procura quadrado ) tem o valor 0. Utilize uma técnica semelhante à utilizada no cálculo de raízes pelo método do intervalo.
19 4 PROCEDIMENTOS DE ORDEM SUPERIOR 17 Exercício 4.14 Escreva o procedimento conjuncao, que recebe dois predicados de um argumento cada, e devolve um novo predicado de um argumento que verifica se esse argumento satisfaz ambos os predicados recebidos originalmente. Por exemplo, > (define par>5? (conjuncao even? (lambda (x)(> x 5)))) > (par>5? 4) #f > (par>5? 8) #t > (par>5? 9) #f Exercício 4.15 Defina um procedimento curry que recebe dois argumentos. O primeiro argumento deve ser um procedimento de dois argumentos. O procedimento curry deve retornar um procedimento de modo a que a expressão ((curry p x) y) produza o mesmo resultado que (p x y). Ou seja, o valor retornado é um procedimento de um argumento que corresponde ao procedimento recebido com o seu primeiro argumento fixo, sendo igual ao segundo argumento recebido pelo procedimento curry). Exercício 4.16 Utilizando o procedimento curry do exercício 4.15, defina os seguintes procedimentos: 1. O procedimento add1. 2. O procedimento triplo que calcula o triplo de um número. 3. O procedimento potencia-de-2 que recebe um número R e calcula o valor (sabendo que existe definido em Scheme o procedimento expt que calcula a potência de um número a um determinado expoente). Exercício 4.17 Utilizando a definição do procedimento curry do exercício 4.15, explique que resultados produzem as seguintes expressões: 1. (curry curry +) 2. (curry curry curry) Exercício 4.18 Considere a seguinte expressão: ((((p 1) 2) 3 4) 5) 1. O que pode concluir acerca de p e de cada uma das sub-expressões da expressão acima? 2. Defina p de forma a que a avaliação da expressão acima produza o resultado de somar todos os números, ou seja, 15.
20 u u u J? i i 4 PROCEDIMENTOS DE ORDEM SUPERIOR 18 Exercício 4.19 (Livro 1.41) Defina um procedimento que recebe como argumento um procedimento de um argumento e retorna um procedimento que aplica duas vezes o procedimento original. Por exemplo, se add1 for um procedimento que adiciona 1 ao seu argumento, então (double add1) deverá ser um procedimento que adiciona dois: ((double add1) 5) 7 (((double double) add1) 5) 9 Qual é o valor retornado por (((double (double double)) add1) 5)? Porquê? Exercício 4.20 (Livro 1.42) Sejam u e? duas funções de um argumento. A composição u depois de? é definida como sendo a função JExy JL( u. Defina um procedimento compose que implementa a composição. Por exemplo, se inc for um procedimento que adiciona 1 ao seu argumento, ((compose square inc) 6) 49 Exercício 4.21 (Livro 1.43) Se u for uma função numérica e R um inteiro positivo, então podemos formar a R -ésima repetição da aplicação de u, que é definida como a função cujo valor em J é CC.C JL( C.CC '. Por exemplo, se u for a função JPxyzJ{ E, então a R -ésima repetição da aplicação de u é a função JPxyzJ R. Se u for a operação de elevar um número ao quadrado, então a R -ésima repetição da aplicação de u é a função que eleva o seu argumento a ^. Escreva um procedimento chamado repeated, que recebe como argumentos um procedimento que calcula u e um inteiro positivo R e retorna um procedimento que calcula a R -ésima repetição da aplicação de u. O seu procedimento deverá poder ser usado da seguinte forma: ((repeated square 2) 5) 625 Sugestão: Pode ser conveniente usar o compose do exercício anterior. Exercício 4.22 (Livro 1.44) A ideia de alisar uma função é um conceito importante em processamento de sinal. Se u é uma função e i é um número pequeno, então a versão alisada de u é a função cujo valor no ponto J J5 JL JL J J é a média de u, u e u. Escreva um procedimento smooth que recebe como argumento um procedimento que calcula u e retorna um procedimento que calcula u alisada. Algumas vezes, pode ser útil alisar repetidamente uma função (isto é, alisar a função alisada e assim sucessivamente) para obter a função alisada n-vezes. Mostre como é que poderia gerar a função alisada n-vezes de qualquer função usando smooth e repeated do exercício anterior.
21 4 PROCEDIMENTOS DE ORDEM SUPERIOR 19 Exercício 4.23 Escreva em Scheme um procedimento chamado rasto, que recebe uma cadeia de caracteres correspondendo ao nome de um procedimento, e um procedimento de um argumento. O procedimento rasto retorna um procedimento de um argumento que escreve no ecrã a indicação de que o procedimento foi chamado e o valor do seu argumento, escreve o resultado de avaliar o procedimento e devolve o valor de aplicar o procedimento original ao argumento recebido. O seu procedimento não deve calcular valores duplicados. Por exemplo, > (define traced-sqrt (rasto "sqrt" sqrt)) > (traced-sqrt 4) Chamada a sqrt, com o argumento 4 Valor de (sqrt 4) 2 2
22 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 20 5 Tipos Abstractos de Informação Exercício 5.1 Diga qual o resultado de avaliar cada uma das seguintes expressões. Se alguma delas der origem a um erro, explique porquê. (cons 2 3) (car (cons 2 3)) (cddr (cons 2 3)) (cdr (cons "ola" "bom dia")) (cdr (cons 2 3)) (cons (integer? (sqrt 4)) (integer? 2.0)) (pair? (cons 2 3)) (cons (cons 1 2) (cons 3 4)) Exercício 5.2 Represente os seguintes pares usando a notação de caixas e ponteiros. Diga como consegue construir esses pares usando o procedimento cons: 1. (1. 2) 2. (1. (2. (3. (4. 5)))) 3. (1. (2. 3)) Exercício 5.3 Diga qual o resultado de avaliar cada uma das seguintes expressões. Se alguma delas der origem a um erro, explique porquê. (list 1 2 3) (list (cons 1 3) 4) (rest (list 2 3)) (first (rest (list 2 3))) (rest (rest (list 2 3))) ()
23 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 21 (list ()) (list) (list? (cons 2 3)) (list? (cons 2 ())) (list? (list 2 3)) (pair? (list 2 3 4)) (null? (list 1 2)) (null? ()) (null? (list ())) Exercício 5.4 Represente as seguintes listas usando a notação de caixas e ponteiros: 1. (1) 2. (1 2) 3. (1 (2 (3 (4 5)))) 4. (1 (2. 3) 4) 5. (((2 (6 (7. 8) 3)) 1)) 6. (1 (((2)))) Exercício 5.5 (Livro 2.24) Suponha que avaliamos a expressão (list 1 (list 2 (list 3 4))). Mostre o resultado impresso pelo interpretador, a estrutura de caixas e ponteiros correspondente. Exercício 5.6 (Livro 2.25) Apresente combinações de firsts e rests que seleccionem o 7 de cada uma das listas seguintes: (1 3 (5 7) 9) ((7)) (1 (2 (3 (4 (5 (6 7))))))
24 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 22 Exercício 5.7 (Livro 2.26) Suponha que definimos x e y como sendo duas listas: (define x (list 1 2 3)) (define y (list 4 5 6)) Qual é o resultado impresso pelo interpretador como resposta a cada uma das seguintes expressões? (append x y) (cons x y) (list x y) Exercício 5.8 (Livro exemplo das páginas 143-4) Considere que foram feitas as definições: (define a 1) (define b 2) Diga qual o valor de cada uma das seguintes expressões: (list a b) (list a b) (list a b) (first (a b c)) (rest (a b c)) Exercício 5.9 Suponha que desejava criar o Tipo Abstracto de Informação (TAI) Racional em Scheme. Podemos considerar as seguintes operações básicas para os números racionais: Construtor cria-racional: Natural x Natural y Racional Recebe dois valores naturais, J e h, e devolve o número racional JL h. Selectores numerador: Racional y Natural Recebe um racional e devolve o valor do seu numerador. denominador: Racional y Natural Recebe um racional e devolve o valor do seu denominador. Reconhecedor racional?: Universal y Lógico Recebe qualquer objecto e devolve verdadeiro se o objecto for um racional.
25 i } H } H y i H i 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 23 Teste racional=?: Racional x Racional y Lógico Recebe dois racionais e devolve verdadeiro se os objectos forem iguais. 1. Escolha uma representação para o tipo Racional. 2. Escreva em Scheme as operações básicas com base na representação escolhida. 3. Escreva os seguintes procedimentos de alto nível, assim como as suas assinaturas: (a) Procedimento para multiplicar dois racionais. O produto dos racionais 1 H e } i é dado pelo racional 1. (b) Procedimento para somar dois racionais. A soma dos racionais 1 H e } i é dada pelo. racional 1 4. Suponha que queria alterar a representação usada, de modo a guardar o número racional de forma normalizada (por exemplo, seria guardado com ). Que alterações tem de fazer às definições anteriores? Sugestão: use o procedimento gcd (greatest common divisor). 5. (Livro 2.1) Defina uma nova versão de cria-racional que considere argumentos positivos e negativos, devendo a nova versão normalizar o sinal, de forma a que se o número racional for positivo, tanto o numerador como o denominador são positivos; e se o número racional for negativo, só o numerador é que é negativo. Exercício 5.10 Um conjunto é um aglomerado de objectos, em que não existem objectos duplicados e em que a sua ordem não é relevante. As operações que manipulam o tipo Conjunto são: Construtores conjunto-vazio: Cria um conjunto vazio. Conjunto cria-conjunto: Natural x Conjunto y Conjunto Cria um conjunto que resulta de juntar o novo elemento ao conjunto já existente. Selectores da-elemento: Conjunto y Natural Recebe um conjunto e devolve o valor de um elemento do conjunto ou erro caso o conjunto seja vazio. da-conjunto-restante: Conjunto y Conjunto Recebe um conjunto e devolve o conjunto sem o elemento devolvido por da-elemento. Reconhecedores conjunto?: Universal y Lógico Recebe qualquer objecto e devolve verdadeiro se o objecto for um conjunto.
26 h 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 24 Teste conjunto-vazio?: Conjunto y Lógico Recebe um conjunto e devolve verdadeiro se for um conjunto vazio. e-elemento-do-conjunto?: Natural x Conjunto y Lógico Recebe um natural e um conjunto e devolve verdadeiro se o natural for um elemento do conjunto. conjunto=?: Conjunto x Conjunto y Lógico Recebe dois conjuntos e devolve verdadeiro se ambos contiverem os mesmos elementos. 1. Escolha uma representação para este TAI. 2. Escreva em Scheme as operações básicas com base na representação escolhida. 3. Respeitando as barreiras de abstracção, implemente as seguintes operações: (a) uniao-conjuntos: Conjunto x Conjunto y Conjunto Devolve o conjunto que resulta da união dos dois conjuntos recebidos. (b) interseccao-conjuntos: Conjunto x Conjunto y Conjunto Devolve o conjunto que resulta da intersecção dos dois conjuntos recebidos. (c) numero-elementos-conjunto: Conjunto y Natural Devolve o número de elementos do conjunto recebido. Exercício 5.11 Suponha que desejava criar o tipo Vector em Scheme. Um vector num referencial cartesiano pode ser representado pelas coordenadas da sua extremidade J A, estando a sua origem no. Podemos considerar as seguintes operações básicas: ponto Q A Q Construtor cria-vector: Real x Real y Vector Recebe dois valores reais ( J e h ) e cria um vector cuja extremidade é o ponto J A h Selectores abcissa: Vector y Real Recebe um vector e devolve o valor da sua abcissa. ordenada: Vector y Real Recebe um vector e devolve o valor da sua ordenada. 1. Escolha uma representação para o tipo Vector. 2. Escreva em Scheme as operações básicas com base na representação escolhida. 3. Escreva os seguintes procedimentos de alto nível, assim como as suas assinaturas:.
27 A H A i A H H A A } i i H } 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 25 (a) Procedimento para somar dois vectores. A soma dos vectores representados pelos. pontos 1 e } é dada pelo vector 1 (b) Procedimento para calcular o produto escalar de dois vectores. O produto escalar dos vectores representados pelos pontos 1 e } é dada pelo real 1 i. Exercício 5.12 Considere o problema de representar rectângulos num plano, em que os rectângulos são sempre paralelos aos eixos. Cada rectângulo pode ser representado por um par de vectores (um representando o canto inferior esquerdo e outro o canto superior direito). 1. Defina as operações básicas para o TAI Rectângulo (construtor e selectores), com base no TAI Vector. 2. Escolha uma representação (em Scheme) para o tipo Rectângulo. 3. Escreva em Scheme as operações básicas com base na representação escolhida. 4. Defina procedimentos que calculam o perímetro e a área de um rectângulo. 5. Escreva um procedimento dentro-rectangulo que recebe um rectângulo e um ponto e só devolve verdadeiro se o ponto estiver dentro do rectângulo (incluindo a fronteira). Exercício 5.13 Considere que foi definido o tipo árvore binária. Para este tipo, estão definidas as operações: arvore-vazia que constrói uma árvore vazia. constroi-arvore que recebe a raiz, a árvore esquerda e a árvore direita e constrói a árvore correspondente. arvore-raiz que recebe uma árvore binária e retorna a sua raiz. arvore-esquerda que recebe uma árvore binária e retorna a sua árvore esquerda. arvore-direita que recebe uma árvore binária e retorna a sua árvore direita. arvore-vazia? que recebe um objecto e retorna verdadeiro se ele corresponder a uma árvore vazia e falso caso contrário. 1. Especifique formalmente estas operações, e classifique-as em construtores, selectores, reconhecedores e testes. 2. Com base nas operações descritas, escreva os seguintes procedimentos para percorrer árvores binárias: (a) percorre-inorder recebe uma árvore binária e retorna uma lista com todas as sua folhas, percorrendo primeiro a árvore esquerda, depois a raiz e depois a árvore direita da árvore inicial. (b) percorre-preorder recebe uma árvore binária e retorna uma lista com todas as sua folhas, percorrendo primeiro a raíz, depois a árvore esquerda e depois a árvore direita da árvore inicial.
28 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 26 (c) percorre-posorder recebe uma árvore binária e retorna uma lista com todas as sua folhas, percorrendo primeiro a árvore esquerda, depois a árvore direita e depois a raiz da árvore inicial. Exercício 5.14 Defina os seguintes procedimentos que operam sobre listas. Os seus procedimentos devem dar erro (usando o error) quando isso se justificar. Quando for possível, escreva dois procedimentos, um que gera um processo recursivo e outro que gera um processo iterativo. 1. O procedimento primeiro-par que recebe uma lista e retorna um par com os dois primeiros elementos da lista. 2. O procedimento maior-elemento que recebe uma lista de inteiros e retorna o maior elemento dessa lista. 3. O procedimento soma-elementos que recebe uma lista e retorna a soma de todos os elementos dessa lista. 4. O procedimento imprime-lista-de-pares que recebe uma lista de pares e imprime os pares, um por linha. O seu procedimento deve assinalar quando é que chega ao fim da lista. Por exemplo, (imprime-lista-de-pares (list (cons "Luisa" ) (cons "Jorge" ) (cons "Maria" ) (cons "Rui" ))) Deverá imprimir Luisa -> Jorge -> Maria -> Rui -> Fim da lista Exercício 5.15 (Livro 2.17) Defina um procedimento last-pair, que retorna a lista que contém apenas o último elemento de uma dada lista não vazia: >(last-pair (list )) (34) >(last-pair ()) rest: expects argument of type <non-empty list>; given empty >(last-pair (list ())) (())
29 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 27 Exercício 5.16 (Livro 2.18) Defina um procedimento reverse, que recebe como argumento uma lista e retorna uma lista com os mesmos elementos, mas pela ordem inversa: (reverse (list )) ( ) Exercício 5.17 Defina um procedimento map, que recebe como argumentos um procedimento de um argumento e uma lista, e retorna a lista dos resultados produzidos aplicando o procedimento a cada elemento da lista. (map abs (list )) ( ) Exercício 5.18 (Livro 2.23) O procedimento for-each é semelhante ao map. Recebe como argumentos um procedimento e uma lista de elementos. No entanto, em vez de formar uma lista com os resultados, for-each apenas aplica o procedimento a cada um dos elementos de cada vez, da esquerda para a direita. Os valores retornados pela aplicação do procedimento aos elementos não são usados for-each é usado com procedimentos que executam uma acção, tal como imprimir. Por exemplo: (for-each (lambda (x) (newline) (display x)) (list )) O valor retornado pela chamada a for-each (não ilustrado acima) pode ser qualquer coisa, como verdadeiro. Apresente uma implementação para o procedimento for-each. Exercício 5.19 Implemente o procedimento imprime-lista-de-pares do exercício 5.14 usando o procedimento for-each. Lembre-se que o procedimento recebe uma lista de pares e imprime os pares, um por linha, e deve assinalar quando é que chega ao fim da lista. Por exemplo, (imprime-lista-de-pares (list (cons "Luisa" ) (cons "Jorge" ) (cons "Maria" ) (cons "Rui" ))) Deverá imprimir Luisa -> Jorge -> Maria -> Rui -> Fim da lista
30 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 28 Exercício 5.20 Escreva um procedimento substitui que recebe dois elementos e uma lista e retorna uma outra lista que resulta de substituir todas as ocorrências do primeiro elemento pelo segundo na lista inicial. Por exemplo: (substitui 2 3 (list )) ( ) (substitui 2 3 (list )) ( ) Exercício 5.21 Escreva uma versão do procedimento substitui utilizando o procedimento map. Exercício 5.22 (Livro 2.21) O procedimento square-list recebe como argumento uma lista de números e retorna uma lista com os quadrados desses números. (square-list (list )) ( ) Seguem-se duas definições diferentes para o procedimento square-list. Complete ambas as definições, preenchendo as expressões que faltam: (define (square-list items) (if (null? items) () (cons <??> <??>))) (define (square-list items) (map <??> <??>)) Exercício 5.23 Escreva um procedimento filtra que recebe um predicado e uma lista e retorna uma lista que contém apenas os elementos da lista inicial que satisfazem o predicado. Por exemplo: (filtra even? (list )) (2 4) (filtra even? (list )) () Exercício 5.24 Escreva um procedimento todos? que recebe um predicado e uma lista e retorna verdadeiro se todos os elementos da lista satisfizerem o predicado e falso caso contrário. Por exemplo:
31 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 29 (todos? even? (list )) #f (todos? even? (list 2 4 6)) #t Exercício 5.25 Escreva um procedimento algum? que recebe um predicado e uma lista e retorna verdadeiro se algum dos elementos da lista satisfizer o predicado e falso caso contrário. Por exemplo: (algum? odd? (list )) #t (algum? odd? (list 2 4 6)) #f Exercício 5.26 Escreva um procedimento fold-right que recebe um procedimento de dois argumentos, o valor inicial de um acumulador e uma lista e retorna o resultado de aplifirst o procedimento ao elemento inicial e ao resultado de aplifirst o procedimento a todos os elementos que estão à sua direita. Quando a lista for vazia, este procedimento deve retornar o valor inicial. Por exemplo: (fold-right + 0 (list )) 10 (fold-right + 0 ()) 0 Exercício 5.27 Com base no procedimento fold-right escreva os seguintes procedimentos: 1. multiplica-lista que recebe uma lista e retorna o produto de todos os seus elementos. 2. maximo-lista que recebe uma lista e retorna o maior dos seus elementos. 3. inverte-lista que recebe uma lista e retorna outra lista com os elementos da lista inicial pela ordem inversa. 4. junta-listas que recebe duas listas e retorna outra lista que resulta de juntar as duas. Exercício 5.28 Uma forma de compactar listas de números é, dada uma lista de números (possivelmente repetidos), transformá-la numa lista em que ocorrências consecutivas de um mesmo número são substituídas por um par, em que o primeiro elemento é o número de vezes que o número aparece repetido e o segundo elemento é o número. Escreva o procedimento run-length-encode que compacta listas de inteiros. Por exemplo,
32 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 30 (run-length-encode ( )) ((7. 1) 2 (4. 3) (4. 4) 1 (4. 3)) (run-length-encode ( )) ( (4. 3) (4. 4) (2. 1) (5. 3)) Repare que as sequências de apenas um elemento não são substituidas. Depois de ter uma lista compactada, pode ser necessário saber qual era a lista original. Escreva o procedimento run-length-decode que, dada uma lista de inteiros compactada, retorna a lista original. Por exemplo, (run-length-decode ((7. 1) 2 (4. 3) (4. 4) 1 (4. 3))) ( ) (run-length-decode ( (4. 3) (4. 4) (2. 1) (5. 3))) ( ) Exercício 5.29 (Livro exemplo da página 144) Defina o procedimento memq, que recebe um símbolo e uma lista e retorna falso se o símbolo não estiver contido na lista (isto é, não for eq? a nenhum dos elementos da lista) e a sublista que começa com a primeira ocorrência do símbolo na lista caso contrário. Por exemplo, (memq apple (pear banana prune)) #f (memq apple (x (apple sauce) y apple pear)) (apple pear) Exercício 5.30 (Livro 2.53) O que é que o interpretador de Scheme imprime como resposta à avaliação de cada uma das seguintes expressões: (list a b c) (list (list george)) (rest ((x1 x2) (y1 y2))) (cadr ((x1 x2) (y1 y2))) (pair? (first (a short list))) (memq red ((red shoes) (blue socks))) (memq red (red shoes blue socks)) Exercício 5.31 (Livro 2.54) Duas listas são equal? se contiverem elementos iguais e estes estiverem pela mesma ordem. Por exemplo, (equal? (this is a list) (this is a list))
33 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 31 é verdade, mas (equal? (this is a list) (this (is a) list)) é falso. Para sermos mais precisos, podemos definir equal? recursivamente em termos da igualdade básica entre símbolos eq?, dizendo que a e b são equal? se forem ambos símbolos e forem eq? ou forem ambos listas em que (first a) é equal? a (first b) e (rest a) é equal? a (rest b). Usando esta ideia, implemente equal? como um procedimento. Exercício 5.32 (Livro 2.55) O resultado de avaliar a expressão (first abracadabra) é quote. Explique porquê. Exercício 5.33 Escreva um procedimento count-if que recebe um predicado e uma lista e retorna o número de elementos da lista que satisfazem o predicado. Por exemplo: (count-if even? ( )) 2 (count-if (curry eq? a) (a b (a) c)) 1 Exercício 5.34 Escreva um procedimento position que recebe um objecto e uma lista e retorna a primeira posição em que ocorre um elemento na lista eq? ao objecto dado. Se não existir nenhum objecto nessas condições na lista o procedimento deve devolver #f. A posição do primeiro elemento da lista é a 0 (zero). Por exemplo: (position a (a b c a b)) 0 (position a (b c a b)) 2 (position d (b c a b)) #f Exercício 5.35 Escreva um procedimento complement que recebe um predicado de um argumento e devolve a negação desse predicado. Por exemplo: ((complement even?) 2) #f ((complement even?) 3) #t
34 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 32 Exercício 5.36 Usando os procedimentos filtra, curry e complement escreva um procedimento remove que recebe um objecto e uma lista e devolve a lista que resulta de eliminar todos os elementos eq? ao objecto dado da lista dada. Por exemplo: (remove d (a b c)) (a b c) (remove a (a b c a b a)) (b c b) Exercício 5.37 Escreva um procedimento adjoin que recebe um elemento e uma lista e adiciona o elemento à lista apenas se ele ainda não existir na lista (de acordo com o eq?). Por exemplo: (adjoin a (a b c)) (a b c) (adjoin d (a b c)) (d a b c) Exercício 5.38 Escreva um procedimento remove-duplicates que recebe uma lista e devolve uma lista sem elementos repetidos (de acordo com o eq?). Por exemplo: (remove-duplicates (a b c)) (a b c) (remove-duplicates (a b a a c a)) (b c a) Exercício 5.39 Escreva um procedimento merge que recebe duas listas de números por ordem crescente e deve devolver uma lista com todos os números das duas listas ordenados por ordem crescente. Por exemplo: (merge ( ) ( )) ( ) Exercício 5.40 Escreva um procedimento substitui-arvore que corresponde ao procedimento substitui para árvores, ou seja, que substitua todas as ocorrências de um determinado objecto por outro na árvore. Por exemplo: (substitui-arvore 2 3 (5 2 (7 3 (2 1)) 4)) (5 3 (7 3 (3 1)) 4))
35 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 33 Exercício 5.41 Escreva um procedimento profundidade que recebe uma árvore e devolve um número que indica qual é o nível mais profundo de listas dentro dessa lista, aumentando de um sempre que se entra para dentro de uma lista. Se a lista não contém listas devolve 0. Por exemplo: (profundidade (1 2 3)) 0 (profundidade (1 2 (3 ((4) (5 (6)))))) 4 Exercício 5.42 (Livro 2.27) Modifique o procedimento reverse (do Livro 2.18) para produzir um procedimento deep-reverse que recebe uma lista como argumento e retorna a lista com os seus elementos invertidos e com todas as suas sublistas tambem invertidas. Por exemplo, (define x (list (list 1 2) (list 3 4))) x ((1 2) (3 4)) (reverse x) ((3 4) (1 2)) (deep-reverse x) ((4 3) (2 1)) Lembre-se que o procedimento reverse recebe como argumento uma lista e retorna uma lista com os mesmos elementos, mas pela ordem inversa: (define (reverse l) (define (r-aux l res) (if (null? l) res (r-aux (rest l) (cons (first l) res)))) (r-aux l ())) Exercício 5.43 (Livro 2.28) Escreva um procedimento fringe que recebe como argumento uma árvore (representada como uma lista de listas) e retorna uma lista cujos elementos são todas as folhas da árvore da esquerda para a direita. Por exemplo, (define x (list (list 1 2) (list 3 4))) (fringe x) ( ) (fringe (list x x)) ( )
36 5 TIPOS ABSTRACTOS DE INFORMAÇÃO 34 Exercício 5.44 (Livro 2.30) Defina o procedimento square-tree análogo ao square-list (do Livro 2.21). O procedimento square-tree deve-se comportar da seguinte forma: (square-tree (list 1 (list 2 (list 3 4) 5) (list 6 7))) (1 (4 (9 16) 25) (36 49)) Deve definir este procedimento directamente (isto é, sem usar procedimentos de ordem superior) e também usando o procedimento map. Exercício 5.45 (Livro 2.31) Abstraia a sua resposta ao exercício anterior para produzir um procedimento tree-map, com a propriedade que square-tree poderia ser definido como: (define (square-tree tree) (tree-map square tree)) Exercício 5.46 (Livro 2.32) Podemos representar um conjunto como uma lista de elementos distintos, e podemos representar o conjunto de todos os subconjuntos de um conjunto como uma lista de listas. Por exemplo, se o conjunto é (1 2 3), então o conjunto de todos os seus subconjuntos é (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)). Complete a seguinte definição de um procedimento que gera o conjunto dos subconjuntos de um conjunto e dê uma explicação clara de porque é que ele funciona. (define (subsets s) (if (null? s) (list ()) (let ((rest (subsets (rest s)))) (append rest (map <??> rest)))))
37 6 O DESENVOLVIMENTO DE PROGRAMAS 35 6 O Desenvolvimento de programas
Exercícios da cadeira de Introdução à Programação. Ana Cardoso Cachopo João Cachopo António Leitão
Exercícios da cadeira de Introdução à Programação Ana Cardoso Cachopo João Cachopo António Leitão Ano Lectivo 2000/2001 1 Prefácio Este documento reúne os exercícios propostos nas aulas práticas da cadeira
Fundamentos de Programação
Fundamentos de Programação Soluções do primeiro teste 13 de Novembro de 2004 9:00-10:30 Nota Número: 20 Nome: Turma: Escreva o seu número em todas as folhas do teste. O espaço das respostas deve ser limitado
Fundamentos de Programação
Fundamentos de Programação Primeiro Teste 16 de Abril de 2011 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 7 páginas com 9 perguntas. A cotação de cada pergunta está assinalada
UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO
UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Resumos e Soluções para os Exercícios para as Aulas Práticas da Disciplina de Fundamentos da Programação Ana Cardoso Cachopo Ano Lectivo 2006/2007
Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas
Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas Pedro Adão, Fausto Almeida, Ana Cardoso-Cachopo, Pedro Amaro de Matos (editores) Departamento de Engenharia Informática Instituto
Programação imperativa
Capítulo 8 Programação imperativa 8.1 Exercícios de revisão 1. Distinga entre programação imperativa e programação funcional. 2. Explique a necessidade da introdução do operador de atribuição. 3. Diga
Exercícios da cadeira de Inteligência Artificial. Helena Sofia Pinto João Cachopo Daniel Gonçalves Carlos Lopes António Inês Lynce Pedro Matos
Exercícios da cadeira de Inteligência Artificial Helena Sofia Pinto João Cachopo Daniel Gonçalves Carlos Lopes António Inês Lynce Pedro Matos Ano Lectivo 2001/2002 1 Prefácio Este documento reúne os exercícios
Exercícios da cadeira de Introdução à Programação
Exercícios da cadeira de Introdução à Programação Cláudia Antunes Ana Cardoso Cachopo João Cachopo Francisco Couto António Leitão Inês Lynce César Pimentel H. Sofia Pinto Ano Lectivo 2002/2003 Parte II
2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.
Capítulo 5 Abstracção de dados 5. Exercícios de revisão. Diga o que é um tipo abstracto de informação.. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.
Fundamentos de Programação
Fundamentos de Programação Solução do Segundo Teste 23 de Janeiro de 2012 09:00 10:30 Nome: Número: 1. (1.0) Explique em que consiste a abstracção de dados, usando os termos barreiras de abstracção, encapsulação
Estruturação de Procedimentos
Capítulo 4 Estruturação de Procedimentos 4. Exercícios de revisão. Diga o que entende por linguagem estruturada em blocos. Descreva a regra associada a esta estrutura, e diga qual a sua importância. 2.
PROGRAMAÇÃO EM SCHEME:
Exercícios para PROGRAMAÇÃO EM SCHEME: Introdução à Programação Utilizando Múltiplos Paradigmas Departamento de Engenharia Informática Instituto Superior Técnico Universidade Técnica de Lisboa 2 Conteúdo
Fundamentos de Programação
Fundamentos de Programação Primeiro Teste 6 de Novembro de 200 09:00 0:30 SOLUÇÃO. (.0) Escolha a única afirmação incorrecta. Uma resposta certa vale valor e uma resposta errada desconta 0.4 valores. A.
Aulas práticas da cadeira de Introdução à Programação
Aulas práticas da cadeira de Introdução à Programação Ana Cardoso Cachopo Ano Lectivo 1998/1999 Conteúdo 1 Apresentação 2 2 Os elementos da programação 3 3 Introdução ao UNIX, emacs, mail, news e www 8
Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas
Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas Pedro Adão, Fausto Almeida, Ana Cardoso-Cachopo, Pedro Amaro de Matos (editores) Departamento de Engenharia Informática Instituto
if not(isinstance(a, int)) or a < 0: raise ValueError ("misterio: arg nao e inteiro nao negativo") else: return misterio_aux(a, a + 1)
Capítulo 7 Recursão e iteração 1. (1) Considere a seguinte função: def misterio(a): def misterio_aux(b, c): if b == 0: return True elif c == 0: return False return misterio_aux(b -, c - ) if not(isinstance(a,
Fundamentos da Programação
Fundamentos da Programação Solução da Repescagem do Primeiro Teste 31 de Janeiro de 2013 09:00 10:30 1. De um modo sucinto, (a) (0.5) Diga o que é um processo computacional. Um processo computacional é
Inteligência Artificial
Instituto Politécnico de Setúbal Escola Superior de Tecnologia de Setúbal Departamento de Sistemas e Informática Guia de Exercícios das Aulas Práticas Inteligência Artificial Prof Joaquim Filipe Eng. Adelaide
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python Exercícios: Funções 1. Crie uma função que recebe como parâmetro um número
Fundamentos da Programação
Fundamentos da Programação Segundo Teste 18 de Junho de 2014 15:00 16:30 1. (1.0) Diga quais as fases por que passa o desenvolvimento de um programa no modelo estudado e o que se faz em cada uma delas.
Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013
Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação
Ficha 1 Noções de sequência e decisão em algoritmia
Ficha 1 Noções de sequência e decisão em algoritmia 1. Ler uma temperatura em Celsius e converter para Fahrenheit. Elabore o algoritmo e especifique as estruturas de dados necessárias para a resolução
Cursos: Análise, Ciência da Computação e Sistemas de Informação Laboratório I - Prof. Aníbal Notas de aula 2 SISTEMAS NUMÉRICOS
Cursos: Análise, Ciência da Computação e Sistemas de Informação Laboratório I - Prof. Aníbal Notas de aula 2 SISTEMAS NUMÉRICOS Para entender como o computador armazena as informações, é importante conhecer
Aula prática 14. Expressão Lambda
Programação Funcional UFOP DECOM 2014.1 Aula prática 14 Expressão Lambda Sumário Resumo Expressões lambdas são funções anônimas que podem ser usadas como qualquer outro valor de primeira classe. Nesta
Fundamentos da Programação
Fundamentos da Programação Exame 9 de Janeiro de 2015 09:00 11:00 1. De um modo sucinto, explique o que é: (a) (0.5) Um processo computacional. Um ente imaterial que existe dentro de um computador durante
Álgebra Linear e Geometria Analítica
Instituto Politécnico de Viseu Escola Superior de Tecnologia Departamento: Matemática Álgebra Linear e Geometria Analítica Curso: Engenharia Electrotécnica Ano: 1 o Semestre: 1 o Ano Lectivo: 007/008 Ficha
Matemática Computacional
folha de exercícios 5 :: página 1/5 exercício 5.1. Defina a função f : R R, f(x) = 4x 4 3x 3 + 2x 2 + x. Calcule f(0), f( 1), f(4/3) e f(2.88923). exercício 5.2. Defina a função g : R R R, g(x, y) = x
Linguagens de Programação Aula 13
Linguagens de Programação Aula 13 Celso Olivete Júnior [email protected] Na aula passada Suporte para a programação orientada a objetos 2 Na aula de hoje Programação Funcional Linguagem Haskell 3 Roteiro
Textos de apoio às aulas práticas. Jaime Ramos, Francisco Miguel Dionísio
Computação e Programação Textos de apoio às aulas práticas Jaime Ramos, Francisco Miguel Dionísio DMIST, Dezembro de 2010 Parte I MATLAB 1 Capítulo 1 Exercícios preliminares 1. Defina a função conta divisores
Introdução à Programação uma Abordagem Funcional
Universidade Federal do Espírito Santo Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres [email protected] CT VII - Sala 34 Departamento de Informática Centro Tecnológico
Cálculo diferencial de Funções de mais de uma variável
MATERIAL DIDÁTICO Professora Sílvia Victer CÁLCULO 2 Cálculo diferencial de Funções de mais de uma variável 1. Funções de mais de uma variável 2. Limites de funções de mais de uma variável 3. Continuidade
Aula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Introdução à Programação Funcional. Conteúdo
Introdução à Programação Funcional PPGIA - PUCPR Prof. Fabrício Enembreck 1 Conteúdo Introdução ao Cálculo Lambda e à Programação Funcional Introdução ao LISP e ao Common Lisp Funções Lambda e binding
CÁLCULO I. Lista Semanal 01 - Gabarito
CÁLCULO I Prof. Márcio Nascimento Prof. Marcos Diniz Questão 1. Nos itens abaixo, diga se o problema pode ser resolvido com seus conhecimentos de ensino médio (vamos chamar de pré-cálculo) ou se são necessários
Exercícios para Fundamentos da Programação
Exercícios para Fundamentos da Programação Fausto Almeida, Cláudia Antunes, Ana Cardoso-Cachopo, Pedro Amaro de Matos, Francisco Saraiva de Melo Departamento de Engenharia Informática Instituto Superior
3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 3.3. Conceitos Básicos de C: Expressões, Operadores e Bibliotecas
Programação Funcional. Programação Funcional LISP. Paradigma de programação baseado em Funções Matemáticas
Programação Funcional Programação Funcional Paradigma de programação baseado em Funções Matemáticas Essência de Programação: combinar funções para obter outras mais poderosas PLP 2009/1 Profa. Heloisa
Oficina: Programação para Android com o App Inventor. Profª. Alana Gama Licencianda em Ciências da Computação IF Baiano Campus Senhor do Bonfim
Oficina: Programação para Android com o App Inventor Profª. Alana Gama Licencianda em Ciências da Computação IF Baiano Campus Senhor do Bonfim Desenvolver o quinto Item da lista (Programação) Testa uma
Escola Secundária com 3º CEB de Lousada
Escola Secundária com º CE de Lousada Ficha de Trabalho de Matemática do 8º no N.º7 ssunto: Ficha de Preparação para o Teste Intermédio (Parte ) bril 011 1. Indique qual das seguintes afirmações é verdadeira:
Exercícios: Vetores e Matrizes
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Vetores e Matrizes 1 Vetores 1. Faça um programa que possua um vetor
Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação
Funções. Capítulo (2) Considere a seguinte interacção em Python: >>> def f1(x):... return x * x... >>> f1(5) 25 >>> f2 = f1 >>>
Capítulo 3 Funções 1. (2) Considere a seguinte interacção em Python: def f1(x): return x * x f1(5) 25 f2 = f1 (a) Qual o valor retornado pela chamada f2(5)? Justifique a sua resposta. (b) Suponha que agora
Matemática A. Teste Intermédio de Matemática A. Versão 2. Teste Intermédio. Versão 2. Duração do Teste: 90 minutos º Ano de Escolaridade
Teste Intermédio de Matemática A Versão 2 Teste Intermédio Matemática A Versão 2 Duração do Teste: 90 minutos 29.01.2009 11.º Ano de Escolaridade Decreto-Lei n.º 74/2004, de 26 de Março Na sua folha de
EMGI Programação. Ficha 7 Resolução. Programação 1 Calcular a hipotenusa de um triângulo rectângulo, sabendo as medidas dos seus catetos:
Programação 1 Calcular a hipotenusa de um triângulo rectângulo, sabendo as medidas dos seus catetos: variáveis cat1, cat2, hipotenusa : real; escrever ( Escreva a medida do cateto 1: ); ler (cat1); escrever
Curso Satélite de. Matemática. Sessão n.º 1. Universidade Portucalense
Curso Satélite de Matemática Sessão n.º 1 Universidade Portucalense Conceitos Algébricos Propriedades das operações de números reais Considerem-se três números reais quaisquer, a, b e c. 1. A adição de
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Funções 1. Crie uma função que recebe como parâmetro um número inteiro
Introdução: A necessidade de ampliação dos conjuntos Numéricos. Considere incialmente o conjunto dos números naturais :
Introdução: A necessidade de ampliação dos conjuntos Numéricos Considere incialmente o conjunto dos números naturais : Neste conjunto podemos resolver uma infinidade de equações do tipo A solução pertence
Programação Funcional Aulas 5 & 6
Programação Funcional Aulas 5 & 6 Sandra Alves DCC/FCUP 2016/17 Definições usando outras funções Podemos definir funções usando outras previamente definidas (por exemplo: do prelúdio-padrão). Exemplo:
Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C Exercícios: Árvores 1. Utilizando os conceitos de grafos, defina uma árvore.
INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2
INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2 *Exercícios de provas anteriores escolhidos para você estar preparado para qualquer questão na prova. Resoluções em simplificaaulas.com. Listas(= tipo
AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO
AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS MATEMÁTICA 7.º ANO PLANIFICAÇÃO ANUAL Planificação 7º ano 2010/2011 Página 1 DOMÍNIO TEMÁTICO: NÚMEROS
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I - BCC701
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I - BCC701 www.decom.ufop.br/red AULA TEÓRICA 02 1 Prof. Marcelo Luiz Silva Red CONTEÚDOS DA AULA
Fundamentos da Programação
Fundamentos da Programação Solução do Segundo Teste 18 de Janeiro de 2013 09:00 10:30 1. (2.0) Escolha a única resposta incorrecta para as seguintes questões. Cada resposta certa vale 1 valor e cada resposta
Fundamentos da Programação
Fundamentos da Programação Solução do Exame 1 de Fevereiro de 2019 09:00 11:00 1. Usando palavras suas e, no máximo, em cinco linhas responda às seguintes questões. Respostas dadas através de exemplos
AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO
AGRUPAMENTO DE ESCOLAS DR. VIEIRA DE CARVALHO DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS MATEMÁTICA 7.º ANO PLANIFICAÇÃO GLOBAL Múltiplos e divisores. Critérios de divisibilidade. - Escrever múltiplos
Fundamentos da Programação
Fundamentos da Programação Segundo Teste 10 de Janeiro de 2014 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 8 páginas com 12 perguntas. A cotação de cada pergunta está assinalada
Fundamentos da Programação
Fundamentos da Programação Solução do segundo exame 29 de Janeiro de 2016 18:30 20:30 1. Indique se cada uma das seguintes afirmações é verdadeira ou falsa. No caso de ser falsa, justifique de forma sucinta.
Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas
Programação Funcional 8 a Aula Listas infinitas Pedro Vasconcelos DCC/FCUP 2014 Listas infinitas Podemos usar listas para sequências finitas, por ex.: [1,2,3,4] = 1:2:3:4:[] Nesta aula vamos ver que podemos
Exercícios de Teoria da Computação Computabilidade
Licenciatura em Engenharia Informática e de Computadores - LEIC Licenciatura em Engenharia de Redes de Computadores -LERC Exercícios de Teoria da Computação Computabilidade Secção de Lógica e Computação
Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre
Correção do º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 3 de Junho de 26, 2º Semestre. (2.) Perguntas de resposta rápida de Fortran (.4 valores cada).. Todos os componentes
Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição
Algoritmos e Lógica de Programação 6ª Lista de Exercícios Comandos de Repetição 1. Qual a saída do programa abaixo? int i; for (i = 0; i < 10; i += 2) printf("%d\n", i / 2); 2. Qual a saída do programa
Common-Lisp (introdutório).
Common-Lisp (introdutório). Índice Conceitos Básicos Funções e predicados numéricos Funções sobre pares e listas Constantes, variáveis e atribuições Formas especiais Definição de funções Recursão Rastreio
Fundamentos da Programação
Fundamentos da Programação Solução do exame 12 de Janeiro de 2018 09:00 11:00 1. Indique se cada uma das seguintes afirmações é verdadeira ou falsa. No caso de ser falsa, justifique de forma sucinta. (a)
Faculdade de Computação
Faculdade de Computação Programação Procedimental 1 a Lista de Exercícios p/ Avaliação Prof. Cláudio C. Rodrigues Instruções: 1. Apresentar as soluções usando a linguagem C, quando for apropriado; 2. A
Conceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador
Prova Escrita de MATEMÁTICA A - 12o Ano Época especial
Prova Escrita de MATEMÁTICA A - o Ano 0 - Época especial Proposta de resolução GRUPO I. Temos que A e B são acontecimentos incompatíveis, logo P A B 0 Como P A B P B P A B, e P A B 0, vem que: P A B P
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para
Capítulo 5 Derivadas Parciais e Direcionais
Capítulo 5 Derivadas Parciais e Direcionais 1. Conceitos Sabe-se que dois problemas estão relacionados com derivadas: Problema I: Taxas de variação da função. Problema II: Coeficiente angular de reta tangente.
Matemática I. 1 Propriedades dos números reais
Matemática I 1 Propriedades dos números reais O conjunto R dos números reais satisfaz algumas propriedades fundamentais: dados quaisquer x, y R, estão definidos a soma x + y e produto xy e tem-se 1 x +
Inteligência Artificial Taguspark
Inteligência Artificial Taguspark Repescagem do Primeiro Teste 22 de Julho de 2006 9H00-10H30 Nome: Número: Este teste tem 7 perguntas e 12 páginas. Escreva o número em todas as páginas. Deve ter na mesa
Funcional V: estruturas de dados puramente funcionais
Funcional V: estruturas de dados puramente funcionais Profs. Diogo S. Mar ns e Emilio Francesquini {santana.mar ns,e.francesquini}@ufabc.edu.br MCTA016 - Paradigmas de Programação (Prá ca) 10 de julho
Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013
Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void
ESCOLA BÁSICA INTEGRADA DE ANGRA DO HEROÍSMO Plano da Unidade
Unidade de Ensino: OPERAÇÕES COM NÚMEROS RACIONAIS ABSOLUTOS (adição e subtracção). Tempo Previsto: 3 semanas O reconhecimento do conjunto dos racionais positivos, das diferentes formas de representação
LISP - Introdução. Existem vários dialectos de LISP: COMMON LISP (o mais sofisticado e mais utilizado) Outros: MAC LISP, INTERLISP, XLISP
LISP - Introdução Linguagem de alto nível, criada por John McCarty em 1959, tendo em vista facilitar a programação de sistemas de raciocínio baseados em lógica Foi adoptada como linguagem principal em
TÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Linguagem Haskell. Riocemar S. de Santana
Linguagem Haskell Riocemar S. de Santana Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem ao matemático americano Haskell B. Curry (1900 1982).
Aula 03 - Introdução ao Scilab (p2)
BCC701- Programação de Computadores I Aula 03 - Introdução ao Scilab (p2) Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM http://www.decom.ufop.br/bcc701 BCC701-2019-01 DECOM
Material Didático Unificado.
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Comissão da Disciplina Programação de Computadores I CDPCI Programação de Computadores I BCC701 www.decom.ufop.br/bcc701 Material
MATEMÁTICA I. Ana Paula Figueiredo
I Ana Paula Figueiredo Números Reais IR O conjunto dos números Irracionais reunido com o conjunto dos números Racionais (Q), formam o conjunto dos números Reais (IR ). Assim, os principais conjuntos numéricos
Planificação do 1º Período
Direção-Geral dos Estabelecimentos Escolares Direção de Serviços da Região Centro Planificação do 1º Período Disciplina: Matemática A Grupo: 500 Ano: 10º Número de blocos de 45 minutos previstos: 74 Ano
Trabalho de Programação Funcional Linguagem Scheme
Trabalho de Programação Funcional Linguagem Scheme Fábio Davanzo F. de Oliveira, Daniel C. Santos Bacharelado em Ciências da Computação quarta fase, 2002 Departamento de Informatica e Estatística (INE)
