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

C program that contains a string XOR each character in this string with 0 ,127

Queue in Data Structure(DS)

Implementation of stack Using Array