0% found this document useful (0 votes)
99 views

Lab TOC CS 501

The document contains a student's practical file for the subject "Theory of Computation" containing various programming assignments: 1) The assignments include programs to design machines that accept certain strings over alphabets like {0,1}, programs to find operations on binary numbers like increment, complement, programs to design DFAs and PDAs. 2) The file contains the aims, programs written in C/C++ to solve each aim, sample inputs/outputs for each program. 3) There are a total of 13 assignments addressing concepts like finite automata, regular expressions, context-free languages.

Uploaded by

sharmasweeta927
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
99 views

Lab TOC CS 501

The document contains a student's practical file for the subject "Theory of Computation" containing various programming assignments: 1) The assignments include programs to design machines that accept certain strings over alphabets like {0,1}, programs to find operations on binary numbers like increment, complement, programs to design DFAs and PDAs. 2) The file contains the aims, programs written in C/C++ to solve each aim, sample inputs/outputs for each program. 3) There are a total of 13 assignments addressing concepts like finite automata, regular expressions, context-free languages.

Uploaded by

sharmasweeta927
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 25

Gyan Ganga College of Technology, Jabalpur

Department of Computer Science & Engineering

Branch: CS
Semester: V
Practical File
Theory of Computation [CS 501]

Student’s Name : _____________


Student’s Roll No: _ _ _ _ _ _ _ _ _ _ _ _ _

Faculty In-charge
Prof. Om Singh Parihar
[Department of CSE]

Session: 2021-22
Index
SN AIM DATE SIGN REMARK
1 Design a Program for creating machine
that accepts three consecutive zero

2 Design a Program for creating machine


that accepts the string always ending with
101.

3 Design a DFA which will


accept all the strings ending
with 00 over an alphabet {0,1}
and write a program to
implement the DFA.
4 Design a Program for Mode 2 Machine
5 Design a Program for Mode 3
Machine
6 Design a program for accepting decimal
number divisible by 2
7 Design a Program to find 2’s complement
of a given binary number.
8 Design a program for creating a machine
which accepts string having equal no. of
1’s and 0’s.
9 Design a program for creating a
machine which count number of 1’s
and 0’s in a given string.
10 Design a Program to find 1’s
complement of a given binary
number.

11 Design a Program which will


increment the given binary number by
1.

12 Design a Program to create PDA machine


that accept the well-formed parenthesis
13 Design a Push Down automata for
L={(0^n1^n| n>=1}
Aim1. Design a Program for creating machine that accepts three consecutive zero.

#include <stdio.h>

int main()
{
char str1[80], str2[80]="000";
int l, i, j;

printf("Enter Any string over input alphabets {0,1} : \n");


gets(str1);

//finding length of second string


for (l = 0; str2[l] != '\0'; l++);

for (i = 0, j = 0; str1[i] != '\0' && str2[j] != '\0'; i++)


{
if (str1[i] == str2[j])
{
j++;
}
else
{
j = 0;
}
}

if (j == l)
{
printf("String Accepted in Language ");
}
else
{
printf("String Rejected not in Language");
}

return 0;
}

OUTPUT: Enter Any string over input alphabets {0,1} :


INPUT:1001000
String Accepted in Language

INPUT:1001001
String Rejected not in Language
Aim2. Design a Program for creating machine that accepts the string always ending with 101.

#include <iostream>
#include<string.h>
using namespace std;
int main()
{ charstr[50];
inti,j, n;
charendstr[]="101";
cout<<"\nEnter a string over input alphabets {0,1}\n";
cin>>str;

n=strlen(str);

for(i=n-3,j=0;i<n,j<3;i++,j++)
{
if(endstr[j]==str[i] )
{

}
else
{
cout<<"String Rejected...";
exit(0);
}

if(j==3)
{
cout<<"String Accepted...";
exit(0);
}

return 0;
}

OUTPUT:
INPUT:1110101
String Accepted..

INPUT:11101011
String Rejected..
Aim3. Design a DFA which will accept all the strings ending with 00 over
an alphabet {0, 1} and write a program to implement the DFA.

#include <stdio.h>

#define max 100

main()

charstr[max],f='a';

inti;

printf("Enter Any string over input alphabets {0,1} : \n ");

scanf("%s",str);

for(i=0;str[i]!='\0';i++)

switch(f)

case 'a': if(str[i]=='0') f='b';

else if(str[i]=='1') f='a';

break;

case 'b': if(str[i]=='0') f='c';


else if(str[i]=='1') f='d';

break;

case 'c': if(str[i]=='0') f='c';

else if(str[i]=='1') f='d';

break;

case 'd': if(str[i]=='0') f='b';

else if(str[i]=='1') f='d';

break;

if(f=='c') printf("\nString is accepted as it reached the final state %c at the end.",f);

elseprintf("\nString is not accepted as it reached %c state which is not the final state.",f);

OUTPUT:

Enter Any string over input alphabets {0,1} :

INPUT:111100

String is accepted as it reached the final state c at the end

INPUT:1111001

OUTPUT: String is not accepted as it reached d state which is not the final state

Aim:4Design a DFA for |W| Mode 2=0 Machine over input alphabets {a,b}
#include <stdio.h>

#define max 100

main()

charstr[max],f='1';

inti;

printf("Enter Any string over input alphabets {a,b} : \n ");

scanf("%s",str);

for(i=0;str[i]!='\0';i++)

switch(f)

case '1': if(str[i]=='a' || str[i]=='b' ) f='2';

break;

case'2': if(str[i]=='a' || str[i]=='b') f='1';

break;

}
if(f=='1') printf("\nString is accepted as it reached the final state %c at the end.",f);

elseprintf("\nStringis not accepted as it reached STATE %c which is not the final state.",f);

OUTPUT:

Enter Any string over input alphabets {a,b} :

INPUT:abab

String is accepted as it reached the final state 1 at the end

INPUT:bab

OUTPUT: String is not accepted as it reached 2 state which is not the final state

Aim5.Design a DFA for |w| Mode 3=0 Machine over input alphabets {a,b}
#include <stdio.h>

#define max 100

main()

charstr[max],f='1';

inti;

printf("Enter Any string over input alphabets {a,b} : \n ");

scanf("%s",str);

for(i=0;str[i]!='\0';i++)

switch(f)

case '1': if(str[i]=='a' || str[i]=='b' ) f='2';

break;

case'2': if(str[i]=='a' || str[i]=='b') f='3';

break;

case '3': if(str[i]=='a' || str[i]=='b' ) f='1';

break;

}
}

