Lista de Linguagens de Programação 19

Documentos relacionados
Linguagens de Programação Conceitos e Técnicas. Amarrações

Classificação das linguagens de programação

Array em Java. Figura 1 - Exemplo de um array de inteiros

Estrutura de Dados Funções e Procedimentos

Vetores Unimensionais

Programação: Vetores

Tipos Abstratos de Dados

Métodos e Procedimentos. Prof. Jesus José de Oliveira Neto

Faculdade de Computação

Programação Java (nível intermediário) 4. Polimorfismo

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Sintaxe da linguagem Java

Lição 4 Fundamentos da programação

Linguagem e Técnicas de Programação

TCC 00308: Programação de Computadores I Introdução

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon

Overloading e Overriding - parte 1

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Material preparado pela profa Silvana Maria Affonso de Lara

Orientação a Objetos AULA 09

Tipos Abstratos de Dados

Introdução ao Pascal. Computação I. Níveis de Linguagens de Programação. Níveis de Linguagens de Programação. Como um Programa é Executado?

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Estruturas de Repetição

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

AULA 6 - ARRAYS. Array de 10 elementos

Paradigmas de Linguagens

Estruturas de Dados Encadeadas

Programação Orientada a Objetos

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;

Python - Variáveis e expressões

Lição 7 Array em Java

INF 1620 P3-29/06/04 Questão 1 Nome:

Rotinas, Modos e Tipos de Passagem de Parâmetros

Orientação a Objetos e Java

Generics - Java. Fernando Santos. Programação Orientada a Objetos

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Strings e Arrays POO

Pseudolinguagem. BC0501 Linguagens de Programação t2 Aula 11. Prof. Alysson Ferrari ufabc.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

#include <stdio.h> void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } main () {

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Capítulo 7. Expressões e Sentenças de Atribuição

Linguagem C: Introdução

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Programação Orientada a Objetos (DPADF 0063)

Linguagens de Programação 2 Amarrações

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Introdução à Programação. Vanessa Braganholo

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

COMPORTAMENTOS - Observações

Olá pessoal, Hoje vamos entender os conceitos sobre linguagem de programação. Definição, tipos de linguagens e as linguagens mais utilizadas

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

Introdução à Programação

Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Classes e Objetos. Sintaxe de classe em Java

Fundamentos de Programação. Diagrama de blocos

Linguagens de programação. Introdução ao C (continuação)

Subprogramas. (ou Sub-rotinas) em C: Procedimentos e Funções. 2015/1 Programação Básica de Computadores (INF 09325)

Aula 08 Relacionamento entre Objetos. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Vetores Unimensionais

INF P3-23/06/07 Questão 1 Nome:

Fundamentos da programação Parte - 1

Transcrição:

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 main(int argc, char** argv) { printf("sum = %d\n", SUM(argc, argv[0][0])); (a) Macros são expandidas por um componente do compilador chamado pré-processador. Escreva o código do programa acima, após o pré-processamento. (b) Um dos problemas com expansão de macros é a chamada captura de variáveis. Ilustre este problema com um exemplo. (c) Um outro problema é a múltipla avaliação de parâmetros, isto é, o fato de parâmetros serem avaliados múltiplas vezes pode dar ao programa um significado diferente da intenção do programador. Escreva um exemplo em C que prove que parâmetros de macros são avaliados múltiplas vezes. 1

2. Consider a classe abaixo, implementada em Java: class MyInt { int i; MyInt(int k) {i = k; void swap1(myint j) { MyInt tmp = j; j = new MyInt(i); i = tmp.i; void swap2(myint j) { MyInt tmp = j; j.i = i; i = tmp.i; void swap3(int j) { int tmp = j; j = i; i = tmp; Cada uma das próximas questões é completamente independente uma das outras. Estas questões devem ser respondidas com base nas definições abaixo: MyInt m1 = new MyInt(3); MyInt m2 = new MyInt(4); (a) Qual é o valor de m1.i e m2.i depois da chamada m1.swap1(m2)? (b) Qual é o valor de m1.i e m2.i depois da chamada m1.swap2(m2)? (c) Qual é o valor de m1.i e m2.i depois da chamada m1.swap3(m2)? (d) Qual é a política 1 que java adota para passar tipos primitivos (int, float, char, etc) como parâmetros de métodos? (e) Qual é a política que java adota para passar objetos como parâmetros de métodos? 1 As políticas existentes são passagem por: valor, referência, nome, expansão de matro, retorno, valorretorno e avaliação preguiçosa 2

3. Neste exercício você criará uma class MySet em Python que representa um conjunto de dados. Existem muitas formas de se implementar esta classe, mas para este exercício a classe será implementada como uma árvore binária de busca. Lembra aquela lista em que você implementou uma árvore assim em SML? Pois é... A árvore não precisa ser balanceada. Além da classe MySet, você precisará criar mais algumas classes, para representar os nodos da árvore, por exemplo. A classe MySet deverá ter os seguintes componentes: Um construtor, de modo que MySet() cria objetos que representam o conjunto vazio. Um método find tal que x.find(n) retorne True se n estiver presente em x, e False caso contrário. Ainda bem que a nossa árvore é uma árvore binária de busca, não é? Um método add, de tal forma que x.add(n) não retorne nenhum valor, mas tenha o efeito colateral de inserir n no conjunto x. Se n já estiver em x, então nada deve ser modificado. Um método str (), tal que x. str () retorne uma string representando o conteúdo ordenado do conjunto x. Por exemplo, caso x represente o conjunto {1, 7, 2, 5, então x. str () deveria imprimir {1, 2, 5, 7. 3

4. O objetivo deste exercício é entender um pouco melhor os mecanismos de passagem de parâmetros adotados em SML/NJ. Para isto, responda as duas questões abaixo: (a) Faça um experimento em ML que prove que esta linguagem não usa passagem de parâmetros por nome. (b) Escreva duas funções ML, f e g, que demonstrem que ML não faz passagem de parâmetros por expansão de macros. A função f deve chamar apenas a função g, e a função g não deve chamar nenhuma outra função. Explique os resultados que a chamada por expansão de macros produziria, e mostre os resultados que ML efetivamente produz. 4

5. Um dos mecanismos de passagem de parámetros chama-se passagem por nome. Na passagem por nome os parâmetros não são avaliados imediatamente. A avaliação acontece quando estes parâmetros são utilizados. Um detalhe importante, contudo, é que a avaliação acontece no contexto da chamada da função, e não no contexto da função chamada. Isto faz com que não ocorra o problema da captura de variáveis, como ocorre em expansão de macros. A idéia de passagem por nomes foi lançada em Algol, e viu uso também em Simula, aquela mesma linguagem que foi a precursora das linguagens orientadas por objeto. Por outro lado, este mecanismo acabou abandonado, pois era difícil de ser implementado, e complicava o código dos programas. É claro, entretanto, que podemos fazer coisas maravilhosas com a chamada por nome. Considere, por exemplo, a função abaixo, escrito em Simula, e responda as perguntas a seguir: Real Procedure Sigma (k, m, n, u); Name k, u; Integer k, m, n; Real u; Begin Real s:=0; k:= m; While k <= n Do Begin s:= s + u; k:= k + 1; End; Sigma:= s; End; (a) Qual o valor de Z na chamada abaixo? Z:= Sigma (i, 1, 4, i ** 2); (b) O que o programa abaixo faz? Não precisa escrever o valor calculado, somente explicar o que ele calcula: a := io.read_integer(); Z := Sigma (i, 1, 100, 1 / (i + a) ** 2); 5