C program for DFA accept binary string which decimal equivalent is divisible by 5

DFA accept binary string which decimal equivalent is divisible by 5  

 

Binary string decimal equivalent(a) We need that the number of a's will be only multiple of 5, mod(5)=0 e.g 0mod(5)=0,5mod(5)=0,10mod(5)=0

#include <stdio.h>

#define TOTAL_STATES 5

#define FINAL_STATES 1

#define ALPHABET_CHARCTERS 2

#define UNKNOWN_SYMBOL_ERR 0

#define NOT_REACHED_FINAL_STATE 1

#define REACHED_FINAL_STATE 2

enum DFA_STATES{q0,q1,q2,q3,q4};

enum input{a,b};

int Accepted_states[FINAL_STATES]={q0};

char alphabet[ALPHABET_CHARCTERS]={'0','1'};

int Transition_Table[TOTAL_STATES][ALPHABET_CHARCTERS];

int Current_state=q0;

void DefineDFA()

{

    Transition_Table[q0][0] = q0;

    Transition_Table[q0][1] = q1;

    Transition_Table[q1][0] = q2;

    Transition_Table[q1][1] = q3;

    Transition_Table[q2][0] = q4;

    Transition_Table[q2][1] = q0;

    Transition_Table[q3][0] = q1;

    Transition_Table[q3][1] = q2;

    Transition_Table[q4][0] = q3;

    Transition_Table[q4][1] = q4;

}

int DFA(char current_symbol)

{

int i,pos;

    for(pos=0;pos<ALPHABET_CHARCTERS; pos++)

        if(current_symbol==alphabet[pos])

            break;//stops if symbol is defferent

    if(pos==ALPHABET_CHARCTERS)

         return UNKNOWN_SYMBOL_ERR;

    for(i=0;i<FINAL_STATES;i++)

 if((Current_state=Transition_Table[Current_state][pos])==Accepted_states[i])

            return REACHED_FINAL_STATE;

    return NOT_REACHED_FINAL_STATE;

}

int main(void)

{

    char current_symbol;

    int result;


    DefineDFA();

    printf("Enter a string with '0' s and '1's:\n\n");



    while((current_symbol=getchar())!= '\n')

        if((result= DFA(current_symbol))==UNKNOWN_SYMBOL_ERR)

            break;

    switch (result) {

    case UNKNOWN_SYMBOL_ERR:printf("Unknown Symbol %c",current_symbol);

 break;

    case NOT_REACHED_FINAL_STATE:printf("Not accepted"); break;

    case REACHED_FINAL_STATE:printf("Accepted");break;

    default: printf("Unknown Error");

    }

    printf("\n\n\n");

    return 0;

}


DFA REPRESENTATION -:






Transition table of DFA accept binary string decimal equivalent is divisible by 5:-












Comments

Popular posts from this blog

Display Browser information using javascript

Understanding Activation Functions in Deep Learning and Machine Learning

Understanding the Differences between POST, PUT, and PATCH in REST APIs