Loading

Archive for 11 Jun 2012

N Queens Problem Recursive

C - Program to Implement N - Queens Problem (Recursive Solution)


 #include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<time.h>

class queen
{
  public:
        int x[20],count;
        void nqueen(int,int);
        int place(int,int);
        void write(int x[],int);
};

int main()
{
  int i,n;
  char k='y';
  queen q;
  do
  {
    clrscr();
    float toc;
    clock_t end,start;
    start=clock();
    cout<<"\n\t\t\t N-Queens Problem";
    cout<<"\n\t\t\t------------------";
    cout<<"\n\n\t\tEnter Size of Chessboard :: ";
    cin>>n;
    q.count=0;
    q.nqueen(1,n);
    cout<<"\n\t\tTotal No of Solutions ::"<<q.count;
    end=clock();
    toc=(end - start)/CLK_TCK;
    cout<<"\n\t\tTime Complexity :: "<<toc;
    cout<<"\n\t\tDo you want to continue?(y/n)";
    k=getche();
  }while(k=='y');
  return 0;
}

void queen::nqueen(int k,int n)
{
  int i;
  for(i=1;i<=n;i++)
  {
    if(place(k,i))
    {
        x[k]=i;
        if(k==n)
            write(x,n);
        else
            nqueen(k+1,n);
    }
  }
}

int queen::place(int k,int i)
{
  int j;
  for(j=1;j<=k-1;j++)
  {
    if((x[j]==i) || (abs(x[j]-i) == abs(j-k)))
        return 0;
  }
  return 1;
}

void queen::write(int x[],int n)
{
  int i,j;
  cout<<"\n\n\t\t"<<count+1<<") Possible Solution :: ";
  for(i=1;i<=n;i++)
  {
    cout<<" "<<x[i];
  }
  cout<<"\n";
  for(i=1;i<=n;i++)
  {
    cout<<"\n\t\t\t";
    for(j=1;j<=n;j++)
    {

    if(j==x[i])
        cout<<"  Q ";
    else
        cout<<"  x ";
    }

  }
  cout<<"\n\n";
  count++;
}

Click Here to Download Source Code with Executable Program.

Leave a comment

N Queens Problem Iterative

C - Program to Implement N - Queens Problem (Iterative Solution)


#include<conio.h>
#include<math.h>
#include<time.h>

#define TRUE 1
#define FALSE 0

void print_solution(int n,int x[])
{

    char c[10][10];
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1; j<=n; j++)
        {
            c[i][j]='-';
        }
    }

    for(i=1;i<=n;i++)
    {
        c[i][x[i]]='Q';
    }

    for( i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            printf("\t%c",c[i][j]);
        }
            printf("\n");
    }

}


int place(int x[],int k)
{       int i;
    for(i=1;i<k;i++)
    {
        if(x[i]==x[k]||i-x[i]==k-x[k]||i+x[i]==k+x[k])
        {
            return FALSE;
        }
    }
    return TRUE;
}

void nqueens(int n)
{
    int x[10];
    int count=0;
    int k=1;

    x[k]=0;

    while(k!=0)
    {

        x[k]=x[k]+1;
        while((x[k]<=n)&&(!place(x,k)))
        {

            x[k]=x[k]+1;
        }
        if(x[k]<=n)
        {
            if(k==n)
            {
                count++;
                printf("\n\tSolution %d  is : \n\n\n",count);
                print_solution(n,x);

            }
            else
            {
                k++;
                x[k]=0;
                 }
        }
        else
        {
            k--;
        }
    }
    return;
}


void main()
{
    int n;
    clock_t start,end;
    clrscr();
    start=clock();
    printf("\n Enter the no. of Queens : ");
    scanf("%d",&n);
    printf("\n\n\t\t\t USING %d QUEEN'S STRATEGY \n\n",n);
    nqueens(n);
    end=clock();
    printf("\n The Time Complexity is : %f msec.",(end-start)/CLK_TCK);
    getch();
}

Click Here to Download Source Code with Executable Program.

Leave a comment

Two Pass Assembler

C - Program to Implement Two Pass Assembler

 #include<conio.h>
