Ybadoo - Soluções em Software Livre
Turmas
2º Semestre de 2017

Questão 01

(Diverio, 2000) Um programa pode ser descrito como um conjunto estruturado de instruções que capacitam uma máquina a aplicar sucessivamente certas operações básicas e testes em uma parte determinada dos dados iniciais fornecidos, até que esses dados tenham se transformado numa forma desejável. Analise as assertivas a seguir sobre a estrutura de controle associado a um programa.

  1. Programas monolíticos são estruturados usando desvios condicionais e incondicionais, não fazendo uso explícito de mecanismos auxiliares de programação, de modo que a lógica esteja distribuída por todo o bloco que constitui o programa.
  2. O mecanismo de composição sequencial utilizado pelos fluxogramas é a estrutura básica utilizada pela maioria das linguagens de montagem (Assembly) e é incorporada de certa maneira a outras linguagens de alto nível.
  3. Programas iterativos são baseados em três mecanismos de composição (sequencias) de programas, os quais podem ser encontrados em um grande número de linguagens de alto nível.
  4. Em programas iterativos, o mecanismo de composição enquanto é a composição de um programa, resultando em um segundo, cujo efeito é a execução, repetidamente, do programa componente enquanto o resultado de um teste for verdadeiro. A composição até é análoga à composição enquanto, excetuando que a execução do programa componente ocorre enquanto o resultado de um teste for falso.
  5. A computação de um programa recursivo consiste na avaliação da expressão inicial onde cada identificador de sub-rotina referenciado é substituído pela correspondente expressão que o define, e assim sucessivamente, até que seja substituído pela expressão vazia, determinando o fim da recursão.

A análise das assertivas permite concluir que:

a. apenas 1 (uma) assertiva está correta.

b. apenas 2 (duas) assertivas estão corretas.

c. apenas 3 (três) assertivas estão corretas.

d. apenas 4 (quatro) assertivas estão corretas.

e. todas as assertivas estão corretas.

Questão 02

(Diverio, 2000) Além da representação diagramática, um fluxograma pode ser denotado na forma de texto, usando instruções rotuladas. Desenvolver um programa monolítico, utilizando instrução rotulada, sobre uma máquina genérica, que leia três números do usuário e os apresente em ordem crescente. Por exemplo, caso os números fornecidos pelo usuário sejam 5, 7 e 4, o programa deverá apresentar como resposta a sequência 4 5 7.

R01: Faça ler(a) vá_para R02;
R02: Faça ler(b) vá_para R03;
R03: Faça ler(c) vá_para R04;
R04: Se a < b então vá_para R08 senão vá_para R05;
R05: Faça x = a vá_para R06;
R06: Faça a = b vá_para R07;
R07: Faça b = x vá_para R08;
R08: Se a < c então vá_para R12 senão vá_para R09;
R09: Faça x = a vá_para R10;
R10: Faça a = c vá_para R11;
R11: Faça c = x vá_para R12;
R12: Se b < c então vá_para R16 senão vá_para R13;
R13: Faça x = b vá_para R14;
R14: Faça b = c vá_para R15;
R15: Faça c = x vá_para R16;
R16: Faça escrever(a) vá_para R17;
R17: Faça escrever(b) vá_para R18;
R18: Faça escrever(c) vá_para Rx;

Questão 03

Desenvolver um programa iterativo, sobre uma máquina genérica, que apresente a somatória dos termos da série de Fibonacci. A série de Fibonacci é formada pela sequência 1, 1, 2, 3, 5, 8, 13, 21, 34, .... A série de Fibonacci é de grande importância matemática, e a lei básica é que a partir do terceiro termo, todos os termos são a soma dos dois últimos termos. 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 7, o programa deverá apresentar como resposta o valor 33, ou seja, 1 + 1 + 2 + 3 + 5 + 8 + 13. Caso o usuário forneça um valor inválido para o número de termos, o programa deverá apresentar uma mensagem de erro.

ler(n);
se n > 0 então
a = 0;
b = 1;
s = 0;
enquanto n > 0 faça
s = s + b;
b = b + a;
a = b - a;
n = n - 1;
fim enquanto;
escrever(s);
senão
escrever(erro);
fim se;

Questão 04

