Upload
anjani-kumar
View
215
Download
1
Embed Size (px)
Citation preview
J.B.INSTITUTE OF ENGINEERING & TECHNOLOGY
YENKAPALLY(V), MOINABAD(M), HYDERABAD-500075
DEPARTMENT OF CSE & IT
C & DATA STRUCTURES
LAB MANUAL
J.B.INSTITUTE OF ENGINEERING & TECHNOLOGY
YENKAPALLY(V), MOINABAD(M), HYDERABAD-500075
DEPARTMENT OF CSE & IT
INDEX
S.NO DESCRIPTION OF THE PROGRAMPAGE
NO
1 a) A C program to find the sum of individual digits of a positive integer.
b) A Fibonacci Sequence is defined as follows: the first and second terms in the sequence are 0 and 1. Subsequent terms are found by adding the preceding two terms in the sequence. Write a C program to generate the first n terms of the sequence.
c) A C program to generate all the prime numbers between 1 and n. Where n is the value supplied by the user.
2 a) A C program to calculate the following Sum:Sum=1-x2/2! +x4/4!-x6/6!+x8/8!-x10/10!
b) A C program toe find the roots of a quadratic equation.
3 i) C programs that use both recursive and non-recursive functions to find the factorial of a given integer.
ii) C programs that use both recursive and non-recursive functions to find the GCD of two given integers.
iii) C programs that use both recursive and non-recursive functions to sovle towers of Hanoi problem.
4
a) Program to find the total distance travelled by vehicle in 't' seconds is given by distance = ut+1/2at2 where 'u' and 'a' are the initial velocity (m/sec.) and acceleration (m/sec2) for different values of 'u' and 'a'.
b) A C program, which takes two integer operands and one operator form the user, performs the operation and then prints the result. (Consider the operators +,-,*,/,% and use Switch Statement)
5 a) C program to find both the largest and smallest number in a list of integers.
b) A C program that uses functions to perform the following:i) Addition of Two Matricesii) Multiplication of Two Matrices
6 a) A C program that uses functions to perform the following operations: i) To insert a sub-string in to given main string from a given position. ii) To delete n Characters from a given position in a given string.
b) A C program to determine if the given string is a palindrome or not.
7 a) A C program that displays the position or index in the string S where the string T begins, or - 1 if S doesn't contain T.
b) A C program to count the lines, words and characters in a given text.8 a) A C program to generate Pascal's triangle.
b) A C program to construct a pyramid of numbers.
9 A C program to read in two numbers, x and n, and then compute the sum of this geometric progression: 1+x+x2+x3+………….+xn For example: if n is 3 and x is 5, then the program computes 1+5+25+125.Print x, n, the sum Perform error checking. For example, the formula does not make sense for negative exponents - if n is less than 0. Have your program print an error message if n<0,then go back and read in the next pair of numbers of without computing the sum. Are any values of x also illegal ? If so, test for them too.
10 a) A C program to find the 2’s complement of a binary number.
b) A C program to convert a Roman numeral to its decimal equivalent.
11 A C program that uses functions to perform the following operations:i) Reading a complex numberii) Writing a complex numberiii) Addition of two complex numbers
iv) Multiplication of two complex numbers(Note: represent complex number using a structure.)
12 a) A C program which copies one file to another.
b) A C program to reverse the first n characters in a file. (Note: The file name and n are specified on the command line.)
13 A C program that uses functions to perform the following operations on Single Linked list:
i) Creation ii) Insertion ii) Deletion iv) Traversal
14 A C program that uses functions to perform the following operations on doubly linked list:
i)Creation ii) Insertion iii)Deletion iv) Traversal in both ways
15 i)C programs that implement stack (its operations) using Arrays
ii) C programs that implement stack (its operations) using pointers
16 i) C programs that implement Queue (its operations) using Arrays.
ii) C programs that implement Queue (its operations) using pointers.
17 A C program that uses Stack operations to perform the following:i) Converting infix expression into postfix expression
ii) Evaluating the postfix expression
18 A C program that uses functions to perform the following: i) Creating a Binary Tree of integers ii)Traversing the above binary tree in preorder, inorder and postorder.
19 i) C programs that use both recursive and non recursive functions to perform Linear search operations for a Key value in a given list of integers.
ii) C programs that use both recursive and non recursive functions to perform binary search operations for a Key value in a given list of integers.
20A C program that implements the following sorting methods to sort a given list of integers in ascending orderi) Bubble Sort
ii) Quick Sort
21A C program that implements the following sorting methods to sort a given list of integers in ascending orderi) insertion Sort
ii) Merge sort Sort
22 i) A C program to implement the Lagrange interpolationii) A C program to implement the Newton-Gregory forward interpolation.
23 i) A C program to implement the Linear Regression algorithm.ii) A C program to implement the polynomial regression algoritm.
24 i) A C program to implement trapezoidal method.ii) A C program to implement Simpson method.
Sum of individual digits of a given positive integer
ALGORITHM :
step 1: start
step 2: read a positive integer no
step 3: sum←0 dig←0
step 4: dig ← no mod 10
step 5: sum ← sum + dig
step 6: no ← no/10
step 7: repeat steps 3,4,5 until no greater than zero
step 8: print sum
step 9: stop
FLOWCHART :
read no
Is no >0
sum=0 dig=0
dig=no mod 10sum=sum+dig
no=no/10
write sum
yes
No
stop
start
Program to find the sum of the individual digits of a given positive integer
#include<stdio.h> #include<conio.h> void main() { int no,sum,dig,t; clrscr(); printf("\nEnter a positive integer:"); scanf("%d",&no); t=no; sum=0; dig=0; while(no>0) { dig=no%10; sum=sum+dig; no=no/10; } printf("\nm of the digits of the given positive integer %d is %d",t,sum); getch(); }
Output:
INPUT:
Enter a positive integer : 1234
RESULT:
Sum of the digits of the given positive integer 1234 is 10
Fibonacci sequence
ALGORITHM :
step 1 : start
step 2 : read n
step 3 : a←0, b←1, i←3
step 4 : write a b
step 5 : c← a+b
step 6 : write c
step 7 : a←b, b←c
step 8 : i←i+1
step 9 : repeat steps 5,6,7,8 until i equals n
step 10: stop
FLOWCHART:
yes
No
read n
Is i<=n
a=0, b=1, i=3
c = a + b
start
write a,b
write c
a=b, b=c, i=i+1
stop
Program to generate Fibbonacci Series
#include<stdio.h> #include<conio.h> void main() { int a,b,c,i,n; clrscr(); printf("\nEnter how many terms:"); scanf("%d",&n); a=0; b=1; printf("\n%d\n%d",a,b); i=3; while(i<=n) { c=a+b; printf("\n%d",c); a=b; b=c; i++; } getch(); }
OUTPUT
INPUT :
Enter how many terms : 10
RESULT :0 11 2 3 5 8 13 21 34
Prime Numbers
ALGORITHM :
step 1: start
step 2: read no
step 3: i←1
step 4: nof←0 j←1
step 5: rem←i mod j
step 6: if rem=0 then nof=nof+1
step 7: j←j+1
step 8: repeat steps 5,6,7 until j equals i
step 9: if nof=2 then write i
step 10: compute i←i+1
step 11: repeat steps 5 to 10 until i equals no
step 12: stop
FLOWCHART:
yes
No
yes
yes
read no
is i <= n
i = 2
c=c+1
write i
start
j=1, c=0
is j <= i
is i mod j=0
No
j=j+1
is c=2
i=i+1
yes
yes
Stop
Program to generate prime numbers between 1 and n
#include<stdio.h> #include<conio.h> void main() { int no,i,j,nof; clrscr(); printf("\nEnter range 1 to ___:"); scanf("%d",&no); for(i=1;i<=no;i++) { nof=0;
for(j=1;j<=i;j++) { if(i%j==0) nof++; }
if(nof==2) printf("%d ",i); } getch(); }
OUTPUT
INPUT :Enter range 1 to … 20
RESULT:
2 3 7 11 13 17 19
To evaluate the seriessum = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! - x^10/10!
ALGORITHM :
step 1: start
step 2: read x,n
step 3: num←1,den←1,sum←1,i←1
step 4: num←num*x*x
step 5: den←den*(2*i-1)*(2*i)
step 6: sum←sum+num/den
step 7: i←i+1
step 8: repeat steps 4,5,6 until i<n
step 9: stop
FLOWCHART:
yes
No
read x n
Is i<n
sum=1 num=1 den=1 i=1
num=num*x*xden=den*(2*i-1)*(2*i)
sum=sum+num/deni=i+1
write sum
stop
start
Program to solve sum = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! - x^10/10!
#include<stdio.h> #include<conio.h> void main() { int i,j,x,n; long num,den; float sum; clrscr(); printf("\nEnter value of x : "); scanf("%d",&x); sum=1; num=1; den=1; for(j=2,i=1;j<=10;i++,j=j+2) { num=-num*x*x; den=den*(2*i-1)*(2*i); sum=sum+(float)num/den; } printf("\nSum=%f",sum); getch(); }
OUTPUT
INPUT :
Enter value of x : 2
RESULT :
Sum=-0.416155
To find the Roots of a quadratic equation
ALGORITHM :
step 1: start
step 2: read a,b,c values
step 3: compute d=b*b-4ac
step 4: if d > 0 then
r1← -(b+sqrt(d))/(2*a)
r2← -(b-sqrt(d))/(2*a)
step 5: if d=0 then
r1← -b/(2*a)
r2← -b/(2*a)
step 6: if d < 0
r1←-b/(2*a)
r2←sqrt(-d)/(2*a)
step 7: write r1 r2
step 8: stop
FLOWCHART:
yes
No
yes
No
read a,b,c
Is d >0
d=b*b-4ac
r1=-(b+sqrt(d))/(2*a)r2=-(b-sqrt(d))/(2*a)
write r1 r2
start
Is d =0
r1=-b/(2*a)r2=sqrt(-d)/(2*a)
r1=-b/(2*a)r2=-b/(2*a)
stop
Program to find the roots of a quadratic equation
#include<stdio.h>#include<conio.h>#include<math.h>void main(){int a,b,c,d;float r1,r2;clrscr();printf("Enter values of a,b,c:");scanf("%d%d%d",&a,&b,&c);d=b*b-4*a*c;if(d>0){r1=-(b+sqrt(d))/(2*a);r2=-(b-sqrt(d))/(2*a);printf("Roots are real and different\n%f %f",r1,r2);}else if(d==0){r1=-b/(2*a);r2=-b/(2*a);printf("Roots are real and equal\n%f %f",r1,r2);}else{r1=-b/(2*a);r2=sqrt(-d)/(2*a);printf("Roots are imaginary \n%f+i%f",r1,r2);}getch();}
OUTPUT
INPUT :
Enter values of a,b,c:1 2 1
RESULT:
Roots are real and equal-1.000000 -1.000000
INPUT :
Enter values of a,b,c:1 2 3
RESULT:
Roots are imaginary-1.000000 + i1.414214
INPUT :
Enter values of a,b,c:1 6 6
RESULT:
Roots are real and different-4.732051 -1.267949
To find the factorial of a given integer using recursive and non recursive functions
ALGORITHM :
Step 1: start
Step 2: read n value
Step 3: f←1 i←1
Step 4: f←f* i
Step 5: i← i+1
Step 6: repeat steps 4 and 5 until I <=n
Step 7: write f
Step 8: stop
FLOWCHART:
read n
Is i<=n
f=1, i=1
f = f * ii = i + 1
write f
yes
No
start
stop
Program to find the factorial of a given integer using Non-recursive and recursive functions
#include<stdio.h>#include<conio.h>
unsigned int recr_factorial(int n);unsigned int iter_factorial(int n);
void main(){ int n,i; long fact; clrscr(); printf("Enter the number: "); scanf("%d",&n);
if(n==0) printf("Factorial of 0 is 1\n"); else { printf("Factorial of %d Using Recursive Function is %d\n", n,recr_factorial(n)); printf("Factorial of %d Using Non-Recursive Function is %d\n",n,iter_factorial(n)); } getch();}
/* Recursive Function*/unsigned int recr_factorial(int n){ return n>=1 ? n * recr_factorial(n-1) : 1;}
/* Non-Recursive Function*/unsigned int iter_factorial(int n){ int fact = 1; int i; for(i = 1; i <= n; i++) {
fact *= i; }
return fact;}
OUTPUT
INPUT:
Enter the number: 7
OUTPUT :
Factorial of 7 Using Recursive Function is 5040
Factorial of 7 Using Non-Recursive Function is 5040
To find GCD of two given integers
ALGORITHM :Step 1: start
Step 2: read two integer values a,b
Step 3: rem ← a%b
Step 4: a←b, b←rem
Step 5: repeat steps 3 and 4 until rem >0
Step 6: write b
Step 7: stop
FLOWCHART:
Yes
No
read a b
rem > 0 ?
rem<- a mod b
a<- bb<-rem
write b
start
Program to find the GCD of two given integers using Non-Recursive and Recursive functions
unsigned int GcdRecursive(unsigned m, unsigned n);unsigned int GcdNonRecursive(unsigned p,unsigned q);int main(void){ int a,b; clrscr(); printf("Enter the two numbers whose GCD is to be found: "); scanf("%d%d",&a,&b); printf("GCD of %d and %d Using Recursive Function is %d\n", a,b,GcdRecursive(a,b)); printf("GCD of %d and %d Using Non-Recursive Function is %d\n",a,b,GcdNonRecursive(a,b)); getch(); return 0;}
/* Recursive Function*/unsigned int GcdRecursive(unsigned m, unsigned n){ if(n>m)
return GcdRecursive(n,m); if(n==0)
return m; else return GcdRecursive(n,m%n);}
/* Non-Recursive Function*/unsigned int GcdNonRecursive(unsigned p,unsigned q){ unsigned remainder; remainder = p-(p/q*q);
if(remainder==0) return q; elsewhile(remainder>0){p=q;q=remainder;remainder=p%q;}return q;}
OUTPUT
INPUT :
Enter the two numbers whose GCD is to be found: 15 25
RESULT:
GCD of 15 and 25 Using Recursive Function is 5
GCD of 15 and 25 Using Non-Recursive Function is 5
Towers of Hanoi
ALGROTHIM:
Recursive Step 1: start
Step 2: read no of disks n
Step 3: if n=1, move the single disk from A to C and return.
Step 4: move the top n-1 disks from A to B using C as temporary
Step 5: move the remaining disk from A to C
Step 6: move n-1 disks from B to C, using A as temporary
Step 7: stop
Program to solve Towers of Hanoi problem using Non-Recursive and Recursive functions
#include<conio.h>#include<stdio.h>/* Non-Recursive Function*/void hanoiNonRecursion(int num,char sndl,char indl,char dndl){ char stkn[100],stksndl[100],stkindl[100],stkdndl[100],stkadd[100],temp; int top,add; top=NULL; one:
if(num==1){ printf("\nMove top disk from needle %c to needle %c ",sndl,dndl); goto four;}
two:top=top+1;stkn[top]=num;stksndl[top]=sndl;stkindl[top]=indl;stkdndl[top]=dndl;stkadd[top]=3;num=num-1;sndl=sndl;temp=indl;indl=dndl;dndl=temp;goto one;
three:printf("\nMove top disk from needle %c to needle %c ",sndl,dndl);top=top+1;stkn[top]=num;stksndl[top]=sndl;stkindl[top]=indl;stkdndl[top]=dndl;stkadd[top]=5;num=num-1;temp=sndl;sndl=indl;indl=temp;dndl=dndl;
goto one; four:
if(top==NULL)return;num=stkn[top];sndl=stksndl[top];indl=stkindl[top];dndl=stkdndl[top];add=stkadd[top];top=top-1;if(add==3)goto three;else if(add==5)goto four;
}
/* Recursive Function*/void hanoiRecursion( int num, char ndl1, char ndl2, char ndl3){ if ( num == 1 ) {
printf( "Move top disk from needle %c to needle %c.", ndl1, ndl2 );return;
}
hanoiRecursion( num - 1,ndl1, ndl3, ndl2 ); printf( "Move top disk from needle %c to needle %c.", ndl1, ndl2 ); hanoiRecursion( num - 1,ndl3, ndl2, ndl1 );}void main(){ int no; clrscr(); printf("Enter the no. of disks to be transferred: "); scanf("%d",&no);
if(no<1) printf("\nThere's nothing to move."); else printf("Non-Recursive"); hanoiNonRecursion(no,'A','B','C'); printf("\nRecursive");
hanoiRecursion(no,'A','B','C');
getch();}
OUTPUT
INPUT :Enter the no. of disks to be transferred: 4RESULT :
Non-Recursive
Move top disk from needle A to needle B Move top disk from needle A to needle CMove top disk from needle B to needle C Move top disk from needle A to needle BMove top disk from needle C to needle A Move top disk from needle C to needle BMove top disk from needle A to needle B Move top disk from needle A to needle CMove top disk from needle B to needle C Move top disk from needle B to needle AMove top disk from needle C to needle A Move top disk from needle B to needle CMove top disk from needle A to needle B Move top disk from needle A to needle CMove top disk from needle B to needle C
Recursive
Move top disk from needle A to needle C. Move top disk from needle A to needle B.Move top disk from needle C to needle B. Move top disk from needle A to needle C.Move top disk from needle B to needle A. Move top disk from needle B to needle C.Move top disk from needle A to needle C. Move top disk from needle A to needle B.Move top disk from needle C to needle B. Move top disk from needle C to needle A.Move top disk from needle B to needle A. Move top disk from needle C to needle B.Move top disk from needle A to needle C. Move top disk from needle A to needle B.Move top disk from needle C to needle B.
To find the total distance travelled by vehicle in t seconds at regular intervals of time for the given values of ‘u’ and ‘a’ (distance – ut+1/2 at2 )
ALGORITHM :
Step 1: Start
Step 2: read no of time intervals n
Step 3: i←1
Step 4: read time t
Step 5: read velocity u
Step 6: read acceleration a
Step 7: distance ← distance + u * t + ½ * a * t * t
Step 8: I ← I +1
Step 9: repeat steps 4,5,6,7 and 8 until i = n
Step 10 : write distance
Step 11: stop
Program the find the total distance travelled by vehicle in t seconds at regular intervals of time for the given values of ‘u’ and ‘a’ (distance – ut+1/2 at2 )
#include <stdio.h>#include <math.h>void main(){int tim_intrval, counter,time;float accl, distance=0, velos;clrscr();printf("<===PROGRAM FOR CALC TOTAL DISTANCE TRAVELED BY A VECHIAL==>");printf("\n\n\n\t\t\tNO OF TIME INTERVALS : ");scanf("%d",&tim_intrval);for(counter = 1; counter <= tim_intrval; counter++){ printf("\n\t\t\tAT T%d TIME(sec) : ",counter);
scanf("%d",&time); printf("\t\t\tVELOCITY AT %d sec (m/sec) : ",time); scanf("%f",&velos); printf("\t\t\tACCLERATION AT %d sec (m/sec^2): ",time); scanf("%f",&accl); distance += (velos*time + (accl*pow(time,2))/2);}printf("\n\n\n\tTOTAL DISTANCE TRAVELLED BY VEHICLE IN %d INTERVALS OF TIME : %.2f",tim_intrval,distance);getch();}
OUTPUT
PROGRAM FOR CALCULATE TOTAL DISTANCE TRAVELED BY A VECHICLE
INPUT : NO OF TIME INTERVALS : 3
AT T1 TIME(sec) : 10 VELOCITY AT 10 sec (m/sec) : 90 ACCLERATION AT 10 sec (m/sec^2): 2.5
AT T2 TIME(sec) : 20 VELOCITY AT 20 sec (m/sec) : 50 ACCLERATION AT 20 sec (m/sec^2): 3
AT T3 TIME(sec) : 40 VELOCITY AT 40 sec (m/sec) : 90 ACCLERATION AT 40 sec (m/sec^2): 5
RESULT :
TOTAL DISTANCE TRAVELLED BY VEHICLE IN 3 INTERVALS OF TIME : 10225.00
To perform operation on the two given integer operands and one operator using switch statement
ALGORITHM :
Step 1: Start
Step 2: read operator op and two operands op1 and op2
Step 3: switch(op)
Step 3.1: case + perform addition (result = op1 + op2)
Step 3.1: case - perform subtraction (result = op1 - op2)
Step 3.1: case * perform multiplication (result = op1 * op2)
Step 3.1: case / perform division (result = op1 / op2)
Step 4: write result
Step 5: stop
FLOWCHART :
Yes
No
read operator op , two integer operands op1 and op2
oop
write res
res=op1 + op2
start
stop
Op = ‘+’
res=op1 - op2Op = ‘-’
res=op1 * op2Op = ‘*’
No
Yes
Yes
No
res=op1 / op2Op = ‘/’
Program to perform operation on the two given integer operands and one operator using switch statement.#include<stdio.h>#include<conio.h>void main(){ int op1,op2,res; char op; clrscr(); printf("Enter operator :"); scanf("%c",&op); printf("Enter two values :"); scanf("%d%d",&op1,&op2); switch(op) { case '+': res=op1+op2; break; case '-': res=op1-op2; break; case '*': res=op1*op2; break; case '/': res=op1/op2; break; case '%': res=op1%op2; break; default : printf("Invalid choice"); } printf("\n%d %c %d = %d",op1,op,op2,res); getch();}
OUTPUT
INPUT
Enter operator : +Enter any two integer values : 30 40RESULT30 + 40 = 70
To find the largest and smallest numbers in a list of integers
ALGORITHM :
Step 1: Start
Step 2: Enter size of the array n
Step 3: read n values into an array
Step 4: large←small←a[0]
Step 5: i←1
Step 6: if a[i]>large large=a[i]
Step 7: if a[i]<small small=a[i]
Step 8: i←i+1
Step 9: repeat steps 6,7 and 8 until i<n
Step 10: write large and small
Step 11: stop
FLOWCHART :
read nread a[n] values
i=0small=a[0]large =a[0]
write large small
A[i] >= large Large = a[i]
start
stop
A[i] <= small small = a[i]
yes
yes
No
No
No
Program to find the largest and smallest numbers in a list of integers
#include<stdio.h>#include<conio.h>#define MAX 10void main(){int a[MAX],i,lar,small,n;printf("Enter value of n:");scanf("%d",&n);printf(“Enter %d values”,n); for(i=0;i<n;i++)scanf("%d",&a[i]);lar=small=a[0];for(i=0;i<n;i++){if(a[i]>lar)lar=a[i];if(a[i]<small)small=a[i];}printf("Large=%d Small=%d",lar,small);getch();}OUTPUT
INPUT :
Enter the value of n : 5
Enter 5 values 4455663322RESULT :Large : 66Small : 22
Addition of two matrices
ALGORITHM :
Step 1: Start
Step 2: read size of the matrix A r1, c1
Step 3: read size of the matrix B r2, c2
Step 4: if r1=r2 and c1=c2 read the value of the two matrices
Step 5: Add the two matrices A and B store into C
Step 6: write A, B and C
Step 7: stop
FLOWCHART:
read values of two matrices A B
is i <= r1
i = 0 j=0
C[i][j]=A[i][j]+B[i][j]
yes
No
stop
start
j=0
is j <= c1
yes
No
j=j+1
yes
i=i+1
Addition of two matrices
#include<stdio.h>#include<conio.h>void main(){int A[5][5],B[5][5],C[5][5],i,j,r1,c1,r2,c2;clrscr();printf("\nEnter size of matrix A :");scanf("%d%d",&r1,&c1);printf("\nEnter size of matrix B :");scanf("%d%d",&r2,&c2);if(r1==r2 && c1==c2){printf("\nEnter values of matrix A\n");for(i=0;i<r1;i++)for(j=0;j<c1;j++){printf("A[%d][%d]=",i,j);scanf("%d",&A[i][j]);}printf("\nEnter values of matrix B9\n");for(i=0;i<r2;i++)for(j=0;j<c2;j++){printf("B[%d][%d]=",i,j);scanf("%d",&B[i][j]);}for(i=0;i<r2;i++)for(j=0;j<c2;j++)C[i][j]=A[i][j]+B[i][j];printf("\nMatrix A\n");for(i=0;i<r1;i++){for(j=0;j<c1;j++)printf("%d\t",A[i][j]);printf("\n");}printf("\nMatrix B\n");for(i=0;i<r2;i++){for(j=0;j<c2;j++)printf("%d\t",B[i][j]);printf("\n");
}printf("\nSum of two matrices A and B \n");for(i=0;i<r2;i++){for(j=0;j<c2;j++)printf("%d\t",C[i][j]);printf("\n");}}elseprintf("Addition not possible");getch();}
OUTPUT
INPUT:
Enter size of matrix A : 3 3Enter size of matrix B : 3 3
Enter the values of matrix A 1 2 3 4 5 6 7 8 9
Enter the values of matrix B 9 8 7 6 5 4 3 2 1
RESULT:MATRIX A 1 2 3
4 5 6 7 8 9
MATRIX B 9 8 7 6 5 4 3 2 1
Sum of the two matrices A and B is
MATRIX C10 10 10
10 10 10 10 10 10
Multiplication of two matrices
ALGORITHM :
Step 1: Start
Step 2: read size of the matrix A r1, c1
Step 3: read size of the matrix B r2, c2
Step 4: if c1=r2 read the value of the two matrices
Step 5: Multiply the two matrices A and B store into C
Step 6: write A, B and C
Step 7: stop
FLOWCHART:
Read values of two matrices A B
is i < c1
i = 0
C[i][j]=C[i][j]+A[i][k]*B[k][j]
yes
No
stop
start
j=0 k=0
is j < r2
yes
k < c2
No
j=j+1
yes
i=i+1
yes
Nok=k+1
Print C
Multiplication of two matrices
#include<stdio.h>#include<conio.h>void main(){int A[5][5],B[5][5],C[5][5],i,j,r1,c1,r2,c2;clrscr();printf("\nEnter size of matrix A :");scanf("%d%d",&r1,&c1);printf("\nEnter size of matrix B :");scanf("%d%d",&r2,&c2);if(r1==r2 && c1==c2){printf("\nEnter values of matrix A\n");for(i=0;i<r1;i++)for(j=0;j<c1;j++){printf("A[%d][%d]=",i,j);scanf("%d",&A[i][j]);}printf("\nEnter values of matrix B9\n");for(i=0;i<r2;i++)for(j=0;j<c2;j++){printf("B[%d][%d]=",i,j);scanf("%d",&B[i][j]);}for(i=0;i<r2;i++)for(j=0;j<c2;j++)C[i][j]=A[i][j]+B[i][j];printf("\nMatrix A\n");for(i=0;i<r1;i++){for(j=0;j<c1;j++)printf("%d\t",A[i][j]);printf("\n");}printf("\nMatrix B\n");for(i=0;i<r2;i++){for(j=0;j<c2;j++)printf("%d\t",B[i][j]);printf("\n");
}printf("\nSum of two matrices A and B \n");for(i=0;i<r2;i++){for(j=0;j<c2;j++)printf("%d\t",C[i][j]);printf("\n");}}elseprintf("Addition not possible");getch();}
OUTPUT
INPUT:
Enter size of matrix A : 2 3
Enter size of matrix B : 3 2
Enter the values of matrix A 1 2 3 4 5 6
Enter the values of matrix B 2 1 2 1 2 1
RESULT: MATRIX A 1 2 3
4 5 6
MATRIX B 2 1 2 1 2 1
Sum of the two matrices A and B is
MATRIX C 12 6 30 15
To insert a sub-string in to given main string from a given position
ALGORITHM :
Step 1: Start
Step 2: read main string mstr
Step 3: read the sub string to be inserted substr
Step 4: read the position pos where the substr has to be inserted
Step 5: insert the substr into the mstr from pos
Step 6: write main string
Step 7: stop
Program to insert a sub-string in to given main string from a given position#include<stdio.h>#include<conio.h>#include<string.h>void main(){int pos;char mstr[100],substr[10];void strin(char[],char[],int);clrscr();printf("Enter main string");gets(mstr);printf("Enter the substr to be inserted:");gets(substr);printf("Enter the position to insert the substring in the mainstring:");scanf("%d",&pos);strin(mstr,substr,pos);getch();}void strin(char m[],char sub[],int p){char str1[100];int i,j,k;j=0;for(i=0;i<p;i++)str1[j++]=m[i];for(k=0;sub[k]!='\0';k++)str1[j++]=sub[k];for(;i<strlen(m);i++)str1[j++]=m[i];str1[j]='\0';printf("Main String after insertion of substring\n%s",str1);}
INPUT:
Enter the main string : eslishEnter the sub string : tabEnter the position where the item has to be inserted:2
RESULT:
Main string after insertion of substring : establish
To delete n characters from a given position in a given string
ALGORITHM :
Step 1: Start
Step 2: Enter a sentence mstr
Step 3: Enter how many characters to be deleted and from which position n, pos
Step 4: i←pos
Step 5:m[i]=m[i+n];
Step 6: write m
Step 7: stop
Program to delete n characters from a given position in a given string.
#include<stdio.h>#include<conio.h>#include<string.h>void main(){int i,pos,len,n;char mstr[100],substr[10],str1[100];void strdel(char[],int,int);clrscr();printf("Enter main string");gets(mstr);printf("\nEnter how many characters and from which position:");scanf("%d%d",&n,&pos);strdel(mstr,n,pos);getch();}void strdel(char m[],int n,int p){int i;for(i=p-1;i<m[i]!='\0';i++)m[i]=m[i+n];printf("After deletion : %s",m);}
OUTPUT
INPUT:
Enter the first string : establishEnter how many characters and from which position : 3 2
RESULT:
After deletion the string is elish
To determine if the given string is a palindrome or not
ALGORITHM :
Step 1: Start
Step 2: Enter a string s
Step 3: match=true
Step3:scan each character of the string and check
Step 4: if (string[left]!=string[right])
match=false
Step 5: if match=true
Write the given string is a palindrome
Else
Write the given string is not a palindrome
Step 6: stop
Program to determine if the given string is a palindrome or not
#include<stdio.h>#include<string.h>enum Boolean{false,true};enum Boolean IsPalindrome(char string[]){ int left,right,len=strlen(string); enum Boolean matched=true; if(len==0) return 0; left=0; right=len-1; /* Compare the first and last letter,second & second last & so on */ while(left<right&&matched) { if(string[left]!=string[right]) matched=false; else { left++; right--; } } return matched; }int main(){ char string[40]; clrscr(); printf("****Program to test if the given string is a palindrome****\n"); printf("Enter a string:"); scanf("%s",string); if(IsPalindrome(string)) printf("The given string %s is a palindrome\n",string); else printf("The given string %s is not a palindrome\n",string); getch(); return 0;}
OUTPUT
INPUTEnter a string : MALAYALAM
RESULT
The given string MALAYALAM is a palindrome
To display the position or index in the string S where the string T begins, or - 1 if S doesn't contain T.
ALGORITHM :
Step 1: Start
Step 2: Enter a string s
Step 3: Enter a string to be searched t
Step 4: search the string t in string s
Step 5: if found
Write “the string is found at position”
Else
Wirte “the string is not found”
Step 6: stop
Program that displays the position or index in the string S where the string T begins, or - 1 if S doesn't contain T.
#include<stdio.h>#include<string.h>#include<conio.h>
void main(){ char s[30], t[20]; char *found; clrscr();
/* Entering the main string */ puts("Enter the first string: "); gets(s);
/* Entering the string whose position or index to be displayed */ puts("Enter the string to be searched: "); gets(t);
/*Searching string t in string s */ found=strstr(s,t); if(found) printf("Second String is found in the First String at %d position.\n",(found-s)+1); else printf("-1"); getch();}
OUTPUTINPUT:
Enter the first string : horizontal
Enter the string to be searched : zon
RESULT:
Second String is found in the First String at 5 position.
To count the lines, words and characters in a given text.
ALGORITHM :
Step 1: Start
Step 2: read text
Step 3: line ←0 lines←0 characters←0 words←0
Step 4: scan each character of the given text fron starting to ending char
Step 5: repeat step 6,7,8,9 till the end char
Step 6: characters←characters+1
Step 7: check if char = spaces
words←words+1
Step 8: check if char = ‘\n’
line←line+1
Step 9: write characters, words and lines
Step 10: stop
program to count the lines, words and characters in a given text.
#include <stdio.h>main(){
char line[81], ctr;int i,c,
end = 0,characters = 0,words = 0,lines = 0;
printf("KEY IN THE TEXT.\n");printf("GIVE ONE SPACE AFTER EACH WORD.\n");printf("WHEN COMPLETED, PRESS 'RETURN'.\n\n");while( end == 0){
/* Reading a line of text */c = 0;while((ctr=getchar()) != '\n')
line[c++] = ctr;line[c] = '\0';/* counting the words in a line */if(line[0] == '\0')
break ;else{
words++;for(i=0; line[i] != '\0';i++)
if(line[i] == ' ' || line[i] == '\t')words++;
}/* counting lines and characters */lines = lines +1;characters = characters + strlen(line);
}printf ("\n");printf("Number of lines = %d\n", lines);printf("Number of words = %d\n", words);printf("Number of characters = %d\n", characters);
}
OUTPUT
INPUT :
KEY IN THE TEXT.GIVE ONE SPACE AFTER EACH WORD.WHEN COMPLETED, PRESS 'RETURN'.Admiration is a very short-lived passion.Admiration involves a glorious obliquity of vision.Always we like those who admire us but we do notlike those whom we admire.Fools admire, but men of sense approve.
RESULT :
Number of lines = 5Number of words = 36Number of characters = 205
Pascal's triangle
ALGORITHM :
Step 1: Start
Step 2: Enter how many rows r
Step 3: bin←1 q←0
Step 4: x=0
Step 5: print 40-3*q spaces
Step 6: if x=0 or q=0 bin=1
else
bin=bin*(q-x+1))/x
Step 7: write bin
Step 8: x←x+1
Step 9: repeat 5,6,7 until x < q
Step 10: q←q+1
Step 11: repeat steps 4,5,6,7 and 8 until q<r
Step 13: stop
Pascal Triangle#include<stdio.h>#include<conio.h>void main(){ int bin,p,q,r,x; clrscr(); bin=1; q=0;
printf("How many rows you want :"); scanf("%d",&r); printf("\nPascal's Triangle:\n"); while(q<r) { for(p=40-3*q;p>0;--p) printf(" "); for(x=0;x<=q;++x) { if((x==0)||(q==0)) bin=1; else bin=(bin*(q-x+1))/x; printf("%6d",bin); } printf("\n"); ++q; }getch();}
OUTPUT INPUT: Enter how many rows you want : 5 RESULT : Pascal's Triangle:
1 1 1
1 2 1 1 3 3 1 1 4 6 4 1
To construct a pyramid of numbers
ALGORITHM :
Step 1: Start
Step 2: Enter how many rows r
Step 3:
Step 4:
Step 10: q←q+1
Step 11: repeat steps 4,5,6,7 and 8 until q<r
Step 12: write
Step 13: stop
program to construct a pyramid of numbers
#include<stdio.h>#include<conio.h>
void main(){ int num,i,y,x=35; clrscr(); printf("\nEnter the number to generate the pyramid:\n"); scanf("%d",&num);
for(y=0;y<=num;y++) { /*(x-coordinate,y-coordinate)*/ gotoxy(x,y+1);
/*for displaying digits towards the left and right of zero*/ for(i=0-y;i<=y;i++)
printf("%3d",abs(i)); x=x-3; } getch();}
OUTPUTINPUT :Enter the number to generate the : 5
RESULT :
0 1 0 1 2 1 0 1 2 3 2 1 0 1 2 3 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5
To read in two numbers, x and n, and then compute the sum of thisgeometric progression: 1+x+x2+x3+. . . xn
ALGORITHM :
Step 1: Start
Step 2: read x n
Step 3: i←0
Step 4: if(n<0) write does not have negative exponents
Step 5: if n> p
for i=0 to n do
v←x to the power of i
sum←sum+v;
Step 6: write sum;
Step 7: stop
:
program to read in two numbers, x and n, and then compute the sum of this geometric progression: 1+x+x2+x3+. . . xn
#include<stdio.h>#include<conio.h>#include<math.h>void main(){long x,n,i,sum=0,v;clrscr();lab:printf("Enter the values of x and n:");scanf("%ld%ld",&x,&n);if(n<0){printf("does not take negative exponents");goto lab;}elsefor(i=0;i<=n;i++){v=pow(x,i);printf("+%ld",v);sum=sum+v;}printf("=%ld\n",sum);getch();}
OUTPUT
INPUT :
Enter the values of x and n : 2 8
RESULT:
1+2+4+8+16+32+64+128+256=511
To find the 2’s complement of a binary number
ALGORITHM :
Step 1: Start
Step 2: read binary number
Step 3: compute ones complement for the given binary number
Step 4: Add one to the ones complement
Step 5: print the result
Step 6: stop
Program to find the 2’s complement of a binary number.
#include <stdio.h>#include<conio.h>
void complement (char *a);void main(){ char a[16]; int i; clrscr(); printf("Enter the binary number : "); gets(a); for(i=0;a[i]!='\0'; i++) { if (a[i]!='0' && a[i]!='1') { printf("The number entered is not a binary number. Enter the correct number"); exit(0); } }complement(a);getch();}void complement (char *a){ int l, i, c=0; char b[16]; l=strlen(a); for (i=l-1; i>=0; i--) { if (a[i]=='0') b[i]='1'; else b[i]='0'; } for(i=l-1; i>=0; i--) { if(i==l-1) { if (b[i]=='0') b[i]='1'; else
{ b[i]='0'; c=1; } } else { if(c==1 && b[i]=='0') { b[i]='1'; c=0; } else if (c==1 && b[i]=='1') { b[i]='0'; c=1; }}}b[l]='\0';printf("The 2's complement is %s", b);}
OUTPUT
INPUT:
Enter the binary number1111
RESULT:
The 2's complement is 0001
To convert a Roman numeral to its decimal equivalent.
ALGORITHM :
Step 1: Start
Step 2: read a roman number
Step 3: len c←length of the roman number
step 4: convert the roman numbers into integers and store in an array A
step 5: k ← A[len-1]
step 6: i ← len-1
step 7: if a[i] greater than a[i-1] then k← k-a[i-1];
step 8: if a[i] is equal to a[i-1] or a[i] less than a[i-1]) then k←k+a[i-1];
step 9: i←i - 1
step 10: repeat steps 7,8 and 9 until i > 0
Step 11: print k
Step 12: stop
Program to convert a Roman numeral to its decimal equivalent.
#include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>void main(){ int *a,len,i,j,k; char *rom; printf("Enter the Roman Numeral:"); scanf("%s",rom); len=strlen(rom); for(i=0;i<len;i++) { if(rom[i]=='I') a[i]=1; else if(rom[i]=='V')
a[i]=5; else if(rom[i]=='X') a[i]=10; else if(rom[i]=='L') a[i]=50; else if(rom[i]=='C')
[i]=100; else if(rom[i]=='D') a[i]=500; else if(rom[i]=='M') a[i]=1000; else { printf("\nInvalid Value"); exit(0); }}k=a[len-1];for(i=len-1;i>0;i--){ if(a[i]>a[i-1])
k=k-a[i-1]; else if(a[i]==a[i-1] || a[i]<a[i-1]) k=k+a[i-1];}
printf("\nIts Decimal Equivalent is:");printf("%d",k);}
OUTPUT
INPUT:
Enter the Roman Numeral : XXVIII
RESULT:
Its Decimal Equivalent is : 28
Addition and Multiplication of two complex number
ALGORITHM :
Step 1: Start
Step 2: read two complex number
Step 3: Add two complex numbers
Step 4: Multiply two complex numbers
Step 5: print the result
Step 6: stop
Program that uses functions to perform the following operations:i) Reading a complex numberii) Writing a complex numberiii) Addition of two complex numbersiv) Multiplication of two complex number
#include<stdio.h>#include<conio.h>#include<stdlib.h>struct complex{float real;float imag;};typedef struct complex c;void main(){int ch;struct complex add(struct complex,struct complex);struct complex sub(struct complex,struct complex);struct complex mul(struct complex,struct complex);struct complex div(struct complex,struct complex);c c1,c2,c3;clrscr();printf("Enter first complex ");scanf("%f%f",&c1.real,&c1.imag);printf("Enter second complex ");scanf("%f%f",&c2.real,&c2.imag);do{printf("\n1.Addition");printf("\n2.Subtraction");printf("\n3.Multiplication");printf("\n4.Division");printf("\n5.exit");printf("\nEnter ur choice :");scanf("%d",&ch);switch(ch){
case 1:c3=add(c1,c2);printf("%.2f+i%.2f",c3.real,c3.imag);
break;case 2:c3=sub(c1,c2);
printf("%.2f+i%.2f",c3.real,c3.imag); break;case 3:c3=mul(c1,c2);
printf("%.2f+i%.2f",c3.real,c3.imag); break;case 4:c3=div(c1,c2);
printf("%.2f+i%.2f",c3.real,c3.imag); break;case 5:exit(0);
}}while(ch!=5);getch();}c add(c x,c y){c z;z.real=x.real+y.real;z.imag=x.imag+y.imag;return z;}c sub(c x,c y){c z;z.real=x.real-y.real;z.imag=x.imag-y.imag;return z;}c mul(c x,c y){c z;z.real=(x.real*y.real)-(x.imag*y.imag);z.imag=(x.real*y.imag)+(x.imag*y.real);return z;}c div(c x,c y){c z;z.real=((x.real*y.real)+(x.imag*y.imag))/((x.real*x.real)+(x.imag*x.imag));
z.imag=((y.imag*x.real)+(x.real*y.imag))/((x.real*x.real)+(x.imag*x.imag));return z;}
OUTPUT
INPUT:
Enter first complex 2.5 6.5
Enter second complex 4 9
RESULT:
1.Addition2.Subtraction3.Multiplication4.Division5.exitEnter ur choice :1
Addtion : 6.50+i15.50
1.Addition2.Subtraction3.Multiplication4.Division5.exitEnter ur choice :3
Multiplication : -48.50+i48.50
To copy one file to another file
ALGORITHM :
Step 1: Start
Step 2: read scource file fn and target file tr
Step 3: open fn in read mode and tr in write mode
Step 4: check whether both the files have been opened or not
Step 5: read character by character from fn and write into tr until fn encounters end of file
Step 6: close both files
Step 7: stop
Program to copy one file to another
#include <stdio.h>#include <conio.h>#include <process.h>void main(int argc, char *argv[]){ FILE *fs,*ft; char ch; clrscr(); if(argc!=3) { puts("Invalid number of arguments."); exit(0); } fs = fopen(argv[1],"r"); if(fs==NULL) { puts("Source file cannot be opened."); exit(0); } ft = fopen(argv[2],"w"); if (ft==NULL) { puts("Target file cannot be opened."); fclose(fs); exit(0); } while(1) { ch=fgetc(fs); if (ch==EOF) break; else fputc(ch,ft); } fclose(fs); fclose(ft); getch();}
OUTPUT
INPUT: Enter two file name in command line argumentsaa.txt bb.txt
RESULT: The contents of aa.txt are copied into bb.txt
To reverse the first n characters in a file
ALGORITHM :
Step 1: Start
Step 2: read file name fn
Step 3: open fn in write mode
Step 4: check whether the file has been opened or not
Step 5: read n character from fn and write into tr until it fn encounters end of file
Step 6: close both files
Step 7: stop
program to reverse the first n characters in a file.
#include <stdio.h>#include <conio.h>#include <string.h>#include <process.h>
void main(int argc, char *argv[]){ char a[15]; char s[20]; char n; int k; int j=0; int i; int len; FILE *fp;
if(argc!=3) { puts("Improper number of arguments."); exit(0); } fp = fopen(argv[1],"r"); if(fp == NULL) { puts("File cannot be opened."); exit(0); } k=*argv[2]-48; n = fread(a,1,k,fp); a[n]='\0'; len=strlen(a); for(i=len-1;i>=0;i--) { s[j]=a[i]; printf("%c",s[j]); j=j+1;}s[j+1]='\0';getch();}OUTPUT
INPUTRESULT
Single Linked List
ALGORITHM :
INSERTING
Step 1: Begin
Step 2: if the list is empty or the new node comes before the head node then,
Insert the new node as the head node
Step 3: else if the new node comes after the last node then insert the new node at the end
Step 4: else insert the new node in the body of the list.
Step 5: End
DELETING
Step 1: Begin
Step 2: if the list is empty then, node cannot be deleted
Step 3: else if the node to be deleted is the first node, t
hen make the head to point to ht second node
Step 4: else delete the node from the body of the list.
Step 5: End
Single Linked List
#include <stdio.h>#include <stdlib.h>#define NULL 0
struct linked_list{
int number;struct linked_list *next;
};typedef struct linked_list node; /* node type defined */
main(){
node *head;void create(node *p);int count(node *p);void print(node *p);head = (node *)malloc(sizeof(node));create(head);printf("\n");printf(head);printf("\n");printf("\nNumber of items = %d \n", count(head));
}void create(node *list){
printf("Input a number\n");printf("(type -999 at end): ");scanf("%d", &list -> number); /* create current node */
if(list->number == -999){
list->next = NULL;}
else /*create next node */{
list->next = (node *)malloc(sizeof(node));create(list->next); */ Recursion occurs */
}return;
}void print(node *list){
if(list->next != NULL){ printf("%d-->",list ->number); /* print current item */ if(list->next->next == NULL)
printf("%d", list->next->number);
print(list->next); /* move to next item */}return;
}
int count(node *list){
if(list->next == NULL) return (0);else return(1+ count(list->next));
}
OUTPUT
INPUT
Input a number(type -999 to end); 60Input a number(type -999 to end); 20Input a number(type -999 to end); 10Input a number(type -999 to end); 40Input a number(type -999 to end); 30Input a number(type -999 to end); 50Input a number(type -999 to end); -999
RESULT
60 -->20 -->10 -->40 -->30 -->50 --> -999
Number of items = 6
Inserting an item into a linked list
node *insert(node *head){
node *find(node *p, int a);node *new; /* pointer to new node */node *n1; /* pointer to node preceding key node */int key;int x; /* new item (number) to be inserted */
printf("Value of new item?");scanf("%d", &x);printf("Value of key item ? (type -999 if last) ");scanf("%d", &key);
if(head->number == key) /* new node is first */{ new = (node *)malloc(size of(node)); new->number = x; new->next = head; head = new;}else /* find key node and insert new node */{ /* before the key node */
n1 = find(head, key); /* find key node */
if(n1 == NULL) printf("\n key is not found \n");else /* insert new node */{
new = (node *)malloc(sizeof(node)); new->number = x; new->next = n1->next; n1->next = new;
} }
return(head);}node *find(node *lists, int key){
if(list->next->number == key) /* key found */return(list);
else
if(list->next->next == NULL) /* end */return(NULL);
elsefind(list->next, key);
}
Function for deleting an item from linked list.
node *delete(node *head){
node *find(node *p, int a);int key; /* item to be deleted */node *n1; /* pointer to node preceding key node */node *p; /* temporary pointer */printf("\n What is the item (number) to be deleted?");scanf("%d", &key);if(head->number == key) /* first node to be deleted) */{
p = head->next; /* pointer to 2nd node in list */free(head); /* release space of key node */head = p; /* make head to point to 1st node */
}else{
n1 = find(head, key);if(n1 == NULL) printf("\n key not found \n");else /* delete key node */{
p = n1->next->next; /* pointer to the node following the keynode */
free(n1->next); /* free key node */n1->next = p; /* establish link */
}}return(head);
} /* USE FUNCTION find() HERE */
Program for creation of sorted list from a given list of numbers.
#include <stdio.h>#include <stdlib.h>#define NULL 0
struct linked_list{
int number;struct linked_list *next;
};typedef struct linked_list node;
main (){
int n;node *head = NULL;void print(node *p);node *insert_Sort(node *p, int n);
printf("Input the list of numbers.\n");printf("At end, type -999.\n");scanf("%d",&n);
while(n != -999){
if(head == NULL) /* create 'base' node */{
head = (node *)malloc(sizeof(node));head ->number = n;head->next = NULL;
}
else /* insert next item */{
head = insert_sort(head,n);} scanf("%d", &n);
}printf("\n");print(head);
print("\n");
}node *insert_sort(node *list, int x){
node *p1, *p2, *p;p1 = NULL;p2 = list; /* p2 points to first node */
for( ; p2->number < x ; p2 = p2->next){
p1 = p2;
if(p2->next == NULL){
p2 = p2->next; /* p2 set to NULL */break; /* insert new node at end */
}}
/* key node found */p = (node *)malloc(sizeof(node)); /* space for new node */p->number = x; /* place value in the new node */p->next = p2; /* link new node to key node */if (p1 == NULL)
list = p; /* new node becomes the first node */else
p1->next = p; /* new node inserted after 1st node */ return (list);}void print(node *list){
if (list == NULL)printf("NULL");
else{
printf("%d-->",list->number);print(list->next);
}return;
}
OUTPUT
INPUT :
Input the list of number.At end, type -999.
80 70 50 40 60 -999
RESULT :
40-->50-->60-->70-->80-->NULL
Double Linked List
INSERTING
Step 1: Begin
Step 2: if the list is empty or the new node comes before the head node then,
Insert the new node as the head node
Step 3: else if the new node comes after the last node then insert the new node at the end
Step 4: else insert the new node in the body of the list.
Step 5: End
DELETING
Step 1: Begin
Step 2: if the list is empty then, node cannot be deleted
Step 3: else if the node to be deleted is the first node, t
hen make the head to point to ht second node
Step 4: else delete the node from the body of the list.
Step 5: End
Double Linked List
#include "stdio.h"#include "alloc.h"typedef struct dubll{ int data; struct dubll *leftlink,*rightlink;}*DUBLL;DUBLL high,temp_node,low,last,pntr;int flag=0;DUBLL NodeAlloc();DUBLL Search(int,int);void CreateItem();void AppendItem();void PrintItem();void DeleteItem();DUBLL Search(int item,int flag);DUBLL NodeAlloc();void InsertItem();void main(void){ int choice,Item; high=NULL; while(1) { clrscr(); printf("\n \t\t\t***** M A I N M E N U *****\n\n"); printf("\n 1: Create Linked List \n 2: Append a Node to the List \n 3: Traverse the List \n 4: Delete a Node from the List \n 5: Search a Node \n 6: Insert a Node to the List \n 7: Close \n\n\t\t Enter your Option [ ]\b\b"); scanf("%d",&choice); switch(choice) { case 1: CreateItem(); puts("\nPress any key to go back to main menu.");
getch(); break; case 2: AppendItem(); break; case 3:
PrintItem(); puts("\nPress any key to go back to main menu.");
getch(); break;
case 4: DeleteItem(); break; case 5: printf("Find an Item: "); scanf("%d",&Item); temp_node=Search(Item,0); if(temp_node) {
puts("The item is available in the Linked List."); } else
{ puts("The item is not found in the Linked List."); }
getch(); break;
case 6: InsertItem(); break; case 7: exit(); default: puts("Invalid choice."); puts("\nPress any key to go back to main menu.");
getch(); break; } }}/* Function to Create the list*/void CreateItem(){ if(high==NULL) { printf("\n --Creating the list--"); temp_node=NodeAlloc(); printf("\n Enter starting data (as integer value) :");
scanf("%d",&temp_node->data); high=temp_node; } else{ printf("\n List already created @ %d with %d as data.",high,high->data);}}
/* Function to Append items to the list*/void AppendItem(){ low=high; if(high==NULL) { CreateItem(); } else { temp_node=NodeAlloc(); printf("\n Enter Item (in integer) :"); scanf("%d",&temp_node->data); temp_node->rightlink=NULL;
while(low->rightlink!=NULL) low=low->rightlink; low->rightlink=temp_node; temp_node->leftlink=low; last=low->rightlink;
}}/* Function to Traverse the list both ways and print the data*/void PrintItem(){ DUBLL temp_node; if(high==NULL) { printf("\n List is not available. Please create a list first."); getch(); CreateItem(); } temp_node=high;
last=low->rightlink; printf("\n--Printing The List In Forward direction--\n");
while(temp_node!=NULL) //In forward direction { printf("\t %d",temp_node->data); temp_node = temp_node->rightlink; }
printf("\n"); printf("\n--Printing The List In Backward direction--\n");
temp_node=high; if(temp_node->rightlink==NULL){printf("%d",temp_node->data);return; } while(last!=NULL) //In backward direction { printf("\t %d",last->data); last = last->leftlink; }
}
/* Function to Delete items of the list*/void DeleteItem(){ int value; DUBLL temp_node; if(high==NULL) { printf("\n List is not available. Please create a list first."); getch(); CreateItem(); } printf("\n Item to delete :"); scanf("%d",&value); pntr=Search(value,1); pntr->leftlink->rightlink=pntr->rightlink; pntr->rightlink->leftlink=pntr->leftlink; temp_node=pntr; free(temp_node);}
/* Function to Search an item from the list*/DUBLL Search(int item,int flag){ temp_node = high; if(high==NULL)
{ printf("\n List is not available. Please create a list first."); getch(); CreateItem(); } while(temp_node!=NULL) { if(temp_node->data==item ) { if(flag==0) { return(1); } else { return(temp_node); } } temp_node=temp_node->rightlink; }}/* Function to Allocate nodes*/DUBLL NodeAlloc(){ DUBLL tmep_node; tmep_node=malloc(sizeof(struct dubll)); if(tmep_node==NULL) { printf("\n No memory available. Node allocation cannot be done."); } tmep_node->rightlink=tmep_node->leftlink=NULL; return(tmep_node); }/* Function to Insert items in the middle of the list*/void InsertItem() { int node; DUBLL temp_node;
if(high==NULL) { printf("\n List is not available. Please create a list first."); getch(); CreateItem();
} temp_node=NodeAlloc(); printf("Position At which node to be inserted: ___ & New Item Value: ___ "); scanf("%d",&node); scanf("%d",&temp_node->data); pntr=Search(node,1); if(pntr->rightlink==NULL) { printf("\n The operation is not possible."); getch(); return; } temp_node->leftlink=pntr; //creating link to new node temp_node->rightlink=pntr->rightlink; pntr->rightlink->leftlink=temp_node; pntr->rightlink=temp_node;
printf("\n Item has been Inserted."); getch(); }
OUTPUT: ***** M A I N M E N U *****
1: Create Linked List 2: Append a Node to the List 3: Traverse the List 4: Delete a Node from the List 5: Search a Node 6: Insert a Node to the List 7: Close Enter your Option [ 1]
Creating the list-- Enter starting data (as integer value) : 11 22 33 44 55 66
***** M A I N M E N U *****
1: Create Linked List 2: Append a Node to the List 3: Traverse the List 4: Delete a Node from the List 5: Search a Node
6: Insert a Node to the List 7: Close Enter your Option [ 3]
--Printing The List In Forward direction-- 11 22 33 44 55 66
--Printing The List In Backward direction-- 66 55 44 33 22 11Press any key to go back to main menu.
***** M A I N M E N U *****
1: Create Linked List 2: Append a Node to the List 3: Traverse the List 4: Delete a Node from the List 5: Search a Node 6: Insert a Node to the List 7: Close Enter your Option [ 2]
Enter Item (in integer) :88
***** M A I N M E N U *****
1: Create Linked List 2: Append a Node to the List 3: Traverse the List 4: Delete a Node from the List 5: Search a Node 6: Insert a Node to the List 7: Close
Enter your Option [ 3]
--Printing The List In Forward direction-- 11 22 33 44 55 66 88
--Printing The List In Backward direction-- 88 66 55 44 33 22 11Press any key to go back to main menu.
Stacks using Arrays
Definition :
Lists permit the insertion or deletion of an element to occur only at one end . A linear list
belonging to this subclass is called a stack. They are also referred to as pushdown lists.
The insertion operation is referred to as PUSH and the deletion operation as POP. The most
accessible element in a stack is known as the TOP of the stack.
Since insertion and deletion operations are performed at one end of stack, the elements can only be
removed in the opposite order from that in which they were added to the stack. Such a linear list is
frequently referred to as a LIFO ( Last-In First-Out ) LIST.
An example of stack is the “in” tray of a busy executive. The files pile up in the tray and whenever
the executive has time to clear the files, he/she takes it off from the top. That is, files are added at
the top and removed from the top. Therefore stacks are sometimes referred to as LIFO structure.
A pointer TOP
A pointer TOP keeps track of the top element in the stack. Initially when the stack is empty,
TOP has a value of –1 and when the stack contains a single element, TOP has a value of 0 ( Zero )
and so on. Each time a new element is inserted in the stack, the pointer is incremented by 1. The
pointer decrements by 1 each time a deletion is made from the stack.
ALGORITHM :
Procedure PUSH(S,TOP,X) : This procedure inserts an element X to the top of the stack which is represented by a vector S consisting MAX elements with a pointer TOP denoting the top element in the stack.STEP 1 : [Check for stack underflow]If (TOP>=max-1)then write(stack overflow)ReturnSTEP 2 : [Increment TOP] TOP <-- TOP+1STEP 3 : [Insert element] S[TOP] <-- XSTEP 4 : [Finished] ReturnThe first step of this algorithm checks for an overflow condition. If such a condition exists, then the insertion can't be performed and an appropriate error message results.
Procedure POP(S,TOP,X) : This procedure removes top element from the stack.STEP 1 : [Check for the underflow on stack]If (TOP<0)then write(stack underflow) ReturnSTEP 2 : [Hold the former top element of stack into X]X <-- S[TOP]STEP 3 : [Decrement the TOP pointer or index by 1]TOP <-- TOP-1STEP 4 : [finished-Return the popped item from the stack]Return(X)As Underflow condition is checked for in the first step of the algorithm. If such a condition exists, then the deletion cannot be performed and an appropriate error message results
Procedure Display(S,TOP) : This procedure displays the contents of the stack i.e., vector S.STEP 1 : [check for empty on stack]if (TOP==-1)then write('stack empty')ReturnSTEP 2 : [Repeat through STEP 3 from i=TOP to 0]Repeat through STEP 3 for i=TOP to 0 STEP-1]STEP 3 : [Display the stack content]write (S[i])STEP 4 : [Finished]ReturnThe first step of this algorithm checks for an empty condition. If such a condition exists, then the contents of the stack cannot be displayed and an appropriate error message results.
Stack (its operations) using Arrays
#include<stdio.h>#include<conio.h>int st_arr[20];int t=-1;void push_ele(int ele);int pop_ele();void display_ele();void main(){ char choice,num1=0,num2=0; while(1) { clrscr(); printf("======================================"); printf("\n\t\t MENU "); printf("\n======================================"); printf("\n[1] Using Push Function"); printf("\n[2] Using Pop Function"); printf("\n[3] Elements present in Stack"); printf("\n[4] Exit\n"); printf("\n\tEnter your choice: "); fflush(stdin); scanf("%c",&choice); switch(choice-'0') { case 1: {
printf("\n\tElement to be pushed: ");scanf("%d",&num1);push_ele(num1);break;
} case 2: {
num2=pop_ele(1); printf("\n\tElement to be popped: %d\n\t",num2); getch(); break;
} case 3: {
display_ele();getch();break;
}
case 4:exit(1);break;
default:printf("\nYour choice is invalid.\n");break;
} }}/* Push() function. */void push_ele(int ele){ if(t==99) { printf("STACK is Full.\n"); getch(); exit(1); } st_arr[++t]=ele;}/*Pop() function. */int pop_ele(){ int ele1; if(t==-1) { printf("\n\tSTACK is Empty.\n"); getch(); exit(1); } return(st_arr[t--]);}
/*Implementing display() function. */void display_ele(){ int k;
printf("\n\tElements present in the stack are:\n\t"); for(k=0;k<=t;k++) printf("%d\t",st_arr[k]);}
Stacks using Pointers
Write C programs that implement stack (its operations) using ii) Pointers
#include<stdio.h>#include<conio.h>struct st_point{ int ele; struct st_point *l;}*t;int i;void push_ele(int j);int pop_ele();void display_ele();void main(){ char choice,num1=0,num2=0; int i; while(1) { clrscr(); printf("======================================"); printf("\n\t\t MENU "); printf("\n======================================"); printf("\n[1] Using Push Function"); printf("\n[2] Using Pop Function"); printf("\n[3] Elements present in Stack"); printf("\n[4] Exit\n"); printf("\n\tEnter your choice: "); scanf("%c",&choice); switch(choice-'0') { case 1: {
printf("\n\tElement to be pushed:");scanf("%d",&num1);push_ele(num1);break;
} case 2: {
num2=pop_ele(1);
printf("\n\tElement to be popped: %d\n\t",num2);break;
}
case 3: {
printf("\n\tElements present in the stack are:\n\t");display_ele();getch();break;
} case 4: exit(1); default:
printf("\nYour choice is invalid.\n"); } }}
/*Inserting the elements using push function*/void push_ele(int j){ struct st_point *m; m=(struct st_point*)malloc(sizeof(struct st_point)); m->ele=j; m->l=t; t=m; return;}
/*Removing the elements using pop function*/ int pop_ele() { if(t==NULL) { printf("\n\STACK is Empty."); getch(); exit(1); } else { int i=t->ele; t=t->l; return (i); }
return 0;}
/*Displaying the elements */void display_ele(){ struct st_point *pointer=NULL; pointer=t; while(pointer!=NULL) { printf("%d\t",pointer->ele); pointer=pointer->l; }}
OUTPUT:
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 1
Element to be pushed: 10
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 1
Element to be pushed: 25
MENU
[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 1
Element to be pushed: 30
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 1
Element to be pushed: 35 MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 1
Element to be pushed: 40
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 3
Elements present in the stack are: 10 25 30 35 40
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack
[4] Exit
Enter your choice: 3
Elements present in the stack are: 10 25 30 35 40
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 2
Element to be popped: 40
MENU[1] Using Push Function[2] Using Pop Function[3] Elements present in Stack[4] Exit
Enter your choice: 3
Elements present in the stack are: 10 25 30 35
QUEUE STRUCTURE
Definition :
Lists permit deletions to be performed at one end of a list and insertions at the other end.
The information in such a list is processed in the same order as it was received, i.e. on a first-in,
first-out (FIFO) or first-come first-serve (FCFS) basis. This type of list is referred to as a Queue.
FRONT : Pointer to the front element of a queue
REAR : Pointer to the rear element of a queue
Types of Queues
Linear Queue
Circular Queue
Prioirity Queue
The insertion operation is referred to as QINSERT and the deletion operation as QDELETE. We
can insert an item at the rear end using QINSERT and remove an item at the front end using
QDELETE
A pointer FRONT and REAR
FRONT and REAR, pointers to the front and rear elements of queue respectively. Each time
a new element is inserted in the queue, the REAR pointer is incremented by one. The FRONT
pointer is incremented by 1 each time a deletion is made from the queue. FRONT and REAR
pointers should be reset to -1 once they are found equal
LINEAR QUEUE
ALGORITHM :
Procedure QINSERT(Q,F,MAX,X) : Given F and R, pointers to the front and rear elements of a queue. A QUEUE Q consisting of MAX elements and an element X. this procedure inserts X at the rear end of the queue prior to the first invocation of the procedure, F and R have been set to -1.
STEP 1: [Is front pointer properly set]if (F==R)then F <-- R <-- -1
STEP 2: [Check for overflow condition]if (R>=(MAX-1))then write ('Error : Overflow')Return
STEP 3: [Increment rear pointer]R <-- R+1
STEP 4: [Insert element]Q[R] <-- XReturn
Procedure QDELETE(Q,F,R) : Given F and R,the pointers to the front and rear elements of a queue respectively and the queue Q to which they correspond. This procedure delets and returns the element at the front end of the queue .Here X is a temporary variable.
STEP 1: [Check for underflow condition]if (F>=R)then write('Error : Underflow']Return
STEP 2: [Increment the front pointer]F <-- F+1
STEP 3: [Delete element]Y <-- Q[F]Return Y
Programs that implement Queue (its operations) using Arrays
#include<stdio.h>#include<alloc.h>#include<conio.h>#define size 10#define true 1#define false 0
struct q_arr{ int f,r; int num; int a[size];};
void init(struct q_arr* queue);int e_que(struct q_arr* queue);int f_que(struct q_arr* queue);int add_ele(struct q_arr* queue,int);int rem_ele(struct q_arr* queue);void display_ele(struct q_arr* queue);
/*main function*/void main(){ int ele,k; int ch;
struct q_arr *queue = (struct q_arr*)malloc(sizeof(struct q_arr)); init(queue);
while(1) { clrscr(); printf("\n\n****IMPLEMENTATION OF QUEUE USING ARRAYS****\n"); printf("============================================"); printf("\n\t\tMENU\n"); printf("============================================"); printf("\n\t[1] To insert an element"); printf("\n\t[2] To remove an element"); printf("\n\t[3] To display all the elements"); printf("\n\t[4] Exit"); printf("\n\n\t Enter your choice: ");
scanf("%d",&ch);
switch(ch) { case 1: {
printf("\nElement to be inserted:");scanf("%d",&ele);add_ele(queue,ele);break;
}
case 2: {
if(!e_que(queue)){ k=rem_ele(queue); printf("\n%d element is removed\n",k); getch();}else{ printf("\tQueue is Empty. No element can be removed."); getch();}break;
}
case 3: {
display_ele(queue);getch();break;
}
case 4:exit(0);
default:printf("\tInvalid Choice.");getch();break;
} }}/*end main*/
void init(struct q_arr* queue){ queue->f = 0; queue->r = -1; queue->num = 0;}
/* Function to check is the queue is empty*/int e_que(struct q_arr* queue){ if(queue->num==0) return true; return false;}
/* Function to check if the queue is full*/int f_que(struct q_arr* queue){ if(queue->num == size) return true; return false;}
/* Function to add an element to the queue*/int add_ele(struct q_arr* queue,int j){ if(f_que(queue)) return false;
if(queue->r == size - 1) queue->r = -1; queue->a[++queue->r] = j; queue->num++; return true;}
/* Function to remove an element of the queue*/int rem_ele(struct q_arr* queue){
int j; if(e_que(queue)) return -9999; j = queue->a[queue->f++]; if(queue->f == size) queue->f = 0; queue->num--; return j;}
/* Function to display the queue*/void display_ele(struct q_arr* queue){ int j; if(e_que(queue)) { printf("Queue is Empty. No records to display."); return; } printf("\nElements present in the Queue are: "); for(j=queue->f;j<=queue->r;j++) printf("%d\t",queue->a[j]); printf("\n");}
Queues using Pointers
Write C programs that implement Queue (its operations) using ii) Pointers
#define true 1#define false 0#include<stdio.h>#include<conio.h>#include<process.h>
struct q_point{ int ele; struct q_point* n;};
struct q_point *f_ptr = NULL;
int e_que(void);void add_ele(int);int rem_ele(void);void show_ele();
/*main function*/void main(){ int ele,choice,j; while(1) { clrscr(); printf("\n\n****IMPLEMENTATION OF QUEUE USING POINTERS****\n"); printf("=============================================="); printf("\n\t\t MENU\n"); printf("=============================================="); printf("\n\t[1] To insert an element"); printf("\n\t[2] To remove an element"); printf("\n\t[3] To display all the elements"); printf("\n\t[4] Exit"); printf("\n\n\tEnter your choice:"); scanf("%d", &choice);
switch(choice) {
case 1: {
printf("\n\tElement to be inserted:");scanf("%d",&ele);add_ele(ele);getch();break;
}
case 2: {
if(!e_que()){ j=rem_ele(); printf("\n\t%d is removed from the queue",j); getch();}else{ printf("\n\tQueue is Empty."); getch();}break;
}
case 3:show_ele();getch();break;
case 4:exit(1);break;
default:printf("\n\tInvalid choice.");getch();break;
}
}}
/* Function to check if the queue is empty*/int e_que(void){ if(f_ptr==NULL) return true; return false;}
/* Function to add an element to the queue*/void add_ele(int ele){ struct q_point *queue = (struct q_point*)malloc(sizeof(struct q_point)); queue->ele = ele; queue->n = NULL; if(f_ptr==NULL) f_ptr = queue; else { struct q_point* ptr; ptr = f_ptr; for(ptr=f_ptr ;ptr->n!=NULL; ptr=ptr->n); ptr->n = queue; }}
/* Function to remove an element from the queue*/int rem_ele(){ struct q_point* queue=NULL; if(e_que()==false) { int j = f_ptr->ele; queue=f_ptr; f_ptr = f_ptr->n; free (queue); return j; } else { printf("\n\tQueue is empty."); return -9999; }}
/* Function to display the queue*/void show_ele(){ struct q_point *ptr=NULL; ptr=f_ptr; if(e_que()) { printf("\n\tQUEUE is Empty."); return; } else { printf("\n\tElements present in Queue are:\n\t"); while(ptr!=NULL) { printf("%d\t",ptr->ele); ptr=ptr->n; } }}
OUTPUT:****IMPLEMENTATION OF QUEUE USING POINTERS****
INPUT :==============================
MENU [1] To insert an element [2] To remove an element [3] To display all the elements [4] Exit Enter your choice: 1
Element to be inserted : 45===============================
MENU [1] To insert an element [2] To remove an element [3] To display all the elements [4] Exit Enter your choice: 1
Element to be inserted : 35===============================
MENU [1] To insert an element [2] To remove an element [3] To display all the elements [4] Exit Enter your choice: 1
Element to be inserted : 99===============================
MENU [1] To insert an element [2] To remove an element [3] To display all the elements [4] Exit Enter your choice: 3 Elements present in the queue are :
45 35 99==================================
MENU [1] To insert an element [2] To remove an element [3] To display all the elements [4] Exit Enter your choice: 2
45 is deleted ================================
MENU [1] To insert an element [2] To remove an element [3] To display all the elements [4] Exit Enter your choice: 3
Elements present in the queue are : 35 99
Infix notation to Postfix
z :
A + ( B * C ) Paranthesis for emphasisA + ( BC* ) Convert the multiplicationA ( BC* ) + Convert the additionABC*+ Postfix form
The only rules to remember during the conversion process are that operations with highest precedence are converted first and that after a portion of the expression has been converted to postfix, it is to be treated as a single operand. Consider the same example with the precedence of operators reversed by the deliberate insertion of parenthesis.
( A + B ) * C Infix form( AB+ ) * C Convert the addition( AB+ ) C * Convert the multiplicationAB+C* Postfix form
In the above example the addition is converted before the multiplication because of the parenthesis. In going from ( A + B ) * C to ( AB+ ) * C, A and B are the operands and + is the operator. In going from ( AB+ ) * C to ( AB+ ) C *, ( AB+ ) and C are the operands and * is the operator. The rules for converting from infix to postfix are simple, providing that you know the order of precedence.
Infix to Postfix
ALGORITHM :
STEP 1 : Read the given infix expression into string called infix.
STEP 2 : Read one character at a time and perform the following operations :
1. If the read character is an operand, then add the operand to the postfix string.2. If the read character is not an operand, then check If the stack is not empty and precedence of the top of the stack operator is higher than the read operator, then pop the operator from stack and add this operator to the postfix string. Else push the operator onto the stack.
STEP 3 : Repeat STEP 2 till all characters are processed from the input string.
STEP 4 : If stack is not empty, then pop the operator from stack and add this operator
to the postfix string.
STEP 5 : Repeat STEP 4 till all the operators are popped from the stack.
STEP 6 : Display the result of given infix expression or resultant postfix expression
stored in a string called postfix from this algorithm.
Converting an infix expression to a postfix expression
#include<stdio.h>#include<conio.h>#include<ctype.h>void push(char);char pop();char post[100],infix[100],stack[100],t,x;int top=-1,i=0,j=0;void check();int priority(char);void main(){clrscr();printf("\nEnter the infix expression:");gets(infix);push('#');while(infix[i]!='\0'){t=infix[i];if(isalpha(t))push(t);else if(t=='+' ||t=='-' ||t=='*' ||t=='/'||t=='^' ||t=='(' || t==')'){switch(t){case '+':case '-':check();
push(t); break;
case '*':case '/':check();
push(t); break;
case '(':push(t); break;
case ')': x=pop(); do { post[j++]=x;
}while((x=pop())!='('); break;
}}i++;}x=pop();do{post[j++]=x;}while((x=pop())!='#');post[j]='\0';printf("Infix : %s Postfix :%s",infix,post);getch();
}void push(char c){stack[++top]=c;}char pop(){return(stack[top--]);}void check(){if(priority(t)>=priority(stack[top]))post[j++]=pop();}int priority(char op){int p;switch(op){case '^':p=3;
break;case '+':case '-':p=2;
break;case '*':case '/':p=1;
break;
default:p=0;}return p;}
OUTPUT
COVERSION OF INFIX EXPRESSION TO POSTFIX EXPRESSION
INPUT:
Enter the infix string : A + B * C - D
RESULT :
Infix String : A + B * C – D
Postfix String : ABC*+D-
Evaluation of Postfix Expression
ALGORITHM :
STEP 1 : Read the given postfix expression into a string called postfix.
STEP 2 : Read one character at a time & perform the following operations :1. If the read character is an operand, then convert it to float and push it onto the stack.2. If the character is not an operand, then pop the operator from stack and assign to OP2. Similarly, pop one more operator from stack and assign to OP1.3. Evaluate the result based on operator x.4. Push the result (based on operator x) onto the stack.
STEP 3 : Repeat STEP 2 till all characters are processed from the input string.
STEP 4 : Return the result from this procedure or algorithm and display the result in main
program.
Program to evaluate postfix expression
#include<stdio.h>#include<conio.h>#include<ctype.h>#include<math.h>void push(float);float pop();char post[100];float st[100],x;float res;float evalpost();float op1,op2;int tos;/*****************MAIN FUNCTION***************/void main(){clrscr();printf("\nEVALUATION OF POSTFIX EXPRESSION\n");printf("\nEnter the postfix expression:");gets(post);tos=-1;int i=0;while(post[i]!='\0'){if(isalpha(post[i])){printf("\nEnter value of %c :",post[i]);scanf("%f",&x);push(x);}else{op2=pop();op1=pop();//printf("\nop1=%f op2=%f",op1,op2);switch(post[i]){case '+': res=op1+op2;
push(res); break;
case '-': res=op1-op2; push(res);
break;case '*': res=op1*op2;
push(res); break;
case '/': res=op1/op2; push(res); break;
case '^': res=pow(op1,op2); push(res); break;
}}i++;}printf("\nThe evaluation of the given expression is %f",pop());getch();}
/**************PUSH**************/void push(float val){st[++tos]=val;}/**************POP**************/
float pop(){return(st[tos--]);}
OUTPUT
EVALUATION OF POSTFIX EXPRESSION
INPUT :
Enter the postfix expression:ABC*+D-
Enter value of A :2
Enter value of B :3
Enter value of C :4
Enter value of D :5
RESULT :
The evaluation of the given expression is 9.000000
Binary Tree
ALGORITHM :
Creating a Binary Tree
Step 1: Start
Step 2: Obtain a node and assign a value to the node
Step 3: Insert into a binary tree
Step 4: repeat 2 and 3 until stopped by the user
Step 5. stop
Preorder :
Step 1: Start
Step 2: Visit the root
Step 3: Traverse the left subtree in preorder
Step 4: Traverse the right subtree in preorder
Step 5: stop
Inorder :
Step 1: Start
Step 2: Traverse the left subtree in inorder
step 3: Visit the root
Step 4: Traverse the right subtree in inorder
Step 5: stop
Postorder :
Step 1: Start
Step 2: Traverse the left subtree in postorder
Step 3: Traverse the right subtree in postorder
step 4: Visit the root
Program to create a Binary Tree and traverse it in Preorder, Indorder and Postorder
#include<stdio.h>#include<conio.h>#include<process.h>#include<alloc.h>struct btree{int info;struct btree *lptr;struct btree *rptr;};typedef struct btree Tree;Tree *root,*node;Tree *create(int,Tree*);void preorder(Tree*);void inorder(Tree*);void postorder(Tree*);void main(){int ch,no;root=NULL;clrscr();do{printf("\n\t\tBINARY TREE\n");printf("\n1.Create");printf("\n2.Preorder");printf("\n3.Inorder");printf("\n4.Postorder");printf("\n5.Exit");printf("\nEnter your choice:");scanf("%d",&ch);switch(ch){case 1:
printf("\nNote : Enter 0 to stop\n");printf("\nEnter any integer value :\n");scanf("%d",&no);
while(no!=0){root=create(no,root);
scanf("%d",&no);}
break;case 2:
printf("\nPREORDER\n");preorder(root);break;
case 3:printf("\nINORDER\n");inorder(root);break;
case 4:printf("\nPOSTORDER\n");postorder(root);break;
case 5:exit(0);
}}while(ch!=5);}
Tree *create(int data,Tree *t){if(!t){t=(Tree*)malloc(sizeof(Tree));t->info=data;t->lptr=NULL;t->rptr=NULL;}if(data<t->info)t->lptr=create(data,t->lptr);if(data>t->info)t->rptr=create(data,t->rptr);return t;}void preorder(Tree *ptr){if(ptr!=NULL)
{printf("%3d",ptr->info);preorder(ptr->lptr);preorder(ptr->rptr);
}}void postorder(Tree *ptr){if(ptr!=NULL){postorder(ptr->lptr);postorder(ptr->rptr);printf("%3d",ptr->info);}}void inorder(Tree *ptr){if(ptr!=NULL){inorder(ptr->lptr);printf("%3d",ptr->info);inorder(ptr->rptr);}}
OUTPUT
CREATION OF BINARY TREE AND ITS TRAVERSALS
INPUT : BINARY TREE
1. Create2. Preorder3. Inorder4. Postorder5. ExitEnter your choice:1
Note : Enter 0 to stop
Enter any integer value :2022821179514180
RESULT :
BINARY TREE
1. Create2. Preorder3. Inorder4. Postorder5. ExitEnter your choice:2
PREORDER20 8 5 17 9 14 18 22 21
BINARY TREE
1. Create
2. Preorder3. Inorder4. Postorder5. ExitEnter your choice:3
INORDER 5 8 9 14 17 18 20 21 22
BINARY TREE
1. Create2. Preorder3. Inorder4. Postorder5. ExitEnter your choice:4
POSTORDER 5 14 9 18 17 8 21 22 20
Linear Search
ALGORITHM :
step 1: start
step 2: read how many elements n
step 3: read n elements
step 4: enter the key element to be searched
step 5: compare the key element with n elements
step 6: if the element is found then write the element is found in postition else not found
step 7: stop
Program to implement Linear search using Reccursive and Non-Reccursive functions
#include <stdio.h>#define MAX_LEN 10void l_search_recursive(int l[],int num,int ele);void l_search(int l[],int num,int ele);void read_list(int l[],int num);void print_list(int l[],int num);void main(){ int l[MAX_LEN], num, ele; int ch; clrscr(); printf("======================================================"); printf("\n\t\t\tMENU"); printf("\n====================================================="); printf("\n[1] Linary Search using Recursion method"); printf("\n[2] Linary Search using Non-Recursion method"); printf("\n\nEnter your Choice:"); scanf("%d",&ch); if(ch<=2 & ch>0) { printf("Enter the number of elements :"); scanf("%d",&num); read_list(l,num); printf("\nElements present in the list are:\n\n"); print_list(l,num); printf("\n\nElement you want to search:\n\n"); scanf("%d",&ele); switch(ch) { case 1:printf("\n**Recursion method**\n");
l_search_recursive(l,num,ele); getch(); break;
case 2:printf("\n**Non-Recursion method**\n"); l_search_nonrecursive(l,num,ele); getch(); break;
}
} getch();}
/* Non-Recursive method*/void l_search_nonrecursive(int l[],int num,int ele){ int j, f=0; for(j=0;j<num;j++) if( l[j] == ele) { printf("\nThe element %d is present at position %d in list\n",ele,j+1); f=1; break; } if(f==0) printf("\nThe element is %d is not present in the list\n",ele);}
/* Recursive method*/void l_search_recursive(int l[],int num,int ele){ int f = 0;
if( l[num] == ele) { printf("\nThe element %d is present at position %d in list\n",ele,num+1); f=1; } else { if((num==0) && (f==0)) { printf("The element %d is not found.",ele); } else { l_search(l,num-1,ele); } } getch();
}
void read_list(int l[],int num)
{ int j; printf("\nEnter the elements:\n");
for(j=0;j<num;j++) scanf("%d",&l[j]);}
void print_list(int l[],int num){ int j; for(j=0;j<num;j++) printf("%d\t",l[j]);}
OUTPUT
INPUT : MENU
===================================[1] Linary Search using Recursion method[2] Linary Search using Non-Recursion methodEnter your Choice:1Enter the number of elements :5Enter the elements:55 6 8 9 7 Element you want to search: 9
RESULT:
Elements present in the list are:55 6 8 9 7**Recursion method**The element 9 is present at position 4 in the list.
INPUT: MENU
=======================================[1] Linary Search using Recursion method[2] Linary Search using Non-Recursion methodEnter your Choice:2Enter the number of elements :6Enter the elements:55 44 88 11 22 33
Element you want to search : 88
RESULT:
Elements present in the list are:55 44 88 11 22 33**Non-Recursion method**The element 88 is present at position 3 in list
Binary Search
ALGORITHM :
step 1: start
step 2: read how many elements n
step 3: read n elements
step 4: enter the key element to be searched
step 5: sort the elements
step 6: compare the key element with n elements
step 7:
step 8: write the element is found in postition else not found
step 9: stop
Programs that use both recursive and non recursive functions to perform binary search operations
#include <stdio.h>#define MAX_LEN 10
/* Non-Recursive function*/
void b_search_nonrecursive(int l[],int num,int ele){ int l1,i,j, flag = 0; l1 = 0; i = num-1; while(l1 <= i) { j = (l1+i)/2; if( l[j] == ele) {
printf("\nThe element %d is present at position %d in list\n",ele,j); flag =1; break;
} else
if(l[j] < ele) l1 = j+1;
else i = j-1;
} if( flag == 0) printf("\nThe element %d is not present in the list\n",ele);}
/* Recursive function*/int b_search_recursive(int l[],int arrayStart,int arrayEnd,int a){ int m,pos; if (arrayStart<=arrayEnd) { m=(arrayStart+arrayEnd)/2; if (l[m]==a) return m; else if (a<l[m]) return b_search_recursive(l,arrayStart,m-1,a); else
return b_search_recursive(l,m+1,arrayEnd,a); } return -1;}
void read_list(int l[],int n)
{ int i; printf("\nEnter the elements:\n"); for(i=0;i<n;i++) scanf("%d",&l[i]);}
void print_list(int l[],int n){ int i; for(i=0;i<n;i++) printf("%d\t",l[i]);}
/*main function*/void main(){ int l[MAX_LEN], num, ele,f,l1,a; int ch,pos;
clrscr();
printf("======================================================"); printf("\n\t\t\tMENU"); printf("\n====================================================="); printf("\n[1] Binary Search using Recursion method"); printf("\n[2] Binary Search using Non-Recursion method"); printf("\n\nEnter your Choice:"); scanf("%d",&ch);
if(ch<=2 & ch>0) { printf("\nEnter the number of elements : "); scanf("%d",&num); read_list(l,num); printf("\nElements present in the list are:\n\n"); print_list(l,num); printf("\n\nEnter the element you want to search:\n\n"); scanf("%d",&ele); switch(ch) { case 1:printf("\nRecursive method:\n");
pos=b_search_recursive(l,0,num,ele); if(pos==-1) {
printf("Element is not found"); }
else {
printf("Element is found at %d position",pos); } getch(); break;
case 2:printf("\nNon-Recursive method:\n"); b_search_nonrecursive(l,num,ele); getch(); break;
} }getch();}
OUTPUT
INPUT :================================== MENU==================================[1] Binary Search using Recursion method[2] Binary Search using Non-Recursion methodEnter your Choice:1
Enter the number of elements : 5
Enter the elements: 45 50 68 74 85
RESULT :
Elements present in the list are:45 50 68 74 85
Enter the element you want to search : 68
Recursive method:Element is found at 3 position
INPUT :====================================================== MENU=====================================================[1] Binary Search using Recursion method[2] Binary Search using Non-Recursion methodEnter your Choice:2
Enter the number of elements : 5
Enter the elements:25 65 87 98 153
RESULT :
Elements present in the list are: 25 65 87 98 153
Enter the element you want to search : 98
Non-Recursive method:The element 98 is present at position 3 in list
Bubble Sort
Definition :
Bubble Sort is an elementary sorting algorithm. It works by repeatedly exchanging adjacent
elements, if necessary. When no exchanges are required, the data is sorted.
ALGORITHM :
Procedure BubbleSort(A, MAX) : Here A is an array consisting of MAX elements. This procedure sorts the elements in Ascending Order by repeatedly exchanging adjacent elements, if necessary. Here 'temp' is a temporary variable used to exchange the adjacent elements in this procedure.
ASCENDING ORDER
for i ← 1 to MAX do for j ← MAX downto i+1 do
If A[j] < A[j-1] then Exchange A[j] ↔ A[j-1]
Program to implement Bubble sort
#include <stdio.h>#define MAX 10void swapList(int *m,int *n){
int temp; temp = *m; *m = *n; *n = temp;}// Function for Bubble Sortvoid bub_sort(int list[], int n){ int i,j; for(i=0;i<(n-1);i++) for(j=0;j<(n-(i+1));j++)
if(list[j] > list[j+1]) swapList(&list[j],&list[j+1]);
}void readlist(int list[],int n){ int j; printf("\nEnter the elements: \n"); for(j=0;j<n;j++) scanf("%d",&list[j]);}// Showing the contents of the listvoid printlist(int list[],int n){ int j; for(j=0;j<n;j++) printf("%d\t",list[j]);}void main(){ int list[MAX], num; printf(“\n”BUBBLE SORT”); printf("\n\n\nEnter the number of elements [Maximum 10]\n"); scanf("%d",&num); readlist(list,num); printf("\n\nElements in the list before sorting are:\n");
printlist(list,num); bub_sort(list,num); printf("\n\nElements in the list after sorting are:\n"); printlist(list,num);}
OUTPUT:
******BUBBLE SORT *****
INPUT :
Enter the number of elements [Maximum 10] : 6
Enter the elements:55 44 11 66 88 5
RESULT :
Elements in the list before sorting are:55 44 11 66 88 5
Elements in the list after sorting are:5 11 44 55 66 88
QUICK SORT
Definition :
Quick Sort works on the principle of divide-and-conquer. It is an algorithm of choice in many situations because it is not difficult to implement, it is a good "general purpose" sort and it consumes relatively fewer resources during execution.
ALGORITHM : QUICK SORT
Procedure QuickSort(A, left, right) : Here A is an array consisting of MAX elements. This procedure sorts the elements in Ascending or Descending Order based on the divide and conquer method.
Quick Sort works by partitioning a given array A[p . . r] into two non-empty sub-array A[p . . q] and A[q+1 . . r] such that every key in A[p . . q] is less than or equal to every key in A[q+1 . . r].
Then the two sub-arrays are sorted by recursive calls to Quick sort. The exact position of the partition depends on the given array and index q is computed as a part of the partitioning
procedure.
Procedure QuickSort(A, left, right)
If left < right then pivot = Partition (A, left, right) Recursive call to QuickSort (A, left, pivot-1) Recursive call to QuickSort (A, pivot+1, right)
PARTITION (A, p, r)
x = A[p] i = p-1 j = r+1 while TRUE do Repeat j = j-1 until A[j] ≤ x Repeat i = i+1 until A[i] ≥ x if i < j then exchange A[i] = A[j] else return j
Quick sort
#include <stdio.h>#define MAX 10
void swap(int *m,int *n){
int temp; temp = *m; *m = *n; *n = temp;}int get_key_position(int x,int y ){ return((x+y) /2);}
// Function for Quick Sortvoid quicksort(int list[],int m,int n){ int key,i,j,k; if( m < n) { k = get_key_position(m,n); swap(&list[m],&list[k]); key = list[m]; i = m+1; j = n; while(i <= j) { while((i <= n) && (list[i] <= key)) i++; while((j >= m) && (list[j] > key))
j--; if( i < j)
swap(&list[i],&list[j]); } swap(&list[m],&list[j]); quicksort(list,m,j-1); quicksort(list,j+1,n); }}
// Function to read the datavoid read_data(int list[],int n){ int j; printf("\n\nEnter the elements:\n"); for(j=0;j<n;j++) scanf("%d",&list[j]);
}
// Function to print the datavoid print_data(int list[],int n){ int j; for(j=0;j<n;j++) printf("%d\t",list[j]);}
void main(){ int list[MAX], num; clrscr(); printf("\n***** Enter the number of elements Maximum [10] *****\n"); scanf("%d",&num); read_data(list,num); printf("\n\nElements in the list before sorting are:\n"); print_data(list,num); quicksort(list,0,num-1); printf("\n\nElements in the list after sorting are:\n"); print_data(list,num); getch();}
OUTPUT:
******QUICK SORT *****
INPUT :
Enter the number of elements [Maximum 10] : 10
Enter the elements:15 4 11 6 28 25 9 35 45 3
RESULT :
Elements in the list before sorting are:15 4 11 6 28 25 9 35 45 3
Elements in the list after sorting are:3 4 6 9 11 15 25 28 35 45
Insertion Sort
Definition :
Insertion Sort is an example of an incremental algorithm. It builds the sorted sequence one
number at a time.
If the first few objects are already sorted, an unsorted object can be inserted in the sorted set in proper place. This is called insertion sort. An algorithm consider the elements one at a time, inserting each in its suitable place among those already considered (keeping them sorted).
ALGORITHM :
Procedure InsertionSort(A, MAX) : Here A is an array consisting of MAX elements. This procedure sorts the elements in Ascending Order.
ASCENDING ORDER
For j = 2 to length [A] do key = A[j] Put A[j] into the sorted sequence A[1 . . j-1] i = j-1 while i > 0 and A[i] > key do A[i+1] = A[i] i = i-1 A[i+1] = key
Program to implement Insertion sort
#include<stdio.h>#include<conio.h>
void inst_sort(int []);
void main(){
int num[5],count; clrscr(); printf(“\n******INSERTION SORT******”); printf("\nEnter the Five Elements to sort:\n");
for (count=0;count<5;count++) scanf("%d",&num[count]); inst_sort(num);
printf("\n\nElements after sorting: \n"); for(count=0;count<5;count++) printf("%d\n",num[count]); getch();}
// Function for Insertion Sortingvoid inst_sort(int num[]){ int i,j,k; for(j=1;j<5;j++) { k=num[j]; for(i=j-1;i>=0 && k<num[i];i--) num[i+1]=num[i]; num[i+1]=k; }}
OUTPUT:
*****INSERTION SORT********
INPUT :
Enter the Five Elements to sort:5
66224455
RESULT :
Elements after sorting:522445566
Merge Sort
Definition :
Merge-sort is based on the divide-and-conquer paradigm. The Merge-sort algorithm can be described in general terms as consisting of the following three steps:1. Divide Step If given array A has zero or one element, return S; it is already sorted. Otherwise, divide A into two arrays, A1 and A2, each containing about half of the elements of A.
2. Recursion Step Recursively sort array A1 and A2.
3. Conquer Step Combine the elements back in A by merging the sorted arrays A1 and A2 into a sorted sequence.
ALGORITHM :
To begin, suppose that we have two sorted arrays A1[1], A1[2], . . , A1[M] and A2[1], A2[2], . . . , A2[N]. The following is a direct algorithm of the obvious strategy of successively choosing the smallest remaining elements from A1 to A2 and putting it in A
MERGE (A1, A2, A)
i = j1A1[m+1], A2[n+1] = INT_MAXFor k = 1 to m + n do if A1[i] < A2[j] then A[k] = A1[i] i = i +1 else A[k] = A2[j] j = j + 1
The Merge sort algorithm is as follows:
MERGE_SORT (A)
A1[1 . . floor(n/2)] = A[1 . . floor(n/2)]A2[1 . . floor(n/2)] = A[1 + floor(n/2) . . n]Merge Sort (A1)Merge Sort (A1)Merge Sort (A1, A2, A)
Program to implement Merge sort
#include <stdio.h>#include <stdlib.h>#define MAX_ARY 10void merge_sort(int x[], int end, int start);int main(void) { int ary[MAX_ARY]; int j = 0; printf("\n\nEnter the elements to be sorted: \n");
for(j=0;j<MAX_ARY;j++) scanf("%d",&ary[j]);/* array before mergesort */ printf("Before :"); for(j = 0; j < MAX_ARY; j++) printf(" %d", ary[j]); printf("\n"); merge_sort(ary, 0, MAX_ARY - 1); /* array after mergesort */ printf("After Merge Sort :"); for(j = 0; j < MAX_ARY; j++) printf(" %d", ary[j]); printf("\n"); getch();}/* Method to implement Merge Sort*/ void merge_sort(int x[], int end, int start) { int j = 0; const int size = start - end + 1; int mid = 0; int mrg1 = 0; int mrg2 = 0; int executing[MAX_ARY]; if(end == start) return; mid = (end + start) / 2; merge_sort(x, end, mid); merge_sort(x, mid + 1, start); for(j = 0; j < size; j++) executing[j] = x[end + j]; mrg1 = 0; mrg2 = mid - end + 1; for(j = 0; j < size; j++) { if(mrg2 <= start - end) if(mrg1 <= mid - end) if(executing[mrg1] > executing[mrg2]) x[j + end] = executing[mrg2++]; else x[j + end] = executing[mrg1++]; else x[j + end] = executing[mrg2++]; else x[j + end] = executing[mrg1++]; }}
OUTPUT:
*******MERGE SORT**********
Enter 10 elements to be sorted:5566223314477582535Before : 55 66 22 33 1 44 77 58 25 35After Merge Sort : 1 22 25 33 35 44 55 58 66 77
Lagrange interpolation
ALGORITHM :
Step 1: Start
Step 2: read x, n
Step 3: for i=1 to n+1 in steps of 1 do read xi, fi
Step 4: sum ← 0
Step 5: for i=1 to n+1 in steps of 1 do
Step 6: prodfunc ← 1
Step 7: for j=1 to n+1 in steps of 1 do
Step 8: if (j ≠ i) then prodfunc ← prodfunc x ( x – xj ) / ( xi – xj )
endfor
Step 9: sum ← sum + fi * prodfunc
Remarks : sum is the value of f at x
endfor
Step 10: Write x, sum
Step 11: Stop
Program to implement the Lagrange interpolation
#include<stdio.h>#include<conio.h>#define MaxN 90
void main(){ float arr_x[MaxN+1], arr_y[MaxN+1], numerator, denominator, x, y=0; int i, j, n; clrscr();
printf("Enter the value of n: \n"); scanf("%d", &n); printf("Enter the values of x and y: \n"); for(i=0; i<=n; i++) scanf("%f%f", &arr_x[i], &arr_y[i]); printf("Enter the value of x at which value of y is to be calculated: "); scanf("%f", &x); for (i=0; i<=n; i++) { numerator=1; denominator=1; for (j=0; j<=n; j++) if(j!=i) { numerator *= x-arr_x[j]; denominator *= arr_x[i]-arr_x[j]; } y+=(numerator/denominator)*arr_y[i]; }printf("When x=%4.1f y=%7.1f\n",x,y);getch();}
OUTPUT
Lagrange Interpolation
INPUT :
Enter the value of n: 5Enter the values of x and y: arr_x[0]=5
arr_y[0]=7arr_x[1]=9arr_y[1]=8arr_x[2]=2arr_y[2]=3arr_x[3]=4arr_y[3]=6arr_x[4]=1arr_y[4]=9Enter the value of x at which value of y is to be calculated: 4
RESULT :
Interpolated function valueWhen x= 4.0 y= 8.7
Newton-Gregory forward interpolation
Program to implement the Newton-Gregory forward interpolation
#include<stdio.h>#include<conio.h>#define MaxN 100#define Order_of_diff 4
void main (){ float arr_x[MaxN+1], arr_y[MaxN+1], numerator=1.0, denominator=1.0, x, y, p, h, diff_table[MaxN+1][Order_of_diff+1]; int i,j,n,k; clrscr();
printf("Enter the value of n \n"); scanf("%d",&n); printf("Enter the values of x and y");
for(i=0; i<=n; i++) scanf("%f%f", &arr_x[i], &arr_y[i]); printf("Enter the value of x at which value of y is to be calculated"); scanf("%f", &x); h=arr_x[1]-arr_x[0];
for(i=0; i<=n-1; i++) diff_table[i][1]=arr_y[i+1]-arr_y[i];/*Creating the difference table and calculating first order differences*/ for(j=2; j<=Order_of_diff; j++)/*Calculating higher order differences*/ for(i=0; i<=n-j; i++) diff_table[i][j]=diff_table[i+1][j-1] - diff_table[i][j-1]; i=0; while(!(arr_x[i]>x)) /* Finding x0 */ i++; i--; p=(x-arr_x[i])/h; y=arr_y[i];
for (k=1; k<=Order_of_diff; k++) { numerator *=p-k+1;
denominator *=k; y +=(numerator/denominator)*diff_table[i][k]; }printf("When x=%6.1f, y=%6.2f\n",x, y);getch();}
OUTPUT
Newton-Gregory forward interpolation
INPUT :
Enter the value of n : 5Enter the values of x and y10 2.215 2.620 3.025 3.330 3.6Enter the value of x at which value of y is to be calculated23
RESULT :
When x= 23.0, y= 3.17
Linear Regression
Linear Regression
To illustrate, if z = A0 + A1*x + A2*y is to be fitted to N data points, the normal equations are A0*N + A1*åx + A2*åy = åz
A0*åx + A1*åx*x + A2*åx*y = åx*zA0*åy + A1*åy*x + A2*åy*y = åy*z
where the å’s are over all N data sets.
Solving the above system we get the values of the coefficients A0, A1 and A2. Obviously, it may be generalized to any number of variables or parameters.
The correlation coefficient is computed with
å [festimated - fmean]2
SQR ( —————————————————————— ) å [f-fmean]2
The standard error of estimate is calculated using å [f – festimated ]2
SQR ( ————————————————————— ) N-2
Summations are over all N data points, f is the dependent variable, and the festimated is found using the regression results.
ALGORITHM :
Step 1: Start
Step 2: read n
Step 3: sum ? 0
Step 4: sum xsq ? 0
Step 5: sum y ? 0
Step 6: sum xy ? 0
Step 7: i?1
Step 8: read x,y
Step 9: sum x ? sum x + x
Step 10: sum xsq ? sum xsq + x2
Step 11: sum y ? sum y + y
Step 12: sum xy ? sum xy + x * Y
Step 13: i ? i + 1
Step 14: repeat steps 8,9,10,11 and 12 until i=n
Step 15: den ? n * sum xsq – sum x * sum x
Step 16: ao ? (sum y * sum xsq – sum x * sum xy)/den
Step 17: a1 ? (n * sum xy - sum x * sum y)/den
Step 18: write ao, a1
Step 19: stop
Program to implement the linear regression algorithm.
#include<stdio.h>#include<conio.h>#include<math.h>#include<string.h>
float mean(float *a, int n);void deviation(float *a, float mean, int n, float *d, float *S);
void main(){ float a[20],b[20],dx[20],dy[20]; float sy=0,sx=0,mean_x=0,mean_y=0,sum_xy=0; float corr_coff=0,reg_coff_xy=0, reg_coff_yx=0; char type_coff[7]; int n=0,i=0; clrscr(); printf("Enter the value of n: "); scanf("%d",&n); printf("Enter the values of x and y:\n"); for(i=0;i<n;i++) scanf("%f%f",&a[i],&b[i]); mean_x=mean(a,n); mean_y=mean(b,n); deviation(a,mean_x,n,dx,&sx); deviation(b,mean_y,n,dy,&sy); for(i=0;i<n;i++) sum_xy=sum_xy+dx[i]*dy[i]; corr_coff=sum_xy/(n*sx*sy); printf("Enter the type of regression coefficient as 'x on y' or 'y on x': "); fflush(stdin); gets(type_coff); if(strcmp(type_coff,"x on y")==1) {
reg_coff_xy=corr_coff*(sx/sy);printf("\nThe value of linear regression coefficient is %f",reg_coff_xy);
} else if(strcmp(type_coff,"y on x")==1)
{reg_coff_yx=corr_coff*(sy/sx);printf("\nThe value of linear regression coefficient is %f",reg_coff_yx);
} else printf("\nEnter the correct type of regression coefficient."); getch();}
float mean(float *a, int n)
{ float sum=0, i=0; for(i=0;i<n;i++) sum=sum+a[i]; sum=sum/n; return (sum);}
void deviation(float *a, float mean, int n, float *d, float *s){ float sum=0,t=0; int i=0; for(i=0;i<n;i++) { d[i]=a[i]-mean; t=d[i]*d[i]; sum=sum+t; } sum=sum/n; *s=sqrt(sum);}
OUTPUT
INPUT :Enter the value of n : 5Enter the values of x and y3 52 67 83 76 9
5 7Enter the value of x at which value of y is to be calculated5
RESULT :
When x= 5.0, y=-6573.00
Trapezoidal Rule
Aim: To find the approximate Area under the given curve By Trapezoidal Rule .
Theory:
According to Newton – Cotes Quadrature Formula
Putting n=1 in above & taking the curve through (x0,y0) & (x1,y1)as a straight line i.e. a polynomial of first order so that differences of order higher than first become zero, we get
This is known as Trapezoidal Rule.
Program To find the Area under the curve by TRAPEZOIDAL RULE
# include <stdio.h># include<conio.h>
float function(float x){
return(1/(1+x*x));}void main(){
int i;float a,b,n,h,y;printf("\nThis Program Will Find the Root Of The Equation f(x) = 1/(1+x^2)\n");printf("\n\t************ By Trapezoidal Rule ************\n");printf("\nEnter the Limits of Integration & no. of SubIntervals\n");printf("\nEnter the lower limit of Integration - ");//lower limit = 0scanf("%f",&a);fflush(stdin);printf("\nEnter the upper limit of Integration - ");//upper limit = 6scanf("%f",&b);fflush(stdin);printf("\nEnter the number of SubIntervals - ");//Subintervals = 6scanf("%f",&n);fflush(stdin);h=(b-a)/n;y=function(a)+function(b);for(i=1;i<n;i++){
y = y + (2*function(a+i*h));}printf("\nThe value of Integral of the given function is - %f",(h/2)*y);
}
OUTPUT
This Program Will Find the Root Of The Equation f(x) = 1/(1+x^2)
************ By Trapezoidal Rule ************
INPUT :
Enter the Limits of Integration & no. of SubIntervals
Enter the lower limit of Integration - 0
Enter the upper limit of Integration - 6
Enter the number of SubIntervals - 6
RESULT :
The value of Integral of the given function is - 1.410799
Simpson Rule
Aim: To find the approximate Area under the given curve By Simpson’s Rule .
Theory:
According to Newton – Cotes Quadrature Formula
Putting n=2 in above & taking the curve through (x0,y0), (x1,y1) & (x2,y2) as a parabola i.e. a polynomial of second order so that differences of order higher than second vanish, we get
This is known as the Simpson’s one – third Rule or simply Simpson’s Rule & is most commonly used
Program to find the Area under the curve by SIMPSON’S RULE
# include <stdio.h>
float function(float x){
return(1/(1+x*x));}void main(){
int i;float a,b,n,h,y;printf("\nThis Program Will Find the Root Of
The Equation f(x) = 1/(1+x^2)\n");printf("\n\t************ By Simpson's Rule ************\n");printf("\nEnter the Limits of Integration
& no. of SubIntervals(must be a EVEN Number)\n");printf("\nEnter the lower limit of Integration - ");//lower limit = 0scanf("%f",&a);fflush(stdin);printf("\nEnter the upper limit of Integration - ");//upper limit = 6scanf("%f",&b);fflush(stdin);printf("\nEnter the number of SubIntervals - ");//Subintervals = 6scanf("%f",&n);
h=(b-a)/n;y=function(a)+function(b);
for(i=1;i<n;i+=2){
y = y + (4*function(a+i*h)) + (2*function(a+(i+1)*h));}printf("\nThe value of Integral of the given function is - %f",(h/3)*y);
}
OUTPUT
INPUT :
This Program Will Find the Root Of The Equation f(x) = 1/(1+x^2)
************ By Simpson's Rule ************
Enter the Limits of Integration & no. of SubIntervals(must be a EVEN Number)
Enter the lower limit of Integration - 0
Enter the upper limit of Integration - 6
Enter the number of SubIntervals - 6
RESULT :
The value of Integral of the given function is - 1.384192