Python,C,C++ and JAVA programs for CBSE, ISC, B.Tech and I.T Computer Science and MCA students

The Programming Project: 2013

Saturday, October 12, 2013

GAME

The following program implements all features of Data Structures STACK, QUEUE and LIST using generic functions (templates in C++). User have choice for selection the data type float,integer or character to use the data structures. Also there is a game which takes 3 positive integers as input a,b and c. a represent the number of digits, b represent the maximum sum of digits and c represent the maximum total sum of all the numbers formed during the game. The score of the game is the highest number formed. The user after inputting the parameters will sequentially enter the digits, and the game will automatically stops when the sum of the numbers formed exceeds c. For example is user enter 3,13,200 as parameters and the digits entered sequentially is 1,1,9,5,9,6,5,4, 8,9.... the numbers that will be stored in the stack will be 119,5,9,11,12,9.... using the restrictions.  The stack is then sorted using another stack and the top element is your score. The Game is generalized for decimal numbers also i.e., input can be 1,1,.,9,5,.9,...... so on.
Here is an sample output:





































Here is the link for the code http://sdrv.ms/16Wrw8x

 C++ Code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
#define TRUE 1
#define FALSE 0
void f1(void);
void f2(void);
void f3(void);
void f4(void);
template <class L> class List
    {
    private:
    L d;
    L *data;
    int i;
    public:
    List(){}
    List (int n)
        {
        data=new L[n];
        i=0;
        }
    void store()
        {
        cin>>d;
        data[i]=d;
        i++;
        }
    void display(int n)
        {
        for(i=0;i<n;i++)
            cout<<"\t"<<data[i];
        }
    };
template <class L>
class Stack: virtual public List<L>
    {
    protected:
    L *data;
    int top;
    public:
    Stack(){}
    Stack (int n)
    {
    data=new L[n];
    top=-1;
    }
    //static int t;
    void push(L,int);
    void pop(int *pund,L *x);
    };
//template<class L>int Stack::t=-1;
template<class L>
void Stack<L>::push(L x,int STACKSIZE)
    {
     if(top==STACKSIZE-1)
        {
        cout<<"\n Stack is full, element not inserted:";
        return;
        }
     else
     data[++top]=x;
     }
template<class L>
void Stack<L>::pop(int *pund, L *x)
    {
    if(top==-1)
        {
            *pund=TRUE;
            return;
        }
    else
        {
        *x=data[top--];
        *pund=FALSE;
        return;
        }
    }
template<class L>
class Queue: virtual public List<L>
    {
    protected:
    L *data;
    int front;
    int rear;
    public:
    Queue(){}
    Queue(int MAXQUEUE)
        {
        data=new L[MAXQUEUE];
        front=rear=MAXQUEUE-1;
        }
    void insert(int MAXQUEUE,L x);
    void remove(L *x,int *pund,int MAXQUEUE);
    };
template<class L>
void Queue<L>::remove(L *x,int *pund,int MAXQUEUE)
    {
        if(rear==front)
            {
            cout<<"\n Queue is empty:";
            *pund=TRUE;
            return;
            }
        if(front==MAXQUEUE-1)
            front=0;
        else
            front++;
        *x=data[front];
        return;
    }
template<class L>
void Queue<L>::insert(int MAXQUEUE,L x)
    {
    if(rear==MAXQUEUE-1)
        rear=0;
    else
        rear++;
    if(rear==front)
        {
        cout<<"\n Queue overflow, element not inserted:";
        return;
        }
    data[rear]=x;
      return;
    }
template<class L>
class GAME:public Stack<L>,public Queue<L>
    {
    protected:
    L *digits;
       int tdigits;
    L dsum;
    L tsum;
    public:
    GAME(int a,int b,int c)
        { tdigits=a; dsum=b; tsum=c; }
    GAME():Stack<L>(400),Queue<L>(400)
        { digits= new L[400]; }
    void enter_digits(GAME,GAME,bool);
    };
