Buscar

Trabalho_para_AV2_-_PLP_2022 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

CURSO: 
CÓD/ DISCIPLINA: Paradigmas de Linguagens de Programação 
PROF.º: TURNO: Noite 
TURMA: SALA: 
MAT.: 
 
NOTA 
GRADUAÇÃO Nome 
DATA: 06/06/2022 Trabalho 
 
OBS.: Neste trabalho, cada questão objetiva vale 0,5 (meio) ponto, contabilizando o total de 5,0 (cinco) pontos que 
serão somados à nota da AV2, a qual também valerá 5,0 (cinco). 
 
Questão 01. Acerca das linguagens dos paradigmas de programação, indique V (Verdadeiro) ou F (Falso) nas 
proposições descritas a seguir: 
1. ( ) As linguagens funcionais são muito utilizadas em aplicações de Inteligência Artificial, pois buscam simular 
funções matemáticas o máximo possível. Para isso, uma linguagem puramente funcional não usa variáveis e nem 
sentenças de atribuição. Além disso, as linguagens funcionais possuem um recurso chamado transparência 
referencial. Com isso, um programa funcional sempre produz o mesmo resultado quando fornecidos os mesmos 
parâmetros, não havendo, portanto, efeitos colaterais. 
2. ( ) São exemplos de linguagens funcionais: LISP, COMMON LISP, Scheme, Haskell, PROLOG e Perl. 
3. ( ) Em algumas situações, a ordem de avaliação dos operandos pode influenciar no resultado de uma expressão 
aritmética. Em particular, quando uma expressão envolve uma chamada a uma função, essa por sua vez pode 
alterar os valores de alguns dos demais operandos. Essa situação é denominada de efeito colateral. 
4. ( ) Uma exceção é qualquer evento não usual, errôneo ou não, detectável por hardware ou software que possa 
requerer um processamento especial. Portanto, através do tratamento de exceções, o programador pode 
especificar o comportamento de um programa quando ocorrem alguns erros específicos. 
5. ( ) As Java e C# são exemplos de linguagens que possuem suporte a tratamento de exceções, portanto, não é 
possível tratar erros de programas escritos em linguagens que não tenham suporte a tratamento de exceções. 
6. ( ) Coerção é uma conversão implícita de um tipo de uma variável para outro tipo. 
7. ( ) As linguagens do paradigma lógico também são chamadas de linguagens declarativas porque os programas 
escritos nelas consistem em declarações e são baseadas em lógica simbólica. Ademais, as linguagens lógicas são 
muito utilizadas em sistemas de gerenciamentos de banco de dados e sistemas especialistas, sendo PROLOG a 
linguagem lógica mais conhecida. 
8. ( ) Além de PROLOG, as linguagens LISP, Perl, Python e COBOL também são consideradas lógicas. 
9. ( ) A programação orientada a objeto teve origem na linguagem SIMULA 67, mas só foi completamente 
desenvolvido com a evolução de Smalltalk, que é considerada a primeira linguagem orientada a objetos. 
10. ( ) Uma linguagem orientada a objetos deve fornecer suporte a três recursos principais: tipos de dados abstratos, 
herança e polimorfismo. Logo, são exemplos de linguagens orientada a objetos: Java, C# e PHP. 
11. A linguagem C++ possui suporte a orientação a objetos, porém permite a criação de programas estruturados 
(como é feito na linguagem C). 
12. ( ) Para implementar um tipo abstrato de dados (TAD) em uma linguagem orientada a objetos, deve-se 
desenvolver uma estrutura composta por atributos e métodos, denominada ‘objeto’. 
13. ( ) A herança permite a criação de uma nova classe a partir de uma já existente, portanto, a herança facilita o 
reuso de código, pois a nova classe herda tanto os atributos quanto os métodos da classe existente. 
14. ( ) Em Java, toda classe herda de uma classe base denominada Object (presente no pacote java.lang). A classe 
Object também é denominada ‘classe primordial’, pois não possui superclasse e é superclasse de todas as demais 
classes. Assim, em Java podemos criar uma classe A herdando de uma classe B, por meio da seguinte forma: 
public class A extends B. 
15. ( ) Ao criarmos uma classe Funcionario herdando de uma classe Pessoa, dizemos que a primeira classe 
(Funcionario) é superclasse da segunda (Pessoa). 
ABCS  ABCS 
 
