ex01-tc
DESCRIPTION
exercicios de teoria da computaçãoTRANSCRIPT
% Lista Exercicios 1 % Thiago Prado % RA 1295225
Exercícios
1.5) [C, D, E, F, H, I]
1.6)
a. teoria Prefixos: e, t, te, teo, teor, teori, teoria Sufixos: e, a, ia, ria, oria, eoria, teoria
b. universidade Prefixos: e, u, un, uni, univ, unive, univer, univers, universi, universid, universida,universidad, universidade Sufixos: e, e, de, ade, dade, idade, sidade, rsidade, ersidade, versidade,iversidade, niversidade, universidade
c. aaa Prefixos: e, a, aa, aaa Sufixo: e, a, aa, aaa
d. abccba Prefixo: e, a, ab, abc, abcc, abccb, abccba Sufixo: e, a, ba, cba, ccba, bccba, abccba
e. abcabc Prefixo: e, a, ab, abc, abca, abcab, abcabc Sufixo: e, c, bc, abc, cabc, bcabc, abcabc
1.7)
a. Fechamento Dado o alfabeto Σ= {ab} e a palavra w=ab w¹ = ab w² = abab w³ = ababab w* =abab...ab Como mostrado acima, o fechamento é válido.
b. Comutatividade Dado o alfabeto Σ = {a,b,c,d} e as palavras v=ab e w=cd vw = abcd wv = cdabComo mostrado acima, a comutatividade não é válida.
c. Elemento Neutro Dado o alfabeto Σ= {ab} e a palavra w=ab εw = w = wε = ab Como mostradoacima, o elemento neutro é válido.
d. Associatividade Dado o alfabeto Σ = {a,b,c,d} e as palavras v=ab, w=cd e t=bc (vw)t = v(wt) =abcdbc Como mostrado acima, a associatividade é válida.
1.8)
Quando utiliza-se o elemento nulo no caso da concatenação de palavras de uma linguagem equando se coloca o zero numa adição dos números naturais, entretanto, apenas quando ambosestiverem na posição mais a esquerda, para que o zero não possua nenhum valor significativo.
2.1)
Um exemplo de programa monolítico em C:
rotulo1: ... ... ...
goto rotulo1; ...
Esse comando exemplifica a utilização dos rótulos definidos para programas monolíticos. Note quea nomeação de um rótulo ocorre logo antes do inicio do bloco a ser rotulado e o comando goto éresponsável por voltar a execução ao bloco correspondente ao rótulo utilizado no comando. Umexemplo de programa iterativo em C:
if (...) { while (...) { ... } } else if (...) { ... } else { ... }
É notável que os if's nó código acima correspondam aos testes necessários para escolher qualparte do código será executada e o comando while é o comando enquanto, permitindo queiterações sejam feitas conforme o necessário, isto é, enquanto o teste no inicio do comando while éerdadeiro.
Um exemplo de programa recursivo em C:
int funcao1(int valor) { if(valor <= 0) return valor; else { return funcao1(valor – 1); } }
Essa função exibe claramente o conceito de sub-rotinas, neste caso, é uma função que faz asubtração de um valor qualquer inteiro até que ele se torne menor ou igual a zero. Observe que asub-rotina é constantemente chamada até que valor fique menor ou igual à zero.
2.3)
Relativamente a programas iterativos:
a. V não pode ser executado quando T for falso.
b. Porque cada identificador de operação constitui um programa iterativo, e como a operação vaziaé um identificador de operação, logo, ele é iterativa.
c. Por que é possível mapear todo o programa iterativo para o fluxograma utilizando componentesbásicos de partida, parada, operação e teste, e a combinação destes componentes criam estruturasmais complexas como o enquanto ou o até. E a partir do fluxograma é possível reescrever demaneira fácil o programa monolítico, pois o fluxograma pode ser escrito em forma texto atravésdas instruções rotuladas.
2.6)
Seja M(V, X, Y, piX, piY, PiF, PiT) uma máquina e P um programa iterativo para uma máquina M.
Uma computação para o programa P em M é uma cadeia de pares do tipo:
(I0,V0)(I1,V1)(I2,V2)...
Sendo uma cadeia (finita ou infinita) de composições sequenciais, onde I0 é o programa iterativoinicial da memória e V0 sendo o valor piX(x), que é o valor inicial da memória. Para cada (Ik,Vk),onde k={0,1,2,...}, F sendo uma operação, T sendo um teste e V, V1, V2 programas iterativos,obtem-se:
Operação seguida de um programa: Ik = F;V
Então (Ik+1,Vk+1)=(V, pif(Vk))
Um programa seguido por outro programa: Ik = V;V1
Então(Ik+1,Vk+1)=(V;V1,Vk)
Teste: Ik = (se T então V senão V1);V2
Então(Ik+1,Vk+1) =(V;V2,Vk) se pit(Vk) = verdadeiro = (V1;V2,Vk) se pit(Vk) = falso
Enquanto: Ik = (enquanto T faça V); V1
Então(Ik+1,Vk+1) = (V;(enquanto T faça V);V1,Vk) se pit(Vk) = verdadeiro = (V1, Vk) se pit(Vk) = falso
Até: Ik = (até T faça V); V1
Então (Ik+1,Vk+1) = (V1, Vk) se pit(Vk) = verdadeiro = (V;(até T faça V);V1,Vk) se pit(Vk) = falso
2.8)
Seja M(V, X, Y, piX, piY, piF, piT) uma máquina e P um programa iterativo para uma máquina M.
Uma computação para o programa P em M é uma cadeia de pares do tipo:
(I0,V0)(I1,V1)(I2,V2)...(In,Vn)
Sendo uma cadeia finita de tamanho n, onde I0 é o programa iterativo inicial da memória e V0sendo o valor piX(x), que é o valor inicial da memória. Para cada (Ik,Vk), onde k={0,1,2,...}, F sendouma operação, T sendo um teste e V, V1, V2 programas iterativos, obtem-se:
Operação seguida de um programa: Ik = F;V
Então (Ik+1,Vk+1)=(V, pif(Vk))
Um programa seguido por outro programa: Ik = V;V1
Então(Ik+1,Vk+1)=(V;V1,Vk)
Teste: Ik = (se T então V senão V1);V2
Então(Ik+1,Vk+1) =(V;V2,Vk) se pit(Vk) = verdadeiro = (V1;V2,Vk) se pit(Vk) = falso enquanto: Ik =(enquanto T faça V); V1
Então(Ik+1,Vk+1) = (V;(enquanto T faça V);V1,Vk) se pit(Vk) = verdadeiro = (V1, Vk) se pit(Vk) = falso
Até: Ik = (até T faça V); V1
Então (Ik+1,Vk+1) = (V1, Vk) se pit(Vk) = verdadeiro = (V;(até T faça V);V1,Vk) se pit(Vk) = falso