Escolar Documentos
Profissional Documentos
Cultura Documentos
= (()!) = (( 1) + 1)! 1 = ! 1
=1
Passo indutivo:
1
= (()!) = (()!) + ! = (! 1) + ! = ! ( + 1) 1
=1 =1
= ( + 1)! 1
2) Prove por induo que a soma dos cubos de trs inteiros positivos
consecutivos sempre divisvel por 9.
Problema: 3 + ( + 1)3 + ( + 2)3 = 9, .
Base: a = 1, 13 + (1 + 1)3 + (1 + 2)3 = 1 + 8 + 27 = 36 = 4 9.
Hiptese: Suponha que vale para k = n 1, ou seja,
3 + ( + 1)3 + ( + 2)3 = 9
3 3
( 1)3 + (( 1) + 1) + (( 1) + 2) = 9
( 1)3 + 3 + ( + 1)3 = 9
Passo indutivo: Vamos mostrar que vale para
( + 1) = (( 1) + 1) =
Pgina | 1
Aula 1: DFA
4) {w | w termina em 00}.
5) {w | w tem 3 0s consecutivos}.
Pgina | 2
6) {w | w tem 011 como substring}.
Pgina | 3
Aula 2: DFA
Pgina | 4
4) Todos os strings cujo valor binrio divisvel por 5.
Pgina | 5
8) Todos os strings com comprimento no mximo igual a 5.
Pgina | 6
Aula 3: DFA
Pgina | 7
4) {w {0,1}* | w comea ou termina ou ambos com 01}.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int tam;
typedef struct dados {
int **matriz, n, m, qtd_final;
int inicio;
int *estado_final;
}dados;
Pgina | 8
int i, j;
dados *d = (dados*)malloc(sizeof(dados));
FILE *arq = fopen(str, "r");
fscanf (arq, "%d %d", &d->n, &d->m); //n: nmero de estados. m: alfabeto.
d->matriz = (int**)malloc(d->n*sizeof(int*));
for (i=0; i<d->n; i++){
d->matriz[i] = (int*)malloc(d->m*sizeof(int));
}
for (i=0; i<d->n; i++){
for (j=0; j<d->m; j++){
fscanf(arq, "%d", &d->matriz[i][j]);
}
}
//Estado inicial
fscanf(arq, "%d", &d->inicio);
//Estado final
fscanf(arq, "%d", &d->qtd_final);
d->estado_final = (int*)malloc(d->qtd_final*sizeof(int));
for(i=0; i<d->qtd_final; i++){
fscanf(arq, "%d", &d->estado_final[i]);
}
fclose(arq);
return d;
}
int main(void){
int i, estado;
bool verificacao = false;
Pgina | 9
dados *dado;
char *arq1 = (char*)malloc(20*sizeof(char));
char *arq2 = (char*)malloc(20*sizeof(char));
int *teste = (int*)malloc(20*sizeof(int));
scanf("%s", arq1);
scanf("%s", arq2);
dado = ler_matriz_arq (strcat(arq1,".txt"));
teste = string_reconhecimento (strcat(arq2, ".txt"));
estado = dado->inicio;
for (i=0; i<tam; i++){
estado = dado->matriz[estado][teste[i]];
}
for (i=0; i<dado->qtd_final; i++){
if(estado == dado->estado_final[i]) verificacao = true;
}
if (verificacao) printf("TRUE");
else printf("FALSE");
return 0;
}
Pgina | 10
Aula 4: NFA
1) Construir NFAs para as seguintes linguagens regulares:
a. Todos os strings que contm exatamente 4 0s ou um nmero
par de 1s.
Pgina | 11
e. Todos os strings que contm um nmero par de 0s ou
exatamente dois 1s.
f. 0*1*0*0.
Pgina | 12
b. Exemplo 1: String 011.
(0, 011) = ( (0, 01), 1) = (0,1)(2,1) = {0, 3}
(0, 01) = ( (0, 0), 1) = (0,1)(1,1) = {0, 2}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 1}
(0, ) = {0}
A string 011 pertence a esta linguagem regular.
Exemplo 2: String 111.
(0, 111) = ( (0, 11), 1) = (0,1) = {0}
(0, 11) = ( (0, 1), 1) = (0,1) = {0}
(0, 1) = ( (0, ), 1) = (0,1) = {0}
(0, ) = {0}
A string 011 no pertence a esta linguagem regular.
c. Exemplo 1: String 001.
(0, 001) = ( (0, 00), 1) = (0,1)(1,1)(2,1) = {0, 3, 2}
(0, 00) = ( (0, 0), 0) = (0,0)(1,0) = {0, 1, 2}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 1}
(0, ) = {0}
A string 001 pertence a esta linguagem regular.
Exemplo 2: String 01.
(0, 01) = ( (0, 0), 1) = (0,1)(1,1) = {0, 3}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 1}
(0, ) = {0}
A string 01 no pertence a esta linguagem regular.
d. Exemplo 1: String 0101.
(0, 0101) = ( (0, 010), 1) = (0, 1)(1,1)(3,1) = {0, 2, 4}
(0, 010) = ( (0, 01), 0) = (0,0)(2,0) = {0, 1, 3}
(0, 01) = ( (0, 0), 1) = (0,1)(1,1) = {0, 2}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 1}
(0, ) = {0}
A string 0101 pertence a esta linguagem regular.
Pgina | 13
(0, 01) = ( (0, 0), 1) = (0, 1)(1, 1) = {0, 2}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 1}
(0, ) = {0}
e. Exemplo 1: String 001.
(0, 001) = ( (0, 00), 1) = (1, 1)(3, 1) = {1, 4}
(0, 00) = ( (0, 0), 0) = (2, 0)(3, 0) = {1, 3}
(0, 0) = ( (0, ), 0) = (1,0)(3, 0) = {2, 3}
(0, ) = {1, 3}
A string 001 pertence a esta linguagem regular.
Exemplo 2: String 01.
(0, 01) = ( (0, 0), 1) = (2, 1)(3, 1) = {2, 4}
(0, 0) = ( (0, ), 0) = (1,0)(3, 0) = {2, 3}
(0, ) = {1, 3}
A string 01 no pertence a esta linguagem regular.
f. Exemplo 1: String 01.
(0, 01) = ( (0, 0), 1) = (0, 1)(2, 1) = {1}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 2}
(0, ) = {0}
A string 01 no pertence a esta linguagem regular.
Exemplo 2: String 0110.
(0, 0110) = ( (0, 011), 0) = (1, 0) = {2}
(0, 011) = ( (0, 01), 1) = (1, 1) = {1}
(0, 01) = ( (0, 0), 1) = (0, 1)(2, 1) = {1}
(0, 0) = ( (0, ), 0) = (0,0) = {0, 2}
(0, ) = {0}
A string 0110 pertence a esta linguagem regular.
Pgina | 14
Aula 5: Converso NFA para DFA
0 1
p {p,q} {p}
q {r} {r}
r {s}
*s {s} {s}
Resoluo:
0 1
p {p,q} {p}
p,q {p,q,r} {p,r}
p,r {p,q,s} {p}
p,q,r {p,q,r,s} {p,r}
*p,q,s {p,q,r,s} {p,r,s}
*p,q,r,s {p,q,r,s} {p,r,s}
*p,r,s {p,q,s} {p,s}
*p,s {p,q,s} {p,s}
Pgina | 15
3) Converta o seguinte NFA em DFA. Represente usando tabela e
diagrama de transies.
0 1
p {q,s} {q}
*q {r} {q,r}
r {s} {p}
*s {p}
Resoluo:
0 1
p {q,s} {q}
*q {r} {q,r}
r {s} {p}
*q,r {r,s} {p,q,r}
*q,s {r} {p,q,r}
*p,q,r {q,r,s} {p,q,r}
*r,s {s} {p}
*q,r,s {r,s} {p,q,r}
*s lixo {p}
lixo lixo lixo
Pgina | 16
4) Converta o seguinte NFA em DFA. Represente usando tabela e
diagrama de transies.
0 1
p {p,q} {p}
q {r,s} {t}
r {p,r} {t}
*s
*t
Resoluo:
0 1
p {p,q} {p}
p,q {p,q,r,s} {p,t}
*p,q,r,s {p,q,r,s} {p,t}
*p,t {p,q} {p}
Pgina | 17
5) Converta o NFA da linguagem 0*1*0*0 em um DFA.
NFA DFA
0 1 0 1
q0 {q0, q2} {q1} q0 {q0, q2} {q1}
q1 {q2} {q1} q1 {q2} {q0}
*q2 {q2} - *q2 {q2} lixo
*{q0,
{q0, q2} {q1}
q2}
lixo lixo lixo
NFA
DFA
Pgina | 18
Aula 6:
1) Considere o .
a b c
a b c
p p {p, q} {p, q, r}
{p, q} {p, q} {p, q, r} {p, q, r}
*{p, q, r} {p, q, r} {p, q. r} {p, q, r}
a b c
*r
Pgina | 19
CL(p) = {p, q, r}
CL(q) = {q}
CL(r) = {r}
a b c
*{p, q, r} {p, q, r} {q, r} {p, q, r}
*{q, r} {p, q, r} {r} {p, q, r}
*{r} lixo lixo lixo
Lixo lixo lixo lixo
Pgina | 20
b. Considere M = ({q0, q1}, {0,1}, , q0, ). M o autmato
complementar de M? Justifique.
Pgina | 21
Aula 7: Expresses regulares (RE)
Pgina | 22
Aula 8: Expresses regulares (RE)
b. 00*11*
Pgina | 23
c. (00)*(11)*
d. (0 + 1)(0 + 1)*00
0(0(0+1)(0+1)*1+1)
Pgina | 25
Aula 9: Minimizao de DFAs
0 1
A B A
B A C
C D B
*D D A
E D F
F G E
G F G
H G D
B X2
C X1 X1
D X0 X0 X0
E X1 X1 - X0
F X2 - X1 X0 X1
G - X2 X1 X0 X1 X2
H X1 X1 X1 X0 X1 X1 X1
A B C D E F G
Pgina | 26
2) Desenhe a tabela de distines para esse autmato e construa
o DFA com o nmero mnimo de estados equivalentes.
0 1
A B E
B C F
*C D H
D E H
E F I
*F G B
G H B
H I C
*I A E
B X0
C X0 X0
D X2 X1 X0
E X1 X1 X0 X1
F X0 X0 X0 X0 X0
G X2 X1 X0 X2 X1 X0
H X1 X1 X0 X1 X1 X0 X1
I X0 X0 X0 X0 X0 X0 X0 X0
A B C D E F G H
Pgina | 27
3) Fornea um DFA mnimo que aceita todas as strings de 0s e 1s
que termina em 001. Prove que mnimo.
0 1
A B A
B C A
C C D
*D B A
B X2
C X1 X1
D X0 X0 X0
A B C
4) Fornea um DFA mnimo que aceita todas as strings de 0s e 1s
que contenha 110 como substring e verifique que o autmato
seja mnimo.
0 1
A A B
B A C
C D C
*D D D
B X2
C X1 X1
D X0 X0 X0
A B C
Pgina | 28
Aula 10: Lema do Bombeamento
Pgina | 29
Aula 11: CFG
|
|
|
||
||
|
b. {w | w comea e termina com o mesmo smbolo}
I
I 0I
I 1I
P: 1I1
0I0
G = {{E, I}, {0, 1}, P, E}
c. {w | |w| mpar e o seu smbolo do meio 0}.
I0
P: I 0I0
I 0I1
I 1I0
I 1I1
G = {I, {0, 1}, P, I}
d. Strings binrios com duas vezes mais 1s que 0s.
I
P: I 0I1I1I
I 1I0I1I
I 1I1I0I
Pgina | 30
G = {I, {0, 1}, P, I}
2) A gramtica a seguir gera a linguagem regular: 0*1(0+1)*
S A1B
A 0A |
B 0B | 1B |
Fornea derivaes mais esquerda e mais direita dos strings:
a. 00101
Mais esquerda:
S A1B 0A1B 00A1B 001B 0010B 00101B 00101
Mais direita:
S A1B A10B A101B A101 0A101 00A101 00101
b. 1001
Mais esquerda:
S A1B 0A1B 00A1B 000A1B 0001B 00011B 00011
Mais direita:
S A1B A11B A11 0A11 00A11 000A11 00011
Pgina | 31
Aula 12: CFG
|
0|1
b. {w | w contm um nmero par de 0s}.
|1|
0
c. {w | w possui o terceiro smbolo da direita para a esquerda
igual a 1}.
0|1
||
1
d. Strings que sejam comentrios da forma /#(a + b)#/
|||
/# #/
e. {w | w possui nmero igual de 0s e 1s}.
01|10|
2) Mostre que para toda linguagem regular h uma gramtica
regular.
Para toda linguagem regular h uma gramtica regular, pois, a
concatenao, a unio, o fechamento e o caso base podem ser
escritos com uma gramtica regular.
Unio: |
Concatenao:
Fechamento: |
Pgina | 32
3) Monte uma CFG que reconhece DOUBLE numa linguagem de
programao.
0|1| |9
|
. | . |
+| |
|
Pgina | 33
Aula 13: CFG
|
|
|
||
b. { | = + }
|
||
c. {+ | }
|
d. { | , }
|
|
e. { + |, > }
|
|
f. { | }
|||
g. { | = + }
|
|
Pgina | 34
h. { | + }
||
|
|
i. { + |, > }
|
|
Pgina | 35
Aula 14: CFG
1) Seja G a gramtica:
S abSc | A
A cAd | cd
a. D uma derivao de ababccdd.
b. Construa rvore de anlise sinttica do item a.
Pgina | 36
c. Construa a rvore de anlise sinttica para as derivaes
de a e b.
Letra a)
Letra b)
{( ) ( ) | > 0 , > 0}
3) Seja G a gramtica:
S SAB |
Pgina | 37
A aA | a
B bB |
a. D uma derivao esquerda de abbaab.
b. D duas derivaes esquerda de aa.
c. Construa as rvores de anlise sinttica de (b).
Pgina | 38
4) Mostre que a gramtica abaixo ambgua:
S 0A | 1B
A 0AA | 1S | 1
B 1BB | 0S | 0
Resoluo: Como temos duas rvores de anlise sinttica
diferentes, a gramtica ambgua.
5) Dado a gramtica:
S AB | aaB
A a | aA
Bb
a. D duas derivaes mais esquerda para aab.
Pgina | 39
c. Encontre uma gramtica no ambgua para a CFG.
Pgina | 40
Aula 15: PDA
b. { | }
c. { | ( + ) }
d. { | }
Pgina | 41
Aula 16: PDA
b. { |, }
c. | = = }
d. { | }
Pgina | 42
2) Construa PDAs determinsticos para:
a. Strings binrios com duas vezes mais 1s que 0s.
(q0, abcccc, 0 ) (q0, bcccc, xx0 ) (q1, bcccc, xx0 ) (q1, cccc, xxxx0 )
(q2, cccc, xxxx0 ) (q2, ccc, xxx0 ) (q2, cc, xx0 )
(q2, c, x0 ) (q2, , 0 ) (q3, , 0 )
(q0, 00100, 0 ) (q0, 0100, 00 ) (q0, 100, 000 ) (q1, 100, 000 )
(q1, 00,000 ) (q2, 00, 000 ) (q2, 0, 00 ) (q2, , 0 )
(q3, , 0 )
Pgina | 43
Exerccio 1c) String aabbc.
(q0, 00111, 0 ) (q0, 0111, x0 ) (q0, 111, xxx0 ) (q1, 11, xx0 )
(q1, 1, x0 ) (q1, , 0 ) (q2, , 0 )
(q0, 1011, 0 ) (q1, 011, 10 ) (q2, 11, 0$10 ) (q2, 1, $10 ) (q1, 1, 10 )
(q3, , 1$10 )
Pgina | 44
Aula 17: PDA
1) Responda:
a. Em que casos se diz que uma gramtica ambgua?
Pgina | 45
Aula 18: PDA
Pgina | 46
(0 , , 0 ) (0 , , 0 ) (1 , , 0 ) (1 , , 0 )
(0 , , 0 ) (0 , , 0 ) (0 , , 0 ) (1 , , 0 )
(1 , , 0 )
(0 , , 0 ) (0 , , 0 ) (0 , , 0 ) (0 , , 0 )
(1 , , 0 )
Logo, aaa L(M).
2) Construir um PDA correspondente para a gramtica:
S aABB | aAA
A aBB | a
B bBB | A
|
|
Pgina | 47
Como podemos escrever essa linguagem com um CFG, ento esta
linguagem livre de contexto.
5) Prove que a linguagem { |, , > } livre de
contexto.
10|
01|01
Pgina | 48
Aula 19: Mquina de Turing
b. { | }.
Pgina | 49
c. { | }.
Pgina | 50
Aula 20: Mquina de Turing
B A b C
(1 , , ) - - -
(2 , , ) (1 , , ) (1 , , ) (1 , , )
- (2 , , ) - (2 , , )
a. Faa a computao da string aabca.
0 1 1 1 1 1 1
2 2 2 2 2 2
0 1 1 1 1 1 2 2
2 2 2
c. D o diagrama de transio de M.
Pgina | 51
d. Descreva o resultado de uma computao de M.
b. { |, > }
Pgina | 52
c. { | }
Pgina | 53
Aula 21: Mquina de Turing
Pgina | 54
b. Concatenar uma cpia do reverso de uma string de
entrada.
Pgina | 55