Monday, July 28, 2014

c assignment 4

↓↑ Program to count Number of 1's in binary number. 
#include<stdio.h>
void bin(int);
static int c=0;
int main()
{
    int n;
    printf("enter decimal number :");
    scanf("%d",&n);
    printf("\nbinary number is:");
    bin(n);
    printf("\nno of one=%d\n",c);

return 0;
}
void bin(int n)
{
    int r;
    if(n!=0)
    {
     r=n%2;
 if(r)c++;
        n=n/2;
 bin(n);
 printf("%d",r);
    }
    else 
        printf(" ");
}
↓↑ Program to Find evaluation order of function parameters.
#include<stdio.h>
void test(int,int,int);
int main()
{
    int i=6; 
    test(i++,i++,i++);   // Although behaviour undefined but most compilers follow right-to-left evaluation order.
    printf("\nAfter post:\n");
    test(++i,++i,++i);   
return 0;
}

void test(int a,int b,int c)
{
    printf("value:a=%d\tb=%d\tc=%d\n",a,b,c);
    printf("address:a=%u\tb=%u\tc=%u\n",&a,&b,&c);
}



↓↑ Program to calculate factorial of number correctly till 1...20.
#include<stdio.h>
long long int fact(int n);
int main()
{
    int n;
    long long int factN;
    printf("enter number:");
    scanf("%d",&n);
    factN=fact(n);
    printf("value of factorial %d is:%lld\n",n,factN);
return 0;
}

long long int fact(int n)
{
    if(n==0)
        return 1;
    else
        return n*fact(n-1);
}
↓↑ Program to calculate factorial of very large number(with math lib).
#include <stdio.h>
#include <math.h>
#include <string.h>

void multd(char * s, size_t len, unsigned n)
{
    unsigned values[len];
    size_t i;
    memset(values, 0, sizeof(unsigned) * len);
    for(i = len; i--; )
    {
        unsigned x = values[i] + (s[i] - '0') * n;
        s[i] = '0' + x % 10;
        if(i) values[i - 1] += x / 10;
    }
}

void factd(char * s, size_t len, unsigned n)
{
    memset(s, '0', len - 1);
    s[len - 1] = '1';
    for(; n > 1; --n) multd(s, len, n);
}

int main(void)
{
    unsigned num = 5;
    size_t len = ceill(log10l(tgammal(num + 1)));
    char dstr[len + 1];
    dstr[len] = 0;
    factd(dstr, len, num);
    puts(dstr);
}
↓↑ Program to calculate factorial of very large number(with gmp lib).
// There is no practical limit to the precision except the ones implied 
// by the available memory in the machine GMP runs on.
#include <stdio.h>
#include <gmp.h>

void fact(mpz_t r,int n){
    unsigned int i;
    mpz_t temp;
    mpz_init(temp);
    mpz_set_ui(r,1);
    for(i=1;i<=n;i++){
        mpz_set_ui(temp,i);
        mpz_mul(r,r,temp);
    }
    mpz_clear(temp);
}
int main(void) {
    mpz_t r;
    mpz_init(r);
//    fact(r,188315);
    fact(r,100); 
    gmp_printf("%Zd\n",r);
    mpz_clear(r);
return(0);
}
//https://gmplib.org/
//sudo apt-get install  libgmp3-dev or sudo yum install  libgmp3-dev
//gcc factlargernumber.c -lgmp
↓↑ Program to print fibonacci series upto given length.
#include<stdio.h>
void fib(int,int,int);
int main()
{
    int f0=0,f1=1,len;
    printf("Enter fibonaci series length: ");
    scanf("%d",&len);  
    fib(f0,f1,len);
    printf("\n");
return 0;
}
void fib(int current,int old,int l)
{
    static int i=0;
    int new;
    if(i<l)
    {
        new=current+old;
        printf("%d ",new);
        old=current;
        current=new;
        i++;
        fib(current,old,l);
    }
    else
        return;  
}
↓↑ Program to demonstrate function pointer.
#include<stdio.h>
int test(int,int,int (*fp)(int,int));
int (*fp)(int,int);
int sum(int,int);

int main()
{
    int a=3,b=4,sm;
    fp=sum;
    sm=test(a,b,sum);
    printf("sum=%d\n",sm);
return 0;
}

int sum(int a,int b)
{
    return (a+b);
}

int test(int a,int b,int (*fp)(int a,int b))
{
    return fp(a,b);
}
↓↑ Menu based Program using function pointer.
#include<stdio.h>
int test(int,int,int (*fp)(int,int));
int sum(int,int);
int prod(int,int);
int div(int,int);
int sub(int,int);

int main()
{
    int a=4,b=2,choice,result,(*fp[4])(int,int);
    fp[0]=sum;
    fp[1]=sub;
    fp[2]=prod;
    fp[3]=div;
    printf("enter your choice.\n0.addition\n1.substraction\n2.multiplication\n3.division\n");
    scanf("%d",&choice);
    result=test(a,b,fp[choice]);
    printf("%d\n",result);
return 0;
}

