# DFA for accepting the language L = {an bm | n+m=odd}

• Difficulty Level : Medium
• Last Updated : 08 Mar, 2019

Design a deterministic finite automata (DFA) for accepting the language For creating DFA for language L = {an bm | n+m=odd} use elementary mathematics which says-

Attention reader! Don’t stop learning now.  Practice GATE exam well before the actual exam with the subject-wise and overall quizzes available in GATE Test Series Course.

Learn all GATE CS concepts with Free Live Classes on our youtube channel.

odd + even = odd, and
even+odd  = odd 

Examples:

Input:  a a b b b
Output:  ACCEPTED
// n = 2, m = 3, 2 + 3 = 5 (odd)

Input:  a a a b b b
Output:  NOT ACCEPTED
// n = 3, m = 3, 3 + 3 = 6 (even)

Input:  a a a a b b b
Output:  ACCEPTED
// n = 4, m = 3, 4 + 3 = 7 (odd)


Approaches:
There is 2 cases which results in acceptance of string:

1. If n is odd and m is even then their sum will be odd
2. If n is even and m is odd then their sum will be odd

Any other combination result is the rejection of the input string.

Description:
Given DFA has 2 parts. First part consisting of states 0, 1, 5 and 6 which is for n is odd and m is even. Second part consist of states 2, 3 and 4 is for n is even and m is odd.

DFA State Transition Diagram: Let’s see code for the demonstration:

## C/C++

 // C program to implement DFS that accepts// all string which follow the language// L = { a^n b^m ; n+m=odd }#include #include   // dfa tells the number associated// string end in which state.int dfa = 0;  // This function is for// the starting state (Q0)of DFAvoid start(char c){    if (c == 'a') {        dfa = 1;    }    else if (c == 'b') {        dfa = 2;    }      // -1 is used to check for any invalid symbol    else {        dfa = -1;    }}  // This function is for the first state (Q1) of DFAvoid state1(char c){    if (c == 'a') {        dfa = 0;    }    else if (c == 'b') {        dfa = 5;    }    else {        dfa = -1;    }}  // This function is for the second state (Q2) of DFAvoid state2(char c){    if (c == 'b') {        dfa = 3;    }    else {        dfa = -1;    }}  // This function is for the third state (Q3)of DFAvoid state3(char c){    if (c == 'b') {        dfa = 4;    }    else {        dfa = -1;    }}  // This function is for the fourth state (Q4) of DFAvoid state4(char c){    if (c == 'b') {        dfa = 3;    }    else {        dfa = -1;    }}  // This function is for the fifth state (Q5) of DFAvoid state5(char c){    if (c == 'b') {        dfa = 6;    }    else {        dfa = -1;    }}  // This function is for the sixth state (Q6) of DFAvoid state6(char c){    if (c == 'b') {        dfa = 5;    }    else {        dfa = -1;    }}  int isAccepted(char str[]){    // store length of string    int i, len = strlen(str);      for (i = 0; i < len; i++) {        if (dfa == 0)            start(str[i]);          else if (dfa == 1)            state1(str[i]);          else if (dfa == 2)            state2(str[i]);          else if (dfa == 3)            state3(str[i]);          else if (dfa == 4)            state4(str[i]);          else if (dfa == 5)            state5(str[i]);          else if (dfa == 6)            state6(str[i]);          else            return 0;    }    if (dfa == 2 || dfa == 4 || dfa == 6 || dfa == 1)        return 1;    else        return 0;}  // driver codeint main(){    char str[] = "aaaabbbbb";    if (isAccepted(str))        printf("ACCEPTED");    else        printf("NOT ACCEPTED");    return 0;}

## Java

 // Java program to implement DFS that accepts// all string which follow the language// L = { a^n b^m ; n+m=odd }class GFG{  // dfa tells the number associated// string end in which state.static int dfa = 0;  // This function is for// the starting state (Q0)of DFAstatic void start(char c){    if (c == 'a')    {        dfa = 1;    }    else if (c == 'b')     {        dfa = 2;    }      // -1 is used to check for any invalid symbol    else     {        dfa = -1;    }}  // This function is for // the first state (Q1) of DFAstatic void state1(char c){    if (c == 'a')     {        dfa = 0;    }    else if (c == 'b')     {        dfa = 5;    }    else     {        dfa = -1;    }}  // This function is for the// second state (Q2) of DFAstatic void state2(char c){    if (c == 'b')    {        dfa = 3;    }    else     {        dfa = -1;    }}  // This function is for the// third state (Q3)of DFAstatic void state3(char c){    if (c == 'b')    {        dfa = 4;    }    else     {        dfa = -1;    }}  // This function is for the// fourth state (Q4) of DFAstatic void state4(char c){    if (c == 'b')     {        dfa = 3;    }    else     {        dfa = -1;    }}  // This function is for the// fifth state (Q5) of DFAstatic void state5(char c){    if (c == 'b')    {        dfa = 6;    }    else     {        dfa = -1;    }}  // This function is for the// sixth state (Q6) of DFAstatic void state6(char c){    if (c == 'b')     {        dfa = 5;    }    else     {        dfa = -1;    }}  static int isAccepted(char str[]){    // store length of string    int i, len = str.length;      for (i = 0; i < len; i++)     {        if (dfa == 0)            start(str[i]);          else if (dfa == 1)            state1(str[i]);          else if (dfa == 2)            state2(str[i]);          else if (dfa == 3)            state3(str[i]);          else if (dfa == 4)            state4(str[i]);          else if (dfa == 5)            state5(str[i]);          else if (dfa == 6)            state6(str[i]);          else            return 0;    }    if (dfa == 2 || dfa == 4 ||         dfa == 6 || dfa == 1)        return 1;    else        return 0;}  // Driver codepublic static void main(String[] args) {    char str[] = "aaaabbbbb".toCharArray();    if (isAccepted(str) == 1)        System.out.println("ACCEPTED");    else        System.out.println("NOT ACCEPTED");}}   // This code is contributed by PrinciRaj1992