template<class L>
void GAME<L>::enter_digits(GAME s2,GAME s3,bool FLAG)
{
    int und,pund=FALSE,len,k;
    int i=0,j=0,FLAG1=TRUE,dg=0,DFLAG=0,DCOUNT,count=0;
    L y,x,a,numb=0,sumd=0,tmp=0,sumt=0,numb1=0;
    char t[10],dot[3];
    if(FLAG)
    {
    do
    {

        for(i=0;i<tdigits;i++)
            {
          
            cout<<"\n Enter a digit: ";
            cin>>t;
            len=strlen(t);
            if(!atoi(t) && atoi(t) != 0)
                {
                i--;
                cout<<"\n You must enter a digit:\n";
                continue;
                }
            if(len>1)
                {
                i--;
                cout<<"\n You must enter a digit:\n";
                continue;
                }
            a=atoi(t);
            s2.insert(400,a);
            }
        do  
            {
                 if(sumd>dsum)
                break;
            else
                {
                if(FLAG1==TRUE)
                            numb=tmp+numb*10;
                s2.remove(&x,&und,400);
                    numb=x+numb*10;
                sumd=sumd+x;
                if(sumd>dsum)
                    {
                    tmp=x;
                    FLAG1=TRUE;
                    sumd -=x;
                     break;
                    }
                tmp=0;
                }
            FLAG1=FALSE;
            j++;
            }while(j<tdigits);
         if(FLAG1==TRUE)
         {j=1;numb=numb/10;}
         else
         {j=0;}
         //cout<<"\n <Number>"<<numb;
         s2.pop(&pund,&y);
             if(pund==TRUE)
            s2.push(numb,400);
            else
               {
               if(numb>=y)
                   {
                   s2.push(y,400);
                   s2.push(numb,400);
                   }
               else
                   {
                   s3.push(y,400);
                       while(y>numb)
                       {
                       s2.pop(&pund,&y);
                       if(pund==TRUE || y<=numb)
                           {
                           if(pund==TRUE)
                           {break;}
                           else
                           {s2.push(y,400); break;}
                           }
                       s3.push(y,400);
                        }
                        s2.push(numb,400);
                       while(1)
                       {
                       s3.pop(&pund,&y);
                       if(pund==TRUE)
                           break;
                       s2.push(y,400);
                       }
                  }
        }
        sumt +=numb;
        sumd=tmp;
        numb=0;

    }while(sumt<=tsum);
    s2.pop(&pund,&y);
    cout<<"\n Game ends,your score is:"<<y;
    cout<<"\n The sequence of numbers formed on the stack in descending order:\n";
    while(1)
    {
    cout<<y;
    s2.pop(&pund,&y);
    if(pund==TRUE)
        break;
    cout<<"\n";
    }
    }//end of integer game
    else
    {
        strcpy(dot,"$");
     do
        {
        for(i=0;i<tdigits;i++)
        {
        cout<<"\n Enter the number:";
        cin>>t;
         //cout<<strlen(t);
            if(strlen(t)>=2)
            {
                  cout<<"\n Not a valid input:";
            i--;
            continue;
            }
        if(strcmp(dot,t)==0)
            {
            i--;
            cout<<"\n Two consecutive dots not allowed:";
            continue;
            }
        if(strcmp(t,".")==0)
            {
            strcpy(dot,t);
            a=-1.0;
            s2.insert(400,a);
            continue;
            }
        if(!atof(t) || !atoi(t))
            {
                  cout<<"\n Not a valid input:";
            i--;
            continue;
            }
            j=0;
        while(t[j]!='\0' && strlen(t)<2)
              {  
              a=atof(t);
              s2.insert(400,a);
                j++;
                        }
                strcpy(dot,"$");
          } //end of one set of input
          und=TRUE;
           while(und)
             {
             s2.remove(&x,&und,400);
             if(x==-1)
                 {
                 DCOUNT++;
                 DFLAG=TRUE;
                 j=1;
                 if(DCOUNT==2)
                     break;
                 }//end of if
             else
                 {
                 if(DFLAG==TRUE)
                     {
                     sumd +=x;
                     if(sumd>dsum)
                         {
                         tmp=x;
                         DFLAG=FALSE;
                         break;
                         }
                     count++;
                     numb1=numb1+x*pow(10,-j);
                     j++;
                     if(count==tdigits)
                     break;
                     }//end of if
                 else
                     {
                     sumd +=x;
                     if(sumd>dsum)
                         {
                         tmp=x;
                         break;
                         }
                     count++;
                     numb=x+numb*10;
                     }//end of inner else
                 if(count==tdigits)
                 break;
                 }//end of else
             cout<<"\n Sumd="<<sumd;
             cout<<"\n Count="<<count;
             cout<<"\n J="<<j;
             cout<<"\n DFLAG="<<DFLAG;
             } //end of while(und)  
    count=0;
    numb=numb+numb1;
    cout<<"\n <Number>\n"<<numb;
    sumt +=numb;
    numb=0.0;
    numb1=0.0;
    if(DFLAG==TRUE && tmp!=0)
        {
        count++;
        numb1=numb1+tmp*pow(10,-j);
        sumd=tmp;
        }
    if(DFLAG==FALSE && tmp!=0)
        {
        count++;
        numb=tmp+numb*10;
        sumd=tmp;
        }
    }while(sumt<70.0);    
    }//end of float game
}
int main()
{
    int menu;
    cout<<"\n Press '1' for LIST:";
    cout<<"\n Press '2' for STACK:";
    cout<<"\n Press '3' for QUEUE:";
    cout<<"\n Press '4' to play the GAME:";
    cout<<"\n Press '5' to exit:";
    do{
    cout<<"\n Enter your choice:";
    cin>>menu;
    switch(menu)
        {
        case 1:
        f1();
        break;
        case 2:
        f2();
        break;
        case 3:
        f3();
        break;
        case 4:
        f4();
               break;
        default:
        break;
        }
    }while(menu!=5);
return 0;
}
void f4(void)
{
    int a,b,c,ch;
    bool FLAG;
    cout<<"\n Enter the values of a,b and c to begin:";
    cin>>a>>b>>c;
    GAME <int>s1(a,b,c); GAME<int>s2;GAME <int>s3;
    GAME <float>t1(a,b,c); GAME <float>t2; GAME <float>t3;
    cout<<"\n Enter 1 to play with positive digits:";
    cout<<"\n Enter 2 to play with floating point:";
    cout<<"\n Enter your choice:";
    cin>>ch;
    if(ch==1)
        {
        FLAG=1;
        cout<<"\n Start entering digits:\n";
        s1.enter_digits(s2,s3,FLAG);
        }
    if(ch==2)
        {
        FLAG=0;
        cout<<"\n Start entering digits:\n";
        t1.enter_digits(t2,t3,FLAG);
        }
  
   
}
void f3(void)
{
    int n,choice,x,und,ch;
    Queue <int>Q1(n);
    Queue <float>Q2(n);
    float x1;
    cout<<"\n Enter the size of the QUEUE:";
    cin>>n;
    cout<<"\n Enter 1 to add integer values to QUEUE:";
    cout<<"\n Enter 2 to add floating point values to QUEUE:";
    cout<<"\n Enter your choice:";
    cin>>ch;
    if(ch==1)
    {
    cout<<"\n Press 1 to insert an element in the Queue:";
    cout<<"\n Press 2 to remove an element from the Queue:";
    cout<<"\n Press 3 to exit:";
    do
    {
    cout<<"\n Enter your choice for menu:";
    cin>>choice;
    switch(choice)
        {
        case 1:
        cout<<"\n Enter the element:";
        cin>>x;
        Q1.insert(n,x);
        break;
        case 2:
        Q1.remove(&x,&und,n);
        if(und==TRUE)
            {
          //    cout<<"\n Queue Underflow:";
            break;
            }
        else
        cout<<"\n Element removed is:  "<<x;
        break;
        default:
        break;
        }
    } while(choice!=3);
    }
    if(ch==2)
    {
    cout<<"\n Press 1 to insert an element in the Queue:";
    cout<<"\n Press 2 to remove an element from the Queue:";
    cout<<"\n Press 3 to exit:";
    do
    {
    cout<<"\n Enter your choice for menu:";
    cin>>choice;
    switch(choice)
        {
        case 1:
        cout<<"\n Enter the element:";
        cin>>x;
        Q2.insert(n,x1);
        break;
        case 2:
        Q2.remove(&x1,&und,n);
        if(und==TRUE)
            {
          //    cout<<"\n Queue Underflow:";
            break;
            }
        else
        cout<<"\n Element removed is:  "<<x1;
        break;
        default:
        break;
        }
    } while(choice!=3);
    }
  
}
void f2(void)
{
    int n,choice,x,und,ch;
    Stack <int>S1(n);
    Stack <float>S2(n);
    float x1;
    cout<<"\n Enter the size of the STACK:"<<endl;
    cin>>n;
    cout<<"\n Enter 1 to add integer values to List:";
    cout<<"\n Enter 2 to add floating point values to List:";
    cout<<"\n Enter your choice:";
    cin>>ch;
    if(ch==1)
    {
    cout<<"\n Press 1 to push an element in the stack:";
    cout<<"\n Press 2 to pop an element:";
    cout<<"\n Press 3 to exit:";
    do
    {
    cout<<"\n Enter your choice for menu:";
    cin>>choice;
    switch(choice)
        {
        case 1:
        cout<<"\n Enter the element:";
        cin>>x;
        S1.push(x,n);
        break;
        case 2:
        S1.pop(&und,&x);
        if(und==TRUE)
            {
            cout<<"\n Stack Underflow:";
            break;
            }
        else
        cout<<"\n Element popped out is:  "<<x;
        break;
        default:
        break;
        }
    } while(choice!=3);
    }
    if(ch==2)
    {
    cout<<"\n Press 1 to push an element in the stack:";
    cout<<"\n Press 2 to pop an element:";
    cout<<"\n Press 3 to exit:";
    do
    {
    cout<<"\n Enter your choice for menu:";
    cin>>choice;
    switch(choice)
        {
        case 1:
        cout<<"\n Enter the element:";
        cin>>x1;
        S2.push(x1,n);
        break;
        case 2:
        S2.pop(&und,&x1);
        if(und==TRUE)
            {
            cout<<"\n Stack Underflow:";
            break;
            }
        else
        cout<<"\n Element popped out is:  "<<x1;
        break;
        default:
        break;
        }
    } while(choice!=3);
    }
}
void f1(void)
{
    int n,nf=0,choice;;
    char c;
    List <int> Ls(n);
    List <float>Ls1(n);
    List <char>Ls2(n);
    cout<<"\n Enter the number of elements to be stored in the list:"<<endl;
    cin>>n;
    cout<<"\n Enter 1 to add integer values to List:";
    cout<<"\n Enter 2 to add floating point values to List:";
    cout<<"\n Enter 3 to add character values to List:";
    cout<<"\n Enter your choice:";
    cin>>choice;
    if(choice==1)
        {
      
        do
    {
    cout<<"\n Enter the element in the list:";
    Ls.store();
    nf++;
    if(nf==n)
        {
        cout<<"\n No more elements can be added:";
        break;
        }
    cout<<"\n Do you wish to enter another element (y/n):";
    cin>>c;
    }while (c!='n');
    cout<<"\n Press 'v' to view the list or any other key to exit:";
    cin>>c;
     if(c=='v')
    Ls.display(nf);
        }
    if(choice==2)
        {
      
        do
    {
    cout<<"\n Enter the element in the list:";
    Ls1.store();
    nf++;
    if(nf==n)
        {
        cout<<"\n No more elements can be added:";
        break;
        }
    cout<<"\n Do you wish to enter another element (y/n):";
    cin>>c;
    }while (c!='n');
    cout<<"\n Press 'v' to view the list or any other key to exit:";
    cin>>c;
     if(c=='v')
    Ls1.display(nf);
        }
    if(choice==3)
    {
        List <char>Ls[n];
      
    do
    {
    cout<<"\n Enter the element in the list:";
    Ls2.store();
    nf++;
    if(nf==n)
        {
        cout<<"\n No more elements can be added:";
        break;
        }
    cout<<"\n Do you wish to enter another element (y/n):";
    cin>>c;
    }while (c!='n');
    cout<<"\n Press 'v' to view the list or any other key to exit:";
    cin>>c;
     if(c=='v')
    Ls2.display(nf);
    }
}