#include<stdio.h>
#include<stdlib.h>
struct a
{
char b[10][10];
};

struct a source[10];
struct a symtab[10];
struct a littab[10];
struct a opcode[10];
struct a reg[10];
struct a decstate[3];
FILE *f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8
;
int litcount,litlines,vari,prolines,w,x,symlines,reglines,oplines,loc,flag=0;
void main ()
{
int i,k=0,j,l,t,flag1=0;
char ch;
f1=fopen("source2.txt","r");
f2=fopen("symtab1.txt","w");
f3=fopen("opcodes.txt","r");
f5=fopen("literal.txt","w");
f4=fopen("register.txt","r");
f6=fopen("out2pass1.txt","w");
f7=fopen("error.txt","w");
f8=fopen("decstate.txt","r");
clrscr();
printf("\n source program \n");
while(!feof(f1))
{
    for(i=0;i<4;i++)
    {
        fscanf(f1,"%s",&source[k].b[i]);
        printf("%s",source[k].b[i]);
        printf("\t");
    }
    printf("\n");
    k++;
}




prolines=k;
getch();
clrscr();
loc=atoi(source[0].b[3]);
j=0;


k=0;
printf("\nDeclaration Statement\n");
while(!feof(f8))
{
    for(i=0;i<2;i++)
    {
        fscanf(f8,"%s",&decstate[k].b[i]);
        printf("%s",decstate[k].b[i]);
        printf("\t");
    }
    printf("\n");
    k++;
}




if(strcmp(source[0].b[1],"START")!=0)
{
fprintf(f7,"Invalid Start of program");
}
else
fprintf(f7,"");

for(i=0;i<prolines;i++)
    {
        if(strcmp(source[i].b[1],"END")==0)
        {
               flag=1;
        }
    }

if(flag==0)
    fprintf(f7,"\nInvalid End of Program");
else
    fprintf(f7,"");







printf("\n SYMBOL TABLE\n");
printf("SI.NO\tSYMBOL\tADDRESS\n");

for(i=0;i<23;i++)
{
    if(strcmp(source[i].b[0],"*")!=0)
    {
        j++;
        fprintf(f2,"%d\t%s\t%d",j,source[i].b[0],(loc+i)+1);
        printf("%d\t%s\t%d",j,source[i].b[0],(loc+i)+1);
        printf("\n");
        fprintf(f2,"\n");
    }
}

getch();
clrscr();
k=0;
printf("\n register table\n");

while(!feof(f4))
{
    for(i=0;i<2;i++)
    {
        fscanf(f4,"%s",reg[k].b[i]);
        printf("%s",reg[k].b[i]);
        printf("\t");
    }
    printf("\n");
    k++;
}
reglines=k;
getch();
clrscr();
k=0;
loc=atoi(source[0].b[3]);
    for(i=0;i<10;i++)
        if(strcmp(source[i].b[1],"LTORG")==0)
            litcount=loc+i+1;
        printf("\nliteral table\n");//literal table generation
        k=1;

    for(i=1;i<=prolines;i++)
        if(source[i].b[3][0]=='=')
        {
            fprintf(f5,"%d\t%s\t%d",k,source[i].b[3],litcount);
            printf("%d\t%s\t%d",k,source[i].b[3],litcount);
            k++;
            litcount++;
            printf("\n");
        }
    litlines=k-1;
    getch();
    clrscr();
    k=0;

printf("\n opcode table\n");
    while(!feof(f3))
    {
        for(i=0;i<2;i++)
        {
            fscanf(f3,"%s",&opcode[k].b[i]);
            printf("%s",opcode[k].b[i]);
            printf("\t");
        }
        printf("\n");
        k++;
    }
fclose(f3);
oplines=k;
f3=fopen("opcodes.txt","r");
for(l=0;l<23;l++)
    {
        flag1=0;
        for(t=0;t<19;t++)
        {
            if(strcmp(source[l].b[1],opcode[t].b[0])==0)
            {
               flag1=1;
               break;
            }
        }
            if(flag1==0)
                fprintf(f7,"\nInvalid opcode %d %s %s",l,source[l].b[1],opcode[t].b[0]);

    }




getch();
clrscr();
k=0;
fclose(f5);
f5=fopen("literal.txt","r");
    while(!feof(f5))
    {
        for(i=0;i<3;i++)
        {
            fscanf(f5,"%s",&littab[k].b[i]);
        }
        k++;
    }
fclose(f1);
fclose(f2);
fclose(f3);
fclose(f4);
fclose(f5);
fclose(f7);
f2=fopen("symtab1.txt","r");
k=0;
    while(!feof(f2)) //creation of symbol table struct
    {
        for(i=0;i<3;i++)
        {
        fscanf(f2,"%s",&symtab[k].b[i]);
        }
        k++;
    }
    symlines=k;
    fclose(f2);
    printf("\nintermediate code \n");
    fprintf(f6,"\nINTERMEDIATE CODE \n");
    ch=source[10].b[2][0];
    prolines=prolines+2;
    printf("(AD,00)\t\t(C,%s)\n",source[0].b[3]);
    fprintf(f6,"(AD,00)\t\t(C,%s)\n",source[0].b[3]);
for(i=1;i<=prolines;i++)//starting the creation of intermediate code
{
    w=x=0;
    if(strcmp(source[i].b[1],"DS")!=0 && strcmp(source[i].b[1],"DC")!=0 )
    {
        for(j=0;j<10;j++)
            if(strcmp(source[i].b[1],opcode[j].b[0])==0)
            {
                //vari=atoi(opcode[j].b[1]);
                printf("(IS,%s)\t",opcode[j].b[1]);
                fprintf(f6,"(IS,%s)\t",opcode[j].b[1]);
            }
    }
    if(strcmp(source[i].b[1],"DS")==0 || strcmp(source[i].b[1] ,"DC")==0 )
    {
        for(j=0;j<3;j++)
            if(strcmp(source[i].b[1],decstate[j].b[0])==0)
            {

                printf("(DL,%s)\t",decstate[j].b[1]);
                fprintf(f6,"(DL,%s)\t",decstate[j].b[1]);
            }
    } //finish of first column
    for(j=0;j<4;j++)
    {
        if(strcmp(source[i].b[2],reg[j].b[0])==0)
        {
            w=1;
            printf("(%s)\t",reg[j].b[1]);
            fprintf(f6,"(%s)\t",reg[j].b[1]);
        }
    }
    if(source[i].b[2][0]==ch) //where ch=" ' "
    {
        x=1;
        printf("\t(C,%c)\t",source[i].b[2][1]);
        fprintf(f6,"\t(C,%c)\t",source[i].b[2][1]);
    }
    if(w!=1 && x!=1 && strcmp(source[i].b[1],"LTORG")!=0)
    {
        printf("\t");
        fprintf(f6,"\t");
    }
    for(j=0;j<symlines;j++)
        if(strcmp(source[i].b[3],symtab[j].b[1])==0)
        {
            printf("(S,%d)",atoi(symtab[j].b[0]));
            fprintf(f6,"(S,%d)",atoi(symtab[j].b[0]));
        }
    if(source[i].b[3][0]=='=')
        for(j=0;j<3;j++)
            if(strcmp(source[i].b[3],littab[j].b[1])==0)
            {
                printf("(L,%s)",littab[j].b[0]);
                fprintf(f6,"(L,%s)",littab[j].b[0]);
            }
            if(strcmp(source[i].b[1],"LTORG")!=0)
            {
                printf("\n");
                fprintf(f6, "\n");
            }
    if(strcmp(source[i].b[1],"END")==0)
                printf("(AD,03)");
                fprintf(f6,"(AD,03)");


}
fclose(f8);
getch();
}

