(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.
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.
(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;
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;
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;
(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
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.
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.
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;
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.
Os programas monolíticos (fluxograma) P₁ e P₂ são equivalentes.
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;
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.