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

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-

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
3. 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 DFA  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  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  void state2(char c)  {      if (c == 'b') {          dfa = 3;      }      else {          dfa = -1;      }  }     // This function is for the third state (Q3)of DFA  void state3(char c)  {      if (c == 'b') {          dfa = 4;      }      else {          dfa = -1;      }  }     // This function is for the fourth state (Q4) of DFA  void state4(char c)  {      if (c == 'b') {          dfa = 3;      }      else {          dfa = -1;      }  }     // This function is for the fifth state (Q5) of DFA  void state5(char c)  {      if (c == 'b') {          dfa = 6;      }      else {          dfa = -1;      }  }     // This function is for the sixth state (Q6) of DFA  void 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 code  int 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 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)          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

Small things always make you to think big

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.