Click Here to Download Source Code with Executable Program

Leave a comment

Quick Sort

C - Program to Implement Quick Sort

 #include<iostream.h>
#include<conio.h>
#include<time.h>

class sort
{
   public:
   int a[100],n;
   int lo,hi;
   void get();
   void disp();
   void quicksort(int,int);
};

int main()
{
  int i;
  char k='y';
  sort a;

  do
  {
    clrscr();
    float toc;
    clock_t end,start;
    start=clock();
    cout<<"\n\t\t\t\tQuick Sort\n";
    cout<<"\t\t\t\t----------\n\n";
    a.get();
    cout<<"\n\t\t\t*** Array Before Sorting ***\n\n";
    a.disp();
    a.quicksort(a.lo,a.hi);
    cout<<"\n\n\n\t\t\t*** Array After Sorting ***\n\n";
    a.disp();
    end=clock();
    toc=(end - start)/CLK_TCK;
    cout<<"\n\tTime Complexity :: "<<toc;
    cout<<"\n\n\t\t\tDo you want to Continue?(y/n)";
    k=getche();
  }while(k=='y');
  return 0;
}


void sort::get()
{
  int i;
  cout<<"\n\tEnter Size of Array :: ";
  cin>>n;
  lo=0;
  hi=n-1;
  cout<<"\n\tEnter the Elements of Array :: ";
  for(i=0;i<n;i++)
  {
    cin>>a[i];
  }
}


