Showing posts with label C Programs. Show all posts
Showing posts with label C Programs. Show all posts

C program to find real root of a equation using Bisection method

I am using equation f(x): x^3-2x-5 = x*x*x-2*x-5 (a=2 and b=3)
You can change it(x*x*x-2*x-5) to you own equation


Code:


#include<stdio.h>
#include<conio.h>
# define eqn x*x*x-2*x-5

float f(float x)
{
   float ans;
   ans=eqn;
   return(ans);
}

void main()
{
   float a,b,x=0,x1=0;
   int i=0;
   clrscr();
   printf("Enter the a and b");
   scanf("%f%f",&a,&b);
   if(f(a)*f(b)>=0)
   {
      printf("The interval is wrong");
      getch();
      return;
   }
   do
   {
      x=(a+b)/2;
      printf("\ta=%f\tb=%f\tX%d=%f\tf(x%d)=%f\n",a,b,i,x,i,f(x));
      if(x==x1)
      {
         printf("\n\nThe root is %f\n",x);
         break;
      }
      x1=x;
      i++;
      if(f(a)*f(x)<0)
         b=x;
      else
         a=x;
   }while(f(a)*f(b)<0);
   getch();
}



Read More

C program to implement merge sort




#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 20
char a[MAX][MAX];
void upper(char *s)
{
   int i;
   for(i=0;(s[i]!='\0')&&(s[i]!='\n');i++)
      if((s[i]>='a')&&(s[i]<='z'))
         s[i]=s[i]-32;
}
void merge(int low,int mid,int high)
{
   char b[MAX][MAX];
   int i=low,j=mid+1,k=low,l=0;
   while(i<=mid&&j<=high)
   {
      if(a[i][l]<=a[j][l])
         strcpy(b[k++],a[i++]);
      else
         strcpy(b[k++],a[j++]);
      l++;
   }
   while(i<=mid)
      strcpy(b[k++],a[i++]);
   while(j<=high)
      strcpy(b[k++],a[j++]);
   for(i=low;i<=high;i++)
      strcpy(a[i],b[i]);
}
int merge_sort(int low ,int high)
{
   int mid;
   if(low!=high&&low<high&&low!=mid)
   {
      mid=(low+high)/2;
      merge_sort(low,mid);
      merge_sort(mid+1,high);
      merge(low,mid,high);
   }
   return 0;
}
void main()
{
   FILE *f;
   int i,n;
   clrscr();
   f=fopen("name.txt","r");
   //if(f!=NULL)printf("vaild"); else printf("Invalid");
   printf("Names:\n");
   for(i=0;a[i-1][0]!='\n';i++)
          fgets(a[i],150,f);
   n=i-1;
   for(i=0;i<n;i++)
   {
      upper(a[i]);
      printf("\t%s",a[i]);
   }
   merge_sort(0,n-1);
   printf("\nSorted list:\n");
   for(i=0;i<n;i++)
      printf("\t%s",a[i]);
   getch();
}

Read More

C program to Implement all the operations of AVL trees.




