Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas

Tamanho: px
Começar a partir da página:

Download "Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas"

Transcrição

1 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 Superior Técnico Universidade Técnica de Lisboa

2 2

3 3 Preâmbulo O objectivo desta publicação é disponibilizar um conjunto de exercícios que permitam aos alunos da disciplina de Fundamentos de Programação da Licenciatura em Engenharia Informática e de Computadores do Instituto Superior Técnico consolidarem os conhecimentos adquiridos ao longo do semestre. Os exercícios estão divididos de acordo com os capítulos do livro adoptado na disciplina: Fundamentos da Programação Utilizando Múltiplos Paradigmas, de João Pavão Martins e Maria dos Remédios Cravo, editado pela IST Press em Sempre que tal foi considerado relevante, os exercícios foram subdivididos de acordo com o seu tipo. Chama-se a atenção dos alunos para a indicação do nível de dificuldade de 1 a 4, correspondendo o nível 1 a exercícios muito fáceis e o nível 4 a exercícios francamente difíceis. Esta informação é apresentada dentro de um quadrado cinzento antes do enunciado do exercício a que diz respeito. Alguns destes exercícios correspondem a exercícios propostos nas sebentas (a) 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 e H. Sofia Pinto, editados por Inês Lynce, 2002, e (b) Exercícios para Programação em Scheme: Introdução à Programação Utilizando Múltiplos Paradigmas, Departamento de Engenharia Informática, IST.

4 4

5 Conteúdo 1 Noções básicas Exercícios de revisão Exercícios de programação Abstracção Procedimental Exercícios de revisão Exercícios de programação Avaliação de Expressões Definição de Procedimentos Recursão Valores aproximados de funções Processos gerados por procedimentos Exercícios de revisão Exercícios de programação Estruturação de Procedimentos Exercícios de revisão Exercícios de programação Estrutura de Blocos Utilização de Nomes Locais Abstracção de dados Exercícios de revisão Exercícios de programação Caixas e ponteiros Tipo tempo Tipo data Complexos Listas Árvores Binárias Procedimentos de ordem superior Exercícios de revisão Exercícios de programação Procedimentos que recebem procedimentos Procedimentos que produzem procedimentos

6 6 CONTEÚDO 7 O desenvolvimento de programas Exercícios de revisão Exercícios de programação

7 Capítulo 1 Noções básicas 1.1 Exercícios de revisão 1. O que é um processo computacional? Qual a relação entre um programa e um processo computacional? 2. O que é um algoritmo? Explique cada uma das suas características: rigor, eficácia e garantia de terminação. 3. O que é um programa? Qual a sua relação com um algoritmo? 4. O que é a abordagem do topo para a base? Aplique-a à solução de um problema à sua escolha. 5. Em que consiste a abstracção? Qual a sua vantagem? 6. Explique em que consiste o ciclo lê-avalia-escreve. 7. O que são a sintaxe e a semântica de uma linguagem? Como se descrevem? 8. Dê um exemplo de cada um dos seguintes tipos de entidades existentes em Scheme: (a) Constante. (b) Procedimento primitivo. (c) Combinação. (d) Forma especial. 9. Diga o que é uma combinação, apresentando a sua sintaxe em notação BNF e explicando informalmente os símbolos não terminais que a compõem. 10. Quais os passos seguidos pelo Scheme na avaliação de uma combinação? 11. O que é um predicado? Dê um exemplo. 12. O que é uma definição recursiva? Quais as partes que a compõem? 13. Considere a operação de nomeação em Scheme. (a) Qual a sintaxe e a semântica da operação de nomeação? 7

8 8 CAPÍTULO 1. NOÇÕES BÁSICAS (b) Explique a razão de esta operação corresponder a uma forma especial. (c) Qual a necessidade da definição desta operação? 14. O que é um ambiente? 1.2 Exercícios de programação 1. (1) Instale o Scheme no seu computador seguindo as instruções do Manual de Sobrevivência em Scheme. 2. (1) Na janela de interacção do Scheme execute as seguintes acções: (a) Avalie a constante inteira correspondente ao seu número de aluno. (b) Avalie a cadeia de caracteres correspondente ao seu nome completo. (c) Calcule a diferença entre 2007 e o seu ano de nascimento. (d) Calcule a área de um círculo com diâmetro 10. (e) Calcule a razão entre a área de um quadrado com 10 de lado e a área de um círculo com diâmetro (1) Converta as seguintes expressões para a notação do Scheme: (a) (1 + 5) 6 12/3 (b) /5 (c) ( /3 2) (8/ ) 4. (2) Traduza as seguintes expressões para notação prefixa e calcule o seu valor utilizando o interpretador do Scheme. Mostre a árvore de avaliação para cada uma delas utilizando o modo de avaliação de expressões em Scheme. (a) ( )/(2 + 1) (b) (5 + 4) 3/2 1 (c) /4 5 6/(7 + 8) 5. (1) Suponha que as seguintes expressões são avaliadas pelo Scheme. Na linha imediatamente a seguir a cada uma delas diga o que é escrito pelo interpretador do Scheme (se a avaliação de alguma das expressões der origem a um erro, explique a razão do erro). (a) (+ 1 20) (b) (1 + 20) 6. (1) Considere uma máscara de papel feita a partir um círculo de papel de raio 5. Os dois olhos são círculos de raio 1 recortados, o nariz é um quarto de círculo de raio 3 recortado e a boca corresponde a meio círculo de raio 3, também recortado. Escreva uma expressão em Scheme para calcular a área ocupada pela máscara. (a) Escreva o código em texto corrido usando os valores apropriados. (b) Escreva o código usando a indentação elegante.

9 1.2. EXERCÍCIOS DE PROGRAMAÇÃO 9 (c) Escreva o código definindo nomes Raio-Face, Raio-Olhos, Raio-Nariz, Raio-Boca para os raios dos círculos referidos. (d) Escreva o código utilizando os nomes Area-Face, Area-Olhos, Area-Nariz, Area-Boca, com os valores apropriados. (e) Avalie cada uma das respostas das alíneas anteriores quanto à legibilidade do código. 7. (1) Suponha que as seguintes expressões são avaliadas pela ordem apresentada. Diga o que é escrito pelo interpretador do Scheme. Se a avaliação de alguma das expressões der origem a um erro, explique a razão do erro. (a) (* 4 ( )) (b) (define a 5) (c) (+ a b) (d) (define b (* (+ 5 a) (+ 2 56))) (e) (+ a b) (f) a (g) (define a (+ a 2)) (h) a (i) + (j) 7.0 (k) (* 2 (/ 8 4)) (l) (+ 3 ) (m) (define a a) (n) a 8. (1) Diga qual o resultado de avaliar cada uma das seguintes formas. Se a avaliação de uma forma não produzir resultados escreva -nada-. Se a avaliação de uma forma produzir um erro, explique a sua razão. (a) (and (> 3 5) (/ 3 0)) (b) (and (/ 3 0) (> 3 5)) (c) (+ 8 (max 3 2)) (d) (define a 5)

10 10 CAPÍTULO 1. NOÇÕES BÁSICAS

11 Capítulo 2 Abstracção Procedimental 2.1 Exercícios de revisão 1. Diga qual a diferença entre uma função matemática e um procedimento em Scheme para o cálculo dessa função. 2. Explique o que são os parâmetros formais e o que são os parâmetros concretos, referindo, em particular onde aparecem os parâmetros formais e onde aparecem os parâmetros concretos e quando e como é que os parâmetros formais são associados com os parâmetros concretos. 3. Utilizando a notação BNF, apresente a definição de uma expressão lambda. Explique cada um dos constituintes da sua definição. 4. O que é um procedimento anónimo? Dê um exemplo. 5. Diga o que é abstracção procedimental e qual a sua vantagem. 6. Escreva as regras seguidas pelo Scheme para a avaliação de uma expressão. 7. O que é um ambiente local? Qual o significado de dizer que um nome está ligado num ambiente? 2.2 Exercícios de programação Avaliação de Expressões 1. (1) Avalie as seguintes formas. Se alguma das avaliações der origem a um erro, explique qual a razão do erro. (a) (3 1) (b) ((lambda (x) (+ 2 x)) 3) (c) ((lambda (x) ((lambda (y) (* y 2)) (+ x 3))) 4) (d) ((lambda (x) (+ x 3)) ((lambda (y) (* y 2)) 4))

12 12 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL 2. (1) Diga qual o resultado de avaliar cada uma das seguintes formas. Considere que estas são fornecidas ao avaliador do Scheme pela ordem apresentada (e consequentemente cada forma é dependente das anteriores). Se a avaliação de uma forma não produzir resultados escreva -nada-. Se a avaliação de uma forma produzir um erro, explique a sua razão. (a) (define a 5) (b) (if (odd? a) (+ a 2) (* a 3)) (c) (lambda (x) (+ b x)) (d) ((lambda (x)(+ a x)) b) 3. (1) Considere o procedimento (define (cont n) (if (< n 0) 0 (+ 2 (cont (- n 3))))) Com base nas regras de avaliação, desenhe a árvore que representa o funcionamento deste procedimento com a avaliação de (cont 5). 4. (1) Considere o procedimento (define (proc n) (cond ((= n 0) 1) ((= n 1) 1) (else (+ 3 (proc (- n 3)))))) Com base nas regras utilizadas pelo interpretador do Scheme para avaliar uma combinação, desenhe a árvore que representa o funcionamento deste procedimento com a avaliação de (proc 3). 5. (1) Considere a seguinte interacção com o Scheme: > (define (f x) (+ x 2)) > (define (g x) (* 2 (f x))) > (define (h x) (f (* 2 x))) > (g 3) 10 > (h 3) 8 Com base nas regras utilizadas pelo interpretador do Scheme para avaliar uma combinação, desenhe as árvores que representam o funcionamento destes procedimentos com a avaliação de (g 3) e de (h 3).