void sort::disp()
{
  int i;
  cout<<"\n\tElements of Array :: ";
  for(i=0;i<n;i++)
  {
    cout<<" "<<a[i];
  }
}

void sort::quicksort(int lo,int hi)
{
  int i,j,k,x;
  i=lo;
  j=hi;
  x=a[(lo+hi)/2];
  do
  {
    while(a[i]<x)
        i++;
    while(a[j]>x)
        j--;
    if(i<=j)
    {
    k=a[i];
    a[i]=a[j];
    a[j]=k;
    i++;
    j--;
    }
  }while(i<=j);
  if(lo<i-1)
    quicksort(lo,i-1);
  if(i<hi)
    quicksort(i,hi);
}

Click Here to Download Source Code with Executable Program.

Leave a comment

Merge Sort

C - Program to Implement Merge Sort


 #include<time.h>
#include<iostream.h>
#include<conio.h>

void mergesort(int *,int,int);
void merge(int *,int,int,int);
int a[20],i,n,b[20];
void get();
void disp();

main()
{
   int i;
   char k='y';
   do
   {
    clrscr();
    float toc;
    clock_t end,start;
    start=clock();
    cout<<"\n\t\t\t\tMerge Sort";
    cout<<"\n\t\t\t\t----------";
    get();
    cout<<"\n\n\t\t\t *** Before Sorting ***\n";
    disp();
    mergesort(a,0,n-1);
    cout<<"\n\n\t\t\t *** After Sorting ***\n";
    disp();
    end=clock();
    toc=(end - start)/CLK_TCK;
    cout<<"\n\n\tTime Complexity :: "<<toc;
    cout<<"\n\n\t\t\tDo u want to continue?(y/n)";
    k=getche();
   }while(k=='y'||k=='Y');
}

void get()
{
    int i;
    cout<<"\n\n\n\tEnter the Size of Array ::";
    cin>>n;
    cout<<"\n\tEnter the Elements of Array ::";
    for(i=0;i<n;i++)
    cin>>a[i];
}

void disp()
{
    int i;
    cout<<"\n\tElements of Array ::";
    for(i=0;i<n;i++)
    {
    cout<<" "<<a[i];
    }
}

void mergesort(int a[],int i,int j)
{
   int mid;
   if(i<j)
   {
      mid=(i+j)/2;
      mergesort(a,i,mid);
      mergesort(a,mid+1,j);
      merge(a,i,mid,j);
   }
}
void merge(int a[],int low,int mid ,int high)
{
   int h,i,j,k;
   h=low;
   i=low;
    j=mid+1;
   while(h<=mid && j<=high)
   {
      if(a[h]<=a[j])
     b[i]=a[h++];
      else
     b[i]=a[j++];
      i++;
   }

   if( h > mid)
      for(k=j;k<=high;k++)
    b[i++]=a[k];
   else
      for(k=h;k<=mid;k++)
     b[i++]=a[k];

   for(k=low;k<=high;k++)
   {
    a[k]=b[k];
   }

}

Click Here to Download Source Code with Executable Program.

Leave a comment

Macro Processor

