Ir para conteúdo
Fórum Script Brasil
  • 0

Automato em C++


Tiago  Trevizan

Pergunta

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

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...