Related Articles

# Construct a DFA which accept the language L = {anbm | n > =1, (m) mod 3 = 1}

• Last Updated : 11 Jul, 2019

Problem: Construct a DFA which accept the language L = {anbm | n > =1, (m) mod 3 = 1}.

Explanation:
For constructing the DFA, the following things to be remember:

``` which means any no of elements, and = which means any no of elements greater than 1.```

Examples:

```Input: a a b b b
Output: NOT ACCEPTED
// n = 2 (>=1), m=3 ((3) mod3 != 1)

Input: a a a b
Output: ACCEPTED
// n = 3 (>=1), m = 1 ((1) mod 3= 1)

Input: b b b b
Output: NOT ACCEPTED
// n = 0(must be >=1), m = 4 ((4) mod 3 = 1) ```

Approaches:
It’s construction should contain the following steps:

• Step-1: Construct FA for means having any number of a’s greater than one.
• Step-2: Construct FA for means having exactly
• Step-3: Construct FA for means having b’s equal to multiple of 3 .
• Step-4: Concatenate the three FA and make single DFA. Always maintain the order of a, b and c.

Given DFA has following states. State 2 leads to the acceptance of the string.Whereas states 0, 1, 3, 4 and 5 leads to the rejection of the string.

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 >=1, (m)mod 3=1}``#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 = 5;``    ``}`` ` `    ``// -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 = 1;``    ``}``    ``else` `if` `(c == ``'b'``) {``        ``dfa = 2;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}`` ` `// This function is for the second state (Q2) of DFA``void` `state2(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = 3;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = 5;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}`` ` `// This function is for the third state (Q3)of DFA``void` `state3(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = 4;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = 5;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}`` ` `// This function is for the forth state (Q4)of DFA``void` `state4(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = 2;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = 5;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}`` ` `// This function is for the fifth state (Q5) of DFA``void` `state5(``char` `c)``{``    ``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``            ``return` `0;``    ``}``    ``if` `(dfa == 2)``        ``return` `1;``    ``else``        ``return` `0;``}`` ` `// driver code``int` `main()``{``    ``char` `str[] = ``"aaabbbb"``;``    ``if` `(isAccepted(str))``        ``printf``(``"ACCEPTED"``);``    ``else``        ``printf``(``"NOT ACCEPTED"``);``    ``return` `0;``}`` ` `// This code is contributed by SHUBHAMSINGH10.`

## Java

 `// Java program to implement DFS that accepts``// all string which follow the language``// L = { a^n b^m ; n >=1, (m)mod 3=1}``import` `java.util.*;``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 = ``5``;``    ``}``  ` `    ``// -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 = ``1``;``    ``}``    ``else` `if` `(c == ``'b'``) {``        ``dfa = ``2``;``    ``}``    ``else` `{``        ``dfa = -``1``;``    ``}``}``  ` `// This function is for the second state (Q2) of DFA``static` `void` `state2(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = ``3``;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = ``5``;``    ``}``    ``else` `{``        ``dfa = -``1``;``    ``}``}``  ` `// This function is for the third state (Q3)of DFA``static` `void` `state3(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = ``4``;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = ``5``;``    ``}``    ``else` `{``        ``dfa = -``1``;``    ``}``}``  ` `// This function is for the forth state (Q4)of DFA``static` `void` `state4(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = ``2``;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = ``5``;``    ``}``    ``else` `{``        ``dfa = -``1``;``    ``}``}``  ` `// This function is for the fifth state (Q5) of DFA``static` `void` `state5(``char` `c)``{``    ``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``            ``return` `0``;``    ``}``    ``if` `(dfa == ``2``)``        ``return` `1``;``    ``else``        ``return` `0``;``}``  ` `// Driver code``public` `static` `void` `main(String[] args) {``   ``char` `str[] = ``"aaabbbb"``.toCharArray();``    ``if` `(isAccepted(str)==``1``)``        ``System.out.println(``"ACCEPTED"``);``    ``else``        ``System.out.println(``"NOT ACCEPTED"``);``    ``}``}`` ` `// This code is contributed by Rajput-Ji`