Sunday, September 29, 2013

PROGRAMMING IN 8086

Fact = N * (N–1)*….2*1  (all are unsigned Word variable)


 TITLE factorial 
;TO COMPUTE
;factorial N <= 8
;----------------------------------------------------------------
     .MODEL SMALL
     .STACK 64
     .DATA
     VAR_N DW 9 
     VAR_FACT DW 1
;----------------------------------------------------------------
     .CODE
MAIN PROC FAR
     MOV AX,@DATA
     MOV DS,AX
     MOV AX,VAR_N 
     MOV DX,01
     CMP AX,00h
     JE SPECIAL
     MOV CX,AX
     MOV BX,AX
     DEC BX      
     DEC CX  
     JZ SPECIAL
     LOOP: MUL BX
           DEC BX 
           DEC CX
           JNZ LOOP         
     MOV DX,AX
     SPECIAL:MOV VAR_FACT,DX
     MOV AX,4C00H
     INT 21H
MAIN ENDP
     END MAIN
    

ROGRAMMING IN 8086

  1. Write an assembly program that converts a number in the word variable D, 0 <= D <= 15 to an ASCII character in the byte variable HEXD which is its hex value. For instance, if D = 3 then HEXD = ‘3’ and if D = 14 then HEXD = ‘E’.


