Ybadoo - Soluções em Software Livre
Turmas
1º Semestre de 2018

Questão 01

Considere as assertivas a seguir sobre programas, máquinas, computações e funções computadas.

  1. Um programa é constituído por um conjunto de instruções que definem a ordem de suas operações e avaliações (testes) que devem ser executados.
  2. Estruturas de controle são instruções que definem a ordem em que as operações de um programa devem ser executadas.
  3. É função da máquina definir o significado associado aos identificadores de operação e teste usados em um programa.
  4. Computação é a função que associa valores de entrada com valores de saída produzidos pela execução de um programa em uma máquina.

Quais das assertivas apresentadas estão corretas?

a. apenas as assertivas I e II.

b. apenas as assertivas I e III.

c. apenas as assertivas II e III.

d. apenas as assertivas II e IV.

e. apenas as assertivas III e IV.

Questão 02

Considere o programa a seguir.

função A(i, j, k)
se (i > 1) então
aux = k;
k = k + j;
j = k - j;
retornar aux + A(i - 1, j, k);
senão
retornar k;
fim se;
fim função

função B(i)
retornar A(i, 0, 1);
fim função

função principal
ler(i);
se (i > 0)
então escrever(B(i));
senão escrever(erro);
fim se;
fim função

Considerando i = 7, escolha a alternativa que representa a execução do programa acima:

a. 12

b. 20

c. 33

d. 54

e. 67

Questão 03

Considere o programa monolítico, utilizando instruções rotuladas, sobre a máquina 2_REG, apresentado a seguir.

R01: Se a_zero então vá_para Rx senão vá_para R02;
R02: Faça subtrair_a vá_para R03;
R03: Faça adicionar_b vá_para R04;
R04: Faça adicionar_b vá_para R05;
R05: Se a_zero então vá_para Rx senão vá_para R06;
R06: Faça subtrair_a vá_para R07;
R07: Faça adicionar_b vá_para R08;
R08: Faça adicionar_b vá_para R09;
R09: Se a_zero então vá_para Rx senão vá_para R10;
R10: Faça subtrair_a vá_para R11;
R11: Faça adicionar_b vá_para R12;
R12: Faça adicionar_b vá_para R13;
R13: Faça adicionar_b vá_para R01;

Analise as seguintes assertivas sobre o programa apresentado.

  1. Caso a entrada fornecida seja 5 a saída será 11.
  2. Caso a entrada fornecida seja 5 a saída será 12.
  3. Caso a entrada fornecida seja 6 a saída será 14.
  4. Caso a entrada fornecida seja 7 a saída será 15.

Quais das assertivas apresentadas estão corretas?

a. apenas as assertivas I e II.

b. apenas as assertivas I e III.

c. apenas as assertivas II e III.

d. apenas as assertivas II e IV.

e. apenas as assertivas III e IV.

Questão 04

(Diverio, 2000) Funções computadas permitem introduzir algumas importantes relações de equivalência de programas e máquinas, em especial, a relação de equivalência forte de programas, no qual um par de programas pertence à relação se as correspondentes funções computadas coincidem para qualquer máquina. As funções computadas por programas fortemente equivalentes têm a propriedade de que os mesmos testes e as mesmas operações são efetuados na mesma ordem, independentemente do significado dos mesmos. Selecione o programa monolítico que seja fortemente equivalente ao programa recursivo apresentado a seguir.

função R()
B;
se T
então R()
senão S();
fim se;
fim função;

função S()
A;
R();
se U
então S();
fim se;
fim função;

função principal()
S();
fim função;

a.

R1: Se T então vá_para R2 senão vá_para R3;
R2: Faça A vá_para R1;
R3: Faça B vá_para R4;
R4: Se U então vá_para R1 senão vá_para Rx;

b.

R1: Se T então vá_para R2 senão vá_para R3;
R2: Faça A vá_para R1;
R3: Se U então vá_para R4 senão vá_para Rx;
R4: Faça B vá_para R1;

c.

R1: Se T então vá_para R3 senão vá_para R2;
R2: Se U então vá_para R4 senão vá_para Rx;
R3: Faça A vá_para R1;
R4: Faça B vá_para R1;

d.

R1: Faça A vá_para R2;
R2: Faça B vá_para R3;
R3: Se T então vá_para R2 senão vá_para R4;
R4: Se U então vá_para R1 senão vá_para Rx;

e.

R1: Faça A vá_para R2;
R2: Se T então vá_para R1 senão vá_para R3;
R3: Faça B vá_para R4;
R4: Se U então vá_para R1 senão vá_para Rx;

Questão 05