Questão 02. Sobre os tipos de parâmetros da linguagem PROLOG, associe os termos da coluna 1 às respectivas 
definições na coluna 2: 
(1) Átomo ( ) é um tipo especial de lista que contém apenas números inteiros entre 0 e 255. Ex.: "ABC" ≡ 
[65, 66, 67]. 
(2) Termo composto ( ) é uma constante. Representado por uma sequência de letras, números e underscore iniciada 
por uma letra minúscula ou uma sequência entre plicas, por exemplo: cravo, 'ana.pro', 'Cacilhας, 
La Batalema'. 
(3) Número ( ) é uma estrutura complexa. Consiste em um funtor seguido por um ou mais parâmetros entre 
parêntesis. O funtor deve ser um átomo, os parâmetros podem ser de quaisquer tipos. Ex.: 
gosta(ana, gato). 
(4) Lista ( ) é exatamente o que diz. É representado por dígitos numéricos e ponto (para ponto flutuante.) 
Ex.: 123, 3.1415. 
(5) String ( ) é uma sequência de elementos de outros tipos. Os delimitadores de início e fim são [ ] e os 
elementos são separados por vírgulas. O símbolo pipe (|) por ser usado. Ex.: [a, b, c], [abc | SX] 
 
 
Questão 03. Sobre os operadores (conectivos) utilizados na linguagem PROLOG, associe os termos da primeira coluna às 
respectivas descrições na segunda coluna: 
(1) “ . ” ( ) é o operador lógico IF e representa a operação lógica implica que 
(2) “ :- ” ( ) determina o término de toda sentença no Prolog 
(3) “ , ” ( ) é o operador lógico OR e representa a operação lógica disjunção / ou 
(4) “ ; ” ( ) é o operador lógico AND e representa a operação lógica conjunção / e 
(5) not ( ) determina o início de uma consulta (pergunta) no Prolog 
(6) is ( ) é o operador lógico NOT e representa a operação lógica negação 
(7) “ = ” ( ) predicado que representa a assimetria induzida é 
(8) “ \= ” ( ) é o operador relacional IGUAL e representa a operação lógica é igual a 
(9) < > ( ) é o operador relacional DIFERENTE e representa a operação lógica não igual a 
(10) =< >= ( ) são os operadores relacionais MENOR QUE e MAIOR QUE 
(11) “ ?- ” ( ) são os operadores relacionais MENOR OU IGUAL A e MAIOR OU IGUAL A 
 
 
Questão 04. Acerca da linguagem PROLOG, indique V (Verdadeiro) ou F (Falso) nas proposições descritas a seguir: 
1. ( ) Prolog é uma linguagem de programação declarativa e funcional de propósito geral, baseada em lógica de 
primeira ordem, voltada para inteligência artificial e linguística computacional, sendo uma linguagem geralmente 
interpretada, mas pode ser compilada. 
2. ( ) A linguagem Prolog (programmation en logique) foi criada no começo da década de 1970 por um grupo 
liderado por Alain Colmerauer em Marseille, França. 
3. ( ) O uso de Prolog se dá através de consultas (queries), portanto, a programação Prolog consiste em definir um 
conjunto de verdades chamadas ‘casos’ e relações entre os ‘casos’, chamadas ‘regras’. 
4. ( ) Prolog possui quatro tipos de parâmetros: átomo, termo composto, número e lista. Um fato precisa ser um 
átomo ou um termo composto. 
5. ( ) Em Prolog, a cabeça de uma lista pode ser qualquer objeto (inclusive uma lista); a cauda tem que ser 
uma lista, ou seja, como a cauda é uma lista, ela é vazia ou ela tem sua própria cabeça e sua cauda, por 
exemplo [ana, tênis, pedro] é representando como o termo: .(ana, .(tênis, .(pedro, [ ]) ) ). Em suma, a 
cabeça e a cauda são então combinadas em uma estrutura pelo functor especial .(Cabeça, Cauda). 
6. ( ) O equivalente a variável em Prolog é a incógnita, que consiste em um valor desconhecido, porém constante, 
representado por uma sequência similar ao átomo, mas iniciada por uma letra maiúscula. 
7. ( ) No Prolog as cláusulas são de três tipos: fatos, regras e perguntas (consultas). Um fato define uma afirmação, 
uma verdade, enquanto uma regra é um predicado condicional. Portanto, através de perguntas o usuário pode 
questionar o programa sobre quais coisas são verdadeiras. 
8. ( ) De um modo geral, fatos e regras são chamados ‘predicados’ e o conjunto de predicados do programa é 
chamado ‘domínio do problema’. 
9. ( ) Em uma linhade código do Prolog, a regra ‘Se Ana gosta de X implica que X é um flor’ é escrita da seguinte 
forma: gosta(ana, X) :- flor(X). 
10. ( ) Para avaliar expressões aritméticas o Prolog disponibiliza o predicado is que avalia o segundo argumento e 
unifica o resultado com o primeiro, como no exemplos ?- X is 3+2. que termos como resposta X = 5. Portanto, o 
segundo argumento deve ser sempre uma expressão completamente instanciada. 
 
 
Questão 05. Qual a saída produzida pelo extrato de código em Python3 descrito a seguir: 
x = 1 
while (x <= 3): 
 print(x) 
 x = x + 1 
