Ir ao conteúdo

Posts recomendados

Postado

Tenho um Automato reconhecedor de linguagem formal deterministico em C so que preciso agora fazer o mesmo usando Fila e Recursividade Alguem tem dicas?

#include <stdio.h>
#include <string.h>
#define TAM 100

void qInicio ( char palavra[TAM],int size);
void q0( int contador, char palavra[TAM],int size);
void q1( int contador, char palavra[TAM],int size);
void q2( int contador, char palavra[TAM],int size);
void q3( int contador, char palavra[TAM],int size);
void q4( int contador, char palavra[TAM],int size);
void q5( int contador, char palavra[TAM],int size);
void q6( int contador, char palavra[TAM],int size);
void q7( int contador, char palavra[TAM],int size);
void q8( int contador, char palavra[TAM],int size);
void q9( int contador, char palavra[TAM],int size);
void qFim();
void qErro();

int main(){
	int size = 0;
    char palavra[TAM]; //casos de comprovação: 
    fflush(stdin);
    gets(palavra);
    
    while(palavra[size] != '\0')
    {
    	size++;    	
	}
    
    qInicio(palavra,size);
    
    return 0;
}

void qInicio ( char palavra[TAM],int size ){
    int contador = 0;
    q0( contador, palavra,size );
}

void q0( int contador, char palavra[TAM] ,int size){
    if ( contador < TAM ){
        if ( palavra[contador] == 'f' ){
           q1( ++contador, palavra,size ); 

        }else if (palavra[contador] == 'c'){
           q8( ++contador, palavra ,size); 

        }else{
            qErro();
        }

    }
}

void q1( int contador, char palavra[TAM] ,int size){
    if ( contador < TAM ){
        if ( palavra[contador] == 'l' ){
          q2( ++contador, palavra ,size); 

        }else if (palavra[contador] == 'o'){
           q3( ++contador, palavra,size ); 

        }else{
            qErro();
        }

    }
}

void q2( int contador, char palavra[TAM] ,int size){
    if ( palavra[contador] == 'o' ) {
        q5 ( ++contador, palavra,size );
        
    } else {
        qErro();
    }
}

void q3( int contador, char palavra[TAM] ,int size){
    if ( palavra[contador] == 'r' ) {
        q4 ( ++contador, palavra ,size);
        
    } else {
        qErro();
    }
}

void q4( int contador, char palavra[TAM] ,int size){
	if(contador == size)
	{
		qFim();
	}
    
    else
    {
    	qErro();
	}
    
}

void q5( int contador, char palavra[TAM] ,int size){
    if ( palavra[contador] == 'a' ) {
        q6 ( ++contador, palavra ,size);
        
    } else {
        qErro();
    }
}

void q6( int contador, char palavra[TAM] ,int size){
    if ( palavra[contador] == 't' ) {
        q7 ( ++contador, palavra ,size);
        
    } else {
        qErro();
    }
}

void q7( int contador, char palavra[TAM],int size ){
    if(contador == size)
	{
		qFim();
	}
    
    else
    {
    	qErro();
	}
}

void q8( int contador, char palavra[TAM] ,int size){
    if ( contador < TAM ){
        if ( palavra[contador] == 'h' ){
          q9( ++contador, palavra ,size); 

        }else{
            qErro();
        }

    }
}

void q9( int contador, char palavra[TAM] ,int size){
    if ( palavra[contador] == 'a' ) {
        q3 ( ++contador, palavra ,size);
        
    } else {
        qErro();
    }
}


void qErro(){
    printf("Palavra regeitada pelo automata!\n");
}

void qFim(){
    printf("Palavra Aceita pelo automata!\n");
}

 

Postado

Dica rápida...

 

Dica 1) Isso daqui é de chorar! :P 

 

char palavra[TAM],int size

 

Pode usar algo mais elegante como:

 


typedef  struct {

   char*value;

   size;

} string;

 

Dica 2) Use strlen() para saber o tamanho de uma string.

 

Dica 3) Use strchr() para pesquisar um caracter dentro de um string.

 

experimente criar a seguinte variável.

 

char* alfabeto = {"abcdefghijklmnopqrstuvxyz"};

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...