13 2.2. EXERCÍCIOS DE PROGRAMAÇÃO (2) 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: 1 (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) 7. (2) Considere a seguinte interacção em Scheme: > (define (f1 x) (* x x)) > (f1 5) 25 > (define f2 f1) (a) Qual o valor de (f2 5)? Justifique a sua resposta. (b) Suponha que agora definia o procedimento f2, do seguinte modo: > (define (f2 x) (+ x 10)) Quais os valores de (f1 5) e de (f2 5)? Justifique a sua resposta. 8. (2) Considere a seguinte definição: (define f ((lambda (x) (lambda (y) x)) 1)). Diga quais os resultados da avaliação sequencial das seguintes expressões. Se alguma das expressões produzir um erro, explique a razão do erro. (a) (f 2) (b) (define g (f 3)) (c) (g 4) (d) (define h f) (e) (h 6) Definição de Procedimentos 1. (1) Escreva um procedimento anónimo que soma dois ao seu argumento. 2. (1) Escreva um procedimento anónimo para representar a função de um argumento (x) cujo valor é calculado por (x 32) 5/9. 3. (1) Escreva um procedimento anónimo para representar a função de dois argumentos (x e y) cujo valor é calculado por (x + 3 y) (x y). 4. (1) Escreva o procedimento dobro que devolve o dobro do seu argumento. 1 Exercício 1.4 de Abelson H., Sussman G. J., e Sussman J., Structure and Interpretation of Computer Programs, 2 a Edição, p. 21, 1996.

14 14 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL 5. (1) Escreva o procedimento metade que recebe um número inteiro positivo e devolve um número racional que corresponde a metade do seu argumento. 6. (1) Escreva um procedimento horas->dias que recebe um inteiro correspondente a um certo número de horas e que devolve um número real que traduz o número de dias correspondentes ao seu argumento. > (horas->dias 48) 2.0 > (horas->dias 10) (2) Escreva o procedimento digitos->numero que recebe como argumentos três dígitos e produz o número inteiro de três algarismos constituído pelos seus argumentos e pela ordem em que aparecem. > (digitos->numero 3 2 8) (1) Escreva um procedimento area-circulo que calcula a área de um círculo cujo raio é r. Note-se que esta área é dada pela fórmula πr (2) Utilizando o procedimento area-circulo do exercício anterior, escreva um procedimento area-coroa que calcula a área de uma coroa circular de raio interior r 1 e raio exterior r (1) Defina o procedimento media que recebe dois argumentos que devem ser números e devolve o número real que corresponde à média dos seus argumentos. 11. (1) Escreva um procedimento sinal, que receba um inteiro e devolva 1, 1 ou 0, caso o número seja, respectivamente, maior, menor ou igual a zero. 12. (1) Escreva o procedimento intermedio que recebe três números e devolve o número com o valor intermédio. 13. (3) Escreva um procedimento quant->qual, que recebe um real, representando uma nota quantitativa de um aluno (entre 0 e 20), e a transforma numa constante do tipo cadeia de caracteres que corresponde a uma nota qualitativa, de acordo com a tabela Nota quantitativa Nota qualitativa 18 a 20 Muito Bom 14 a 17 Bom 10 a 13 Suficiente 5 a 9 Mediocre 0 a 4 Mau A nota recebida deverá ser convertida para um número inteiro, antes da conversão para a nota qualitativa.

15 2.2. EXERCÍCIOS DE PROGRAMAÇÃO (1) Escreva um procedimento que recebe as notas de um aluno de uma disciplina C1 (nota do projecto, média dos trabalhos das práticas, nota do teste, e nota do exame final) e calcula a sua nota final de acordo com as seguintes regras: (a) A nota na disciplina será calculada por uma média ponderada da classificação obtida nas provas realizadas, com os seguintes pesos: projecto 25%; trabalhos de casa e aulas práticas 10%; teste 20%; exame final 45%. (b) Para obter aprovação na disciplina, a nota do exame terá de ser superior a 7,5 valores, a nota do projecto terá de ser superior a 9,5 valores e a média ponderada da disciplina terá de ser superior a 9,5 valores. O seu procedimento deve devolver a nota final da disciplina (um inteiro) no caso de o aluno ter sido aprovado ou zero no caso do aluno ter sido reprovado. 15. (1) Utilizando os procedimentos desenvolvidos nos exercícios 13 e 14, escreva um procedimento em Scheme que recebe as notas de um aluno da disciplina C1 (nota do projecto, média dos trabalhos das práticas, nota do teste, e nota do exame final) e calcula a sua nota qualitativa final. 16. (3) O procedimento primitivo round, quando a parte decimal do número a arredondar é 0.5, arredonda por excesso ou por defeito (em termos de valor absoluto), consoante a parte inteira seja ímpar ou par. Por exemplo, > (round 5.5) 6.0 > (round 6.5) 6.0 Escreva um procedimento arredonda que arredonda sempre por excesso (em termos de valor absoluto), quando a parte decimal do número é 0.5. Por exemplo, > (arredonda 5.5) 6.0 > (arredonda 6.5) 7.0 > (arredonda -6.5) (2) Escreva um procedimento cinco? que tem o valor verdadeiro se o seu argumento for 5 e falso no caso contrário. Não utilize o if, nem o cond, nem nem. 18. (2) Escreva um procedimento (entre? val x y) que devolve verdadeiro, no caso de val se encontrar entre x e y (x < val < y) e falso no caso contrário. 19. (2) Escreva o procedimento bissexto? para verificar se um ano é bissexto. Um ano é bissexto se for divisível por 4 e não for divisível por 100, a não ser que seja também divisível por 400. Por exemplo, 1984 é bissexto, 1100 não é, e 2000 é bissexto.

16 16 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL > (bissexto? 2000) > (bissexto? 1900) 20. (2) Escreva o procedimento data-valida? para verificar se uma data é válida. O seu procedimento deve receber 3 inteiros, em que o primeiro representa o ano, o segundo, o mês, e o terceiro, o dia, e verificar se a data correspondente existe no calendário. Por exemplo, e não são datas válidas (porque 1998 não é bissexto e Abril só tem 30 dias, respectivamente) mas é uma data válida. > (data-valida? ) > (data-valida? ) > (data-valida? ) 21. (2) Se a, b e c representam as dimensões dos lados de um triângulo, escreva um procedimento triangulo? que devolve verdadeiro se os valores de a, b e c puderem corresponder a lados de um triângulo e falso no caso contrário. Note que a, b e c podem representar as dimensões dos lados de um triângulo se: (a) nenhum dos valores a, b e c for negativo ou nulo; (b) a soma de quaisquer destes valores for maior do que o terceiro (num triângulo, qualquer lado é menor do que a soma dos outros dois). 22. (2) Escreva o procedimento classifica que recebe três números correspondentes aos comprimentos dos lados de um triângulo e decide se o triângulo é equilátero, isósceles ou escaleno. 23. (2) Escreva um procedimento triangulo-rect?, que recebe três números inteiros positivos e determina se estes correspondem aos comprimentos dos lados de um triângulo rectângulo. O seu procedimento deverá satisfazer as seguintes condições: O procedimento devolve verdadeiro no caso dos valores recebidos corresponderem aos comprimentos dos lados de um triângulo rectângulo e falso em caso contrário. O funcionamento do procedimento é independente da ordem pela qual os valores lhe são fornecidos. O procedimento verifica se os valores fornecidos e correspondem a inteiros positivos, produzindo uma mensagem em caso de não corresponderem. Note que num triângulo rectângulo, o quadrado de um dos lados é igual à soma dos quadrados dos outros dois. 24. (2) Escreva o procedimento idade que recebe como argumentos seis números inteiros correspondentes a duas datas (um dia, mês, ano para cada data), sendo a primeira data correspondente à data de nascimento de uma pessoa e a segunda correspondente a uma data posterior, e devolve a idade (número de anos) dessa pessoa na segunda data.

17 2.2. EXERCÍCIOS DE PROGRAMAÇÃO 17 > (idade ) 21 > (idade ) (3) Escreva o procedimento anterior? que recebe como argumentos seis números inteiros correspondentes a duas datas (um dia, mês, ano para cada data) e devolve verdadeiro se a primeira data for anterior à segunda e falso caso contrário. Não utilize o if, nem o cond, nem nem. > (anterior? ) > (anterior? ) 26. (2) Escreva o procedimento dias-p/-reveillon que recebe como argumentos dois números inteiros correspondentes a um mês e um ano e que devolve o número de dias desde o dia 1 do mês dado até ao final desse ano. 27. (3) Escreva um procedimento dias-entre-datas que recebe seis números inteiros como argumentos correspondentes a duas datas (um dia, mês e ano para cada data), sendo a primeira data anterior à segunda e o período que decorre entre as datas não superior a um ano, e devolve o número de dias depois da primeira data até à segunda data (inclusive). (dias-entre-datas ) 31 (dias-entre-datas ) (3) Escreva o procedimento proximo-29/2 que recebe como argumentos três números inteiros correspondentes a uma data (um dia, mês e ano) e devolve o ano da próxima ocorrência do dia 29 de Fevereiro depois da data recebida como argumento. Sugestão: Use o procedimento bissexto? definido na alínea 19. > (proximo-29/ ) 2000 > (proximo-29/ ) 2004 > (proximo-29/ ) (3) Escreva o procedimento numero-de-29/2s que recebe como argumentos seis números inteiros correspondentes a duas datas (um dia, mês, ano para cada data), sendo a primeira data anterior à segunda, e devolve o número de ocorrências do dia 29 de Fevereiro depois da primeira data e até à segunda (inclusive). Sugestão: Use o procedimento proximo-29/2 definido na alínea 28.