if(f=='1') printf("\nString is accepted as it reached the final state %c at the end.",f);

elseprintf("\nString is not accepted as it reached %c state which is not the final state.",f);

OUTPUT:

Enter Any string over input alphabets {a,b} :

INPUT:aab

String is accepted as it reached the final state 1 at the end

INPUT:baba

OUTPUT: String is not accepted as it reached 2 state which is not the final state

Aim6.Design a program for accepting decimal number divisible by 2.


#include <iostream>
using namespace std;
int main() {
intdnum;
cout<<”enter any decimal no:”;
cin>>dnum;
if(dnum % 2 == 0)
cout<<num<<" is Divisible by 2";
else
cout<<num<<" is not Divisible by 2";
return 0;
}

OUTPUT:
enter any decimal no:12
12 is is Divisible by 2

enter any decimal no:15


15 is isnot Divisible by 2
Aim 7. Design a Program to find 2’s complement of a given binary number.
// Function to find two's complement
stringfindTwoscomplement(string str)
{
intn = str.length();

// Traverse the string to get first '1' from


// the last of string
inti;
for(i = n-1 ; i>= 0 ; i--)
if(str[i] == '1')
break;

// If there exists no '1' concatenate 1 at the


// starting of string
if(i == -1)
return'1'+ str;

// Continue traversal after the position of


// first '1'
for(intk = i-1 ; k >= 0; k--)
{
//Just flip the values
if(str[k] == '1')
str[k] = '0';
else
str[k] = '1';
}

// return the modified string


returnstr;;
}

// Driver code
intmain()
{
stringstr = "00000101";
cout<<“Two’s Complement :”findTwoscomplement(str);
return0;
}

OUTPUT:
INPUT:100100
Two’s Complement :011100
Aim8. Design a program for creating a machine which accepts string having equal no. of 1’s and 0’s.

#include <iostream>
#include<string.h>
using namespace std;

using namespace std;