## Python 3

 `# Python3 program to implement DFS that accepts   ``# all Stringing which follow the language   ``# L = {a ^ n b ^ m | n >= 1, (m)mod 3 = 1 }``     ` `# This function is for the dfa = starting  ``# dfa = state (zeroth) of DFA   ``def` `start(c):  ``    ``if` `(c ``=``=` `'a'``):  ``        ``dfa ``=` `1``    ``elif` `(c ``=``=` `'b'``):  ``        ``dfa ``=` `5``         ` `    ``# -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 ``=` `1``    ``elif` `(c ``=``=` `'b'``):  ``        ``dfa ``=` `2``    ``else``:  ``        ``dfa ``=` `-``1``    ``return` `dfa  ``     ` `# This function is for the second   ``# dfa = state of DFA   ``def` `state2(c):  ``    ``if` `(c ``=``=` `'b'``):  ``        ``dfa ``=` `3``    ``elif` `(c ``=``=` `'a'``):  ``        ``dfa ``=` `5``    ``else``:  ``        ``dfa ``=` `-``1``    ``return` `dfa  ``     ` `# This function is for the third   ``# dfa = state of DFA   ``def` `state3(c):  ``    ``if` `(c ``=``=` `'b'``):  ``        ``dfa ``=` `4``    ``elif` `(c ``=``=` `'a'``):  ``        ``dfa ``=` `5``    ``else``:  ``        ``dfa ``=` `-``1``    ``return` `dfa  ``     ` `# This function is for the fouth   ``# dfa = state of DFA   ``def` `state4(c):  ``    ``if` `(c ``=``=` `'b'``):  ``        ``dfa ``=` `2``    ``elif` `(c ``=``=` `'a'``):  ``        ``dfa ``=` `5``    ``else``:  ``        ``dfa ``=` `-``1``    ``return` `dfa ``     ` `     ` `# This function is for the fifth  ``# dfa = state of DFA   ``def` `state5(c):  ``    ``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])``        ``else``:  ``            ``return` `0``    ``if``(dfa ``=``=` `2``) :  ``        ``return` `1``    ``else``:  ``        ``return` `0``     ` `# Driver code   ``if` `__name__ ``=``=` `"__main__"` `:  ``    ``String ``=` `"aaabbbb"``    ``if` `(isAccepted(String)) :  ``        ``print``(``"ACCEPTED"``)   ``    ``else``:  ``        ``print``(``"NOT ACCEPTED"``)   `` ` `# This code is contributed by SHUBHAMSINGH10.`

## C#

 `// C# program to implement DFS that accepts``// all string which follow the language``// L = { a^n b^m ; n >=1, (m)mod 3=1}``using` `System;``public` `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 = 5;``    ``}``   ` `    ``// -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 = 1;``    ``}``    ``else` `if` `(c == ``'b'``) {``        ``dfa = 2;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}``   ` `// This function is for the second state (Q2) of DFA``static` `void` `state2(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = 3;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = 5;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}``   ` `// This function is for the third state (Q3)of DFA``static` `void` `state3(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = 4;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = 5;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}``   ` `// This function is for the forth state (Q4)of DFA``static` `void` `state4(``char` `c)``{``    ``if` `(c == ``'b'``) {``        ``dfa = 2;``    ``}``    ``else` `if` `(c == ``'a'``) {``        ``dfa = 5;``    ``}``    ``else` `{``        ``dfa = -1;``    ``}``}``   ` `// This function is for the fifth state (Q5) of DFA``static` `void` `state5(``char` `c)``{``    ``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``            ``return` `0;``    ``}``    ``if` `(dfa == 2)``        ``return` `1;``    ``else``        ``return` `0;``}``   ` `// Driver code``public` `static` `void` `Main(String[] args) {``   ``char` `[]str = ``"aaabbbb"``.ToCharArray();``    ``if` `(isAccepted(str)==1)``        ``Console.WriteLine(``"ACCEPTED"``);``    ``else``        ``Console.WriteLine(``"NOT ACCEPTED"``);``    ``}``}``// This code has been contributed by 29AjayKumar`

Output:

`ACCEPTED`

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.

My Personal Notes arrow_drop_up