18 18 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL 30. (3) Escreva o procedimento dias que recebe como argumentos seis números inteiros correspondentes a duas datas (um dia, mês, ano para cada data), sendo a primeira data anterior à segunda, e devolve o número de dias depois da primeira data e até à segunda (inclusive). Sugestão: Use os procedimentos definidos anteriormente Recursão 1. Suponha que em Scheme não existiam as operações aritméticas +, -, *, /, quotient e remainder nem os predicados <, >, =, odd? e even? mas que existem os procedimentos add1, sub1 e zero? que recebem como argumento um inteiro e devolvem, respectivamente, o seu sucessor, o seu antecessor, e o resultado de verificar se o número é 0. Neste exercício apenas poderá utilizar estas 3 operações e outras eventualmente definidas utilizando estas. (a) (b) (c) (d) (e) (1) Escreva um procedimento soma que recebe dois números inteiros positivos n e m, e devolve a soma dos dois. Sugestão: A soma de dois números n e m pode ser vista como n , m vezes. > (soma 8 2) 10 (1) Escreva um procedimento multiplica que recebe dois números inteiros positivos n e m, e devolve a multiplicação dos dois. Sugestão: A multiplicação de dois números n e m pode ser vista como n + n + + n, m vezes. > (multiplica 8 2) 16 (1) Escreva um procedimento menos que recebe dois números inteiros positivos n e m, e devolve a diferença dos dois. Sugestão: Use uma ideia semelhante ao exercício 1a. > (menos 8 2) 6 > (menos 2 8) -6 (2) Escreva um procedimento par? que recebe um número inteiro positivo n, e devolve se n for par e no caso contrário. > (par? 8) > (par? 5) (2) Suponha definido um procedimento menor? que recebe dois números inteiros positivos n e m, e devolve se o n for menor do que m e no caso contrário.

19 2.2. EXERCÍCIOS DE PROGRAMAÇÃO 19 Escreva um procedimento quociente que recebe dois números inteiros positivos n e m, e devolve o quociente da divisão de n por m. No caso de m ser 0 deverá dar um erro. Relembre que o quociente da divisão de dois números inteiros positivos n e m é o maior inteiro r tal que r.m n. Sugestão: Utilize o procedimento menos definido anteriormente. > (quociente 8 2) 4 > (quociente 10 3) 3 2. (1) Escreva um procedimento somatorio que recebe um número inteiro positivo n, e devolve a soma de todos os números até n. > (somatorio 3) 6 > (somatorio 6) (1) Escreva um procedimento soma-quadrados que recebe um número inteiro positivo n, e devolve a soma do quadrado de todos os números até n. > (soma-quadrados 3) 14 > (soma-quadrados 5) (1) Escreva um procedimento factorial que recebe um número inteiro positivo n, e devolve o factorial desse número. > (factorial 0) 1 > (factorial 5) (1) Escreva um procedimento potencia que recebe dois números inteiros positivos b e n, e devolve a potência n de b, i.e., b n. Neste exercício não pode usar o procedimento expt. > (potencia 3 2) 9 > (potencia 2 4) (2) Um número d é divisor de n se o resto da divisão de n por d for 0. Escreva um procedimento numero-divisores que recebe um número inteiro positivo n, e devolve o número de divisores de n. No caso de n ser 0 deverá devolver 0.

20 20 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL > (numero-divisores 20) 6 > (numero-divisores 13) 2 7. (2) Suponha definido um procedimento primo? que recebe um número inteiro positivo n, e devolve se o número for primo e no caso contrário. Escreva um procedimento numero-primos-menores que recebe um número inteiro positivo n, e devolve o número de primos menores ou iguais a n. > (numero-primos-menores 9) 4 > (numero-primos-menores 23) 9 8. (2) Suponha definido um procedimento primo? que recebe um número inteiro positivo n, e devolve se o número for primo e no caso contrário. Escreva um procedimento numero-divisores-primos que recebe um número inteiro positivo n, e devolve o número de divisores primos de n. No caso de n ser 0 deverá devolver 0. > (numero-divisores-primos 1) 0 > (numero-divisores-primos 20) 2 > (numero-divisores-primos 30) 3 9. (2) Escreva um procedimento soma-divisores que recebe um número inteiro positivo n, e devolve a soma de todos os divisores de n. No caso de n ser 0 deverá devolver 0. > (soma-divisores 20) 42 > (soma-divisores 13) (3) O logaritmo inteiro de um número n na base b é o maior número inteiro e tal que b e n. Escreva um procedimento logaritmo que recebe dois números inteiros positivos n e b, e devolve o logaritmo inteiro de n na base b. No caso de n ou b serem 0 deverá devolver 0. > (logaritmo 8 2) 3 > (logaritmo 7 2) 2

21 2.2. EXERCÍCIOS DE PROGRAMAÇÃO (3) A raiz inteira de índice e de um número n é o maior número inteiro r tal que r e n. Escreva um procedimento raiz que recebe dois números inteiros positivos n e e, e devolve a raiz inteira de n de índice e. No caso de e ser 0 deverá devolver 0. > (raiz 8 3) 2 > (raiz 15 2) (4) Suponha definido um procedimento kesimo-factor-primo que recebe dois números inteiros positivos n e k, e devolve o seu k-ésimo factor primo de n. Escreva um procedimento kesimo-expoente que recebe dois números inteiros positivos n e k, e devolve o expoente do k-ésimo factor primo de n. No caso de n ter menos de k factores primos ou k ser 0, deverá devolver 0. > (kesimo-expoente 72 1) 3 > (kesimo-expoente 72 2) 2 Nos exercícios que se seguem poderá ser útil a utilização dos seguintes procedimentos sobre números inteiros: (remainder n m) devolve o resto da divisão de n por m. (quotient n m) devolve o quociente da divisão de n por m. 13. (3) Escreva um procedimento numero-digitos que recebe um número inteiro positivo n, e devolve o número de dígitos de n. > (numero-digitos 9) 1 > (numero-digitos 1012) (3) Escreva um procedimento soma-digitos que recebe um número inteiro positivo n, e devolve a soma de todos os dígitos de n. > (soma-digitos 9) 9 > (soma-digitos 1012) (3) Escreva um procedimento soma-digitos-pares que recebe um número inteiro positivo n, e devolve a soma de todos os dígitos pares de n. > (soma-digitos-pares 9) 0 > (soma-digitos-pares 1412) 6

22 22 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL 16. (4) Escreva um procedimento digitos-impares que recebe um número inteiro positivo n, e devolve o número composto apenas pelos dígitos ímpares de n ou 0, se n não tiver dígitos ímpares. > (digitos-impares 94558) 955 > (digitos-impares 2468) (4) Escreva um procedimento muda-digito que recebe três números inteiros positivos n, k e d, e devolve o inteiro que resulta de substituir o dígito na posição k de n por d. > (muda-digito ) > (muda-digito ) (4) O espelho de um número inteiro positivo é o resultado de inverter a ordem de todos os seus algarismos. Escreva um procedimento espelho que recebe um número inteiro positivo n, e devolve o seu espelho. > (espelho 391) 139 > (espelho 45679) (4) Um número binário b n b n 1... b 1 b 0 pode ser transformado num número decimal usando a seguinte formula n i=0 b i2 i. Escreva um procedimento binario-decimal que recebe um número b escrito em binário e devolve a sua representação decimal. > (binario-decimal 1001) 9 > (binario-decimal 10000) (4) Um número decimal d pode ser transformado num número binário b n b n 1... b 1 b 0 através da seguinte recorrência: seja q 0 = d e q i = quociente(q i 1, 2) para i > 0, e b i = resto(q i, 2). Escreva um procedimento decimal-binario que recebe um número d escrito em base 10 e devolve a sua representação binária. > (decimal-binario 33) > (decimal-binario 156)

23 2.2. EXERCÍCIOS DE PROGRAMAÇÃO Valores aproximados de funções 1. (2) Sabe-se que a seguinte fórmula permite calcular uma aproximação da função seno até um determinado número de termos: seno(x) = x(1 x2 x2 x2 (1 (1 ( )))) Defina um procedimento seno que corresponde ao método de cálculo anterior. O seu procedimento deverá receber o número para o qual se pretende calcular o seno e o número de factores a considerar. 2. (2) A função arctg pode ser aproximada através da fórmula arctg(z) = n=0 ( 1) n z 2n+1 2n + 1 = z z3 3 + z5 5 z Defina um procedimento que calcule o arctg de acordo com a fórmula acima. O seu procedimento deverá receber o número z para o qual se quer calcular o arctg bem como o número de termos da expressão a calcular. 3. (3) Suponha que o procedimento sqrt não estava definido em Scheme como um procedimento primitivo. A raiz quadrada de um número, x, pode ser calculada usando um método de aproximações sucessivas, chamado método de Newton, em que um valor aproximado para x, y, é sucessivamente melhorado utilizando a fórmula y+ x y 2. Por exemplo, para calcular 3, poderíamos efectuar os seguintes cálculos: Passo Aproximação Nova aproximação Considerando que uma primeira aproximação grosseira para x pode ser x, escreva um procedimento para calcular a raiz quadrada de um número. 4. (3) A constante e é um dos números mais importantes em Matemática, a par com os elementos neutros da adição (0) e da multiplicação (1), com a constante π e com a unidade imaginária i. O valor de e corresponde ao número real que é a soma da seguinte série infinita 1 e = n! = 1 0! + 1 1! + 1 2! + 1 3! +... n=0 Escreva um procedimento para calcular uma aproximação do número e, utilizando a série apresentada. A condição de paragem deve ser determinada por si e devidamente justificada.

