Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Graciele

Grafos

Recommended Posts

Vou colocar o programa que eu fiz aki e no final coloco oq eu queria fazer e nao consigo...

#include <iostream>#include <cstdlib>#define tamanho 3struct EGrafos{       char fo [100];       char alfabeto_entrada [3];       int mat_transicao [3];       char entrada [100];};EGrafos g;int main(){  int num_estado, num=-1, num2, num3=-1, num4, num5 =-1, num6, n_estado, a, b, c, qtd, i;  cout << "Numero de Estados: ";  cin >> n_estado;  cout << "Determinar funcao de saida (fo): " << endl;  for (num_estado=0; num_estado < n_estado; num_estado++)  {      num = num + 1;      cout << "S" << num << ": ";      cin >> g.fo [num_estado];  }  cout << endl;  cout << "Determine os 3 alfabetos de entrada: ";  cout << endl;  for (a=0; a <3; a++)  {      cin >> g.alfabeto_entrada[a];  }  cout << endl;  cout << "Transicoes: ";  cout << endl;  num2 = n_estado;    for (n_estado=0; n_estado < num2; n_estado++)      {         num3 = num3 + 1;         cout << "S" << num3 << " x " << g.alfabeto_entrada[0] << " : ";         cin >> g.mat_transicao [n_estado];         cout << "S" << num3 << " x " << g.alfabeto_entrada[1] << " : " ;         cin >> g.mat_transicao [n_estado];         cout << "S" << num3 << " x " << g.alfabeto_entrada[2] << " : " ;         cin >> g.mat_transicao [n_estado];      }       cout << endl;       cout << "Digite a quantidade de variaveis na entrada: " ;       cin >>  qtd;       cout << endl;       cout << "Digite a cadeia a ser processada: ";       cout << endl;      for (num4=0; num4<qtd; num4++)      {         cin >> g.entrada [num4];      }       cout << "Saida: ";       cout << endl;/*      for (n_estado=0; n_estado < num6; n_estado++)      {         num5 = num5 + 1;         cout << "(S" << num5 << " , " << g.mat_transicao [n_estado] << " , " << g.alfabeto_entrada[0] << " , " << g.fo [num_estado]<< " )";         cout << endl;         cout << g.mat_transicao;         cout << "S" << num5 << " , " << g.mat_transicao [n_estado] << " , " << g.alfabeto_entrada[1] << " , " << g.fo [num_estado] << " )";         cout << endl;         cout << "S" << num5 << " , " << g.mat_transicao [n_estado] << " , " << g.alfabeto_entrada[2] << " , " << g.fo [num_estado] << " )";         cout << endl;      }*/      system("PAUSE");      return 0;}

Bom eu gostaria de mostrar na saida o seguinte:(S0, a, S1, A )(S1, a, S1, B )(S1, a, S1, B )(S1, c, S2, B )(S1, a, S1, B )(S2, a, S2, A )(S2, - , - , A )A 1ª coluna significa o começo...A 2ª a Entrada...A 3ª o Estado...e a 4ª a Saida...que foi dada lah em cima "for (num_estado=0; num_estado < n_estado; num_estado++) { num = num + 1; cout << "S" << num << ": "; cin >> g.fo [num_estado]; }"Nao consigo gerar essa tabela...Tem como me ajudar...Sera que eu tenho q acrescentar mais alguma função???To tentando implemantar um AFD que processe cadeia de entrada....O que eu fiz fou só para cadastrar...Desde já agradeço a atanção...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O "A" só significa que o S0 corresponde a "A"Assim como S1 corresponde a Be S2 corresponde a A tb...soh isso...é a variavel de saida...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não estou vendo lógica nessa tabela.

tem dados que se repetem e tal, se voce explicar melhor podemos ajudar.

como voce chegou a essa tabela?

 

(S0, a, S1, A )(S1, a, S1, B )(S1, a, S1, B )(S1, c, S2, B )(S1, a, S1, B )(S2, a, S2, A )(S2, - , - , A )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar...

 

To tentando montar um automato...

 

você conhece grafo???

 

tendo essa tabela...

 

Criar       t1      t2      t3     t4     t5     t6Entrada     a       a       a       c      a      - Estado      S0     S1      S1      S1      S2    S2Saída       A       B       B      B      A      A

Sempre começa com S0...

Ai você começa a comparar "S0" com "a" da quem "S1"...

S1 x a: S1

S1 x a: S1

S1 x c: S2

S2 x a: S2

...

é a parte de transição do meu sodigo...

 

A B B B A A sao apenas saidas q foi definido no inicio de cod quando pede para determinar função de saida...

 

 

Vou colocar o cod de novo pq eu melhorei ele porem ainda nao consegui obter o resultado desejado...

 

#include <iostream>#include <cstdlib>#include <string>#define tamanho 3struct EGrafos{       char fo [100];       char alfabeto_entrada [3];       int mat_transicao [3][100];};EGrafos g;int main(){  int num_estado, num, num2, n, n_estado, i, n_entrada, s, indice;  char cadeia [100];  strlen(cadeia);  cout << "Numero de Estados: ";  cin >> n_estado;  cout << "Determinar funcao de saida (fo): " << endl;  for (num_estado=0; num_estado < n_estado; num_estado++)  {      cout << "S" << num_estado << ": ";      cin >> g.fo [num_estado];  }  cout << endl;  cout << "Determine os 3 alfabetos de entrada: ";  cout << endl;  for (num=0; num <3; num++)  {      cin >> g.alfabeto_entrada[num];  }  cout << endl;  cout << "Transicoes: ";  cout << endl;  num2 = n_estado;    for (n_estado=0; n_estado < num2; n_estado++)         for (n_entrada=0; n_entrada < num2; n_entrada++)      {         cout << "S" << n_estado << " x " << g.alfabeto_entrada[n_entrada] << " : ";         cin >> g.mat_transicao [n_estado][3];      }       cout << endl;       cout << "Digite a cadeia a ser processada: ";       cout << endl;       cin >> cadeia;       n = strlen(cadeia);       cout << "Saida: ";       cout << endl;       s=0;       for (i = 0; i<n ; i++)       {           cout << "(" << s << ", " << cadeia[i] << ", ";           s = g.mat_transicao[s][GetIndice(cadeia[i])] ;           cout << s;           cout << endl;       }      system("PAUSE");      return 0;}int main (void){    indice ();    return 0;}

 

Por um acaso esse problema tem haver com aquele de GetIndice que você esta me ajudando..

Eu coloquei aki tb pq alguem poderia ter uma alternativa...

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu código no meu compilador Dev-C++ não rodou.vamos ver se consigo te ajudar.quando voce diz isso por exemplo S1 x c: S2voce está no estado S1, le um caracter c e vai para estado S2, quem irá indicar isso a voce?um conjunto de regras.idéia pra fazer isso que voce quer:- defina uma estrutura que conterá as regras.- leia as regras.depois disso quando voce ler o alfabeto de entrada, voce precisa comparar cada caracter com cada regra armazenada na estrutura, se voce achar regra para aquele caracter naquele estado, seu estado atual é atualizado, se voce não encontrar regra para esse caracter o alfabeto de entrada não é reconhecido pelo automato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar...Vai dar mais trabalho neh???Vou ter que criar regra pra cada um...certo???

vai dá mais trabalho sim, mas não vai ter erro

desse jeito que voce fez nunca voce vai percorrer corretamente o grafo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok Obrigada...Acho melhor fazer isso entao...Se tiver alguma outra duvida eu volto aki e te procuro...Obrigada pela Atenção...Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.