#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
int j=0;
char na[MAX][MAX];
int r[MAX];
struct node
{
   char name[MAX];
   int runs,bf;
   struct node *lchild,*rchild,*par;
}*start;
void inorder(struct node *t)
{

   if(t!=NULL)
   {
      inorder(t->lchild);
      printf("%d\t%s\t%d\t%d\t%d\t%d\n",t,t->name,t->runs,t->lchild,t->rchild,t->bf);
      inorder(t->rchild);
   }
}
int balance(struct node *p,struct node *ch)
{   while(p!=NULL&&ch->bf!=0)
   {
      if(ch==p->lchild)
         p->bf=p->bf+1;
      else if(ch==p->rchild )
         p->bf=p->bf-1;
      p=p->par;
      ch=ch->par;
   }
   return 1;
}
void LL(struct node *pi)
{
   struct node *a;
   a=pi->lchild;
   if(pi==start)
      start=a;
   else
          pi->par->lchild=a;
   a->par=pi->par;
   pi->lchild=a->rchild;
   a->rchild=pi;
   pi->par=a;
   pi->bf=0;
   a->bf=0;
   while(a->par->bf>1&&a!=NULL)
   {
      a->par->bf--;
      a=a->par;
   }
}
void RR(struct node *pi)
{
   struct node *b;
   b=pi->rchild;
   if(pi==start)
      start=b;
   else
      pi->par->rchild=b;
   b->lchild->par=pi;
   pi->rchild=b->lchild;
   b->par=pi->par;
   b->lchild=pi;
   b->par=pi->par;
   pi->par=b;
   pi->bf=0;
   b->bf=0;
   while(b->par->bf<-1&&b!=NULL)
   {
      b->par->bf++;
      b=b->par;
   }
}
void LR(struct node *pi)
{
   struct node *a,*ar;
   a=pi->lchild;
   ar=a->rchild;
   if(pi==start)
          start=ar;
   else
      pi->par->lchild=ar;
   ar->par=pi->par;
   a->rchild=ar->lchild;
   a->par=ar;
   ar->lchild=a;
   pi->lchild=ar->rchild;
   ar->rchild=pi;
   pi->par=ar;
   if((pi->lchild!=NULL&&pi->rchild!=NULL)||(pi->lchild==NULL&&pi->rchild==NULL))
      pi->bf=0;
   else if(pi->lchild!=NULL)
      pi->bf=1;
   else if(pi->rchild==NULL)
      pi->bf=-1;
   if((a->lchild!=NULL&&a->rchild!=NULL)||(a->lchild==NULL&&a->rchild==NULL))
      a->bf=0;
   else if(a->lchild!=NULL)
      a->bf=1;
   else if(a->rchild==NULL)
      a->bf=-1;
   while(ar->par->bf>1&&ar!=NULL)
   {
      ar->par->bf--;
      ar=ar->par;
   }
}
void RL(struct node *pi)
{
   struct node *b,*bl;
   b=pi->rchild;
   bl=b->lchild;
   if(pi==start)
          start=bl;
   else
      pi->par->rchild=bl;
   bl->par=pi->par;
   b->lchild=bl->rchild;
   bl->rchild=b;
   b->par=bl;
   pi->rchild=bl->lchild;
   bl->lchild=pi;
   pi->par=bl;
   if((pi->lchild!=NULL&&pi->rchild!=NULL)||(pi->lchild==NULL&&pi->rchild==NULL))
      pi->bf=0;
   else if(pi->lchild!=NULL)
      pi->bf=1;
   else if(pi->rchild==NULL)
      pi->bf=-1;
   if((b->lchild!=NULL&&b->rchild!=NULL)||(b->lchild==NULL&&b->rchild==NULL))
      b->bf=0;
   else if(b->lchild!=NULL)
      b->bf=1;
   else if(b->rchild==NULL)
      b->bf=-1;
   while(bl->par->bf<-1&&bl!=NULL)
   {
      bl->par->bf++;
      bl=bl->par;
   }
}
void rotate(struct node *n,struct node *pi)
{
   if(n->runs<pi->runs)
   {
      if(n->runs < pi->lchild->runs)
      {
         printf("\n\nLL Rotation about %s\n\n",pi->name);
         LL(pi);
      }
      else if(pi->lchild->runs < n->runs)
      {
         printf("\n\nLR Rotation about %s\n\n",pi->name);
         LR(pi);
      }
   }
   else
   {
      if(n->runs < pi->rchild->runs)
      {
         printf("\n\nRL Rotation about %s\n\n",pi->name);
         RL(pi);
      }
      else if(n->runs > pi->rchild->runs)
      {
         printf("\n\nRR Rotation about %s\n\n",pi->name);
         RR(pi);
      }
   }
       /*   printf("Root :- %s",start->name);
   printf("\nAddress\tName\tRuns\tLeft\tRight\tBalancing Factor\n....................................\n");
   inorder(start);
   printf("\n"); */
}
int create(char na[MAX],int run)
{
   int i,st=0;
   struct node *tmp,*p,*q;
   tmp=(struct node *)malloc(sizeof(struct node));
   strcpy(tmp->name,na);
   tmp->runs=run;
   tmp->bf=0;
   tmp->lchild=tmp->rchild=tmp->par=NULL;
   if(start==NULL)
   {
      start=tmp;
      return 1;
   }
   q=start;
   while(q!=NULL)
   {
      if(run<q->runs)
      {
         p=q;
         q=q->lchild;
         st=1;
      }
      else if(run>q->runs)
      {
         p=q;
         q=q->rchild;
         st=2;
      }
      else
       {
         printf("DUPLICATE VALUE");
         return 0;
       }
   }
   if(st==1)
   {
      p->lchild=tmp;
      tmp->par=p;
      p->bf=p->bf+1;
   }
   else if(st==2)
   {
      p->rchild=tmp;
      tmp->par=p;
      p->bf=p->bf-1;
   }
   balance(p->par,p);
   while(p!=NULL)
   {
      if(p->bf>1||p->bf<-1)
      {
         rotate(tmp,p);
         p=p->par;
         break;
      }
      else
         p=p->par;
   }
   return 0;

}
void preorder(struct node *tmp)
{
   if(tmp!=NULL)
   {
      strcpy( na[j],tmp->name);
      r[j]=tmp->runs;
      j++;
      preorder(tmp->lchild);
      preorder(tmp->rchild);
   }
}
void main()
{

   FILE *f;
   int i,n=0,j,x=0,run,op;
   char c,name[MAX][MAX],code[MAX][MAX],runs[MAX][MAX];
   start=NULL;
   clrscr();
   f=fopen("C:/cricket.txt","r");
   if(f==NULL)
   {
      printf("Invalid directory");
      //return 0;
   }
//---------------------------------------------------------------------------
   for(i=0;i<MAX;i++)
      for(j=0;j<MAX;j++)
      {
         name[i][j]='\0';
         code[i][j]='\0';
         runs[i][j]='\0';
      }
   i=0;x=0;n=0;
   while((c=fgetc(f))!=EOF)
   {
      if(c==' ')
      {
         i=-1;
         x++;
      }
      if(c=='\n')
      {
         i=-1;
         x=0;
         n++;
      }

      if(x==0)
         name[n][i]+=c;
      if(x==1)
         code[n][i]+=c;
      if(x==2)
         runs[n][i]+=c;
      i++;
   }
//--------------------------------------------------------------------------------
   for(i=0;i<=n;i++)
   {
      printf("Name: %s Code: %s Runs: %s\n",name[i],code[i],runs[i]);
      run=atoi(runs[i]);
          create(name[i],run);
   }
   printf("Root :- %s",start->name);
   printf("\nAddress\tName\tRuns\tLeft\tRight\tBalancing Factor\n....................................\n");
   inorder(start);
   printf("\n");
   while(1)
   {
      printf("\n\n1.INSERT ITEM\n2.DELETE ITEM\n3.EXIT\n");
      scanf("%d",&op);
      switch(op)
      {
         case 1:
            i++;
            printf("NAME: ");
            scanf("%s",name[i]);
            printf("RUNS: ");
            scanf("%d",&run);
            create(name[i],run);
            break;
         case 2:
            preorder(start);
            start=NULL;
            start->lchild=start->rchild=start->par=NULL;
            printf("RUNS:");
            scanf("%d",&run);
            for(i=0;r[i]!=0;i++)
            {
               if(run==r[i])
               {
                  for(j=i;r[j]!=0;j++)
                  {
                     r[j]=r[j+1];
                     strcpy(na[j],na[j+1]);
                  }
               }
               //printf("%s\t%d\n",na[i],r[i]);
               create(na[i],r[i]);
            }
            break;
         case 3:
            exit(0);
      }
      printf("Root :- %s",start->name);
      printf("\nAddress\tName\tRuns\tLeft\tRight\tBalancing Factor\n....................................\n");
      inorder(start);
      printf("\n");
   }
}
Read More