int main()
{ charstr[50];
inti, n,CountZero=0,CountOne=0;

;
cout<<"\nEnter a string over input alphabets {0,1}\n";
cin>>str;

n=strlen(str);

for(i=0;i<n;i++)
{
if(str[i]=='0' )
{
CountZero++;

}
else
{
CountOne++;

if(CountOne==CountZero)

cout<<"String Accepted...";

else

cout<<"String Rejected...";

return 0;
}
OUTPUT:
Enter a string over input alphabets {0,1}
101010
String Accepted...

Enter a string over input alphabets {0,1}


1010101
String Rejected...

Aim9. Design a program for creating a machine which count number of 1’s and 0’s in a
given string.
#include <iostream>
#include<string.h>
using namespace std;

int main()
{ charstr[50];
inti, n,CountZero=0,CountOne=0;

;
cout<<"\nEnter a string over input alphabets {0,1}\n";
cin>>str;

n=strlen(str);

for(i=0;i<n;i++)
{
if(str[i]=='0' )
{
CountZero++;

}
else
{
CountOne++;

cout<<"NO of 1’s"<<CountOne<<endle;
cout<<"NO of 0’s"<<CountOne<<endle

return 0;
}

OUTPUT:
Enter a string over input alphabets {0,1}
101010
NO of 1’s:3
No of 0’s:3

Aim10.Design a Program for Mealy machine to find 1’s complement of a given binary
number.

Mealy machine for 1’s complement:


#include <stdio.h>
int main() {
charstr[100],f='a';
inti;
printf("Enter Any string over input alphabets {0,1} : \n ");
scanf("%s",str);
for(i=0;str[i]!='\0';i++)
{
switch(f)
{
case 'a': if(str[i]=='0') { printf("1");f='a'; } else {printf("0");f='a'; }

break;

}
}

return 0;
}
Enter Any string over input alphabets {0,1} :
Input:1010101
Output: 0101010

Aim11. Design a Program which will increment the given binary number by 1.
#include <stdio.h>
int main()
{
longint binary1, binary2;
inti = 0, remainder = 0, sum[20];
printf("Enter any binary number :");
scanf("%ld", &binary1);

while(binary1!= 0 || binary2 != 0)
{
sum[i++] = (binary1 % 10 + binary2 % 10 + remainder) % 2;
remainder = (binary1 % 10 + binary2 % 10 + remainder) / 2;
binary1 = binary1 / 10;
binary2 = binary2 / 10;
}

if(remainder != 0)
sum[i++] = remainder;
--i;
printf("Sum :");
while(i>= 0)
printf("%d", sum[i--]);

return 0;
}

OUTPUT:
Enter any binary number:110001
110010

Aim12. Design a Program to create PDA machine that accept the well-formed parenthesis.

// CPP program to check for balanced brackets.


#include <bits/stdc++.h>
using namespace std;

// function to check if brackets are balanced


boolareBracketsBalanced(string expr)
{
stack<char> s;
char x;

// Traversing the Expression


for (inti = 0; i<expr.length(); i++) {
{
if (expr[i] == '(' || expr[i] == '['
|| expr[i] == '{')
{
// Push the element in the stack
s.push(expr[i]);
continue;
}

// IF current current character is not opening


// bracket, then it must be closing. So stack
// cannot be empty at this point.
if (s.empty())
return false;

switch (expr[i]) {
case ')':

// Store the top element in x


x = s.top();
s.pop();
if (x == '{' || x == '[')
return false;
break;

case '}':

// Store the top element in b


x = s.top();
s.pop();
if (x == '(' || x == '[')
return false;
break;

case ']':

// Store the top element in x


x = s.top();
s.pop();
if (x == '(' || x == '{')
return false;
break;
} // switch ends here
} // for loop ends here

// Check Empty Stack


return (s.empty());
} function ends here

// Driver code
int main()
{
stringexpr = "{()}[]";

// Function call
if (areBracketsBalanced(expr))
cout<< "Balanced";
else
cout<< "Not Balanced";
return 0;
}

OUTPUT: Balanced

Aim13. Design a Push Down automata for L={(0^n1^n| n>=1}

#include <iostream>
#include<string.h>
using namespace std;
using namespace std;
int top;
char s[10];
class Stack
{
public:
void push(int x)
{
s[top++]=x;
}
void pop(int x)
{
s[top--]=x;
}
};
int main()
{
inti,j, n;
char a[10];
cout<<"\nProgram For PDA Which Accpets Strings Of (0^n)(1^n)\n";
cout<<"\nEnter String::";
cin>>a;
n=strlen(a);
Stack st;
top=-1;
for(i=0;i<n/2;i++)
{
if(a[i]=='0' )
{

st.push(a[i]);
}
else

break;

if(i<n/2)
{
cout<<"String Rejected...";
exit(0);
}
for(j=i;j<n;j++)
{
if(a[i]=='1' )
{
st.pop(a[i]);

if(top==-1)
{
cout<<"\nString Accepted.\n";
}
else
{
cout<<"\nString Rejected.\n";
}
return 0;
}

OUTPUT:
INPUT:0011
String Accepted.

INPUT:0101
String Rejected.

R
Aim14. Design a PDA to accept WCW where w is any string and WR is reverse of that
string and C is a Special symbol.

Steps of design PDA:


1. Push all characters onto stack just before to C.
2. Now pop a or b off stack for next input symbol a or b respectively.
3. If after step 2 there is bottom symbol in stack Z then string is accepted otherwise
rejected.
Transition Function of PDA:

δ(q0, a, Z) = (q0, aZ)


δ(q0, a, a) = (q0, aa)
δ(q0, b, Z) = (q0, bZ)
δ(q0, b, b) = (q0, bb)
δ(q0, a, b) = (q0, ab)
δ(q0, b, a) = (q0, ba)

// this is decision step


δ(q0, c, a) = (q1, a)
δ(q0, c, b) = (q1, b)

δ(q1, b, b) = (q1, ε)
δ(q1, a, a) = (q1, ε)

δ(q1, ε, Z) = (qf, Z)
PDA state transition diagram

n
Aim14.Design a Turing machine that’s accepts the following languagea bncn where n>0

Steps to design Turing machine:

1. Mark first a as X and keep moving head to right direction.


2. Skip all remaining a’s and/or all Y’s while moving right.
3. Mark first b as Y and keep moving head to right direction.
4. Skip all b’s and / or all Z’s ,keep moving head to right direction.
5. Mark first c as Z and keep moving head to left direction.
6. Skip all b’s ,Y, Z and a’swhile moving left.
7. Move right as encounter first X, Repeat step 1 if there is unmarked a otherwise goto step 8
8. Moving head left direction , Skip all Y’sand all Z’s
9. If after step 8 Blank symbolB found, string is accepted otherwise rejected.
State Transition Diagram

You might also like