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 Lectivo 2008/2009 Projecto 01 Data de Lançamento: 6 de Outubro de 2008 Data Limite de Entrega: 13 de Outubro de 2008 (12:00) Prof. Filipe de Sá-Soares Outubro de 2008
Observações ˆ A resolução do Projecto pode ser efectuada individualmente ou em grupo. No caso de resolução por grupo, os grupos de trabalho devem ser compostos por dois elementos. Adicionalmente, estabelece-se que os grupos sejam formados por elementos pertencentes ao mesmo turno PL. ˆ Por norma, a resolução do Projecto deve ser auto-contida, ou seja, os alunos não devem colaborar uns com os outros na resolução dos problemas propostos, excepto no caso da resolução em grupo, em que os alunos que formam o grupo colaboram entre si na resolução do projecto. Se, a título excepcional, ocorrerem colaborações com outros alunos para a resolução dos problemas propostos, tal deve ser explicitamente indicado nos resultados submetidos (ver ponto adiante). ˆ A submissão dos resultados alcançados na resolução do Projecto deve ser realizada via moodle, até à data e hora indicadas anteriormente. Cada aluno deverá submeter o seu trabalho, quer o mesmo tenha sido elaborado individualmente quer em grupo. Não serão aceites submissões para além dessa data/hora. ˆ Os resultados a submeter devem constar de um ficheiro de texto (formato ASCII). O nome do ficheiro deve ser composto pelos seguintes campos: identificação do projecto (na forma Pii, em que ii é o número do projecto), caracter lowline, números de aluno dos seus autores, separados por lowline, e extensão.txt. Para o caso de projectos resolvidos de forma individual, apenas deverá ser indicado um número de aluno (correspondente ao aluno que o resolveu). O corpo desse ficheiro principiará com a identificação do projecto, seguindo-se a indicação do(s) número(s) e nome(s) do(s) aluno(s) que resolveu(ram) os problemas propostos e de eventuais colaborações (números e nomes). Depois, deverão surgir as respostas aos problemas propostos, com a devida sinalização da questão a que se refere cada resposta, e sem alteração de ordem (caso não responda a uma questão, não deixe de sinalizar a identificação dessa questão, apesar de não fornecer resposta). Seguidamente, dá-se um exemplo do início de um desses ficheiros de texto, cuja designação deveria ser P01 12345 12346.txt. Note que nesse exemplo, não foi dada resposta à questão A.1.iii e não existiram colaborações extra-grupo. Projecto 01 Autores 12345 - Filipe de Sá-Soares 12346 - Miguel Abrunhosa de Brito Colaboraç~oes sem colaboraç~oes A.1.i - 25 A.1.ii - erro A.1.iii - A.1.iv - (define a 101). 2
Questões A. Introdução à Computação 1. Distinga entre conhecimento declarativo e conhecimento imperativo. 2. Explique as diferenças existentes entre os conceitos de procedimento e processo computacionais. 3. Explique o que se entende por vocabulário, sintaxe e semântica de uma linguagem. 4. Enumere as principais ferramentas para a gestão da complexidade em sistemas de larga escala. 5. Uma linguagem de programação pode caracterizar-se pela apresentação das suas primitivas, meios de combinação e meios de abstracção. Explique o que entende por primitiva, meio de combinação e meio de abstracção. B. Introdução ao Scheme 1. Indique o ano de criação da linguagem de programação Scheme e os apelidos dos seus dois autores. 2. O Scheme é uma dialecto de que linguagem de programação? 3. Que tipo de notação é utilizado em Scheme? 4. Forneça exemplos de primitivas, meios de combinação e meios de abstracção disponibilizados por Scheme. 5. Esclareça a sintaxe e a semântica de uma combinação Scheme. 6. É comum abreviar-se o funcionamento do interpretador Scheme por intermédio da sigla REPL. Expanda essa sigla e explique-a. C. Introdução ao DrScheme 1. Explique o que se entende por ambiente integrado de programação. 2. Nomeie as duas janelas principais do DrScheme e explique para que servem. 3. Indique os passos a seguir no DrScheme para se alterar a língua de interacção com o DrScheme. 4. Indique os passos a seguir no DrScheme para se alterar o nível de linguagem que o interpretador utiliza. 5. Indique os passos a seguir no DrScheme para se aplicar o Stepper. D. Avaliação de Expressões Scheme Simples 1. Quais os valores das seguintes expressões Scheme? i. 55 ii. (* 3 6) iii. (- 2 9) iv. (- 2-9) v. (- (+ 5 11) (/ 9 (+ 1 2))) 2. Considere que as seguintes expressões Scheme são avaliadas pela ordem apresentada. Quais os valores de cada uma das expressões? (Pode responder erro, procedimento ou indefinido quando apropriado). 3
i. (define x (+ 5 3)) ii. x iii. (+ x 4) iv. x v. (define x 13) vi. x E. Validação de Expressões 1. Quais das seguintes expressões são expressões Scheme válidas sob o ponto de vista sintáctico? i. 8 + 2 ii. (8 + 2 iii. (8 + 2) iv. (8 2 +) v. (+ 8 2) vi. -4 vii. - 4 viii. (- 4) ix. (+ (* 3 5) (/ 21 7) x. (define x) 2. Quais das seguintes expressões são expressões Scheme válidas sob o ponto de vista sintáctico e semântico? i. 3 ii. * iii. (*) iv. (+ 4 5) v. (1 2 3) vi. (9-6) vii. 3.33 viii. (/ 3.33 1.11) ix. Após (define b 2), o valor de b x. Após (define b 2), o valor de (+b 4) xi. Após (define b 2), o valor de (+ b 4) xii. ((+ 1 2)) xiii. (+ -10-20) xiv. (define 4 3) F. Definições Scheme Considere que as seguintes expressões Scheme são avaliadas sequencialmente. Indique o valor de cada uma das expressões. 1. (define c (+ (* 5 6) 2)) 2. c 3. (- c 2) 4
4. c 5. (define r 2) 6. (define s (+ r 1)) 7. s 8. (define r 3) 9. s 10. (define r s) 11. r 12. s G. Introdução aos Procedimentos Scheme 1. Qual a forma geral dos procedimentos Scheme? 2. Distinga entre parâmetro formal e argumento. 3. Quais as directivas a seguir na abstracção de processos computacionais? H. Avaliação de Procedimentos Scheme Considere que se definiu a seguinte expressão Scheme: (define (dobro x) (* x 2)) Depois, avaliaram-se as seguintes expressões Scheme de forma sequencial. Indique o valor de cada uma das expressões. 1. (dobro 3) 2. (dobro -3) 3. (dobro (+ 4 7)) 4. (dobro (* (- 10 8) (/ 6 2))) 5. (dobro (dobro (dobro (dobro 2)))) I. Escrita de Procedimentos Simples em Scheme 1. Escreva um procedimento Scheme que, dado um valor x, retorne o triplo desse valor (apresente duas versões para o procedimento pedido). 2. Escreva um procedimento Scheme que, dado um valor y, determine o valor da expressão de terceira ordem 4y 3 2y 2 + 7y 3 (use de modularidade). 3. Escreva um procedimento Scheme que, dados dois valores x e y, determine o valor da expressão de segunda ordem 3xy 2 + x 2 y 3x 6y + 9 (use de modularidade). J. Modelo de Substituição 1. Indique as regras de avaliação que compõem o Modelo de Substituição para o caso de objectos auto-avaliativos, abstracções por intermédio de define, aplicação de procedimentos e formas especiais cond e if. 5
2. Considere que se definiram os seguintes dois procedimentos Scheme: (define (maxi a b) (if (> a b) a b)) (define (soma-maxi a b) (maxi (+ a b) (- a b))) Aplicando o Modelo de Substituição, indique todas as reduções a que o interpretador Scheme procede para avaliar a expressão (soma-maxi 3-4). Escreva erro caso ocorra um erro em algum dos passos da avaliação. 3. Considere que se avaliou a seguinte definição Scheme: (define (unid a b) (* (/ a b) (/ b a))) Aplicando o Modelo de Substituição, indique todas as reduções a que o interpretador Scheme procede para avaliar a expressão (unid (+ 1-1) 1). Escreva erro caso ocorra um erro em algum dos passos da avaliação. K. Introdução às Expressões Condicionais em Scheme 1. Indique a forma geral da forma especial cond. 2. Explique o que se entende por predicado, por consequente e por alternativa. 3. Indique a forma geral da forma especial if. L. Avaliação de Expressões Condicionais em Scheme 1. Considere o seguinte fragmento de código: (cond ((< x -10) 1) ((< x -50) 2) ((< x 0) 3) ((> x 15) 4) (else 0)) Para cada um dos seguintes valores de x, indique o valor que resulta de se avaliar o cond anterior: i. para x igual a 7 ii. para x igual a -20 iii. para x igual a -50 iv. para x igual a -80 v. para x igual a -1 vi. para x igual a 100 vii. para x igual a 4 2. Para as seguintes expressões Scheme, indique o número de predicados que são avaliados. Considere x igual a -5 e y igual a 5. i. (and (< x 4) (= x 5) (> y 2) (< y -5) (= x y)) ii. (or (< x 4) (= x 5) (> y 2) (< y -5) (= x y)) iii. (and (< x y) (> 4 x) (< 3 y)) 3. Para as seguintes expressões Scheme, indique o resultado da sua avaliação. Considere x igual a -5 e y igual a 5. i. (not (= x -5)) ii. (not (not (> y 0))) 6
iii. (and (or (<= x -5) (> 6 y)) (and (>= y x) (not (= (* x -2) (/ 20 y))))) M. Tradução de Expressões Condicionais em Scheme 1. Traduza para Scheme as seguintes expressões escritas em linguagem matemática: i. 12 < x ii. 10 < x 40 iii. a b c iv. p (q (r s)) 2. Traduza para linguagem matemática a seguinte expressão Scheme (sugestão: recorra à notação x para designar o módulo de x). ((if (> b 0) + -) a b) 3. Escreva o seguinte fragmento de código Scheme usando cond em vez de if: (if (< x -4) (* x -4) (if (< x 5) (+ x x) (* x 3))) N. Escrita de Procedimentos com Expressões Condicionais em Scheme 1. Escreva um procedimento Scheme que, dados dois argumentos, retorne a raiz quadrada do primeiro argumento se o primeiro argumento for maior que o segundo, caso contrário deverá retorna o quadrado do segundo argumento. 2. Escreva um procedimento Scheme que, dados dois números, retorne o menor deles (nota: não use o procedimento primitivo Scheme min). 3. Escreva um procedimento Scheme que, dados três números, retorne o menor deles (nota: não use o procedimento primitivo Scheme min). Prova de Avaliação Experimental ˆ Para os alunos avaliados segundo o perfil P1 ou segundo o perfil P2, a prova de avaliação experimental do presente projecto decorrerá na semana que se inicia a 13 de Outubro de 2008, tendo lugar na sessão PL em que o aluno se encontrar inscrito. ˆ A realização da prova de avaliação experimental deverá ser efectuada com recurso ao moodle, pelo que cada aluno deve garantir previamente o correcto acesso à sua conta na comunidade moodle FPC, sob pena de não poder realizar a prova. ˆ Quando se apresentarem à prova de avaliação experimental, os alunos devem ser capazes de responder às questões do presente projecto sem necessitarem de recorrer ao interpretador Scheme. ˆ A não comparência de um aluno avaliado segundo o perfil P1 ou segundo o perfil P2 à prova de avaliação experimental traduz-se na atribuição de uma classificação de 0 (zero) valores nessa prova. 7