24 24 CAPÍTULO 2. ABSTRACÇÃO PROCEDIMENTAL

25 Capítulo 3 Processos gerados por procedimentos 3.1 Exercícios de revisão 1. Explique os seguintes conceitos: procedimento e processo gerado por um procedimento. 2. Quais são as características de um processo recursivo? 3. Quais são as características de um processo iterativo linear? 4. Será que um procedimento recursivo pode gerar um processo iterativo? Justifique a sua resposta e dê um exemplo. 5. Considere a afirmação os procedimentos que geram processos iterativos são sempre melhores que os procedimentos que geram processos recursivos. Comente-a relativamente aos seguintes aspectos: (a) memória ocupada; (b) tempo gasto; (c) facilidade de escrita e leitura do programa. 6. Qual o interesse de estudar a ordem de crescimento de um processo? Compare as ordens de crescimento (temporal e espacial) entre processos recursivos lineares e iterativos lineares. 7. Diga o que significa a frase A ordem de crescimento do recurso R(n) é Θ(n). 8. Usando a definição da função Θ que define a ordem de crescimento de um processo, explique o que significa um processo ter ordem de crescimento polinomial. 3.2 Exercícios de programação 1. (1) Considere o seguinte procedimento (define (misterio x) (cond ((= x 0) (newline)) (else (display (remainder x 10)) (misterio (quotient x 10))))) Qual a função calculada pelo procedimento misterio? Sugestão: Siga o processo gerado por este procedimento para alguns inteiros. Depois admire o poder dos procedimentos recursivos.

26 26 CAPÍTULO 3. PROCESSOS GERADOS POR PROCEDIMENTOS 2. (1) Considere a definição do seguinte procedimento em Scheme que recebe inteiros superiores ou iguais a zero: (define (misterio?-aux b c) (cond ((zero? b) ) ((zero? c) ) (else (misterio?-aux (sub1 (sub1 b)) (sub1 (sub1 c)))))) (define (misterio? a) (misterio?-aux a (sub1 a))) (a) Explique qual a função matemática calculada pelo procedimento misterio?. (b) O processo gerado pelo procedimento misterio?-aux é iterativo ou recursivo? Justifique a sua resposta. 3. (1) Considere o seguinte procedimento: (define (misterio-aux n ac) (if (< n 10) (+ n (* ac 10)) (misterio-aux (quotient n 10) (+ (remainder n 10) (* ac 10))))) (define (misterio n) (misterio-aux n 0)) (a) Entre os procedimentos apresentados, misterio e misterio-aux, existe algum que seja um procedimento recursivo? Justifique a sua resposta. (b) Mostre a evolução do processo gerado pela avaliação de (misterio 149). (c) O procedimento misterio gera um processo recursivo ou iterativo? Justifique a sua resposta. 4. (2) Considere o seguinte procedimento (define (misterio x n) (if (= n 0) 0 (+ (* x n) (misterio x (- n 1))))) (a) Mostre a evolução do processo gerado pela avaliação de (misterio 2 3). (b) O procedimento apresentado é um procedimento recursivo? Justifique. (c) O procedimento apresentado gera um processo recursivo ou iterativo? Justifique. (d) Se o processo gerado era iterativo, transforme o procedimento de forma que gere um processo recursivo. Se o processo gerado era recursivo, transforme o procedimento, de forma a que gere um processo iterativo.

27 3.2. EXERCÍCIOS DE PROGRAMAÇÃO (2) Suponha que as operações de multiplicação e potência não existiam em Scheme e que pretende calcular o quadrado de um número natural. O quadrado de um número natural pode ser calculado como sendo a soma de todos os números ímpares inferiores ao dobro do número. Com efeito: n (2n 1) n = = = = = = Note que o dobro de um número também não pode ser calculado recorrendo à operação de multiplicação. Escreva dois procedimentos que calculam o quadrado de um número natural utilizando o método descrito. (a) Um procedimento que dá origem a um processo recursivo linear. (b) Um procedimento que dá origem a um processo iterativo linear. 6. (2) Defina um procedimento recursivo que recebe três argumentos a, b e n e que devolve o valor de somar n vezes a a b, i.e., b + a + a + + a, n vezes. (a) Gerando um processo recursivo. (b) Gerando um processo iterativo. 7. Suponha que em Scheme não existiam as operações aritméticas +, -, quotient, * e / nem os predicados <, > e = mas que existem os procedimentos add1, sub1 e zero? que recebem como argumento um inteiro e devolvem, respectivamente, o seu sucessor, o seu antecessor, e o resultado de verificar se o número é 0. Neste exercício apenas poderá utilizar estas 3 operações e outras eventualmente definidas utilizando estas. (a) (b) (1) (Secção 2.2.3, Ex 1a) Escreva um procedimento soma, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve a soma dos dois. Sugestão: A soma de dois números n e m pode ser vista como n , m vezes. > (soma 8 2) 10 (1) (Secção 2.2.3, Ex 1b) Escreva um procedimento multiplica, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve a multiplicação dos dois. Sugestão: A multiplicação de dois números n e m pode ser vista como n + n + + n, m vezes.

28 28 CAPÍTULO 3. PROCESSOS GERADOS POR PROCEDIMENTOS (c) (d) (e) (f) (g) > (multiplica 8 2) 16 (1) (Secção 2.2.3, Ex 1c) Escreva um procedimento menos, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve a diferença dos dois. Sugestão: Use uma ideia semelhante ao exercício 7a. > (menos 8 2) 6 > (menos 2 8) -6 (2) (Secção 2.2.3, Ex 1d) Escreva um procedimento par?, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve verdadeiro se n for par e falso no caso contrário. > (par? 8) > (par? 5) (1) Escreva um procedimento igual?, e que gere um processo iterativo, que recebe dois números inteiros positivos n e m, e devolve verdadeiro se o n for igual a m e falso no caso contrário. > (igual? 8 2) > (igual? 8 8) > (igual? 2 8) (1) Escreva um procedimento menor?, e que gere um processo iterativo, que recebe dois números inteiros positivos n e m, e devolve verdadeiro se o n for menor do que m e falso no caso contrário. > (menor? 8 2) > (menor? 8 8) > (menor? 2 8) (2) (Secção 2.2.3, Ex 1e) Escreva um procedimento quociente, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve o quociente da divisão de n por m. No caso de m ser 0 deverá devolver 0. Relembre que o quociente da divisão de dois números inteiros positivos n e m é o maior inteiro r tal que r.m n. Sugestão: Utilize os procedimentos menos e menor? definidos anteriormente.

29 3.2. EXERCÍCIOS DE PROGRAMAÇÃO 29 (h) (i) > (quociente 8 2) 4 > (quociente 10 3) 3 (2) Escreva um procedimento resto, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve o resto da divisão de n por m. No caso de m ser 0 deverá devolver n. > (resto 8 2) 0 > (resto 10 3) 1 (2) Escreva um procedimento simetrico, que gere um processo iterativo, e que recebe um número inteiro n, e devolve o simetrico de n. > (simetrico 8) -8 > (simetrico -3) 3 8. (1) (Secção 2.2.3, Ex 3) Escreva um procedimento soma-quadrados, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve a soma do quadrado de todos os números até n. > (soma-quadrados 3) 14 > (soma-quadrados 5) (1) (Secção 2.2.3, Ex 5) Escreva um procedimento potencia, que gere um processo iterativo, e que recebe dois números inteiros positivos b e n, e devolve a potência n de b, i.e., b n. > (potencia 3 2) 9 > (potencia 2 4) (2) Um número n é quadrado perfeito se existir um m tal que m 2 = n. Escreva um procedimento quadrado-perfeito?, que gere um processo iterativo, e que recebe um número n, e devolve verdadeiro se n for um quadrado perfeito e falso no caso contrário. > (quadrado-perfeito? 4) > (quadrado-perfeito? 8)

30 30 CAPÍTULO 3. PROCESSOS GERADOS POR PROCEDIMENTOS 11. (2) Um número n diz-se primo se os seus únicos divisores são o 1 e o próprio n. O número 1 não é primo. Um modo, pouco eficiente, de determinar se um dado inteiro é primo corresponde a dividi-lo sucessivamente por todos os inteiros menores que ele. Escreva um procedimento primo?, que gere um processo iterativo, e que recebe um número inteiro positivo n, e usando o método acima devolve verdadeiro se o número for primo e falso no caso contrário. > (primo? 53) > (primo? 21) 12. (3) Um número é livre de quadrados se não for divisível por nenhum quadrado perfeito para além de 1. Escreva um procedimento livre-quadrados?, que gere um processo iterativo, e que recebe um número n, e devolve verdadeiro se n for livre de quadrados e falso no caso contrário. > (livre-quadrados? 4) > (livre-quadrados? 50) > (livre-quadrados? 70) 13. (3) Um número n diz-se poderoso se para cada primo p, se p é divisor de n então p 2 também é divisor de n. Escreva um procedimento poderoso?, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve verdadeiro se o número for poderoso e falso no caso contrário. > (poderoso? 100) > (poderoso? 36) > (poderoso? 75) > (poderoso? 2) 14. (2) (Secção 2.2.3, Ex 6) Um número d é divisor de n se o resto da divisão de n por d for 0. Escreva um procedimento numero-divisores, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve o número de divisores de n. No caso de n ser 0 deverá devolver 0. > (numero-divisores 20) 6 > (numero-divisores 13) 2

