Fundamentos da Programação

Documentos relacionados
Fundamentos da Programação

Fundamentos da Programação

Fundamentos da Programação

Fundamentos da Programação

Fundamentos da Programação

Fundamentos da Programação

Fundamentos de Programação

Tuplos e Ciclos Contados

Fundamentos da Programação

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

Fundamentos da Programação

Fundamentos da Programação

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

Fundamentos de Programação

Fundamentos da Programação

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

Fundamentos da Programação

Fundamentos da Programação

Fundamentos de Programação

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

FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m

Estruturação de Procedimentos

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

Exercícios para Fundamentos da Programação

Programação I Aula 3 Primeiros programas

Fundamentos de Programação

Introdução à Programação Aula 3 Primeiros programas

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Algoritmos e Estrutura de Dados Aula 08 Pilhas

Estruturas de Repetição

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Fundamentos de Programação em Python

Aula 3: Algoritmos: Formalização e Construção

Programação imperativa

Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre

Encriptação de Mensagens

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

GEQ Prof. Paulo R. Coelho. Lista para prova

Operadores. Tipo de operadores. Aritméticos. Relacionais. Lógicos. Bit a bit. Cálculos aritméticos: soma, subtracção, multiplicação, divisão, etc.

Exercícios Repetição

TÉCNICO DE INFORMÁTICA - SISTEMAS

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

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

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

ALGORITMOS E ESTRUTURA DE DADOS

Introdução a Computação

Linguagem Haskell. Riocemar S. de Santana

Laços de repetição for, while, do-while

a) Defina uma função para obter o máximo entre dois números

INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2

Tuplos e ciclos contados

MAC2166 Introdução à Computação

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas

RESOLUÇÃO. Computação e Programação (2009/2010-1º Semestre) 1º Teste (11/11/2009) Nome. Número. Leia com atenção os pontos que se seguem:

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Nesta aula... Iteração indefinida. 1 Decisões em Python. 2 Funções lógicas. 3 Recursão. 4 Iteração. 5 Ciclo for ou while?

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

01/08/2011. Tipos de dados Numéricos Alfanuméricos Lógicos. Numéricos. Tipos de dados. Dados Numéricos Inteiros. Dados Numéricos Reais.

Fig. 1: Ilustração de um exemplo de Modularização de um guindaste em suas partes Fonte: Internet

imprimir seus quadrados.

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Fluxogramas e variáveis

Elementos Básicos de Programação

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

Introdução a Programação na Linguagem C.

Conceitos básicos de programação

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Transcriçã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 é um ente imaterial que existe dentro de um computador durante a execução de um programa, e cuja evolução ao longo do tempo é ditada pelo programa. (b) (0.5) Diga o que é um algoritmo. Um algoritmo é uma sequência de passos, bem definida e sem ambiguidades, que, sendo seguida mecanicamente, garante atingir um dado objectivo. (c) (0.5) Diga em que consiste a abstracção procedimental. A abstracção procedimental corresponde a abstrair o modo como uma função realiza o seu trabalho, considerando apenas o que ela faz. 2. Os métodos de passagem de parâmetros correspondem a modos de associar os parâmetros concretos com os parâmetros formais. (a) (0.6) Diga o que são os parâmetros formais e o que são os parâmetros concretos. Os parâmetros formais são os argumentos especificados na definição de uma função e os parâmetros concretos são os valores que são usados na invocação de uma função. (b) (0.7) Explique o funcionamento da passagem por valor. Na passagem por valor, o parâmetro concreto é avaliado e o seu valor é associado com o respectivo parâmetro formal. A passagem por valor é um mecanismo unidireccional, do ponto de chamada para a função. (c) (0.7) Explique o funcionamento da passagem por referência. Na passagem por referência a localização de memória da entidade correspondente ao parâmetro concreto é fornecida ao parâmetro formal. Na passagem por referência o parâmetro concreto e o parâmetro formal partilham a mesma entidade na memória do computador.

Número: Pág. 2 de 6 3. Considere uma instrução de Python, à sua escolha. (a) (0.5) Defina formalmente a sua sintaxe usando a notação BNF. (b) (0.5) Defina a sua semântica. 4. (1.0) Em programação podemos ter erros sintácticos e erros semânticos. Defina cada um deles e dê exemplos. Os erros sintácticos correspondem ao facto de um programa não estar de acordo com as regras definidas para a sua sintaxe, por exemplo a utilização da expressão (+ x y) para somar os valores de x e de y. Os erros semânticos correspondem ao facto de uma dada parte do programa, embora sintacticamente correcta, não corresponder ao significado que o programador pretendia, por exemplo, escrever (x + y) quando se pretendia multiplicar os valores de x e y. 5. Considere a seguinte gramática em notação BNF: idt ::= letras numeros letras ::= letra letra letras numeros ::= num num numeros letra ::= A B C D num ::= 1 2 3 4 (a) (1.0) Diga quais são os símbolos terminais e não terminais desta gramática. Símbolos terminais: A, B, C, D, 1, 2, 3, 4 Símbolos não terminais: idt, letras, numeros, letra, num (b) Quais das seguintes frases pertencem à linguagem definida pela gramática? No caso de não pertença, justifique a sua resposta. i. (0.2) ABCD Não pertence, dado que não apresenta nenhum símbolo correspondente a numeros. ii. (0.2) ACDE Não pertence, dado que não apresenta nenhum símbolo correspondente a numeros. iii. (0.2) 1CD Não pertence, dado que o seu primeiro símbolo não corresponde a letras. iv. (0.2) A123CD Não pertence, dado que o seus dois últimos símbolos não correspondem a numeros. v. (0.2) AAAAB12 Pertence