TITLE  word variable to ASCII character
;----------------------------------------------------------------
     .MODEL SMALL
     .STACK 64
     .DATA
     ;ACODE   DB '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
     ACODE DB '0123456789ABCDEF'
     VALUE   DW 7  
     INDEX   DB 0
     HEXVAL  DB '?'  
;----------------------------------------------------------------
     .CODE
MAIN PROC FAR
     MOV AX,@DATA
     MOV DS,AX
     MOV ES,AX
     MOV CX,15
     LOOP:
            MOV AX,CX
            CMP AX,VALUE
            JE GOT
            INC INDEX
            DEC CX
            JNZ LOOP
     GOT:MOV AL,15
     SUB AL,INDEX
     MOV INDEX,AL
     MOV CL,INDEX
     INC CL
     LEA SI,ACODE
     LOOP1:MOV AL,[SI]
           MOV HEXVAL,AL
          INC SI
          DEC CL
          JNZ LOOP1
     MOV AX,4C00H
     INT 21H
MAIN ENDP
     END MAIN  ;END MAIN PROCEDURE
    

Programming in 8086

  1. Write a program to find out the number of positive and negative numbers from a given array of 10 16-bit numbers


TITLE POSITIVE NEGATIVE
;TO COMPUTE THE NUMBER OF
;POSITIVE AND NEGATIVE NUMBERS
;----------------------------------------------------------------
     .MODEL SMALL
     .STACK 64
     .DATA
     VAR_POS DW 00
     VAR_NEG DW 00  
     ARRAY DW 2,-3,4,5,6,-7,8,9,-2,3 ; input to the program