Desenvolver um programa recursivo, sobre uma máquina genérica, que dado dois números inteiros positivos, determine quantas vezes o primeiro divide exatamente o segundo. Se o primeiro número não divide o segundo, o número de vezes é zero. Os valores dos dois números serão fornecidos pelo usuário, devendo ser valores inteiros e positivos. Por exemplo, caso os valores fornecidos pelo usuário sejam 2 e 8, o programa deverá apresentar como resposta o valor 3, ou seja, 8 / 2 = 4 / 2 = 2 / 2 = 1. Caso o usuário forneça um valor inválido para alguns dos dois números, o programa deverá apresentar uma mensagem de erro.

função série (a, b)
se (b % a) == 0 então
retorna 1 + serie(a, b / a);
senão
retorna 0;
fim se;
fim função;

função principal
ler(a);
se a > 0 então
ler(b);
se b > 0 então
se a > 1 então
escrever(série(a, b));
senão
escrever(b);
fim se;
senão
escrever(erro);
fim se;
senão
escrever(erro);
fim se;
fim função;

Questão 05

(POSCOMP, 2005) Considere o programa a seguir.

função série (n, m)
se n < 1 então
retorna m;
senão
retorna m + n * serie(n - 1, m - 1);
fim se;
fim função;

função principal
ler(a);
ler(b);
escrever(série(a, b));
fim função;

Este programa, para os valores a = 4 e b = 5, tem como resultado:

a. 81

b. 119

c. 129

d. 229

e. 239

Questão 06

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

R1: Se a_zero então vá_para Rx senão vá_para R2;
R2: Faça subtrair_a vá_para R3;
R3: Se a_zero então vá_para R4 senão vá_para R7;
R4: Faça adicionar_b vá_para R5;
R5: Faça adicionar_b vá_para R6;
R6: Faça adicionar_b vá_para R1;
R7: Faça subtrair_a vá_para R8;
R8: Se a_zero então vá_para Rx senão vá_para R5;

Analise as seguintes assertivas sobre o programa apresentado.

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

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 07

Desenvolver um programa monolítico, utilizando instruções rotuladas, sobre a máquina 2_REG, que implemente a função B = A + A * 2 - A / 3.

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: Faça adicionar_b vá_para R06;
R06: Se a_zero então vá_para Rx senão vá_para R07;
R07: Faça subtrair_a vá_para R08;
R08: Faça adicionar_b vá_para R09;
R09: Faça adicionar_b vá_para R10;
R10: Faça adicionar_b vá_para R11;
R11: Se a_zero então vá_para Rx senão vá_para R12;
R12: Faça subtrair_a vá_para R13;
R13: Faça adicionar_b vá_para R14;
R14: Faça adicionar_b vá_para R01;

Questão 08

A relação de equivalência forte de programas é especialmente importante pois, ao agrupar diferentes programas em classes de equivalência de programas cujas funções coincidem, fornece subsídios para analisar propriedades de programas como complexidade estrutural. Analise as assertivas apresentadas a seguir.

  1. Os programas monolíticos (fluxograma) P₁ e P₂ são equivalentes.

    Fluxogramas
    Fluxograma P₁ e P₂
  2. Os programas monolíticos (instruções rotuladas) M₁ e M₂ são equivalentes.

    M₁
    R1: faça F vá_para R2;
    R2: se T então vá_para R3 senão vá_para R5;
    R3: faça G vá_para R4;
    R4: se T então vá_para R1 senão vá_para Rx;
    R5: faça F vá_para R6;
    R6: se T então vá_para R7 senão vá_para R2;
    R7: faça G vá_para R8;
    R8: se T então vá_para R6 senão vá_para Rx;
    M₂
    R1: faça F vá_para R2;
    R2: se T então vá_para R3 senão vá_para R1;
    R3: faça G vá_para R4;
    R4: se T então vá_para R1 senão vá_para Rx;
  3. Os programas iterativo e recursivo A₁ e B₁ são equivalentes.

    A₁
    se T então
    enquanto V faça
    F;
    fim enquanto;
    fim se;
    B₁
    função série()
    se T então
    F;
    série();
    fim se;
    fim função;

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

Quais das assertivas apresentadas estão corretas?

a. apenas a assertiva I.

b. apenas a assertiva II.

c. apenas a assertiva III.

d. apenas as assertivas I e II.

e. apenas as assertivas II e III.