a) 2 3 
b) 1 2 
c) 1 2 3 
d) Não compila porque tem erro. 
 
 
Questão 06. Analise o código Python3 a seguir: 
n = 6 
r = 0 
c = 1 
s = -1 
 
while (c <= n): 
 if (c%2 == 0): 
 r = r + c * s 
 else: 
 r = r + c 
 c = c + 1 
print("O valores finais de 'r' e 'c' são, respectivamente: ", r, c) 
 
Ao compilar e executar o código em Python3, os valores finais nas variáveis r e c serão respectivamente: 
a) -3 e 7 
b) 7 e 5 
c) 3 e 6 
d) 4 e 6 
e) -2 e 7 
 
 
Questão 07. Com base nos conhecimentos sobre as linguagens de programação funcionais, considere as afirmativas a 
seguir: 
I. Uma linguagem de programação funcional tem o objetivo de imitar as funções matemáticas, ou seja, os programas são 
definições de funções e de especificações da aplicação dessas funções. 
II. Nas linguagens funcionais, os dados e as rotinas para manipulá-los são mantidos em uma mesma unidade, chamada 
objeto. Os dados só podem ser manipulados por meio das rotinas que estão na mesma unidade. 
III. As rotinas de um programa do paradigma funcional descrevem ações que mudam o estado das variáveis do programa, 
seguindo uma sequência de comandos para o computador executar. 
IV. A linguagem Lisp é um exemplo do paradigma funcional de programação. 
 
Assinale a alternativa CORRETA: 
a) Somente as afirmativas I e IV são corretas. 
b) Somente as afirmativas II e III são corretas. 
c) Somente as afirmativas III e IV são corretas. 
d) Somente as afirmativas I, II e III são corretas. 
e) Somente as afirmativas I, II e IV são corretas. 
 
 
Questão 08. Conforme Ghezzi e Jazayeri (GHEZZI; JAZAYERI, 1998, p. 93-96), linguagens como APL, SNOBOL4 e 
LISP adotam recursos para variáveis com escopo dinâmico, ou seja, uma propriedade dinâmica, em geral, implica 
amarração em tempo de execução, inviabilizando-a em tempo de compilação. Essa implicação é válida também no caso 
de variáveis com escopo dinâmico. 
Com base nessa descrição, considere o trecho de programa a seguir, exemplificado em Ghezzi e Jazayeri (GHEZZI; 
JAZAYERI, 1998, p. 95), com sintaxe da linguagem C e semântica da linguagem APL: 
 
sub2( ) { 
 declare x; 
 ... 
 ... x ...; 
 ... y ,.,.; 
 ... 
} 
sub1( ) { 
 declare y; 
 ... 
 ... x ...; 
 ... z ...; 
 sub2(); 
 ... 
} 
main( ) { 
 declare x, y, z; 
 z = 0; 
 x = 5; 
 y = 7; 
 sub1; 
 sub2; 
 ... 
} 
 
A respeito da proposta de modificação da linguagem, analise as seguintes afirmações: 
I. Nesse exemplo, y é variável local à rotina sub1, x é variável local à rotina sub2, e x, y e z são variáveis locais à rotina 
principal, a main. Nesse contexto, qualquer acesso a uma variável em determinado ponto do programa, que não esteja declarada 
de forma local na rotina onde esse ponto está inserido, esse acesso é implicitamente assumido como referente a uma variável 
não local. 
II. No caso do escopo dinâmico, sabe-se que esse escopo depende da ordem de execução das unidades de programação e não da 
estrutura estática do programa. 
III. No exemplo apresentado, quando sub1 é ativada a partir da main, as referências a x e a z são não locais, ou seja, são globais 
atendendo à declaração dessas variáveis na main. Quando sub2 é ativada a partir de sub1, a referência não local a y, em sub2, é 
amarrada à sua mais recente declaração, ou seja, ao objeto de dados associado a y local em sub1. Quando sub2 é ativada a partir 
da main, o acesso a y, em sub2, fará referência, agora, ao objeto de dado associado a y local na main. 
 
Em relação aos itens descritos, é CORRETO apenas o que afirmam: 
a) I. 
b) II. 
c) I e III. 
d) II e III. 
e) I, II e III. 
 