;----------------------------------------------------------------
     .CODE
MAIN PROC FAR
     MOV AX,@DATA  ; SET ADDRESS OF DATA SEGMENT IN DS
     MOV DS,AX
     MOV CX,10d  ; LOOP COUNTER
     MOV SI,OFFSET ARRAY ; LOADING BX WITH OFFSET
     LOOP:      
         CLC
         XOR AX,AX
         MOV AX,[SI] ; MOVING THE POINTED DATA
         RCL AX,1    ; ROTATE TO CHECK FOR MSB
         JC NEGA
         INC VAR_POS ; IF CARRY FLAG IS RESET (0), INCREASE VAR_POS
         JMP NEXT
         NEGA:
             INC VAR_NEG ; IF CARRY FLAG IS SET (1), INCREASE VAR_NEG
         NEXT:
             INC SI   ;TO FETCH THE
             INC SI   ; NEXT WORD
             DEC CX   ; LOOP UNTIL DATA ARE PROCESSED
         JNZ LOOP                                                                    
     MOV AX,4C00H
     INT 21H
MAIN ENDP
     END MAIN  ;END MAIN PROCEDURE
    

Tuesday, September 24, 2013

Combination in Lexicographical Order




#include<stdio.h>
#include<malloc.h>
#include<conio.h>
int main()
{
char alpha[]={'?','A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int n,i,pos,r,tmp,j,flag=1;
long int tot=0;
char *combination;
printf("\n Enter the number of objects (max value is 26):");
scanf("%d",&n);
printf("\n Enter the value of r ( 1<= r <= n):");
scanf("%d",&r);
combination =(char *)malloc(n*sizeof(char));
for(i=1;i<=n;i++)
combination[i]=alpha[i];
printf("\n The combinations are (is):\n");
printf("\t\t      ");
for(i=1;i<=r;i++)
printf("%c",combination[i]);
tot=1;
while(flag)
{
for(i=r;i>=1;i--)
{
if(combination[i]-64==n-r+i)
{
}
else
{
pos=i;
break;
}
}
if(i==0)
{
flag=0;
break;
}
for(j=1;j<=26;j++)
if(combination[pos]==alpha[j])
break;
combination[pos]=alpha[j+1];
for(i=pos+1;i<=r;i++)
combination[i]=alpha[(combination[i-1]-64)+1];
printf("\n");
printf("\t\t      ");
for(i=1;i<=r;i++)
printf("%c",combination[i]);
tot++;
}
printf("\n Total number of combination is: %ld",tot);
return 0;
}


Friday, September 20, 2013

Permutation in Lexicographical Order

This C program prints the permutation of n distinct objects (0 < n <= 26 )  in Lexicographical Order.



#include<stdio.h>
#include<malloc.h>
void sort(char *permutation,int n,int pos);
void replace_min (char *permutation,int n,int pos);
int main()
{
char alpha[]={'A','B','C','D','E','F','G','H','I','J','K','L','M',
          'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int n,i,flag=1,pos;
long int tot=0;
char *permutation;
printf("\n Enter the numbr of objects (max values is 26):");
scanf("%d",&n);
permutation =(char *)malloc(n*sizeof(char));
for(i=0;i<n;i++)
    permutation[i]=alpha[i];
printf("\n The permutations are:\n");
printf("\t\t      ");
for(i=0;i<n;i++)
    printf("%c",permutation[i]);
    tot=1;
while(flag)
    {
    pos=-1;
    for(i=n-1;i>=1;i--)
        {
        if(permutation[i-1]<permutation[i])
             {
             pos=i-1;
             flag=1;
             break;
             }
        }
        if(pos==-1)
            {
            flag=0;
            break;
            }
    replace_min(permutation,n,pos);
    sort(permutation,n,pos);
   printf("\n");
    printf("\t\t      ");
    for(i=0;i<n;i++)
        printf("%c",permutation[i]);
    //tot++;
    //getche();
    }
//printf("\n Total number of permutation is: %ld",tot);
return 0;
}
void sort(char *permutation,int n,int pos)
{
    int i,j;
   char temp='A';
    for(i=pos+1;i<n-1;i++)
        {
        for(j=pos+1;j<n-1;j++)
            {
            if(permutation[j]>permutation[j+1])
                {
                temp=permutation[j+1];
                permutation[j+1]=permutation[j];
                permutation[j]=temp;
                }
            }
        }
  return;
}
void replace_min(char *permutation,int n,int pos)
{
  char min='Z',temp;
  int k,min_pos=0;
  for(k=pos+1;k<n;k++)
    {
        if(permutation[k]>permutation[pos])
            {
            if(permutation[k]<min)
                {
                min=permutation[k];
                min_pos=k;
                }
            }
    }
    temp=permutation[min_pos];
    permutation[min_pos]=permutation[pos];
    permutation[pos]=temp;
    return;
}

Monday, September 16, 2013

Intersection of Sets



To find intersection of two sets through C

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void inter_set(int *s1,int*s2,int n,int m);
int main()
{
int n,m,i;
int *s1,*s2;
printf("\n Enter the number of elements in the sets:");
scanf("%d %d",&n,&m);
s1=(int *)malloc(n*sizeof(int));
s2=(int *)malloc(m*sizeof(int));
printf("\n Enter the elements of the set 1:");
for(i=0;i<n;i++)
{
printf("\n Enter the element %d:",i+1);
scanf("%d",&s1[i]);
}
printf("\n Enter the elements of the set 2:");
for(i=0;i<m;i++)
{
printf("\n Enter the element %d:",i+1);
scanf("%d",&s2[i]);
}
inter_set(s1,s2,n,m);
return 0;
}
void inter_set(int *s1,int*s2,int n,int m)
{
int *s,i=0,j,k;
int flag=0;
s=(int *)malloc((m<n ? m: n)*sizeof(int));
for(j=0;j<m;j++)
{
for(k=0;k<n;k++)
{
if(s2[j]==s1[k])
{
flag=1;
break;
}
}

if(flag==1)
{
s[i]=s2[j];
         i++;
flag=0;
}
 if(flag==0)
continue;
 }
 if(i==0)
printf("\n Intersection is Null:");
else
{
  printf("\n Intersection of the entered sets is:");
  printf("\n { ");
  for(j=0;j<i-1;j++)
printf(" %d,",s[j]);
  printf(" %d }\n ",s[i-1]);
}


return;
}

Union of Sets


This C program finds the Union of two Sets (atleast one of is non-empty)
#Task- Apply recursion to the program below to find Union of finite number of sets

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void union_set(int *s1,int*s2,int n,int m);
int main()
{
int n,m,i;
int *s1,*s2;
printf("\n Enter the number of elements in the sets:");
scanf("%d %d",&n,&m);
s1=(int *)malloc(n*sizeof(int));
s2=(int *)malloc(m*sizeof(int));
printf("\n Enter the elements of the set 1:");
for(i=0;i<n;i++)
{
printf("\n Enter the element %d:",i+1);
scanf("%d",&s1[i]);
}
printf("\n Enter the elements of the set 2:");
for(i=0;i<m;i++)
{
printf("\n Enter the element %d:",i+1);
scanf("%d",&s2[i]);
}
union_set(s1,s2,n,m);
return 0;
}
void union_set(int *s1,int*s2,int n,int m)
{
int *s,i,j,k;
int flag=0;
s=(int *)malloc((m+n)*sizeof(int));
for(i=0;i<n;i++)
s[i]=s1[i];
for(j=0;j<m;j++)
{
for(k=0;k<n;k++)
{
if(s2[j]==s[k])
{
flag=1;
break;
}
}

if(flag==1)
{
flag=0;
continue;
         }
else
      if(flag==0)
{
s[i]=s2[j];
i++;
flag=0;
}
}
  printf("\n Union of the entered sets is:");
  printf("\n { ");
  for(j=0;j<i-1;j++)
printf(" %d,",s[j]);
  printf(" %d }\n ",s[i-1]);



}

Saturday, September 14, 2013

Calculating Factorial in Python

A simple program in Python to calculate the factorial of an natural number:

#File: fact.py
#A simple program
def main():
    print "Factorial Function"
    x=input("Enter a natural number:")
    l=1
    for i in range(x):
        l=l*x
        x=x-1
    print l
main()

Run the python interpreter from the folder where the file (fact.py) is residing and import it as shown below:


administrator@ubuntu:~/python$ python
Python 2.7.4 (default, Apr 19 2013, 18:28:01)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import fact
Factorial Function
Enter a natural number:350
123587405826548875014395199766546457224532073946919515879429330230093035357491314216934583295011178445941552109432761532449767761892237043444942213964090091669490545661255111334533069825455607852789836451585122902099649977304226794874840601811017764137584868137504975397325925882541777117706619490238363409254589994079334626893194608016888986949684994333459029365214555784862353939102567266745712846824819004146064184543888123533464975621179287075018586481357643313075153359002713294611632614208134036650116689052585573350955360246170451786972351365370405722036294385680478287278827977511411909071460914807681131728232182991517416470483157998067487290163200000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>>


Modified Euler's Method for Numerical Solution of first order Differential Equation

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
double dfxy(double x,double y);
FILE *fp;
int main(int argc, char* argv[])
{
double x0,y0,h,x,*xi,*yi,temp=0.0;
char c;
int n,i;
if(argc==1)
    {
    printf("\n Enter the value of h (interval-width):");
    scanf("%lf",&h);
    printf("\n Enter the initial value of x:");
    scanf("%lf",&x0);
    printf("\n Enter the initial value of y:");
    scanf("%lf",&y0);
    printf("\n Enter the value of x at which y is calculated:");
    scanf("%lf",&x);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));
    }
else if(argc==2)
    {
    /*fp=fopen(argv[1],"r");
    fscanf(fp,"%d",&n);
    fscanf(fp,"%lf",&lower_limit);
    fscanf(fp,"%lf",&upper_limit);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));*/
    }
else
    {
    printf("\n Invalid arguments, program will terminate:");
    exit(1);
    }
n=(x-x0)/h;
xi[0]=x0;
yi[0]=y0;
printf("\n\tX\t\t\tY\n");
printf("\tf(%+lf)\t\t=%+lf",xi[0],yi[0]);
i=1;
while(x0!=x)
    {
    yi[i]=yi[i-1]+dfxy(xi[i-1],yi[i-1])*h;
    x0=x0+h;
    xi[i]=x0;
    //printf("\n >>>>>>>>%lf",yi[i]);
    do
    {
    temp=yi[i];
    yi[i]=yi[i-1]+(h/2)*(dfxy(xi[i-1],yi[i-1])+dfxy(xi[i],yi[i]));
    //printf("\n >>>>>>>>%lf",yi[i]);
    }while(fabs(temp-yi[i])>0.00001);
    i++;
    xi[i]=x0;
    yi[i]=temp;
    printf("\n\tf(%+lf)\t\t=%+lf",xi[i],yi[i]);
    }
printf("\n");
return 0;
}
double dfxy(double x,double y)
    {
    return (x*x+y);
    }