31 3.2. EXERCÍCIOS DE PROGRAMAÇÃO (2) (Secção 2.2.3, Ex 9) Escreva um procedimento soma-divisores, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve a soma de todos os divisores de n. No caso de n ser 0 deverá devolver 0. > (soma-divisores 20) 42 > (soma-divisores 13) (3) (Secção 2.2.3, Ex 11) A raiz inteira de índice e de um número n é o maior número inteiro r tal que r e n. Escreva um procedimento raiz, que gere um processo iterativo, e que recebe dois números inteiros positivos n e e, e devolve a raiz inteira de n de índice e. No caso de e ser 0 deverá devolver 0. > (raiz 8 3) 2 > (raiz 15 2) (3) Um número n diz-se triangular se n = (m 1) + m para algum m. Escreva um procedimento triangular?, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve verdadeiro se o número for triangular e falso no caso contrário. No caso de n ser 0 deverá devolver falso. > (triangular? 6) > (triangular? 8) 18. (3) Dois números n e m dizem-se primos entre si se não têm nenhum divisor em comum à excepção do 1. Escreva um procedimento primos-entre-si?, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve verdadeiro se os números forem primos entre si e falso no caso contrário. No caso de n ou m serem 0 deverá devolver falso. > (primos-entre-si? 4 10) > (primos-entre-si? 21 10) 19. (3) Um número n diz-se um divisor fraco de m se todos os factores primos de n também são factores primos de m. Escreva um procedimento divisor-fraco?, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve verdadeiro se n for um divisor fraco de m e falso no caso contrário. No caso de n ou m serem 0 deverá devolver falso.

32 32 CAPÍTULO 3. PROCESSOS GERADOS POR PROCEDIMENTOS > (divisor-fraco? 4 10) > (divisor-fraco? 10 4) > (divisor-fraco? 6 10) 20. (4) O máximo divisor comum de dois números n e m é o maior inteiro x tal que x é divisor de n e m. Escreva um procedimento mdc, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve o máximo divisor comum dos dois números. No caso de n e m serem ambos 0 deverá devolver 0. Se apenas um deles for 0 deverá devolver o outro. > (mdc 3 0) 3 > (mdc 12 20) 4 > (mdc 10 20) (4) O mínimo múltiplo comum de dois números n e m é o menor inteiro x tal que x é divisível por n e m. Escreva um procedimento mmc, que gere um processo iterativo, e que recebe dois números inteiros positivos n e m, e devolve o mínimo múltiplo comum dos dois números. No caso de n ou m serem 0 deverá devolver 0. > (mmc 4 6) 12 > (mmc 12 5) (3) Um número n é o n-ésimo primo se for primo e existirem n 1 números primos menores que ele. Escreva um procedimento nesimo-primo, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve o n-ésimo número primo. No caso de n ser 0 deverá devolver 0. > (nesimo-primo 1) 2 > (nesimo-primo 10) (3) Um número p é primo de Mersenne se p é primo e 2 p 1 também é primo. Um número n é o n-ésimo primo de Mersenne se existirem n 1 primos de Mersenne menores que n. Os primeiros 10 primos de Mersenne são 2, 3, 5, 7, 13, 17, 19, 31, 61, 89. Escreva um procedimento nesimo-primo-mersenne, que gere um processo iterativo, e que recebe um número n, e devolve o n-ésimo primo de Mersenne.

33 3.2. EXERCÍCIOS DE PROGRAMAÇÃO 33 > (nesimo-primo-mersenne 3) 5 > (nesimo-primo-mersenne 9) (3) Um número d é o k-ésimo divisor de n se for divisor de n e existirem k 1 divisores de n menores que d. Escreva um procedimento k-divisor, que gere um processo iterativo, e que recebe dois números inteiros positivos n e k, e devolve o k-ésimo divisor de n. No caso de n ser 0, ou k ser 0, ou n ter menos de k divisores deverá devolver 0. > (kesimo-divisor 20 3) 4 > (kesimo-divisor 20 6) 20 > (kesimo-divisor 20 7) (3) Um número p é o k-ésimo factor primo de n se p é primo e existem k 1 factores primos de n menores que p. Escreva um procedimento kesimo-factor-primo, que gere um processo iterativo, e que recebe dois números inteiros positivos n e k, e devolve o seu k-ésimo factor primo de n. No caso de n ter menos de k factores primos ou k ser 0, deverá devolver 0. > (kesimo-factor-primo 3 1) 3 > (kesimo-factor-primo 3 2) 0 > (kesimo-factor-primo 60 3) (4) (Secção 2.2.3, Ex 12) Escreva um procedimento kesimo-expoente, que gere um processo iterativo, e que recebe dois números inteiros positivos n e k, e devolve o expoente do k-ésimo factor primo de n. No caso de n ter menos de k factores primos ou k ser 0, deverá devolver 0. > (kesimo-expoente 72 1) 3 > (kesimo-expoente 72 2) 2 Nos exercícios que se seguem poderá ser útil a utilização dos seguintes procedimentos sobre números inteiros: (remainder n m) devolve o resto da divisão de n por m. (quotient n m) devolve o quociente da divisão de n por m. 27. (3) (Secção 2.2.3, Ex 13) Escreva um procedimento numero-digitos, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve o número de dígitos de n.

34 34 CAPÍTULO 3. PROCESSOS GERADOS POR PROCEDIMENTOS > (numero-digitos 9) 1 > (numero-digitos 1012) (3) (Secção 2.2.3, Ex 14) Escreva um procedimento soma-digitos, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve a soma de todos os dígitos de n. > (soma-digitos 9) 9 > (soma-digitos 1012) (3) Escreva um procedimento existe-digito?, que gere um processo iterativo, e que recebe um número inteiro positivo n e um dígito d, e devolve verdadeiro se o dígito d ocorrer em n e falso no caso contrário. > (existe-digito? 234 3) > (existe-digito? 538 7) 30. (4) (Secção 2.2.3, Ex 16) Escreva um procedimento digitos-impares, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve o número composto apenas pelos dígitos ímpares de n. > (digitos-impares 94558) 955 > (digitos-impares 2468) (3) O dígito de posição k de um número n é o dígito na k-ésima posição de n a partir do dígito das unidades. Escreva um procedimento posicao, que gere um processo iterativo, e que recebe dois números inteiros positivos n e k, e devolve o dígito na posicao k de n. No caso de n ter menos de k dígitos ou k ser 0, deverá devolver 0. > (posicao ) 4 > (posicao ) (3) Um número é capicua se se lê igualmente da esquerda para a direita e vice-versa. Escreva um procedimento capicua?, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve verdadeiro se o número for uma capicua e falso no caso contrário. Sugestão: Use o procedimento posicao definido na alínea 31

35 3.2. EXERCÍCIOS DE PROGRAMAÇÃO 35 > (capicua? 12321) > (capicua? 1221) > (capicua? ) 33. (4) (Secção 2.2.3, Ex 17) Escreva um procedimento muda-digito, que gere um processo iterativo, e que recebe três números inteiros positivos n, k e d, e devolve o inteiro que resulta de substituir o dígito na posição k de n por d. > (muda-digito ) > (muda-digito ) (4) (Secção 2.2.3, Ex 18) O espelho de um número inteiro positivo é o resultado de inverter a ordem de todos os seus algarismos. Escreva um procedimento espelho, que gere um processo iterativo, e que recebe um número inteiro positivo n, e devolve o seu espelho. > (espelho 391) 139 > (espelho 45679) (1) Usando o procedimento espelho definido acima, reescreva de novo o procedimento capicua? definido na alínea (4) (Secção 2.2.3, Ex 20) Um número decimal d pode ser transformado num número binário b n b n 1... b 1 b 0 através da seguinte recorrência: seja q 0 = d e q i = quociente(q i 1, 2) para i > 0, e b i = resto(q i, 2). Escreva um procedimento decimal-binario, que gere um processo iterativo, e que recebe um número d escrito em base 10 e devolve a sua representação binária. > (decimal-binario 33) > (decimal-binario 156)

36 36 CAPÍTULO 3. PROCESSOS GERADOS POR PROCEDIMENTOS

37 Capítulo 4 Estruturação de Procedimentos 4.1 Exercícios de revisão 1. Diga o que entende por linguagem estruturada em blocos. Descreva a regra associada a esta estrutura, e diga qual a sua importância. 2. O que entende pelo domínio de um nome? 4.2 Exercícios de programação Estrutura de Blocos 1. (1) Considere as seguintes alternativas para definir um procedimento que calcula a função factorial. Alternativa 1: (define (factorial n) (if (>= n 0) (fact-aux n) (error "factorial: argumento negativo"))) (define (fact-aux n) (if (= n 0) 1 (* n (fact-aux (- n 1))))) Alternativa 2: (define (factorial n) (define (fact-aux n) (if (= n 0) 1 (* n (fact-aux (- n 1))))) (if (>= n 0) (fact-aux n) (error "factorial: argumento negativo")))

38 38 CAPÍTULO 4. ESTRUTURAÇÃO DE PROCEDIMENTOS (a) Compare estas duas alternativas quanto à garantia de que o factorial não é calculado com valores indevidos. Sugestão: Será que se pode avaliar directamente (fact-aux -1)? (b) Como se chama a estrutura definida pela alternativa 2? Qual a sua vantagem? 2. (1) Considere o seguinte procedimento que calcula m! n! (m > n), recorrendo à estrutura de blocos. Identifique as variáveis locais e não locais para cada um dos procedimentos. (define (quociente-de-factoriais m n) (define (iter m res) (if (= m n) res (iter (- m 1) (* m res)))) (iter m 1)) 3. (1) (Secção 2.2.3, Ex 2) Recorrendo à estrutura de blocos, escreva um procedimento somatorio que recebe um número inteiro positivo n, e devolve a soma de todos os números até n. O seu procedimento deve gerar um processo iterativo. > (somatorio 3) 6 > (somatorio 6) (1) (Secção 2.2.3, Ex 4) Recorrendo à estrutura de blocos, escreva um procedimento factorial que recebe um número inteiro positivo n, e devolve o factorial desse número. O seu procedimento deve gerar um processo iterativo. > (factorial 0) 1 > (factorial 5) (2) (Secção 2.2.3, Ex 7) Recorrendo à estrutura de blocos, escreva um procedimento numero-primos-menores que recebe um número inteiro positivo n, e devolve o número de primos menores ou iguais a n. O seu procedimento deve gerar um processo iterativo. Sugestão: Utilize o procedimento primo? definido na alínea 11 da Secção 3.2. > (numero-primos-menores 9) 4 > (numero-primos-menores 23) 9 6. (2) (Secção 2.2.3, Ex 8) Recorrendo à estrutura de blocos, escreva um procedimento numero-divisores-primos que recebe um número inteiro positivo n, e devolve o número de divisores primos de n. No caso de n ser 0 deverá devolver 0. O seu procedimento deve gerar um processo iterativo. Sugestão: Utilize o procedimento primo? definido na alínea 11 da Secção 3.2.