C program to search element in an Unsorted array


PROGRAM

 #include<stdio.h>
 #include<conio.h>
 int a[20];
 void search(int *a,int n)
 {
   int i,item,flag=0;
   printf("\nEnter the element to be searched");
   scanf("%d",&item);
   for(i=0;i<n;i++)
   {
      if(item==a[i])
      {
         printf("\nElement %d is found in position %d",item,i+1);
         flag=1;
      }
   }
   if (flag!=1)
      printf("\n\t!Not found");
 }
 void main()
 {
   int n,i;
   char c;
   clrscr();
   printf("\nEnter the limit");
   scanf("%d",&n);
   printf("\nEnter numbers");
   for(i=0;i<n;i++)
      scanf("%d",&a[i]);
   printf("\nThe array elements are:\t");
   for(i=0;i<n;i++)
      printf("\t%d",a[i]);
   do
   {
      search(&a,n);
      printf("\nPress y for search another number");
      c=getche();
   }while(c=='y'||c=='Y');
   getch();
 }
Read More

C program to search element in an Sorted array

Program


#include<stdio.h>
#include<conio.h>
int a[20];
void search(int *a,int n)
{
   int i,item,flag=0,start=0,mid,end=n-1;
   printf("\nEnter the element to be searched");
   scanf("%d",&item);
   for(i=0;i<n;i++)
   {
      mid=(start+end)/2;
      if(item==a[i])
      {
         printf("\nElement %d is found in %d position",item,i+1);
         flag=1;
         break;
      }
      else if(item<a[mid])
         end=mid-1;
      else if(item>a[mid])
         start=mid+1;
   }
   if (flag!=1)
      printf("\n!Not found");
}
void sort(int *a,int n)
{
   int i,j,tmp;
   for(i=0;i<n;i++)
   {
      for(j=i+1;j<n;j++)
      if(a[j]<a[i])
      {
         tmp=a[i];
         a[i]=a[j];
         a[j]=tmp;
      }
   }
}
void main()
{
   int n,i;
   char c;
   clrscr();
   printf("\nEnter the limit");
   scanf("%d",&n);
   printf("\nEnter numbers");
   for(i=0;i<n;i++)
      scanf("%d",&a[i]);
   printf("\nThe array elements are:\t");
   for(i=0;i<n;i++)
      printf("\t%d",a[i]);
   printf("\nThe sorted array is:\t");
   sort(&a,n);
   for(i=0;i<n;i++)
      printf("\t%d",a[i]);
   do
   {
      search(&a,n);
      printf("\nPress y for search another number");
      c=getche();
   }while(c=='y'||c=='Y');
   getch();
}
Read More