Euler's Method for Numerical Solution of first order Differential Equation





#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
double dfxy(double x,double y);
FILE *fp;
int main(int argc, char* argv[])
{
double x0,y0,h,x,*xi,*yi,temp=0.0;
int n,i;
if(argc==1)
    {
    printf("\n Enter the value of h (interval-width):");
    scanf("%lf",&h);
    printf("\n Enter the initial value of x:");
    scanf("%lf",&x0);
    printf("\n Enter the initial value of y:");
    scanf("%lf",&y0);
    printf("\n Enter the value of x at which y is calculated:");
    scanf("%lf",&x);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));
    }
else if(argc==2)
    {
    /*fp=fopen(argv[1],"r");
    fscanf(fp,"%d",&n);
    fscanf(fp,"%lf",&lower_limit);
    fscanf(fp,"%lf",&upper_limit);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));*/
    }
else
    {
    printf("\n Invalid arguments, program will terminate:");
    exit(1);
    }
n=(x-x0)/h;
xi[0]=x0;
yi[0]=y0;
printf("\n\tX\t\t\tY\n");
printf("\t%+lf\t\t%+lf",xi[0],yi[0]);
i=1;
while(x0!=x)
    {
    yi[i]=yi[i-1]+dfxy(xi[i-1],yi[i-1])*h;
    x0=x0+h;
    xi[i]=x0;
    printf("\n\t%+lf\t\t%+lf",xi[i],yi[i]);
    }