39 4.2. EXERCÍCIOS DE PROGRAMAÇÃO 39 > (numero-divisores-primos 1) 0 > (numero-divisores-primos 20) 2 > (numero-divisores-primos 30) 3 7. (3) (Secção 2.2.3, Ex 10) O logaritmo inteiro de um número n na base b é o maior número inteiro e tal que b e n. Recorrendo à estrutura de blocos, escreva um procedimento logaritmo que recebe dois números inteiros positivos n e b, e devolve o logaritmo inteiro de n na base b. No caso de n ou b serem 0 deverá devolver 0. O seu procedimento deve gerar um processo iterativo. > (logaritmo 8 2) 3 > (logaritmo 7 2) 2 8. (3) (Secção 2.2.3, Ex 15) Recorrendo à estrutura de blocos, escreva um procedimento soma-digitos-pares que recebe um número inteiro positivo n, e devolve a soma de todos os dígitos pares de n. O seu procedimento deve gerar um processo iterativo. > (soma-digitos-pares 9) 0 > (soma-digitos-pares 1412) 6 9. (4) (Secção 2.2.3, Ex 19) Um número binário b n b n 1... b 1 b 0 pode ser transformado num número decimal usando a seguinte formula n i=0 b i2 i. Recorrendo à estrutura de blocos, escreva um procedimento binario-decimal que recebe um número b escrito em binário e devolve a sua representação decimal. O seu procedimento deve gerar um processo iterativo. > (binario-decimal 1001) 9 > (binario-decimal 10000) Utilização de Nomes Locais 1. Em relação às seguintes expressões utilizando o let, avalie o valor da expressão e transforme-a numa expressão equivalente utilizando o lambda. (a) (1) (let ((x 5) (y 3)) (* x y))

40 40 CAPÍTULO 4. ESTRUTURAÇÃO DE PROCEDIMENTOS (b) (1) (let ((x 4) (y 3)) (let ((z (* x y))) (+ z x))) (c) (2) (d) (2) (let ((x 5)) (let ((x 3) (y (* x 2))) (+ x y))) (let ((x 5) (y 12)) (+ x (let ((x (+ x y))) (+ x 3)))) 2. (2) Suponha que a tem o valor 5 no ambiente global. Diga qual o resultado de avaliar a seguinte expressão: (let ((a 3) (b (* a 4))) (+ a b)) 3. (2) Considere as seguintes expressões. São equivalentes? Justifique. (let ((x 8)) (let ((x 5) (y (+ x 4))) (+ x y))) (let* ((x 8) (x 5) (y (+ x 4))) (+ x y)) 4. Para cada uma das seguintes combinações envolvendo uma expressão lambda, calcule o seu valor e transforme-a numa expressão equivalente utilizando o let. (a) (1) (b) (1) ((lambda (x y) (+ (* 3 x) y)) 2 3) ((lambda (x) ((lambda (y) ((lambda (z) (* y z)) (+ x y))) 2)) 5)

41 4.2. EXERCÍCIOS DE PROGRAMAÇÃO 41 (c) (1) (d) (2) ((lambda (x) ((lambda (y) (+ (* 2 y) x)) (+ x 3))) 5) ((lambda (x y) ((lambda (x) (+ (* 2 x) y)) (+ x y))) 6 2) (e) (2) ((lambda (x y) (+ x y ((lambda (z) (* 2 z)) (+ y 1)))) 5 2) 5. Para cada uma das seguintes séries, escreva um programa em Scheme que calcula o valor aproximado da série. O seu programa deve apresentar uma estrutura de blocos e deve evitar cálculos repetidos. Pode utilizar os procedimentos potencia e factorial sem os definir. (a) (2) (b) (2) (c) (2) (d) (2) = n=0 1 2 n = ( 1) n+1 1 n = ln(2) n=1 n=1 n=1 x n n! = ex 1 x2 2! + x4 4!... = ( 1) n+1 x 2n 2 (2n 2)! = cos(x)

42 42 CAPÍTULO 4. ESTRUTURAÇÃO DE PROCEDIMENTOS

43 Capítulo 5 Abstracção de dados 5.1 Exercícios de revisão 1. Diga o que é um tipo abstracto de informação. 2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados. 3. Explique em que consiste a abstracção de dados, usando os termos barreiras de abstracção, encapsulação da informação e anonimato da representação. 4. Explique quais são as vantagens da abstracção de dados. 5. Compare a abstracção de dados com a abstracção procedimental. 6. Justifique a seguinte afirmação a abstracção de dados aumenta o poder expressivo da nossa linguagem de programação. 7. Quais são os quatro passos a seguir na definição de um tipo abstracto de informação? Explique em que consiste cada um deles. 8. Diga o que são operações básicas de um tipo abstracto de informação e quais os grupos em que estas são divididas. 9. Explique o que são as barreiras de abstracção criadas por um tipo de informação e quais os inconvenientes de não as respeitar. 10. Apresente a metodologia dos tipos abstractos de informação e explique porque é que esta metodologia garante a abstracão de dados. 11. Diga o que é o anonimato da representação e qual a sua importância. 12. Na criação de um tipo abstracto de informação, há dois tipos de representação a considerar. Diga quais são e descreva cada um deles. 13. Diga o que é uma árvore binária e quais são as suas operações básicas, classificando-as de acordo com os vários grupos de operações. 43

44 44 CAPÍTULO 5. ABSTRACÇÃO DE DADOS 5.2 Exercícios de programação Caixas e ponteiros 1. (1) Considere a seguinte estrutura de pares usando a notação de caixas e ponteiros(correspondente à variável Estr): Para cada uma das seguintes expressões escreva o seu valor (o qual pode ser um número inteiro, uma estrutura de pares ou pode originar um erro). No caso de a expressão originar um erro explique a razão do erro. (a) (car Estr) (b) (car (car (cdr Estr))) (c) (cdr (cdr (cdr Estr))) 2. (1) Represente as seguintes estruturas, usando a notação de caixas e ponteiros: (a) (1. 2) (b) (1. ("bom dia". 3)) (c) (1. (2. (3. 4))) (d) ((1. 2). ((3. (4. 5)). (7. 8))) Tipo tempo Suponha que desejava criar o tipo tempo em Scheme. Suponha que o tempo é caracterizado por um certo número de horas (um inteiro não negativo), minutos (um inteiro entre 0 e 59) e segundos (um inteiro entre 0 e 59). 1. (2) Especifique as operações básicas para o tipo tempo. 2. (1) Escolha uma representação interna para o tipo tempo usando pares. 3. (2) Escreva em Scheme as operações básicas, de acordo com a representação escolhida.

Exercícios para Fundamentos da Programação Utilizando Múltiplos Paradigmas

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

Leia mais

Estruturação de Procedimentos

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.

Leia mais

PROGRAMAÇÃO EM SCHEME:

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

Leia mais

Fundamentos de Programação

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.

Leia mais

Exercícios para Fundamentos da Programação

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

Leia mais

Fundamentos de Programação

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

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Primeiro Teste 21 de Abril de 2012 11:30 13:00 Nome: Número: Esta prova, individual e sem consulta, tem 5 páginas com 10 perguntas. A cotação de cada pergunta está assinalada

Leia mais

Fundamentos da Programação

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 é

Leia mais

Fundamentos de Programação

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

Leia mais

if not(isinstance(a, int)) or a < 0: raise ValueError ("misterio: arg nao e inteiro nao negativo") else: return misterio_aux(a, a + 1)

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,

Leia mais

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

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.

Leia mais

Programação imperativa

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

Leia mais

Fundamentos de Programação

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

Leia mais

Funções. Capítulo (2) Considere a seguinte interacção em Python: >>> def f1(x):... return x * x... >>> f1(5) 25 >>> f2 = f1 >>>

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

Leia mais

Tipo de argumentos. valor. argumentos