Questão 09. Para as linguagens com escopo dinâmico, a vinculação das variáveis ao escopo é realizada em tempo de 
execução. (...) Se uma variável é local ao bloco, então o uso da dada variável no bloco será sempre vinculado àquela local. 
Contudo, se a variável for não local, a sua vinculação depende da ordem de execução, a última vinculada na execução. A 
consequência disso é que, em um mesmo bloco de comandos, um identificador pode ter significados diferentes, e o 
programador deve ter a ideia precisa de qual variável está sendo usada. 
MELO, A. C. V.; SILVA, F. S. C. Princípios de Linguagens de Programação. São Paulo: Edgard Blücher, 2003. p. 65. 
 
Considerando a citação acima, suponha que uma linguagem de programação tenha sido projetada com vinculação e 
verificação estáticas para tipos de variáveis, além de passagem de parâmetros por valor. Também é exigido pela 
especificação da linguagem que programas sejam compilados integralmente e que não é permitido compilar bibliotecas 
separadamente. Durante uma revisão da especificação da linguagem, alguém propôs que seja adicionado um mecanismo 
para suporte a variáveis com escopo dinâmico. 
 
A respeito da proposta de modificação da linguagem, analise as seguintes afirmações: 
I. As variáveis com escopo dinâmico podem ser tratadas como se fossem parâmetros para os subprogramas que as 
utilizam, sem que o programador tenha que especificá-las ou declarar seu tipo, pois, nesse contexto, o compilador fará 
a verificação correta de tipo e, assim, eliminando o uso de polimorfismo, pois ao adotar variáveis com escopo 
dinâmico, o escopo de uma variável fica independente das ativações ou não das rotinas em questão. 
II. O acesso correto a variáveis com o mesmo nome, mas declaradas em rotinas diferentes, é viabilizado através do 
recurso de escopo dinâmico, pois permitirá referências a declarações dessas variáveis nas respectivas rotinas. 
III. No contexto descrito há restrição ao aspecto dinâmico do escopo. Com base nisso, podemos afirmar que a verificação 
de erros de tipo poderá ser realizada em tempo de compilação se uma variável, além da declaração existente no escopo 
em que é criada, possuir declaração também na rotina em que é acessada. Dessa forma, a estrutura estática do 
programa permitiria ao compilador associar corretamente a variável, no seu acesso, às propriedades do correto objeto 
de dado em uso. 
 
Em relação aos itens descritos, é CORRETO apenas o que afirma os itens: 
a) I. 
b) II. 
c) I e III. 
d) II e III. 
e) I, II e III. 
 
 
Obs.: Para resolver a próxima questão, leia antes o conteúdo do link http://wiki.icmc.usp.br/images/b/b0/Aula5-230t.pdf , 
o qual trata sobre como são construídas listas em PROLOG. Se necessário, também use o SWI-PROLOG em 
http://www.swi-prolog.org/ ou https://swish.swi-prolog.org/ para validar sua avaliação. 
 
Questão 10. Na lista [ana, tênis, pedro] temos que o temo ana é a cabeça da lista e [tênis, pedro] é a cauda da 
lista, ou seja, podemos afirmar que [ana, tênis, pedro] = [ana | [tênis, pedro]]. Com base nesse pressuposto, 
avalie as estruturas de construção de listas em PROLOG e marque nos subtópicos abaixo o(s) item(s) que contém as 
saídas (respostas) CORRETA(S) de cada equivalência: 
 
10.1. A equivalência das listas [a, b, c, d] = [a, [b, c, d]]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
http://wiki.icmc.usp.br/images/b/b0/Aula5-230t.pdf
http://www.swi-prolog.org/
https://swish.swi-prolog.org/
 
10.2. A equivalência das listas [a, b, c, d] = [a | [b, c, d]]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.3. A equivalência das listas [a, b, c, d] = [a, b, [c, d]]. é: 
a) trueb) false 
c) erro 
d) inexistente 
 
10.4. A equivalência das listas [a, b, c, d] = [a, b | [c, d]]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.5. A equivalência das listas [a, b, c, d] = [a, b, c, d, [ ]]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.6. A equivalência das listas [a, b, c, d] = [a, b, c, d | [ ]]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.7. A equivalência das listas [ ] = [_]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.8. A equivalência das listas [ ] = [_|[ ]]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.9. A equivalência das listas [_|_] = [a]. é: 
a) true 
b) false 
c) erro 
d) inexistente 
 
10.10. A equivalência das listas [_|_] = [ ]. é: 
a) true 
b) false 
c) erro 
d) inexistente

Continue navegando