Você está na página 1de 4

INSTITUTO SUPERIOR DE TRANSPORTES E COMUNICAÇÕES

T eoria da Computação

Ficha de E xercícios 3
Curso: LECC Data: 12-Abril-2024
Turma: LECC 21

Nome do Docente: Mário Sitoe


Programas : E quivalência de programas e máquinas

1. Qual a importância do estudo da relação de:


a) Equivalência forte de programas?
b) equivalência de programas em uma máquina
c) equivalência de máquinas

2. Qual é a diferença entre equivalência estrutural e equivalência comportamental


em programas e qual é o objecto de estudo na análise da equivalência forte de
programas?

3. Analise as assertivas a seguir e fundamente o seu julgamento:

i. A equivalência forte de programas permite analisar programas do ponto de vista


da sua complexidade estrutural, ou outros critérios considerados relevantes
(legibilidade, etc.), uma vez que do ponto de vista funcional eles são equivalentes.
ii. Dado um programa P qualquer (monolítico, iterativo ou recursivo), é sempre
possível obter um outro programa P’ (monolítico, iterativo ou recursivo) tal que
P’ seja fortemente equivalente a P.
iii. Uma função computada é um mapeamento entre o conjunto de valores de entrada
e o conjunto de valores de saída, realizado através de uma sequência finita de
computações.
iv. A classe dos programas iterativos está contida na classe dos programas
monolíticos, que por sua vez está contida na classe dos programas recursivos e
vice-versa.
v. Na análise da equivalência forte de programas, a estrutura sintáctica dos
programas é mais importante do que o seu comportamento durante a execução.

Por: M. Sitoe Página 1 de 4


INSTITUTO SUPERIOR DE TRANSPORTES E COMUNICAÇÕES

i. É sempre possível transformar um programa recursivo em um programa


iterativo que seja fortemente equivalente a ele.
ii. Em uma função computada, cada entrada deve corresponder a exactamente
uma saída, seguindo uma sequência fixa de operações.
iii. Programas monolíticos são aqueles que interagem continuamente com o
usuário durante sua execução.
4. Computação é a sequência de estados que representa a execução de um programa
numa certa máquina. Considerando o programa monolítico, utilizando instruções
rotuladas, sobre a máquina 2_REG apresentado a seguir, qual das computações
corresponde a execução do programa, caso a entrada fornecida pelo usuário seja 4.

R1: Faça subtrair_a vá_para R2;


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

5. Considere o programa recursivo apresentado a seguir

função ff(n)
se (n == 1)
então retornar 1;
fim se;

se (n % 2 == 0)
então retornar ff(n / 2);
fim se;

retornar ff((n-1)/2) + ff((n+1)/2);


fim função;

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

Qual será o resultado da execução desse programa recursivo, caso o usuário forneça como
entrada para o mesmo o valor 7?

Por: M. Sitoe Página 2 de 4


INSTITUTO SUPERIOR DE TRANSPORTES E COMUNICAÇÕES

6. Considere a especificação da máquina 4REG apresentada a seguir:

4REG = (N4, N, N, armazenar, retornar, {decA, incB, decB, incC, decC, incD},
{nilA, nilB, nilC}), onde:

• armazenar → armazena o valor fornecido pelo usuário no registrador A,


zerando os demais;
• retornar → retorna o valor armazenado no registrador D;
• decA → decrementa o registrador A em uma unidade, caso o mesmo seja maior
do que zero;
• incB → incrementa o registrador B em uma unidade;
• decB → decrementa o registrador B em uma unidade, caso o mesmo seja maior
do que zero;
• incC → incrementa o registrador C em uma unidade;
• decC → decrementa o registrador C em uma unidade, caso o mesmo seja maior
do que zero;
• incD → incrementa o registrador D em uma unidade;
• nilA → retornar verdade caso o valor do registrador A seja zero, caso
contrário, falso;
• nilB → retornar verdade caso o valor do registrador B seja zero, caso
contrário, falso;
• nilC → retornar verdade caso o valor do registrador C seja zero, caso
contrário, falso;

Qual será o resultado da execução do programa monolítico, utilizando instruções


rotuladas, sobre a máquina 4REG, caso a entrada do usuário seja 5 unidades?

7. 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 apresente a média
da somatória de 1 a n. Por exemplo, caso o valor de n seja 7, o programa deverá
apresentar como resposta 4, ou seja, (1 + 2 + 3 + 4 + 5 + 6 + 7) / 7.

Por: M. Sitoe Página 3 de 4


INSTITUTO SUPERIOR DE TRANSPORTES E COMUNICAÇÕES

8. Mostre (justificando) que os P e Q são fortemente equivalentes

até T 1: se T então vá_para 2 senão vá_para 1


2: faça f vá_para 3
faça ( ); 3: faça G vá_para 4
enquanto T 4: se T então vá_para 5 senão vá_para 6
faça (F;G;(se T 5: faça F vá_para 1
então f;
até T
faça (v)

senão ))

9. Verifique se os programas monolíticos abaixo M1 e M2, são fortemente


equivalentes

Programa monolítico M1 Programa monolítico M2


l : faça F vá_para 2 l: faça F vá_para 2
2: se T então vá_para 3 senão vá_para 5 2 : se T então vá_para 3 senão vá_para 1
3 : faça G vá_para 4 3: faça G vá_para 4
4: se T então vá_para 1 senão vá_para O 4: se T então vá_para 1 senão vá_para O
S: faça F vá_para 6
6: se T então vá_para 7 senão vá_para 2
7 : faça G vá_para 8
8 : se T então vá_para 6 senão vá_para O

FIM!

Por: M. Sitoe Página 4 de 4

Você também pode gostar