Tipo de argumentos. valor. argumentos Operação Numero de argumentos Tipo de argumentos valor (+ ) 2 ou + Numérico Soma ( ) 2 ou + Numérico Subtração ( ) 1 Numérico Simétrico (/ ...) 2 ou + Numérico Divisão (cos

Leia mais

if not(isinstance(a, int)) or a < 0: raise ValueError ( misterio: arg devia ser inteiro nao negativo ) else: return misterio_aux(a, a + 1)

if not(isinstance(a, int)) or a < 0: raise ValueError ( misterio: arg devia ser 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 - 2, c - 2) if not(isinstance(a,

Leia mais

Fundamentosde Programação

Fundamentosde Programação Fundamentosde Programação Soluçãodo Primeiro teste 19 de Novembrode 2005 1. (1.0) Utilizando a notação BNF, apresente a definição completa da forma define. Explique cada um dos constituintes da sua definição.

Leia mais

Exercícios da cadeira de Introdução à Programação

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

Leia mais

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

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Exame 13 de Janeiro de 2017 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)

Leia mais

ÍNDICE. PREFÁCIO xv. 3 PROCESSOS GERADOS POR PROCEDIMENTOS Recursão Linear Cálculo de potências Cálculo de factoriais 91

ÍNDICE. PREFÁCIO xv. 3 PROCESSOS GERADOS POR PROCEDIMENTOS Recursão Linear Cálculo de potências Cálculo de factoriais 91 ÍNDICE PREFÁCIO xv 1 NOÇÕES BÁSICAS 1 1.1 Algoritmos 5 1.2 O Desenvolvimento de Programas 8 1.3 Programas em Scheme 11 1.3.1 Sintaxe e semântica 13 1.3.2 Construção de formas 15 1.4 Expressões 16 1.4.1

Leia mais

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

Leia 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 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

Leia mais

Fundamentos de Programação

Fundamentos de Programação Licenciatura em Engenharia Informática e de Computadores Fundamentos de Programação Trabalho para casa 22 de Setembro de 2008 Este trabalho corresponde à instalação, no seu computador, do interpretador

Leia mais

Aula prática 5. Funções Recursivas

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

Leia mais

(Ciência de Computadores) 2005/ Diga quais dos conjuntos seguintes satisfazem o Princípio de Boa Ordenação

(Ciência de Computadores) 2005/ Diga quais dos conjuntos seguintes satisfazem o Princípio de Boa Ordenação Álgebra (Ciência de Computadores) 2005/2006 Números inteiros 1. Diga quais dos conjuntos seguintes satisfazem o Princípio de Boa Ordenação (a) {inteiros positivos impares}; (b) {inteiros negativos pares};

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 29 de Março de 2014 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

Fundamentos da Programação

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

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Segundo Teste 9 de Junho de 2012 9:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 6 páginas com 12 perguntas. A cotação de cada pergunta está assinalada entre

Leia mais

Textos de apoio às aulas práticas. Jaime Ramos, Francisco Miguel Dionísio

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

Leia mais

Exercícios Repetição

Exercícios Repetição Curso de Engenharia de Controle e Automação Disciplina: Informática para a Automação Professor: Marcelo Cendron Exercícios Repetição 1.1 8.3 Exercícios 1. Faça um programa utilizando o comando while, que

Leia mais

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

Leia mais

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved. Programação Folha Prática 5 Lab. 5 Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved. 1. Revisão. 2. Objectivos. 3. Exercícios LAB. 5 5ª semana ESTRUTURAS

Leia mais

Matemática Computacional

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

Leia mais

Universidade Federal de Mato Grosso do Sul. Lista de Exercícios 2

Universidade Federal de Mato Grosso do Sul. Lista de Exercícios 2 Universidade Federal de Mato Grosso do Sul Facom - Faculdade de Computação Programação de Computadores I - Engenharia Ambiental Lista de Exercícios 2 Exercícios usando if 1. Escreva um programa que leia

Leia mais

Fundamentos da Programação

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

Leia mais

Fundamentos da Programação de Computadores

Fundamentos da Programação de Computadores Universidade do Minho Escola de Engenharia Departamento de Sistemas de Informação Fundamentos da Programação de Computadores Licenciatura em Tecnologias e Sistemas de Informação 1º Ano 1º Semestre Ano

Leia mais

PROCURA E PLANEAMENTO

PROCURA E PLANEAMENTO PROCURA E PLANEAMENTO Primeiro Exame 13 de Janeiro de 2007 11:00-13:30 Este exame é composto por 13 páginas contendo 6 grupos de perguntas. Identifique já todas as folhas do exame com o seu nome e número.

Leia mais

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica de Junho de 6 º Semestre Exame sem consulta : 6: h Nome: Número: Escreva o seu número e nome em todas as folhas de exame. O exame

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Uma das características de um engenheiro é a capacidade de resolver problemas técnicos. Qualquer problema de engenharia é resolvido recorrendo a uma sequência de fases: - a compreensão

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 27 de Outubro de 2012 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Segundo Teste 6 de Janeiro de 2010 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 8 páginas com 9 perguntas. A cotação de cada pergunta está assinalada

Leia mais

Conteúdos Ideias-Chave Objectivos específicos. múltiplo de outro número, este é divisor do primeiro.

Conteúdos Ideias-Chave Objectivos específicos. múltiplo de outro número, este é divisor do primeiro. Capítulo 1 Números Naturais Múltiplos e Divisores Se um número natural é múltiplo de outro número, este é divisor do primeiro. Números primos e números compostos Decomposição de um número em factores primos

Leia mais

Fundamentos de Algoritmos - Aula 1

Fundamentos de Algoritmos - Aula 1 Fundamentos de Algoritmos - Aula 1 CIC/UFRGS 2006/1 Números e Aritmética 1 espécies mais populares inteiros positivos inteiros negativos frações, ou racionais reais 5-5 2/3 17/3 #i1.4142135623731 (representação

Leia mais

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

Leia mais

Instruções de repetição

Instruções de repetição Instruções de repetição Estruturas de controlo na linguagem C Repetição (e componentes associadas a qualquer repetição: inicialização, teste da condição de paragem e actualização) Repetição com teste à

Leia mais

Ficha 1 Noções de sequência e decisão em algoritmia

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

Leia mais

Aula 05: - Recursão (parte 1)

Aula 05: - Recursão (parte 1) MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. João Henrique Kleinschmidt Material elaborado pelo prof. Jesús P. Mena-Chalco 3Q-20108 Recursão: Se você ainda não entendeu; Ver: "Recursão".

Leia mais

UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO

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

Leia mais

Lista de Exercícios Estrutura de Repetição

Lista de Exercícios Estrutura de Repetição Universidade Federal Fluminense Instituto de Computação Programação de Computadores III Luciana Brugiolo Gonçalves Lista de Exercícios Estrutura de Repetição E15. Desenvolva um algoritmo para exibir todos

Leia mais

GEQ Prof. Paulo R. Coelho. Lista para prova

GEQ Prof. Paulo R. Coelho. Lista para prova GEQ007 2013 Prof. Paulo R. Coelho Lista para prova 7. Defina uma estrutura empregado para armazenar nome, data de nascimento, idade e salário de um empregado de uma empresa. Leia informações sobre 10 empregados

Leia mais

Desenho de algoritmos

Desenho de algoritmos Folha Prática Desenho de Algoritmos 1 Desenho de algoritmos Resolver as questões que se seguem usando fluxogramas ou uma outra linguagem para algoritmos. A. Instruções/acções de atribuição e leitura/escrita

Leia mais

Instruções de repetição

Instruções de repetição Folha Prática Instruções de repetição 1 Instruções de repetição Repetição (e componentes associadas a qualquer repetição: inicialização, teste da condição de paragem e actualização) Repetição com teste

Leia mais

Fundamentos de Programação Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte 15 de maio de 2018.

Fundamentos de Programação Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte 15 de maio de 2018. 1 INSTRUÇÃO DE SAÍDA Fundamentos de Programação Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte 15 de maio de 2018 Exercícios 1 Instrução de Saída 1. Implementar um programa

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

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

Leia mais

PROCURA E PLANEAMENTO

PROCURA E PLANEAMENTO PROCURA E PLANEAMENTO Primeiro Exame 10 de Janeiro de 2012 9:00-11:30 Este exame é composto por 16 páginas contendo 6 grupos de perguntas. Identifique já todas as folhas do exame com o seu nome e número.

Leia mais

Programação Estruturada

Programação Estruturada Algoritmos e Técnicas - Estruturas de Controle de Fluxo - Programação Estruturada Programação estruturada é a técnica de construir e formular algoritmos de uma forma sistemática. Utilizada para apresentar

Leia mais

1. Múltiplos e divisores

1. Múltiplos e divisores Escola Básica de Santa Marinha Matemática 2009/2010 7º Ano Síntese dos conteúdos Números e operações 1 Múltiplos e divisores Múltiplo de um número é todo o número que se obtém multiplicando o número dado

Leia mais

Faculdade de Computação

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

Leia mais

3) Faça um algoritmo para ler a base e a altura de um triângulo. Em seguida, escreva a área do mesmo. Obs.: Área = ( Base * Altura ) / 2

3) Faça um algoritmo para ler a base e a altura de um triângulo. Em seguida, escreva a área do mesmo. Obs.: Área = ( Base * Altura ) / 2 Exercícios 2: 1) Faça um algoritmo para ler as seguintes informações de uma pessoa: Nome, Idade, Sexo, Peso, Altura, Profissão, Rua, Bairro, Cidade, Estado, CEP, Telefone. 2) Dado as seguintes informações

Leia mais

ESCOLA BÁSICA INTEGRADA DE ANGRA DO HEROÍSMO Plano da Unidade

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

Leia mais

ESTRUTURAS DE REPETIÇÃO - PARTE 2

ESTRUTURAS DE REPETIÇÃO - PARTE 2 AULA 16 ESTRUTURAS DE REPETIÇÃO - PARTE 2 16.1 A seqüência de Fibonacci Um problema parecido, mas ligeiramente mais complicado do que o do cálculo do fatorial (veja as notas da Aula 14), é o do cálculo

Leia mais

Inteligência Artificial

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 Complementares de Lisp Inteligência Artificial Prof Joaquim Filipe Eng.

Leia mais

Fundamentos de Programação

Fundamentos de Programação Licenciatura em Engenharia Informática e de Computadores Fundamentos de Programação Trabalho para casa 25 de Setembro de 2006 Este trabalho corresponde à instalação, no seu computador, do interpretador

Leia mais

1. Faça uma função que recebe por parâmetro o raio de uma esfera e calcula o seu volume.

