Graciele 0 Denunciar post Postado Março 12, 2007 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
Kandrade 7 Denunciar post Postado Março 14, 2007 essa tabela que voce quer criar é a tabela de regras?tipo:(S0, a, S1, A )estado atual S0, le "a", vai para estado S1.não entendi o "A". Compartilhar este post Link para o post Compartilhar em outros sites
Graciele 0 Denunciar post Postado Março 14, 2007 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
Kandrade 7 Denunciar post Postado Março 15, 2007 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
Graciele 0 Denunciar post Postado Março 15, 2007 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
Kandrade 7 Denunciar post Postado Março 15, 2007 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
Graciele 0 Denunciar post Postado Março 15, 2007 Vou tentar...Vai dar mais trabalho neh???Vou ter que criar regra pra cada um...certo??? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Março 15, 2007 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
Graciele 0 Denunciar post Postado Março 16, 2007 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