O trabalho consiste em escrever um programa que lê a descrição de um autômato finito e verifica se determinadas cadeias fazem parte da linguagem reconhecida por esse autômato finito.
A descrição do autômato a ser executado é feita num arquivo que tem o seguinte formato:
1. na primeira linha do arquivo vem o número de símbolos do alfabeto
2. em seguida vem o alfabeto sobre o qual o autômato é definido
3. em seguida vem o número de estados do autômato
4. em seguida vem uma seqüência de comandos
state <label> [initial] [final]
Cada linha dessas descreve um estado. Cada estado possui obrigatoriamente um nome (label) e pode ser um estado inicial e/ou final ou um estado qualquer.
Cada uma dessas declarações descreve uma transição. Os estados devem ter sido declarados anteriormente. As letras indicam quais símbolos do alfabeto levam àquela transição.
Abaixo segue um exemplo de autômato e seu respectivo arquivo.
Exemplo:
Arquivo
3
a b c
3
state s1 initial final
state s2
state s3
transition s1 s1 b
transition s1 s2 a
transition s2 s1 b c
transition s1 s3 c
transition s3 s1 a b
transition s2 s3 a
transition s3 s2 c
O seu programa deve perguntar o nome do arquivo que contém a descrição do autômato a ser executado.
Em seguida, o usuário pode digitar cadeias de caracteres e o programa deve indicar se:
1) a cadeia pertence à linguagem do autômato finito;
2) ela não pertence;
3) um erro ocorreu (por exemplo, a cadeia contém caracteres que não pertencem ao alfabeto especificado).
Além de indicar se a cadeia pertence ou não à linguagem, o programa deve permitir ao usuário escolher se quer visualizar os estados ativos em cada passo do autômato.
já implementei parte do programa queria ajuda no resto!!!
Pergunta
Tiago Trevizan
O trabalho é o Seguinte !!!!
O trabalho consiste em escrever um programa que lê a descrição de um autômato finito e verifica se determinadas cadeias fazem parte da linguagem reconhecida por esse autômato finito.
A descrição do autômato a ser executado é feita num arquivo que tem o seguinte formato:
1. na primeira linha do arquivo vem o número de símbolos do alfabeto
2. em seguida vem o alfabeto sobre o qual o autômato é definido
3. em seguida vem o número de estados do autômato
4. em seguida vem uma seqüência de comandos
state <label> [initial] [final]
Cada linha dessas descreve um estado. Cada estado possui obrigatoriamente um nome (label) e pode ser um estado inicial e/ou final ou um estado qualquer.
5. em seguida vem uma seqüência de comandos
transition <estado origem> <estado destino> <letras>
Cada uma dessas declarações descreve uma transição. Os estados devem ter sido declarados anteriormente. As letras indicam quais símbolos do alfabeto levam àquela transição.
Abaixo segue um exemplo de autômato e seu respectivo arquivo.
Exemplo:
Arquivo
3
a b c
3
state s1 initial final
state s2
state s3
transition s1 s1 b
transition s1 s2 a
transition s2 s1 b c
transition s1 s3 c
transition s3 s1 a b
transition s2 s3 a
transition s3 s2 c
O seu programa deve perguntar o nome do arquivo que contém a descrição do autômato a ser executado.
Em seguida, o usuário pode digitar cadeias de caracteres e o programa deve indicar se:
1) a cadeia pertence à linguagem do autômato finito;
2) ela não pertence;
3) um erro ocorreu (por exemplo, a cadeia contém caracteres que não pertencem ao alfabeto especificado).
Além de indicar se a cadeia pertence ou não à linguagem, o programa deve permitir ao usuário escolher se quer visualizar os estados ativos em cada passo do autômato.
já implementei parte do programa queria ajuda no resto!!!
PROGRAMA !!!!
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int t;
struct transition
{
char* origem;
char* destino;
char letra;
};
struct state
{
char* nome;
int inicial;
int final;
};
void main()
{
ifstream arqent;
char* alfabeto;
char caminho[100],estado[10],temp[20];
int i,tam,estados;
cout<<"\nDigite o caminho do arquivo:\n";
gets(caminho);
arqent.open(caminho);
if (!arqent)
cout<<"\nArquivo não pode ser aberto!";
else
{
arqent>>tam;
alfabeto = new char[tam];
for(i=0;i<tam;i++)
{
arqent>>alfabeto;
}
arqent>>estados;
state e[6];
for (i=0;i<estados;i++)
{
arqent>>temp;
if (strcmp("state",temp)==0)
arqent>>e.nome;
arqent>>temp;
if (strcmp("initial",temp)==0)
e.inicial=1;
arqent>>temp;
if (strcmp("final",temp)==0)
e.final=1;
}
t=estados*tam;
transition transicao[25];
for(i=0;i<t;i++)
{
arqent>>temp;
arqent>>transicao.origem;
arqent>>transicao.destino;
arqent>>transicao.letra;
}
char* cadeia;
cout<<"\nDigite a cadeia: ";
gets(cadeia);
}
getch();
arqent.close();
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.