printf("\n");
//printf("\n Value of the integral using Trapezoidal Rule is %+.8lf\n",invert==0 ? (h/2.0)*temp:-(h/2.0)*temp);
return 0;
}
double dfxy(double x,double y)
    {
    return (x+y);
    }

Simpson's Rule




#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
double integrand(double x);
FILE *fp;
int main(int argc, char* argv[])
{
double lower_limit,upper_limit,h,*xi,*yi,temp=0.0;
int n,i,invert=0;
if(argc==1)
    {
    printf("\n Enter the number of intervals:");
    scanf("%d",&n);
    printf("\n Enter the lower limit:");
    scanf("%lf",&lower_limit);
    printf("\n Enter the upper limit:");
    scanf("%lf",&upper_limit);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));
    }
else if(argc==2)
    {
    fp=fopen(argv[1],"r");
    fscanf(fp,"%d",&n);
    fscanf(fp,"%lf",&lower_limit);
    fscanf(fp,"%lf",&upper_limit);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));
    }
else
    {
    printf("\n Invalid arguments, program will terminate:");
    exit(1);
    }
if(lower_limit>upper_limit)
    {
    temp=lower_limit;
    lower_limit=upper_limit;
    upper_limit=temp;
    invert=1;
    }
h=(upper_limit-lower_limit)/n;
temp=lower_limit;
for(i=0;i<=n;i++)
    {
    xi[i]=temp;
    temp=temp+h;
    }
