Primeira Prova de Linguagens de Programação - DCC024B -
|
|
|
- Maria Klettenberg Natal
- 7 Há anos
- Visualizações:
Transcrição
1 Primeira Prova de Linguagens de Programação - DCC024B - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta. Quando terminar, não entregue nada além do caderno de provas para o instrutor. Quando escrever código, a sintaxe correta é importante. Cada estudante tem direito a fazer uma pergunta ao instrutor durante a prova. Traga o caderno de provas quando vier à mesa do instrutor. A prova termina uma hora e quarenta minutos após seu início. Seja honesto e lembre-se: você deu sua palavra de honra. Alguns conselhos: Escreva sempre algo nas questões, a fim de ganhar algum crédito parcial. Se não entender a questão, e já tiver gasto sua pergunta, escreva a sua interpretação da questão junto à resposta. A prova não é difícil, ela é divertida, então aproveite! Tabela : Pontos acumulados (para uso do instrutor) Questão Questão 2 Questão 3 Questão 4 Questão 5 Questão 6
2 . Existe um mecanismo de passagem de parâmetros chamado passagem por valor-resultado. De acordo com esse mecanismo, os parâmetros reais são avaliados, e copiados para os parâmetros formais logo que a função é chamada. Quando a função termina, os valores dos parâmetros formais são copiados de volta para os parâmetros reais. A figura abaixo ilustra essa semântica: void swap (val-res int a, val-res int b) { int tmp = a; a = b; b = tmp; int x = 0; int y = ; swap(a = x, b = y) int tmp = a; a = b; b = tmp; x = a, y = b; printf("%d, %d\n", a, b) Quando a função swap é chamada, os parâmetros reais são copiados para os parâmetros formais. Quando a função swap retorna, os parâmetros formais são copiados de volta para os parâmetros reais. (a) ( Ponto) O que será impresso pela chamada printf vista acima? (b) (9 Pontos) Assuma que a linguagem C possua chamadas por valor-resultado, e por referência. Parâmetros passados por valor-resultado devem ser prefixados com a palavra chave val-res. Parâmetros passados por referência devem ser prefixados com a palavra chave ref, conforme visto nos programas logo abaixo: Passagem por valor-resultado: void max (int x, int y, val-res int r) { r = x; if (y > x) { r = y; Passagem por referência: void max (int x, int y, ref int r) { r = x; if (y > x) { r = y; Do ponto de vista prático, existe alguma diferença semântica entre essas duas formas de passagem de parâmetros? Em caso negativo, explique porque elas sempre geram resultados iguais. Em caso positivo, demonstre a sua resposta com um trecho de código nessa linguagem C estendida. Escreva a implementação de sua função, explique quais parâmetros são passados de quais formas, mostre o código da chamada, e escreva o resultado esperado assumindo passagem por referência e por valor-resultado. 2
3 2. Essa questão refere-se à função traverse abaixo, implementada em Python: def traverse(v): if len(v) >= : print(v[0]) if len(v) > : traverse(v[]) (a) (2 Pontos) A função traverse possui cauda rasa ou não? Justifique a sua resposta. (b) (4 Pontos) Considere as duas chamadas à função traverse feitas na figura abaixo. Em (a) a função termina, e imprime duas vezes. Em (b) a função não termina. Qual a diferença entre as duas estruturas, a e b, que justifiquem esse comportamento? (a) >>> a = [] >>> a = [, a] >>> traverse(a) (b) >>> b = [] >>> b.append(b) >>> traverse(b)... (c) (2 Pontos) Considere um subconjunto de SML que possua somente tuplas, listas, tipos algébricos, funções (mas não closures) e os cinco tipos primitivos: int, real, bool, char e string. Como você poderia construir uma estrutura como aquela vista em 2.b(a)? Se tal não for possível, você deve justificar a sua resposta. Doutro modo, você deve escrever o código que constrói aquela estrutura. (d) (2 Pontos) Responda a mesma questão que 2.c, mas desta vez com relação à estrutura b, criada com os comandos b = []; b.append(b). 3
4 3. (0 Pontos) Definimos uma árvore em Prolog via dois predicados. node(v, T, T2) representa um nodo da árvore que guarda o valor V, e possui sub-árvores T e T2. E leaf representa um nodo folha da árvore. A título de exemplo, os predicados abaixo somam uma árvore de inteiros: sum(node(v, T, T2), VV) :- sum(t, V), sum(t2, V2), VV is V + V + V2. sum(leaf, 0). Nesta questão você deve criar um predicado search(t, L), que seja verdade quando existir um caminho em T que seja equivalente à lista L. Por exemplo, esse predicado retorna seis respostas para a árvore node(a, node(b, node(c, leaf, leaf), leaf), node(d, leaf, node(e, leaf, leaf))), conforme pode ser visto na figura abaixo: b a d search(node(a, node(b, node(c, leaf, leaf), leaf), node(d, leaf, node(e, leaf, leaf))), L). L = [a,b,c]? ; c leaf leaf e [a, b] [a, d] leaf leaf leaf leaf [a, d, c] [a, d, c] [a, b, c] [a, b, c] L = [a,b,c]? ; L = [a,b]? ; L = [a,d]? ; L = [a,d,e]? ; L = [a,d,e] 4
5 4. Esta questão refere-se ao algoritmo merge, escrito em Portugol logo abaixo: merge (vetor de inteiros l, vetor de inteiros l 2 ) seja s o tamanho de l e seja s 2 o tamanho de l 2 seja l um vetor vazio de tamanho s + s 2 seja i, i e i 2 inteiros iguais a zero enquanto i for menor que a soma (s + s 2 ) faça l[i] = l [i ] i = i + i = i + l[i] = l 2 [i 2 ] i 2 = i 2 + (a) (3 Pontos) Escreva esse algoritmo em SML. Perceba que SML a parte vista em aula não possui estruturas de acesso aleatório. Assim, você terá de implementar um algoritmo que tenha propósito semelhante à merge, mas que use listas. (b) (3 Pontos) Implemente o mesmo algoritmo merge, mas desta vez em Prolog. questão anterior, use listas para representar vetores. Assim como na (c) (4 Pontos) Agora, implemente aquele algoritmo em Python. 5
6 5. Essa questão refere-se ao programa abaixo, que foi implementado na linguagem de programação C++: int foo(int n) { if (n < 2) { return ; else { const int x = n - ; printf("endereco = %u\n", &x); return n * foo(x); int main() { foo(3); (a) (3 Pontos) O endereço que é impresso na linha 6 é sempre o mesmo em cada uma das duas chamadas de foo que ocorrerão nesse programa? Fundamente sua resposta com base na área de alocação: estática, pilha ou heap usada para armazenar a variável x. (b) (2 Pontos) caso substituíssemos a linha 6 pelo comando x = x - o programa não estaria correto, pois estaríamos tentando atualizar uma constante. Quem faz a verificação ou prevenção desse erro? O compilador, o sistema operacional ou a arquitetura? (c) (3 Pontos) Explique como o ator escolhido acima (compilador, sistema operacional ou arquitetura) impede que constantes sejam sobre-escritas em C++. (d) (2 Pontos) Reescreva a função foo para que ela passe a ser uma função de cauda rasa. 6
7 6. Duas das mais antigas linguagens de programação ainda em uso hoje são Fortran e Lisp. Fortran apresenta um modelo de programação mais imperativo, enquanto Lisp tende ao lado mais declarativo dessa taxonomia. Hoje, a maior parte das linguagens de programação em largo uso são mais parecidas com Fortran que Lisp. Enquanto linguagens imperativas, elas permitem que programas sejam descritos como algoritmos. Algoritmos são sequências de passos que descrevem como o estado do computador deve ser alterado. Embora as linguagens declarativas nunca tenham alcançado a popularidade de suas irmãs imperativas, hoje podemos observar que várias linguagens de programação modernas herdaram algumas de suas características. Nesta questão revisaremos algumas dessas características. (a) (3 Pontos) Escreva um trecho de código em Java, que use algum conceito de linguagem de programação introduzido por alguma linguagem funcional. (b) (3 Pontos) Agora, escolha uma funcionalidade de Python que foi introduzida por Lisp, e ilustre-a com um trecho de código. (c) (2 Pontos) Escolha agora, uma segunda inovação de Lisp, diferente daquela escolhida na questão 6.b, e indique três linguagens diferentes que a usem. Note que a propriedade ou capacidade de Lisp escolhida nesta questão não pode estar presente em Fortran. (d) (2 Pontos) Finalmente, aponte uma terceira capacidade de Lisp (diferente daquelas vistas em 6.b e 6.c), também não presente em Fortran, que seja amplamente encontrada em linguagens de programação modernas. Indique três linguagens que façam uso desta característica de Lisp. 7
Prova Final de Linguagens de Programação - DCC024B -
Prova Final de Linguagens de Programação - DCC024B - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
Primeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação
Primeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem
Primeira Prova de Linguagens de Programação - DCC024 -
Primeira Prova de Linguagens de Programação - DCC024 - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
LISTA DE EXERCÍCIOS MÊS 04
São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Lista de Linguagens de Programação 19
Lista de Linguagens de Programação 19 Nome: Matrícula: 1. A passagem de parâmetros por expansão de macros é um mecanismo bastante utilizado em C. Um exemplo é dado abaixo: #define SUM(X, Y) (X) + (Y) int
Trabalho Linguagem e Programação de Compiladores
Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:
PLANO DE UNIDADE DIDÁTICA- PUD
Professor: Marcus Vinícius Midena Ramos Coordenação: Ricardo Argenton Ramos Data: 03/08/2010 Página: 1 de 5 EMENTA: Conceitos básicos de linguagens. Histórico, classificação e principais aplicações de
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas
Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas 03/03/2010 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa
Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação
Ederson Luiz da Silva Ciência da Computação Algoritmos e Programação Linguagem de programação Linguagem de Programação Linguagem de máquina http://www.assemblyprogressivo.net/p/curso.html Linguagem de
Prova Final de Linguagens de Programação - DCC024 -
Prova Final de Linguagens de Programação - DCC024 - Ciência da Computação Ao concordar participar da prova, você dá sua palavra de honra que suas respostas são fruto único do seu trabalho. Você pode consultar
PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick [email protected], [email protected] Roteiro Funções Escopo de Variáveis Variáveis Globais
TCC 00308: Programação de Computadores I Introdução
TCC 00308: Programação de Computadores I 2017.1 Introdução Processo de resolução de problemas Definição dos requisitos do problema (fazer o programa certo) Entradas Cálculos Casos especiais Saídas Desenvolvimento
Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?
Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Programação de Computadores 1 de 28 Funções Na Programação, funções são conjuntos
Conceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1
Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação Lista de Exercícios 1 1. O programa seguinte tem vários erros em tempo de compilação. Encontre-os. Main() int a=1; b=2,
MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação
MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação Prof. João Henrique Kleinschmidt Material elaborado pelo Prof. Jesús P. Mena-Chalco 3Q-2018 Linguagens de programação
Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto
Sub-rotinas em C Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto Agenda Sub-rotinas: Função e Procedimentos A função main Variáveis globais e locais Escopo de variáveis Passagem
Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
Linguagens de Programação Conceitos e Técnicas. Amarrações
Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador
Algoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes [email protected] 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Algoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Nomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Algoritmos e Programação
Algoritmos e Programação Aula 9 Subalgoritmos, funções e passagem de parâmetros Profa. Marina Gomes [email protected] 22/06/2017 Engenharia de Computação - Unipampa 1 Modularização Facilita a
Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Subprogramas Subprograma: programa que auxilia o programa principal na realização de uma determinada
Nomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Aula 3: Algoritmos: Formalização e Construção
Aula 3: Algoritmos: Formalização e Construção Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Algoritmos: Formalização e Pseudo-Código Programação de
Programação Estruturada
Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada
Alocação Dinâmica em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara
1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x;
PONTEIROS 1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x; 2.Os programas (trechos de código) abaixo possuem
Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses
1 3 Estrutura de dados 2 Ponteiro Ponteiro 2 O ponteiro é um tipo de dado como int, char ou float. A diferença do ponteiro ponteiro guardará um endereço de memória. Por meio deste endereço pode-se acessar
ponteiros INF Programação I Prof. Roberto Azevedo
ponteiros INF1005 -- Programação I -- 2016.1 Prof. Roberto Azevedo [email protected] ponteiros tópicos o que são ponteiros operadores usados com ponteiros passagem de ponteiros para funções referência
Faculdade de Computação
Faculdade de Computação Programação Procedimental 1 o Laboratório de Programação C Prof. Cláudio C. Rodrigues 1. Introdução O objetivo desta aula prática é exercitar o uso de variáveis de vários tipos
MC-102 Aula 13. Instituto de Computação Unicamp. 29 de Setembro de 2016
MC-102 Aula 13 Funções I Instituto de Computação Unicamp 29 de Setembro de 2016 Roteiro 1 Funções Definindo uma função Invocando uma função 2 O tipo void 3 A função main 4 Protótipo de funções 5 Funções
FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara
Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos
Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO
TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO Ponteiros Definição Variável: área de memória que armazena dados de um certo tipo. Na memória, toda variável possui um endereço. Um Ponteiro é uma variável especial
Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.
Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função. Funções e estruturas básicas 1. Faça uma função que recebe a idade de uma
Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença
C++ Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença Primeiro Programa //Primeiro Programa C++ #include int main() { std::cout
Fundamentos de Programação
Fundamentos de Programação CP41F Aula 2 Prof. Daniel Cavalcanti Jeronymo Conceito de algoritmo. Raciocínio lógico na construção de algoritmos. Estrutura de algoritmos. Universidade Tecnológica Federal