C program : Stack

PROGRAM

#include<stdio.h>
#include<conio.h>
#define MAX 5
int top=-1;
int a[MAX];
void display()
{
   int i;
   if(top!=-1)
   {
      printf("\nElements of stack are::   ");
      for(i=0;a[i]!=0;i++)
         printf("%d\t",a[i]);
   }
   else
      printf("\n\nEMPTY STACK");
}
int push()
{
   int num,i;
   //for(i=0;i<20;i++)
      //a[i]='\0';
   if(top==(MAX-1))
      printf("\n\t! OVERFLOW\n");
   else
   {
      printf("\nEnter the number to push in to the stack");
      scanf("%d",&num);
      for(i=0;i<MAX;i++)
      {
         if(a[i]==num)
         {
            printf("\nNumber already exist");
            return 0;
         }

      }
      a[++top]=num;
   }
   display();
   return 1;
}
void pop()
{
   if(top==-1)
      printf("\n\t! UNDERFLOW");
   else
   {
      printf("\nElement poped::\t");
      printf("%d",a[top]);
      a[top]=0;
      top--;
   }
   display();
}
void main()
{
   int opt;
   char ch;
   clrscr();
   while (1)
   {
      printf("\nEnter the option\n\t1.PUSH\n\t2.POP\n\t3.EXIT");
      scanf("%d",&opt);
      switch(opt)
      {
         case 1:push();break;
         case 2:pop();break;
         case 3:exit(0);
         default:printf("\n\t\tINVALID CHOICE");break;
      }
      //printf("\npress y to continue");
      //ch=getche();
   }//while(ch=='Y'||ch=='y');
}
Read More

C program using binary tree to store the names