int sum(int a,int b)
{
    printf("\nsum=");
    return (a+b);
}

int prod(int a,int b)
{
    printf("\nproduct=");
    return(a*b);
}

int sub(int a,int b)
{
    printf("\nsubstraction=");
    return (a-b);
}

int div(int a,int b)
{
    printf("\ndivision=");
    return(a/b);
}
int test(int a,int b,int (*fp)(int a,int b))
{
    return fp(a,b);
}
↓↑ Program to calculate GCD of two number using recursion.
#include<stdio.h>
int gcd(int,int);
int main()
{
 int x,y,gcd1;
 printf("enter two no.");
 scanf("%d%d",&x,&y);
 gcd1=gcd(x,y);
 printf("gcd of two no is:%d\n",gcd1);
return 0;
}
int gcd(int x,int y)
{
 if(x==y)
  return x;
 else if(x>y)
  return gcd(x-y,y);
 else
  return gcd(x,y-x); 
}       
       
↓↑ Make file demonstration
//copy all parts in different files and keep in same directory
// then simply type ( make ) on terminal

makefile ->

all.out:mainp.o sump.o squarep.o
 gcc main16.o sum16.o square16.o -o all.out
mainp.o:mainp.c
 gcc main16.c -c
sump.o:sump.c
 gcc sum16.c -c
squarep.o:squarep.c 
 gcc square16.c -c

mainp.c ->

#include<stdio.h>
#include<math.h>
int sum(int,int);
int square(int);
int main()
{
int a=3,b=8,sm,sqr;
sm=sum(a,b);
printf("sum=%d\n",sm);
sqr=square(a);
printf("sqr=%d\n",sqr);
return 0;
}

sump.c -> 

int sum(int x,int y)
{
return x+y;
}

squarep.c ->

int square(int x)
{
return x*x;
}
↓↑ Program to pass 1 D array as function argument.
#include<stdio.h>
int sumall(int*,int);
int min(int*,int);
int max(int*,int);
int main()
{
    int a[7]={10,12,19,14,9,18,11},s,mn,mx;
    s=sumall(a,7);
    mn=min(a,7);
    mx=max(a,7);
    printf("\nsum of 1-D array element is=%d\n",s);
    printf("\nmin of 1-D array element is=%d\n",mn);
    printf("\nmax of 1-D array element is=%d\n",mx);
return 0;
}
int sumall(int*p,int n)
{
    int i,sm=0;
    for(i=0;i<n;i++)
    {
        sm+=*(p+i);
        printf("%d ",*(p+i));
    }
return sm;
}
int min(int *p,int n)
{
    int a=12323,i;
    for(i=0;i<n;i++)
    {
        if(*(p+i)<a)
        {
            a=*(p+i);
        }
    }
return a;
}

int max(int *p,int n)
{
    int a=-32452,i;
    for(i=0;i<n;i++)
    {
        if(*(p+i)>a)
        {
            a=*(p+i);
        }
    }   
return a;
}
↓↑ Program to pass 2 D array as function argument.
#include<stdio.h>
int summatrix(int nr,int nc,int (*p)[7]);
int main()
{
    int a[2][7]={10,12,13,23,34,32,33,26,13,19,14,9,18,11},s;
    s=sumall(2,7,a);
    printf("\nsum of 2-D array element is=%d\n",s);
return 0;
}
int sumall(int nr,int nc,int (*p)[7])
{
    int i,j,sm=0;
    for(i=0;i<nr;i++)
    {
         printf("\n");
        for(j=0;j<nc;j++)
        {
            sm+=*(*(p+i)+j);
//            printf("%d ",*(*(p+i)+j));
        }
    }
return sm;
}

↓↑ Program to return array from function.
#include<stdio.h>
int* fun(int[],int);
int main()
{
int c[5]={4,7,8,9,6},i,*p;
p=fun(c,5);
for(i=0;i<5;i++)
printf("%d\t",*(p+i));
printf("\n");
return 0;
}

int* fun(int x[],int n)
{
 int i;
 for(i=0;i<n;i++)
 {
  x[i]=x[i]+1;
 // printf("%d\t",x[i]);
 }
 printf("\n");
return x;

}


↓↑ Program to calculate sum of N natural number usung recursion.
#include<stdio.h>
int sum(int);
int main()
{
int n,n1;
printf("enter no.");
scanf("%d",&n);
n1=sum(n);
printf("sum of %d numbers is:%d\n1",n,n1);
return 0;
}


int sum(int n)
{
if(n==0)
return 0;
else
return n+sum(n-1);
}
↓↑ Program to demonstrate typedef for function pointer.
#include<stdio.h>
typedef int (*pftype)(); 
int sum(int,int);
int main()
{
    int a=4,b=7;
    pftype pf1;
    pf1=sum; 
    pf1(a,b);
return 0;
}

int sum(int x,int y)
{
    printf("sum=%d\n",x+y);
}

No comments:

Post a Comment