1. Faça uma função que recebe por parâmetro o raio de uma esfera e calcula o seu volume. Instituto Federal do Pará Professor: Ricardo José Cabeça de Souza Disciplina: - Algoritmos e Construção de Programas LISTA DE EXERCÍCIOS 1. Faça uma função que recebe por parâmetro o raio de uma esfera

Leia mais

Introdução à Ciência da Computação (ICC) PROVA P2 Sexta-feira 1 de Junho de 2001

Introdução à Ciência da Computação (ICC) PROVA P2 Sexta-feira 1 de Junho de 2001 Introdução à Ciência da Computação (ICC) 2001.1 PROVA P2 Sexta-feira 1 de Junho de 2001 Nome do Aluno: Matrícula PUC: Questões P2 Revisão 1 (1.5) 2 (1.5) 3a (1.0) 3b (1.0) 3c (1.0) 3d (1.0) 4 (2.0) Prova

Leia mais

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO LÓGICA DE PROGRAMAÇÃO PROFª. M.Sc. JULIANA H Q BENACCHIO Expressando a lógica em programação Ferramentas gráficas: diagramas e fluxogramas; Ferramentas textuais: pseudocódigos ou metalinguagens (Português

Leia mais

Inteligência Artificial

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

Leia mais

Aula 05: - Recursão (parte 1)

Aula 05: - Recursão (parte 1) MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 3Q-20107 1 Recursão: Se você ainda não entendeu; Ver: "Recursão". Efeito Droste Anuncio

Leia mais

Fundamentos de Arquiteturas de Computadores

Fundamentos de Arquiteturas de Computadores Fundamentos de Arquiteturas de Computadores Cristina Boeres Instituto de Computação (UFF) Conversões Entre Bases Numéricas Material de Fernanda Passos (UFF) Conversões Entre Bases Numéricas FAC 1 / 42

Leia mais

Exercícios de Teoria da Computação Computabilidade

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

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 26 de Outubro de 2013 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

Faculdade de Computação

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

Leia mais

Programação de Computadores I BCC 701 Lista de Exercícios Módulo

Programação de Computadores I BCC 701 Lista de Exercícios Módulo Programação de Computadores I BCC 701 Lista de Eercícios Módulo 02 2013-2 Eercícios de Séries Eercício 29 Seja a seguinte série: 1, 4, 9, 16, 25, 36, Escreva um programa que gere esta série até o N-ésimo

Leia mais

Aulas práticas de Álgebra Linear

Aulas práticas de Álgebra Linear Ficha Matrizes e sistemas de equações lineares Aulas práticas de Álgebra Linear Mestrado Integrado em Engenharia Eletrotécnica e de Computadores o semestre 6/7 Jorge Almeida e Lina Oliveira Departamento

Leia mais

Programação e Computação para Arquitectura 2012/2013

Programação e Computação para Arquitectura 2012/2013 Instituto Superior Técnico Programação e Computação para Arquitectura 202/203 Segundo Teste/Primeiro Exame /0/203 Nome: Número: Escreva o seu número em todas as folhas da prova. O tamanho das respostas

Leia mais

Cálculo Numérico IPRJ/UERJ. Sílvia Mara da Costa Campos Victer ÍNDICE. Aula 1- Introdução. Representação de números. Conversão de números

Cálculo Numérico IPRJ/UERJ. Sílvia Mara da Costa Campos Victer ÍNDICE. Aula 1- Introdução. Representação de números. Conversão de números Cálculo Numérico IPRJ/UERJ Sílvia Mara da Costa Campos Victer ÍNDICE Aula 1- Introdução Representação de números Conversão de números Aritmética de ponto flutuante Erros em máquinas digitais Aula 1 - Introdução

Leia mais

Matemática Discreta. Fundamentos e Conceitos da Teoria dos Números. Universidade do Estado de Mato Grosso. 4 de setembro de 2017

Matemática Discreta. Fundamentos e Conceitos da Teoria dos Números. Universidade do Estado de Mato Grosso. 4 de setembro de 2017 Matemática Discreta Fundamentos e Conceitos da Teoria dos Números Professora Dr. a Donizete Ritter Universidade do Estado de Mato Grosso 4 de setembro de 2017 Ritter, D. (UNEMAT) Matemática Discreta 4

Leia mais

Engenharia Civil. Introdução à Programação

Engenharia Civil. Introdução à Programação Engenharia Civil Introdução à Programação Como se faz um algoritmo computacional? Exemplo Exemplo Será que o algoritmo vai funcionar? Questões: Área de uma circunferência programa area AREA, RAIO: real

Leia mais

BCC201 Introdução à Programação ( ) Prof. Reinaldo Silva Fortes. Prática 05 Modularização

BCC201 Introdução à Programação ( ) Prof. Reinaldo Silva Fortes. Prática 05 Modularização BCC Introdução à Programação (4-) Prof. Reinaldo Silva Fortes Funções: Passagem de parâmetros. Prática 5 Modularização ) Escreva uma função que receba um número inteiro e imprima o mês correspondente ao

Leia mais

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução Métodos de Programação I 2. 20 2.2.8 ESTRUTURAS DE CONTROLO Estruturas de controlo são instruções especiais em Pascal que permitem controlar o fluxo de sequência de instruções, alterando a ordem sequencial

Leia mais

Lista 2 - Bases Matemáticas

Lista 2 - Bases Matemáticas Lista 2 - Bases Matemáticas (Última versão: 14/6/2017-21:00) Elementos de Lógica e Linguagem Matemática Parte I 1 Atribua valores verdades as seguintes proposições: a) 5 é primo e 4 é ímpar. b) 5 é primo

Leia mais

MAT Laboratório de Matemática I - Diurno Profa. Martha Salerno Monteiro

MAT Laboratório de Matemática I - Diurno Profa. Martha Salerno Monteiro MAT 1511 - Laboratório de Matemática I - Diurno - 2005 Profa. Martha Salerno Monteiro Representações decimais de números reais Um número real pode ser representado de várias maneiras, sendo a representação

Leia mais

Funcional IV: listas e funções de ordem superior

Funcional IV: listas e funções de ordem superior Funcional IV: listas e funções de ordem superior Profs. Diogo S. Mar ns e Emilio Francesquini {santana.mar ns,e.francesquini}@ufabc.edu.br MCTA016 - Paradigmas de Programação (Prá ca) 26 de junho de 2018

Leia mais

Maratona de Programação

Maratona de Programação Maratona de Programação 4 de abril de 2016 1 Questões Básicas 1. Faça um algoritmo que peça para o usuário digitar seu nome e, em seguida, escreva seu nome na tela. 2. Faça um algoritmo que leia o nome

Leia mais

PARTE I I: ARITMÉTICA COMPUTACIONAL ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

PARTE I I: ARITMÉTICA COMPUTACIONAL ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR PARTE I I: ARITMÉTICA COMPUTACIONAL ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR Introdução Como representar números em memória? Como representar números negativos e de ponto flutuante?

Leia mais

Introdução à Programação uma Abordagem Funcional

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 boeres@inf.ufes.br CT VII - Sala 34 Departamento de Informática Centro Tecnológico

Leia mais

5. Expressões aritméticas

5. Expressões aritméticas 5. Expressões aritméticas 5.1. Conceito de Expressão O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões

Leia mais

Fundamentos da Programação

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)

Leia mais

Aula 4: Bases Numéricas

Aula 4: Bases Numéricas Aula 4: Bases Numéricas Fernanda Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Material baseado nos slides do prof. Diego Passos Fernanda Passos (UFF) Bases Numéricas

Leia mais

Números Naturais Operações Fundamentais com Números Naturais *Adição; Subtração; Multiplicação e Divisão Exercícios

Números Naturais Operações Fundamentais com Números Naturais *Adição; Subtração; Multiplicação e Divisão Exercícios Curso de Elétrica... Matemática Básica Curso de Elétrica... Matemática Básica Sumário 1_Números Inteiros Números Naturais Operações Fundamentais com Números Naturais *Adição; Subtração; Multiplicação e

Leia mais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

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

Leia mais

LISTA DE ATIVIDADES ...

LISTA DE ATIVIDADES ... LISTA DE ATIVIDADES - Apresentar os quadrados dos números inteiros de 0 a 50. 2- Apresentar o resultado de uma tabuada de um número qualquer. 3- Elaborar um diagrama que apresente o somatório dos valores

Leia mais

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar

Leia mais

Números Inteiros Algoritmo da Divisão e suas Aplicações

Números Inteiros Algoritmo da Divisão e suas Aplicações Números Inteiros Algoritmo da Divisão e suas Aplicações Diferentemente dos números reais (R), o conjunto dos inteiros (Z) não é fechado para a divisão. Esse não-fechamento faz com que a divisão entre inteiros

Leia mais

DISCIPLINA: MATEMÁTICA DISCRETA I PROFESSOR: GISLAN SILVEIRA SANTOS CURSO: SISTEMAS DE INFORMAÇÃO SEMESTRE: TURNO: NOTURNO

DISCIPLINA: MATEMÁTICA DISCRETA I PROFESSOR: GISLAN SILVEIRA SANTOS CURSO: SISTEMAS DE INFORMAÇÃO SEMESTRE: TURNO: NOTURNO DISCIPLINA: MATEMÁTICA DISCRETA I PROFESSOR: GISLAN SILVEIRA SANTOS CURSO: SISTEMAS DE INFORMAÇÃO SEMESTRE: 2018-2 TURNO: NOTURNO ALUNO a): 1ª Lista de Exercícios - Introdução à Lógica Matemática, Teoria

Leia mais

Computação e Programação Exame Época de recurso

Computação e Programação Exame Época de recurso Nome : Número : Computação e Programação 2013-2014 Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas DECivil Exame Época de recurso 29 de Janeiro de 2014 v

Leia mais