(Diverio, 2000) Um fluxograma nada mais é do que uma representação gráfica de um algoritmo, através de formas geométricas previamente convencionados, permitindo a descrição clara e precisa da sequência de um processo, facilitando a compreensão da lógica utilizada pelo programador. Diante disso, escreva um programa monolítico, utilizando fluxograma, sobre uma máquina genérica, que calcule o valor da exponenciação de uma base qualquer por um expoente positivo qualquer, ou seja, BE. O valor de E será fornecido pelo usuário, devendo ser um valor inteiro e positivo. O valor de B será fornecido pelo usuário, podendo ser um valor (inteiro ou real) qualquer. Por exemplo, caso o valor fornecido pelo usuário para B seja 2 e para E seja 5, o programa deverá apresentar como resposta o valor 32, ou seja, 2 * 2 * 2 * 2 * 2. Caso o usuário forneça um valor inválido para E, o programa deverá apresentar uma mensagem de erro.

Fluxogramas
Fluxograma para calcular BE

Questão 06

Programas iterativos substituem desvios incondicionais por estruturas cíclicas, permitindo um melhor controle e manutenção de programas. A noção de programa iterativo deu origem às técnicas de programação estruturada, inspirando toda uma geração de linguagens de programação, como Pascal e C. Diante disso, escreva um programa iterativo, sobre uma máquina genérica, que calcule o valor de ex utilizando a fórmula ex = x0/0! + x1/1! + x2/2! + x3/3! + ... + xn/n! O valor de n será fornecido pelo usuário, devendo ser um valor inteiro e positivo. O valor de x será fornecido pelo usuário, podendo ser um valor (inteiro ou real) qualquer. Por exemplo, caso o valor fornecido pelo usuário para n seja 4 e para x seja 2, o programa deverá apresentar como resposta o valor 7, ou seja, 20/0! + 21/1! + 22/2! + 23/3! + 24/4!. Caso o usuário forneça um valor inválido para n, o programa deverá apresentar uma mensagem de erro.

programa
ler(n);
se (n >= 0) então
ler(x);
fatorial = 1;
potencia = 1;
ex = 1;
termo = 1;
enquanto (termo <= n) faça
fatorial = fatorial * termo;
potencia = potencia * x;
ex = ex + potencia / fatorial;
termo = termo + 1;
fim enquanto;
escrever(ex);
senão
escrever(erro);
fim se;
fim programa.

Questão 07

Recursão é um método de programação no qual uma função pode chamar a si mesma. Muitos problemas em computação tem a propriedade de que cada instância sua contém uma instância menor do mesmo problema. Diante disso, escreva um programa recursivo, sobre uma máquina genérica, que apresente os n primeiros termos da sequência yk+1 = yk + 2, sendo k = 1, 2, ..., n e y1 = 1. O número de termos será fornecido pelo usuário, devendo ser um valor inteiro e positivo. Por exemplo, caso o número de termos fornecido pelo usuário seja 5, o programa deverá apresentar como resposta a sequência de valores 1, 3, 5, 7, 9

y1 = 1
y2 = y1 + 2 = 3
y3 = y2 + 2 = 5
y4 = y3 + 2 = 7
y5 = y4 + 2 = 9

Caso o usuário forneça um valor inválido para o número de termos, o programa deverá apresentar uma mensagem de erro.

função serie(termos)
se (termos > 1) então
aux = serie(termos - 1) + 2;
escrever(aux);
retornar aux;
senão
escrever(1);
retornar 1;
fim se;
fim função;

função principal
ler(termos);
se(termos > 0)
então serie(termos);
senão escrever(erro);
fim se;
fim função;

Questão 08

(Diverio, 2000) Um programa monolítico é estruturado usando desvios condicionais e incondicionais, não fazendo uso explícito de mecanismos auxiliares de programação que permitam uma melhor estruturação do controle, como iteração, subdivisão e recursão, de modo que a lógica é distribuída por todo o bloco (monólito) que constitui o programa. Desenvolver um programa monolítico, utilizando instruções rotuladas, sobre a máquina 2_REG, que implemente a função B = (A % 4) * 2.

R01: Se a_zero então vá_para Rx senão vá_para R02;
R02: Faça subtrair_a vá_para R03;
R03: Se a_zero então vá_para R13 senão vá_para R04;
R04: Faça subtrair_a vá_para R05;
R05: Se a_zero então vá_para R11 senão vá_para R06;
R06: Faça subtrair_a vá_para R07;
R07: Se a_zero então vá_para R09 senão vá_para R08;
R08: Faça subtrair_a vá_para R01;
R09: Faça adicionar_b vá_para R10;
R10: Faça adicionar_b vá_para R11;
R11: Faça adicionar_b vá_para R12;
R12: Faça adicionar_b vá_para R13;
R13: Faça adicionar_b vá_para R14;
R14: Faça adicionar_b vá_para Rx;