Número: Pág. 3 de 6 (c) (1.5) Escreva uma função em Python, chamada reconhece, que recebe como argumento uma cadeia de caracteres e devolve verdadeiro se o seu argumento corresponde a uma frase da linguagem definida pela gramática e falso em caso contrário. Por exemplo, >>> reconhece( A1 ) True >>> reconhece( ABBBBCDDDD23311 ) True >>> reconhece( ABC12C ) False def reconhece(frase): i = 0 while i < len(frase)-1 and \ frase[i] in [ A, B, C, D ]: i = i + 1 if i > 0: # foi encontrada pelo menos uma letra inicio_nums = i while i <= len(frase)-1 and \ frase[i] in [ 1, 2, 3, 4 ]: i = i + 1 if i == len(frase): return True return False return False 6. (2.0) Escreva uma função que não seja recursiva, soma_digitos_pares, que recebe como argumento um número inteiro não negativo n, e devolve a soma dos dígitos pares de n. Por exemplo, >>> soma_digitos_pares(0) 0 >>> soma_digitos_pares(12426374856) 32 def soma_digitos_pares(num): res = 0 while num!= 0: digito = num % 10 if digito % 2 == 0: res = res + digito num = num // 10 return res 7. (a) (2.0) Escreva em Python, uma função que não seja recursiva chamada inverte que recebe uma cadeia de caracteres e devolve uma cadeia de caracteres correspondendo à cadeia inicial escrita de trás para a frente. Por exemplo:

Número: Pág. 4 de 6 >>> inverte( Python ) nohtyp def inverte(str): res = for i in range(len(str)-1, -1, -1): res = res + str[i] return res (b) (1.5) Recorrendo à função inverte da alínea anterior, escreva uma função chamada reflecte que recebe uma cadeia de caracteres e devolve uma cadeia de caracteres correspondente à cadeia recebida, seguida de um espaço em branco, seguida da inversão da cadeia de caracteres inicial. Por exemplo, reflecte( Python ) Python nohtyp def reflecte(str): return str + + inverte(str) 8. (2.0) Um número d é divisor de n se o resto da divisão de n por d for 0. Escreva uma função com o nome divisores que recebe um número inteiro positivo n, e tem como valor uma lista contendo todos os divisores de n. Se o argumento não corresponder a um inteiro positivo, a sua função deve gerar um erro. Por exemplo, >>> divisores(30) [1, 2, 3, 5, 6, 10, 15, 30] >>> divisores(6.5) ValueError: divisores: argumento deve ser inteiro positivo def divisores(n): if not(isinstance(n, (int, float))) or n <= 0: raise ValueError ( divisores: arg deve ser inteiro positivo ) res = [] for i in range(1, n+1): if n % i == 0: res = res + [i] return res 9. (2.0) Suponha que a função sqrt não existia em Python. 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:

Número: Pág. 5 de 6 Passo Aproximação Nova aproximação 1 3 2 2 2 1.75 3 1.75 1.732142857 4 1.732142857 1.73205081 5 1.73205081 1.732050808 6 1.732050808 1.732050808 Considerando que uma primeira aproximação grosseira para x pode ser x, escreva uma função em Python para calcular a raiz quadrada de um número não negativo. A sua função deve validar o seu argumento. Utilize a estrutura de blocos. def raiz(x): def calcula_raiz(x, palpite): def bom_palpite(x, palpite): return abs(x - palpite * palpite) < delta def novo_palpite(x, palpite): return (palpite + x / palpite) / 2 while not bom_palpite(x, palpite): palpite = novo_palpite(x, palpite) return palpite delta = 0.001 if x >= 0: return calcula_raiz (x, 1) raise ValueError ( raiz, argumento negativo ) 10. (1.5) A sequência de Racamán, 0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24,... é uma sequência de números inteiros não negativos, definida do seguinte modo: (1) o primeiro termo da sequência é zero; (2) para calcular o n-ésimo termo, verificase se o termo anterior é maior do que n e se o resultado de subtrair n ao termo anterior ainda não apareceu na sequência, neste caso o n-ésimo termo é dado pela subtracção entre o (n 1)-ésimo termo e n; em caso contrário o n-ésimo termo é dado pela soma do (n 1)-ésimo termo com n. Ou seja, r(n) = 0 se n = 0 r(n 1) n se r(n 1) > n (r(n 1) n) {r(i) : 1 < n} r(n 1) + n em caso contrário Escreva uma função em Python que recebe um inteiro positivo, n, e devolve um tuplo contendo os n primeiros elementos da sequência de Racamán. Por exemplo: >>> seq_racaman(15) (0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9)

Número: Pág. 6 de 6 def seq_racaman(n): def racaman(n): # recorre à variável livre seq_r if n == 0: return 0 elif seq_r[n-1] > n and \ not seq_r[n-1] - n in seq_r: return seq_r[n-1] - n return seq_r[n-1] + n seq_r = () for i in range(n): seq_r = seq_r + (racaman(i), ) return seq_r