## Mar 31, 2012

### C Program to implement Simpson method.

Write a C Program to implement Simpson method.
Simpson method is used for approximating integral of the function.
Simpson's rule also corresponds to the 3-point Newton-Cotes quadrature rule.
In this program, We use the stack to implement the Simpson method. Read more about C Programming Language .

```/***********************************************************
* You can use all the programs on  www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
*                      Happy Coding
***********************************************************/

#include<stdio.h>

#include<conio.h>

#include<math.h>

char post_fix[80];

float stack[80];

char stack1[80];

int top=-1,top1=-1;

float eval(char post_fix[], float x1);

void infix_post_fix(char infix[]);

main()

{

float x0, xn, h, s,e1,e2, e3;

char exp[80], arr[80];

int i,n,l=0;

clrscr();

printf("\nEnter an expression: \n\n");

gets(exp);

puts("\n\nEnter x0, xn and number of sub-intervals: \n\n");

scanf("%f%f%d", &x0, &xn, &n);

h=(xn-x0)/n;

if(exp[0]=='l'&& exp[1]=='o'&& exp[2]=='g')

{

l=strlen(exp);

for(i=0;i<l-3; i++)

arr[0]=exp[i+3];

arr[i]=";

infix_post_fix(arr);

e1=eval(post_fix,x0);

e2=eval(post_fix,xn);

e3=4*eval(post_fix, x0+h);

s=log(e1)+log(e2)+log(e3);

for (i=3;i<=n-1;i+=2)

s+=4*eval(post_fix,x0+i*h)+2*eval(post_fix, x0+(i-1)*h);

}

else

{

infix_post_fix(exp);

s=eval(post_fix,x0)+eval(post_fix,xn)+4*eval(post_fix, x0+h);

for (i=3;i<=n-1;i+=2)

s+=4*eval(post_fix,x0+i*h)+2*eval(post_fix, x0+(i-1)*h);

}

printf("\n\nThe value of integral is %6.3fn",(h/3)*s);

return(0);

}

/*Inserting the operands in a stack. */

void push(float item)

{

if(top==99)

{

printf("\n\tThe stack is full");

getch();

exit(0);

}

else

{

top++;

stack[top]=item;

}

return;

}

/*Removing the operands from a stack. */

float pop()

{

float item;

if(top==-1)

{

printf("\n\tThe stack is emptynt");

getch();

}

item=stack[top];

top–;

return (item);

}

void push1(char item)

{

if(top1==79)

{

printf("\n\tThe stack is full");

getch();

exit(0);

}

else

{

top1++;

stack1[top1]=item;

}

return;

}

/*Removing the operands from a stack. */

char pop1()

{

char item;

if(top1==-1)

{

printf("\n\tThe stack1 is empty\n\t");

getch();

}

item=stack1[top1];

top1–-;

return (item);

}

/*Converting an infix expression to a postfix expression. */

void infix_post_fix(char infix[])

{

int i=0,j=0,k;

char ch;

char token;

for(i=0;i<79;i++)

post_fix[i]=' ';

push1('?');

i=0;

token=infix[i];

while(token!=")

{

if(isalnum(token))

{

post_fix[j]=token;

j++;

}

else if(token=='(')

{

push1('(');

}

else if(token==')')

{

while(stack1[top1]!='(')

{

ch=pop1();

post_fix[j]=ch;

j++;

}

ch=pop1();

}

else

{

while(ISPriority(stack1[top1])>=ICP(token))

{

ch=pop1();

post_fix[j]=ch;

j++;

}

push1(token);

}

i++;

token=infix[i];

}

while(top1!=0)

{

ch=pop1();

post_fix[j]=ch;

j++;

}

post_fix[j]=";

}

/*Determining the priority of elements that are placed inside the stack. */

int ISPriority(char token)

{

switch(token)

{

case '(':return (0);

case ')':return (9);

case '+':return (7);

case '-':return (7);

case '*':return (8);

case '/':return (8);

case '?':return (0);

default: printf("\n\nInvalid expression");

}

return 0;

}

/*Determining the priority of elements that are approaching towards the stack. */

int ICP(char token)

{

switch(token)

{

case '(':return (10);

case ')':return (9);

case '+':return (7);

case '-':return (7);

case '*':return (8);

case '/':return (8);

case ":return (0);

default: printf("\n\nInvalid expression");

}

return 0;

}

/*Calculating the result of expression, which is converted in postfix notation. */

float eval(char p[], float x1)

{

float t1,t2,k,r;

int i=0,l;

l=strlen(p);

while(i<l)

{

if(p[i]==’x')

push(x1);

else

if(isdigit(p[i]))

{

k=p[i]-'0′;

push(k);

}

else

{

t1=pop();

t2=pop();

switch(p[i])

{

case '+':k=t2+t1;

break;

case '-':k=t2-t1;

break;

case '*':k=t2*t1;

break;

case '/':k=t2/t1;

break;

default: printf("\n\tInvalid expression");

}

push(k);

}

i++;

}

if(top>0)

{

printf("You have entered the operands more than the operators\n\n");

exit(0);

}

else

{

r=pop();

return (r);

}

return 0;

}

```
```Read more Similar C Programs
Data Structures

Learn C Programming```
You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

(you can send this program to your friend using this button)

To browse more C Programs visit this link

### K & R C Chapter 2 Exercise Solutions

We have already provided solutions to all the exercises in the book "C Programming Language (2nd Edition)" popularly known as K & R C book.

In this blog post I will give links to all the exercises from Chapter 2 of the book for easy reference.

Chapter 2: Types, Operators and Expressions

1. Exercise 2-1.Write a program to determine the ranges of char , short , int , and long variables, both signed and unsigned , by printing appropriate values from standard headers and by direct computation. Harder if you compute them: determine the ranges of the various floating-point types.
Solution to Exercise 2-1.

2. Exercise 2-2.Write a loop equivalent to the for loop above without using && or || .
Solution to Exercise 2-2.

3. Exercise 2-3.Write the function htoi(s) , which converts a string of hexadecimal digits (including an optional 0x or 0X) into its equivalent integer value. The allowable digits are 0 through 9, a through f, and A through F .
Solution to Exercise 2-3.

4. Exercise 2-4.Write an alternate version of squeeze(s1,s2) that deletes each character in the string s1 that matches any character in the string s2 .
Solution to Exercise 2-4.

5. Exercise 2-5.Write the function any(s1,s2) , which returns the first location in the string s1 where any character from the string s2 occurs, or -1 if s1 contains no characters from s2 . (The standard library function strpbrk does the same job but returns a pointer to the location.)
Solution to Exercise 2-5.

6. Exercise 2-6.Write a function setbits(x,p,n,y) that returns x with the n bits that begin at position p set to the rightmost n bits of y, leaving the other bits unchanged.
Solution to Exercise 2-6.

7. Exercise 2-7.Write a function invert(x,p,n) that returns x with the n bits that begin at position p inverted (i.e., 1 changed into 0 and vice versa), leaving the others unchanged.
Solution to Exercise 2-7.

8. Exercise 2-8.Write a function rightrot(x,n) that returns the value of the integer x rotated to the right by n bit positions.
Solution to Exercise 2-8.

9. Exercise 2-9.In a two's complement number system, x &= (x-1) deletes the rightmost 1-bit in x . Explain why. Use this observation to write a faster version of bitcount .
Solution to Exercise 2-9.

10. Exercise 2-10.Rewrite the function lower, which converts upper case letters to lower case, with a conditional expression instead of if-else .
Solution to Exercise 2-10.
You can purchase the book from here or here.