## Python3

 # Python3 program to implement DFS that accepts  # all Stringing which follow the language  # L = a ^ n b ^ m n + m = odd     # This function is for the dfa = starting # dfa = state (zeroth) of DFA  def start(c):     if (c == 'a'):         dfa = 1    elif (c == 'b'):         dfa = 2            # -1 is used to check for any     # invalid symbol      else:         dfa = -1    return dfa     # This function is for the first  # dfa = state of DFA  def state1(c):      if (c == 'a'):         dfa = 0    elif (c == 'b'):         dfa = 5    else:         dfa = -1    return dfa     # This function is for the second  # dfa = state of DFA  def state2(c):     if (c == 'b'):         dfa = 3    else:         dfa = -1    return dfa     # This function is for the third  # dfa = state of DFA  def state3(c):     if (c == 'b'):         dfa = 4    else:         dfa = -1    return dfa     # This function is for the fourth # dfa = state of DFA  def state4(c):     if (c == 'b'):         dfa = 3    else:         dfa = -1    return dfa     # This function is for the fifth  # dfa = state of DFA  def state5(c):      if (c == 'b'):         dfa = 6    else:         dfa = -1    return dfa         # This function is for the sixth  # dfa = state of DFA  def state6(c):      if (c == 'b'):         dfa = 5    else:         dfa = -1    return dfa     def isAccepted(String):             # store length of Stringing      l = len(String)             # dfa tells the number associated     # with the present dfa = state     dfa = 0    for i in range(l):          if (dfa == 0):              dfa = start(String[i])              elif (dfa == 1):              dfa = state1(String[i])              elif (dfa == 2) :             dfa = state2(String[i])              elif (dfa == 3) :             dfa = state3(String[i])              elif (dfa == 4) :             dfa = state4(String[i])               elif (dfa == 5) :             dfa = state5(String[i])              elif (dfa == 6):              dfa = state6(String[i])              else:             return 0    if(dfa == 1 or dfa == 2 or dfa == 4 or dfa == 6) :         return 1    else:         return 0    # Driver code  if __name__ == "__main__" :     String = "aaaabbbbb"    if (isAccepted(String)) :         print("ACCEPTED")      else:         print("NOT ACCEPTED")  

## C#

 // C# program to implement DFS that accepts// all string which follow the language// L = { a^n b^m ; n+m=odd }using System;  class GFG{      // dfa tells the number associated    // string end in which state.    static int dfa = 0;      // This function is for    // the starting state (Q0)of DFA    static void start(char c)    {        if (c == 'a')        {            dfa = 1;        }        else if (c == 'b')         {            dfa = 2;        }          // -1 is used to check for any invalid symbol        else        {            dfa = -1;        }    }      // This function is for     // the first state (Q1) of DFA    static void state1(char c)    {        if (c == 'a')         {            dfa = 0;        }        else if (c == 'b')         {            dfa = 5;        }        else        {            dfa = -1;        }    }      // This function is for the    // second state (Q2) of DFA    static void state2(char c)    {        if (c == 'b')        {            dfa = 3;        }        else        {            dfa = -1;        }    }      // This function is for the    // third state (Q3)of DFA    static void state3(char c)    {        if (c == 'b')        {            dfa = 4;        }        else        {            dfa = -1;        }    }      // This function is for the    // fourth state (Q4) of DFA    static void state4(char c)    {        if (c == 'b')         {            dfa = 3;        }        else        {            dfa = -1;        }    }      // This function is for the    // fifth state (Q5) of DFA    static void state5(char c)    {        if (c == 'b')        {            dfa = 6;        }        else        {            dfa = -1;        }    }      // This function is for the    // sixth state (Q6) of DFA    static void state6(char c)    {        if (c == 'b')         {            dfa = 5;        }        else        {            dfa = -1;        }    }      static int isAccepted(char []str)    {        // store length of string        int i, len = str.Length;          for (i = 0; i < len; i++)         {            if (dfa == 0)                start(str[i]);              else if (dfa == 1)                state1(str[i]);              else if (dfa == 2)                state2(str[i]);              else if (dfa == 3)                state3(str[i]);              else if (dfa == 4)                state4(str[i]);              else if (dfa == 5)                state5(str[i]);              else if (dfa == 6)                state6(str[i]);              else                return 0;        }        if (dfa == 2 || dfa == 4 ||             dfa == 6 || dfa == 1)            return 1;        else            return 0;    }      // Driver code    public static void Main(String[] args)     {        char []str = "aaaabbbbb".ToCharArray();        if (isAccepted(str) == 1)            Console.WriteLine("ACCEPTED");        else            Console.WriteLine("NOT ACCEPTED");    }}   // This code contributed by Rajput-Ji

## PHP

 

Output:
ACCEPTED

My Personal Notes arrow_drop_up