C - Program to Implement Macro Processor


# include <stdio.h>
# include <conio.h>
# include <string.h>
# include <stdlib.h>
struct deftab
{
char lab[10];
char opc[10];
char oper[10];
}d[10];
void main()
{
char label[10],opcode[10],operand[10],newlabel[10],newoperand[10];
char macroname[10];
int i,lines;
FILE *f1,*f2,*f3;
clrscr();
f1=fopen("macin.txt","r");
f2=fopen("macout.txt","w");
f3=fopen("deftab.txt","w");
fscanf(f1,"%s%s%s",label,opcode,operand);
while(strcmp(opcode,"END")!=0)
{
if(strcmp(opcode,"MACRO")==0)
{
strcpy(macroname,label);
fscanf(f1,"%s%s%s",label,opcode,operand);
lines=0;
while(strcmp(opcode,"MEND")!=0)
{
fprintf(f3,"%s\t%s\t%s\n",label,opcode,operand);
strcpy(d[lines].lab,label);
strcpy(d[lines].opc,opcode);
strcpy(d[lines].oper,operand);
fscanf(f1,"%s%s%s",label,opcode,operand);
lines++;
}
}
else if(strcmp(opcode,macroname)==0)
{
printf("Lines = %d\n",lines);
for(i=0;i<lines;i++)
{
fprintf(f2,"%s\t%s\t%s\n",d[i].lab,d[i].opc,d[i].oper);
printf("DLAB = %s\nDOPC = %s\nDOPER = %s\n",d[i].lab,d[i].opc,d[i].oper);
}
}
else
fprintf(f2,"%s\t%s\t%s\n",label,opcode,operand);
fscanf(f1,"%s%s%s",label,opcode,operand);
}
fprintf(f2,"%s\t%s\t%s\n",label,opcode,operand);
fclose(f1);
fclose(f2);
fclose(f3);
printf("FINISHED");
getch();
}

Click Here to Download Source Code with Executable Program.


Leave a comment

Lexical Analyzer

C Program to Implement Lexical Analyzer


#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

char buffer[80];
int i,len,pos;
char token[30];
int ibuff;

void skip()
{
    for(;buffer[ibuff]==' '||buffer[ibuff]=='\t';ibuff++);
}

void insert(char *a,char x)
{
    int i;
    i=strlen(a);
    a[i]=x;
    a[i+1]=0;
}

char terminals[30][10]={{"{"},{"}"},{"("},{")"},{"if"},{"else"},{"while"},
            {"int"},{"char"},{"float"},{"="},{"=="},{"+"},{"-"},{"*"},{"/"},
            {"%"},{"<"},{"<="},{">"},{">="},{"!="},{"&&"},{"||"},{"!"},
            {";"},{"&"},{"|"},{"void"}};

char identifiers[20][20];
int iterminals=29;
int iidentifiers;
int literals[20];
int iliterals=0;

int searchterminals(char *a)
{
    for(i=0;i<iterminals;i++)
        if(strcmp(terminals[i],a)==0)
            return 1;
        return 0;
}

void printterminal(char *a)
{
    for(i=0;i<iterminals;i++)
        if(strcmp(terminals[i],a)==0)
        {
            printf("\n%10s TRM %d",a,i);
            return;
        }
}