A person want to store data of cricketers and the names are in a text file in the following format .name, country number of runs scored.
 Use a binary tree to store the names and print the names in order of scores. Allow the user to delete a name from the binary tree.


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
struct node
{
char name[MAX];
int runs;
struct node *lchild,*rchild;
}*start;
void inorder(struct node *t)
{

if(t!=NULL)
{
inorder(t->lchild);
printf("%d\t%s\t%d\t%d\t%d\n",t,t->name,t->runs,t->lchild,t->rchild);
inorder(t->rchild);
}
}
int create(char na[MAX],int run)
{
int i,st=0;
struct node *tmp,*p,*q;
tmp=(struct node *)malloc(sizeof(struct node));
strcpy(tmp->name,na);
tmp->runs=run;
tmp->lchild=tmp->rchild=NULL;
if(start==NULL)
{
start=tmp;
return 1;
}
q=start;
while(q!=NULL)
{
if(run<q->runs)
{
p=q;
q=q->lchild;
st=1;
}
else if(run>q->runs)
{
p=q;
q=q->rchild;
st=2;
}
else
{
printf("DUPLICATE VALUE");
return 0;
}
}
if(st==1)
p->lchild=tmp;
else if(st==2)
p->rchild=tmp;
return 0;
}
void delb(struct node *q,struct node *p)
{
struct node *s;
s=q->rchild;
if(s->lchild!=NULL)
s=s->lchild;
del(s->runs);
s->lchild=q->lchild;
s->rchild=q->rchild;
if(q==start)
start=s;
else if(p->lchild==q)
p->lchild=s;
else if(p->rchild==q)
p->rchild=s;
}
int del(int run)
{
struct node *q,*p;
int s;
q=start;
while(q!=NULL)
{
if(run<q->runs)
{
s=1;
p=q;
q=q->lchild;
}
else if(run>q->runs)
{
s=2;
p=q;
q=q->rchild;
}
else if(run==q->runs)
{
if(q->lchild==NULL&&q->rchild==NULL)
{
if(s==1)
p->lchild=NULL;
else if(s==2)
p->rchild=NULL;
else
start=NULL;

}
else if(q->lchild!=NULL&&q->rchild==NULL)
{
if(s==1)
p->lchild=q->lchild;
else if(s==2)
p->rchild=q->lchild;
else
start=q->lchild;
}
else if(q->rchild!=NULL&&q->lchild==NULL)
{
if(s==1)
p->lchild=q->rchild;
else if(s==2)
p->rchild=q->rchild;
else
start=q->rchild;
}
else if(q->lchild!=NULL&&q->rchild!=NULL)
delb(q,p);
//free(q);
return 1;
}
}
printf("NOT FOUND");
return 0;
}
void main()
{
FILE *f;
int i,n=0,j,x=0,run,op;
char c,name[MAX][MAX],code[MAX][MAX],runs[MAX][MAX];
start=NULL;
clrscr();
f=fopen("C:/cricket.txt","r");
if(f==NULL)
{
printf("Invalid directory");

}
//---------------------------------------------------------------------------
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
{
name[i][j]='\0';
code[i][j]='\0';
runs[i][j]='\0';
}
i=0;x=0;n=0;
while((c=fgetc(f))!=EOF)
{
if(c==' ')
{
i=-1;
x++;
}
if(c=='\n')
{
i=-1;
x=0;
n++;
}

if(x==0)
name[n][i]+=c;
if(x==1)
code[n][i]+=c;
if(x==2)
runs[n][i]+=c;
i++;
}
//--------------------------------------------------------------------------------
for(i=0;i<=n;i++)
{
printf("Name: %s Code: %s Runs: %s\n",name[i],code[i],runs[i]);
run=atoi(runs[i]);
create(name[i],run);
}
printf("Root :- %s",start->name);
printf("\nAddress\tName\tRuns\tLeft\tRight\n.................................\n");
inorder(start);
while(1)
{
printf("\n\n1.INSERT ITEM\n2.DELETE ITEM\n3.EXIT\n");
scanf("%d",&op);
switch(op)
{
case 1:
i++;
printf("NAME: ");
scanf("%s",name[i]);
printf("RUNS: ");
scanf("%d",&run);
create(name[i],run);
break;
case 2:
if(start==NULL)
{
printf("NO ITEM TO DELETE");
break;
}
i++;
printf("RUNS :");
scanf("%d",&run);
del(run);
break;
case 3:
exit(0);
}
printf("\n\nRoot :- %s",start->name);
printf("\nAddress\tName\tRuns\tLeft\tRight\n.................................\n");
inorder(start);
printf("\n");
}
}

File :     C:/cricket.txt


SACHIN 10 250 
SAVENG 11 150 
YOUVI 13 175 
RAHUL 12 100 
GAUTHUM 90 50 
DHONI 23 400 
KOHLI 5 200



Read More