#include<stdio.h>
#include<string.h>
#include<math.h>

int ninputs;
int dfa[100][2][100] = {0};
int state[10000] = {0};
char ch[10], str[1000];
int go[10000][2] = {0};
int arr[10000] = {0};

int main()
{
     int st, fin, in;
     int f[10];
     int i,j=3,s=0,final=0,flag=0,curr1,curr2,k,l;
     int c;
     
     printf("\nFollow the one based indexing\n");
     
     printf("\nEnter the number of states::");
     scanf("%d",&st);
     
     printf("\nGive state numbers from 0 to %d",st-1);
     
     for(i=0;i<st;i++)
     		state[(int)(pow(2,i))] = 1;

     printf("\nEnter number of final states\t");
     scanf("%d",&fin);

     printf("\nEnter final states::");
     for(i=0;i<fin;i++)
     {
          scanf("%d",&f[i]);
     }

     int p,q,r,rel;
     
     printf("\nEnter the number of rules according to NFA::");
     scanf("%d",&rel);
     
     printf("\n\nDefine transition rule as \"initial state input symbol final state\"\n");

     
     
     for(i=0; i<rel; i++)
     {
          scanf("%d%d%d",&p,&q,&r);
		  if (q==0)
		  	dfa[p][0][r] = 1;
		  else 
		  	dfa[p][1][r] = 1;          
     }
     
     printf("\nEnter initial state::");
     scanf("%d",&in);

     in = pow(2,in);

     i=0;
     
     printf("\nSolving according to DFA");
     
     int x=0;
     for(i=0;i<st;i++)
     {
     		for(j=0;j<2;j++)
     		{
     				int stf=0;
     				for(k=0;k<st;k++)
     				{
     						if(dfa[i][j][k]==1)
     							stf = stf + pow(2,k);
     				}
     				
     				
     				go[(int)(pow(2,i))][j] = stf;
     				printf("%d-%d-->%d\n",(int)(pow(2,i)),j,stf);
     				if(state[stf]==0)
     					arr[x++] = stf;		
     				state[stf] = 1;
     		}
     		
     }
     
     
     //for new states
     for(i=0;i<x;i++)
     {
     		printf("for %d ---- ",arr[x]);
     		for(j=0;j<2;j++)
     		{
     				int new=0;
     				for(k=0;k<st;k++)
     				{
     						if(arr[i] & (1<<k))
     						{
     								int h = pow(2,k);
     								
     								if(new==0)
     									new = go[h][j];
     								new = new | (go[h][j]);
     								
     								
     						}
     				}
     				
     				if(state[new]==0)
     				{
     					arr[x++] = new;
     					state[new] = 1;
     				}
     		}
     }
     
     printf("\nThe total number of distinct states are::\n");
     
     printf("STATE     0   1\n");
     
     for(i=0;i<10000;i++)
     {
     		if(state[i]==1)
     		{
     				//printf("%d**",i);
     				int y=0;
     				if(i==0)
     					printf("q0 ");
     				
     				else
     				for(j=0;j<st;j++)
     				{
     						int x = 1<<j;
     						if(x&i)
     						{
     							printf("q%d ",j);
     							y = y+pow(2,j);
     							//printf("y=%d  ",y);
     						}
     				}
     				//printf("%d",y);
     				printf("       %d   %d",go[y][0],go[y][1]);
     				printf("\n");
     		}
     }
     
     
     
     j=3;
     while(j--)
     {
     		printf("\nEnter string");
			scanf("%s",str);
			l = strlen(str);
			curr1 = in;
			flag = 0;
			printf("\nString takes the following path-->\n");
			printf("%d-",curr1);

			for(i=0;i<l;i++)
			{
				curr1 = go[curr1][str[i]-'0'];
				printf("%d-",curr1);
			}
			
			printf("\nFinal state - %d\n",curr1);
			
			for(i=0;i<fin;i++)
			{
					if(curr1 & (1<<f[i]))
					{
							flag = 1;
							break;
					}
			}
			
			if(flag)
				printf("\nString Accepted");
			else
				printf("\nString Rejected"); 		
			     		
	 }
		 
	
	return 0;
} 

C Language online compiler

Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!

Read inputs from stdin

OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.

#include <stdio.h>
int main()
{
    char name[50];
    printf("Enter name:");
    scanf("%s", name);
    printf("Hello %s \n" , name );
    return 0;
    
}

About C

C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.

Key features:

  • Structured Programming
  • Popular system programming language
  • UNIX, MySQL and Oracle are completely written in C.
  • Supports variety of platforms
  • Efficient and also handle low-level activities.
  • As fast as assembly language and hence used as system development language.

Syntax help

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition if-else is used.

if(conditional-expression) {
   // code
} else {
   // code
}

You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to if-else-if ladder.

switch(conditional-expression) {    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
...    
    
default:     
 // code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement){  
  // code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while(condition) {  
 // code 
}  

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {
  // code 
} while (condition); 

Arrays

Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.

Syntax

One dimentional Array:

data-type array-name[size];

Two dimensional array:

data-type array-name[size][size];

Functions

Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

Two types of functions are present in C

  1. Library Functions:

Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,

  1. User defined functions:

User defined functions are the ones which are written by the programmer based on the requirement.

How to declare a Function

return_type function_name(parameters);

How to call a Function

function_name (parameters)

How to define a Function

return_type function_name(parameters) {  
  //code
}