void printliteral(char *a)
{
    int x;
    x=atoi(a);
    for(i=0;i<iliterals;i++)
        if(literals[i]==x)
            break;
        if(i==iliterals)
        {
            literals[i]=x;
            iliterals++;
        }
    printf("\n%10s LTS %d",a,i);
}
void printidentifier()
{
    int i=0;
    for(i=0;i<iidentifiers &&strcmp(token,identifiers[i])!=0;i++);
    if(i>=iidentifiers)
    {
        strcpy(identifiers[iidentifiers],token);
        iidentifiers++;
    }
    printf("\n%10s IDN %d",token,i);
pos=i;
}
int state;
void main()
{
FILE *ptr;
char infile[12];

clrscr();
printf("\n Enter source file name:");
gets(infile);
ptr=fopen(infile,"r");
if(ptr==NULL)
{
    printf("\n Could not open the file:");
    exit(0);
}
printf("\n Uniform symbol Table");
printf("\n______________________");
while(!feof(ptr))
{
    fgets(buffer,80,ptr);
    len=strlen(buffer);
    buffer[len]='\0';
    buffer[len+1]=0;
    ibuff=0;
    state=0;
    skip();
    for(;buffer[ibuff]!=0;ibuff++)
    {
        switch(state)
        {
        case 0:
        switch(buffer[ibuff])
        {
            case '#':
                printf("\npreprocessor directive:%s",buffer);
                ibuff=strlen(buffer)-1;
            break;
            case ' ':skip();ibuff--;break;
            case '"':
                token[0]=0;
                ibuff++;
                do
                {
                    insert(token,buffer[ibuff]);
                    ibuff++;
                }while(buffer[ibuff]!='"');
                printf("\n string  %s",token);
            break;
            case '\n':break;
            case '(':printterminal("(");break;
            case ')':printterminal(")");break;
            case '}':printterminal("}");break;
            case '{':printterminal("{");break;
            case ';':printterminal(";");break;
            case ',':printterminal(",");break;
            case '*':printterminal("*");break;
            case '/':printterminal("/");break;
            case '%':printterminal("%");break;
            case '+':state=70;break;
            case '-':state=80;break;
            case '=':state=90;break;
            case '!':state=100;break;
            case '<':state=110;break;
            case '>':state=120;break;
            case '|':state=130;break;
            case '&':state=140;break;
            default:
                if(isdigit(buffer[ibuff]))
                {
                    token[0]=0;
                    do
                    {
                        insert(token,buffer[ibuff]);
                        ibuff++;
                    }while(isdigit(buffer[ibuff]));
                    printliteral(token);
                    ibuff--;
                }
                else
                    if(isalpha(buffer[ibuff]))
                    {
                        token[0]=0;
                        do
                        {
                            insert(token,buffer[ibuff]);
                            ibuff++;
                        }while(isalnum(buffer[ibuff]));

                        if(searchterminals(token))
                            printterminal(token);
                        else
                            printidentifier();
                        ibuff--;
                    }
                    else
                    {
                        printf("\n unknown token=%s",buffer);
                        exit(0);
                    }
                    break;
                }

                break;

        case 70:if(buffer[ibuff]=='+')
                printterminal("++");
            else
            {
                printterminal("+");
                ibuff--;
            }
            state=0;
            break;
        case 80:if(buffer[ibuff]!='-')
                printterminal("-");
            else
            {
                printterminal("-");
                ibuff--;
            }
            state=0;break;
        case 90:if(buffer[ibuff]=='=')
                printterminal("==");
            else
            {
                printterminal("=");
                ibuff--;
            }
            state=0;break;
        case 100:if(buffer[ibuff]=='=')
                printterminal("!=");
            else
            {
                printterminal("!");
                ibuff--;
            }
            state=0;break;
        case 110:if(buffer[ibuff]=='=')
                printterminal("<=");
            else
            {
                printterminal("<");
                ibuff--;
            }
            state=0;break;
        case 120:if(buffer[ibuff]=='=')
                printterminal(">=");
            else
            {
                printterminal(">");
                ibuff--;
            }
            state=0;break;
        case 130:if(buffer[ibuff]=='|')
                printterminal("||");
            else
            {
                printterminal("|");
                ibuff--;
            }
            state=0;break;
        case 140:if(buffer[ibuff]=='&')
            printterminal("&&");
            else
            {    printterminal("&");
                ibuff--;
            }
            state=0;break;
        }
    }
}

printf("\n Press a key to print Symbol Table.....\n");
getch();
for(i=0;i<iidentifiers;i++)
    printf("\n %s",identifiers[i]);
printf("\n Pres a key to print Literal Table.......\n");
getch();
for(i=0;i<iliterals;i++)
    printf("\n%d",literals[i]);
getch();
}
/*

Input Program

#include<stdio.h>
#include<conio.h>
void str()
{
    int x=2,y=3,z;
    z=x+y;
}

Click Here to Download Source Code with Executable Program.

Leave a comment