printf("  xi\t\t\tyi\n");
temp=0.0;
for(i=0;i<=n;i++)
    {
    yi[i]=integrand(xi[i]);
    printf("%+lf\t\t%+.8lf\n",xi[i],yi[i]);
    if(i==0 || i==n)
        temp+= yi[i];
    else   
        {
        if(i%2==0)
        temp += 2*yi[i];
        else
        temp += 4*yi[i];
        }
    }   
printf("\n Value of the integral using Simpson's Rule is %+.8lf\n",invert==0 ? (h/3.0)*temp:-(h/3.0)*temp);
return 0;
}
double integrand(double x)
    {
    return (log(x));
    }

Trapezoidal Rule

C Program to implement Trapezoidal Rule



#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
double integrand(double x);
FILE *fp;
int main(int argc, char* argv[])
{
double lower_limit,upper_limit,h,*xi,*yi,temp=0.0;
int n,i,invert=0;
if(argc==1)
    {
    printf("\n Enter the number of intervals:");
    scanf("%d",&n);
    printf("\n Enter the lower limit:");
    scanf("%lf",&lower_limit);
    printf("\n Enter the upper limit:");
    scanf("%lf",&upper_limit);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));
    }
else if(argc==2)
    {
    fp=fopen(argv[1],"r");
    fscanf(fp,"%d",&n);
    fscanf(fp,"%lf",&lower_limit);
    fscanf(fp,"%lf",&upper_limit);
    xi=(double *)malloc((n+1)*sizeof(double));
    yi=(double *)malloc((n+1)*sizeof(double));
    }
else
    {
    printf("\n Invalid arguments, program will terminate:");
    exit(1);
    }
if(lower_limit>upper_limit)
    {
    temp=lower_limit;
    lower_limit=upper_limit;
    upper_limit=temp;
    invert=1;
    }
h=(upper_limit-lower_limit)/n;
temp=lower_limit;
for(i=0;i<=n;i++)
    {
    xi[i]=temp;
    temp=temp+h;
    }
printf("  xi\t\t\tyi\n");
temp=0.0;
for(i=0;i<=n;i++)
    {
    yi[i]=integrand(xi[i]);
    printf("%+lf\t\t%+.8lf\n",xi[i],yi[i]);
    if(i==0 || i==n)
        temp+= yi[i];
    else
        temp += 2*yi[i];
    }   
printf("\n Value of the integral using Trapezoidal Rule is %+.8lf\n",invert==0 ? (h/2.0)*temp:-(h/2.0)*temp);
return 0;
}
double integrand(double x)
    {
    return (log(x));
    }