0% found this document useful (0 votes)
317 views

Cds Lab Manual

The document provides the list of experiments for the C Programming lab class over 24 weeks. It includes programs to find the sum of digits of a number, Fibonacci sequence, prime numbers, quadratic equation roots, matrix operations, string operations, sorting, searching trees and graphs. Programs are also included to implement stacks, queues, linked lists and file handling operations.

Uploaded by

gopitheprince
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
317 views

Cds Lab Manual

The document provides the list of experiments for the C Programming lab class over 24 weeks. It includes programs to find the sum of digits of a number, Fibonacci sequence, prime numbers, quadratic equation roots, matrix operations, string operations, sorting, searching trees and graphs. Programs are also included to implement stacks, queues, linked lists and file handling operations.

Uploaded by

gopitheprince
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 141

C&DS PROGRAMMING LAB

KSN INSTITUTE OF TECHNOLOGY::KOVUR DEPARTMENT OF CSE EXPERIMENT LIST


CLASS: I B.TECH CSE,ECE,EEE,ME SUBJECT: C PROGRAMMING (R09)

Recommended Systems/Software Requirements: Intel based desktop PC ANSI C Compiler with Supporting Editors

Week l : a) Write 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 sequence are 0 and 1. Subsequent terms are found by adding the preceding terms in the sequence. Write a C program to generate the first n terms of sequence. c) Write a C program to generate all the prime numbers between 1 and n, where a value supplied by the user. Week 2: a) Write a C program to calculate the following Sum: Sum=1-x2/2! +x4/4!-x6/6!+x8/8!-x10/10! b) Write a C program toe find the roots of a quadratic equation. Week 3 : a) Write C programs that use both recursive and non-recursive functions i) To find the factorial of a given integer. ii) To find the GCD (greatest common divisor) of two given integers. iii) To solve Towers of Hanoi problem.

the two the n is

Week 4 : a) The total distance traveled by vehicle int seconds is given by distance = ut+1/2at2 where u and a are the initial velocity (m/sec.) and acceleration (m/sec 2). Write C program to find the distance traveled at regular intervals of time given the values of u and a. The program should provide the flexibility to the user to select his own time intervals and repeat the calculations for different values of u and a. b) Write 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) Week 5 : a) Write a C program to find both the larges and smallest number in a list of integers. b) Write a C program that uses functions to perform the following: i) Addition of Two Matrices ii) Multiplication of Two Matrices Week 6 : a) Write 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) Write a C program to determine if the given string is a palindrome or not Week 7 : a) Write a C program that displays the position or index in the string S where the string T begins, or 1 if S doesnt contain T. b) Write a C program to count the lines, words and characters in a given text. Week 8 : a) Write a C program to generate Pascals triangle. b) Write a C program to construct a pyramid of numbers. Week 9 : Write 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. Week 10 : a) 2s complement of a number is obtained by scanning it from right to left and complementing all the bits after the first appearance of a 1. Thus 2s complement of 11100 is 00100. Write a C program to find the 2s complement of a binary number. b) Write a C program to convert a Roman numeral to its decimal equivalent. Week 11 : Write a C program that uses functions to perform the following operations: i) Reading a complex number ii) Writing a complex number iii) Addition of two complex numbers iv) Multiplication of two complex numbers (Note: represent complex number using a structure.) Week 12 : a) Write a C program which copies one file to another. b) Write a C program to reverse the first n characters in a file. (Note: The file name and n are specified on the command line.) Week 13 : Write a C program that uses functions to perform the following operations on singly linked list.: i) Creation ii) Insertion iii) Deletion iv) Traversal Week 14 : Write 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 Week 15 : Write C programs that implement stack (its operations) using

i) Arrays

ii) Pointers

Week 16 : Write C programs that implement Queue (its operations) using i) Arrays ii) Pointers Week 17 : Write a C program that uses Stack operations to perform the following: i) Converting infix expression into postfix expression ii) Evaluating the postfix expression Week 18 : Write 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. Week 19 : Write C programs that use both recursive and non recursive functions to perform the following searching operations for a Key value in a given list of integers : i) Linear search ii) Binary search Week 20 : Write C programs that implement the following sorting methods to sort a given list of integers in ascending order: i) Bubble sort ii) Quick sort Week 21 : Write C programs that implement the following sorting methods to sort a given list of integers in ascending order: i) Insertion sort ii) Merge sort Week 22 : Write C programs to implement the Lagrange interpolation and Newton- Gregory forward interpolation. Week 23 : Write C programs to implement the linear regression and polynomial regression algorithms. Week 24 : Write C programs to implement Trapezoidal and Simpson methods.

WEEK-1
A) AIM: Write a C program to find the sum of individual digits of a positive integer. Algorithm: 1. Read the number n 2. Initialize sum 0

3. while n > 0 4. 5. 6. d n%10 sum sum+d n n/10

7. print sum.

Flow chart:

Start

Read n

No Is n >0 Yes d = n % 10 Stop Sum = sum + d Print sum

n = n / 10

Program:

#include<stdio.h> #include<conio.h> void main() { int n, sum=0,d; clrscr(); printf(Enter any integer:); scanf(%d, &n); while(n>0) { d=n%10; sum=sum+d; n=n/10; } Printf(sum of individual digits is %d,sum); getch(); }

Result: Enter any integer: 1234 Sum of individual digits is: 10

B) AIM: 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.

Algorithm:
1. Read the number of terms n 2. Initialize a 0, b 1

3. print a and b values 4. for i 3 to n a. increment the i value b. c a+b

c. print c value d. e. ab bc

FLOWCHART:

start

Read n

a=0 b=0

Print The Fibonacci sequence is Print a, b

i=3

No i<= n Yes c=a+b

Print c

Increment i value

a=b b=c

stop 9

Program:
#include<stdio.h> #include<conio.h> void main() { int a=0,b=1,c,n,i; clrscr(); printf(Enter no. of terms:); scanf(%d, &n); printf(The Fibonacci sequence is:); printf(%d%d, a,b); for(i=3;i<=n;i++) { c=a+b; printf(%d,c); a=b; b=c; } getch(); }

Result: Enter no of items: 5 The Fibonacci sequence is


01123

10

C) AIM: Write a C program to generate all the prime numbers between 1 and n
is a value supplied by the user.

Algorithm:
1. Read n value 2. 3. Initialize count 0 for i 2 to n a. for j 1 to i

b. if i mod j is equal to 0 c. then increment count d. if count is equal to 2 e. then print i value.

11

Flow chart: start Print Enter a limit

Read n

count = 0 No

for(i=2; i<=n;i++)

Yes for(j=1;j<=i;j++) Yes if(i %j== 0) Yes Count++ No if(co unt= =2) Yes Print i value No

No

Stop

12

Program:
#incloude<stdio.h> #Include<conio.h> void main() { int i, j, n, count=0; clrscr(); printf(Enter the limit:); scanf(%d, &n); printf(The prime numbers are:); for(i=2;i<=n;i++) { for(j=1;j<=i;j++) { if(i%j==0) count++; } if(count==2) printf(%d\t, i); } getch(); }

Result:
Enter the linit: 4 The prime numbers are: 2357

13

WEEK-2 A) AIM: Write a C program to calculate the following sum:


Sum=1-x^2/2!+x^4/4!-x^6/6!+x^8/8!-x^10/10!

Algorithm:
1. Read the x value 2. 3. Initialize fact 1, sum 1 and n 10 for i 1 to n a. fact fact*i

b. if i mod 2 is equal to 0 c. then if i equal to 2 or i equal to 10 or i equal to 6 d. then sum+= -pow(x,i)/fact e. else sum+=pow(x,i)/fact 4. print sum

14

FLOWCHART:

start

Print Enter the value of x read x n=10, fact =1 Sum=1, i=1 No for(i=1;i<=n;i+ +)

Yes fact * = 1

No if(i%2= =0) Yes i =2 || i = 10 || i=6 Yes Sum += - pow(x,i) fact No

Sum += pow(x,i) fact

Print sum

stop 15

Program:
#include<stdio.h> #include<conio.h> #include<math.h> void main() { int i,n=10,x; long int fact=1; float sum=1; printf(Enter the x value:); scanf(%d, &x); for(i=1;i<=n;i++) { fact=fact*i; if(i%2==0) { if(i==2||i=10||i==6) sum+= -pow(x,i)/fact; else sum+=pow(x,i)/fact; } } Printf(sum is %f, sum); }

Result:
Enter x value: 2 Sum is: 0

16

B) AIM:

Write a C program to find the roots of a quadratic equation.

Algorithm:
1. Read a,b,c values 2. Initialize d b*b-4*a*c

3. if d==0 a. then print roots are real and equal b. r1 -b/2*a,r2 r1

4. else if d>0 a. then print roots are real and distinct b. r1 (-b+sqrt(d))/2*a, r2 (-b-sqrt(d))/2*a

5. else if d<0 a. then print roots are complex b. rp -b/2a, imp sqrt(d)/2*a

c. print r1 and r2.

17

FLOWCHART start

Read a,b,c

d=b*b-4.0*a*c

if(d ==0 ) Yes print roots are real and equal r1=-b/2*a r2=r1

No

if(d >0) Yes print roots are real and unequal r1=(-b+sqrt(d))/2a r2=(-b-sqrt(d))/2a

No

print root1,root2

if(d <0) Yes

print root1,root2

print roots are complex rp=-b/2a imp=sqrt(d)/2a print root1,root 2

stop 18

Program:
#include<stdio.h> #include<conio.h> #include<math.h> void main() { float a,b,c,d,r1,r2,imp,rp; clrscr(); printf(Enter a,b,c:); scanf(%f%f%f,&a,&b,&c); d=b*b-4.0*a*c; if(d= =0) { Printf(roots are real and equal); r1=-b/2*a; r2=r1; printf(root1=%f,r1); printf(root2=%f,r2); } else if(d>0) { Printf(roots are real and unequal); r1=(-b+sqrt(d))/2*a; r2=(-b-sqrt(d))/2*a; printf(root1=%f,r1); printf(root2=%f,r2); } else if(d<0) { d=-d; printf(roots are complex); rp=-b/2*a; imp=sqrt(d)/2*a; printf(root1=%f+i%f,rp,imp); printf(root2=%f-i%f,rp,imp); } getch(); }

Result:
Enter a,b & c: 1 5 3 Roots are real & unequal

19

WEEK-3
1. AIM: Write a C program to find the factorial of a given integer by using
recursive function.

Algorithm:
1. Define the recursive function 2. Read the number n 3. if n is equal to 0 4. then print factorial of o is 1 5. else call the recursive function 6. print the factorial value.

Flow chart:

start Read n No If n = Yes 0 Print 0 factorial is 1 =

Call factorial(n)

return n>=1 ? n * factorial(n-1) : 1

stop

20

Program:
#include<stdio.h> #include<conio.h> unsigned int factorial(int n); void main() { int n,i; long int 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 } getch();

%d\n",n,factorial(n));

/* Recursive Function*/ unsigned int factorial(int n) { return n>=1 ? n * factorial(n-1) : 1; }

Result: Enter number: 5 Factorial of 5 using recursive function is: 120

21

ii) AIM:

Write a C program to find the GCD(greatest common divisor) of two given integers by using recursive function.

Algorithm:
1. Define the recursive function 2. Read the a,b values 3. Call the recursive function a. if n>m b. then return the function with parameters m,n c. if n==0 d. then return m e. else return the function with parameters n,m%n.

22

Flow chart:
start Read a, b Call recursive function No If n>m Yes Return GCD recursive(n,m) No If n==0 Yes return GCDRecursive(n, m%n)

Return m

stop

23

Program:
#include<stdio.h> #include<conio.h> #include<math.h> unsigned int GCDRecursive(unsigned m, unsigned n); 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)); } getch();

/* 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); }

Result:
Enter the two numbers whose GCD is to be found 18 6 GCD of 18 and 6 Using Recursive Function is 6

24

iii) AIM:

Write a C program to solve Towers of Hanoi problem by using recursive function.

Algorithm:
1. Define the recursive function 2. Read the number of disks to transfer 3. if no<1 4. then print nothing to move 5. else print recursive 6. Call the function with parameters a. if n is equal to 1 b. then print move the top disk c. call the function with parameters num-1,ndl1,ndl3,ndl2 d. print move top disk e. call the function with parameters num-1,ndl3,ndl2,ndl1.

25

Flow chart:
start Read no No If no<1 Yes Print Nothing to move Print recursive hanoiRecursion(no,'A' ,'B','C' No Num==1 Yes hanoiRecursion(num1,ndl1,ndl3,ndl2) Print top disk from needle

Print top disk from needle

stop

26

Program:
/* Write C programs that use both recursive and non-recursive functions To solve Towers of Hanoi problem.*/ #include<conio.h> #include<stdio.h> /* 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("\nRecursive"); hanoiRecursion(no,'A','B','C'); getch(); }

Result: Enter no of disks to be tgrasmitted : 1


Move top disk from needle A to needle B

27

WEEK-4 A) Aim:The
total distance travelled by vehicle in t seconds is given by distance = ut+1/2at 2 where u and a are the initial velocity (m/sec.) and acceleration (m/sec2). Write C program to find the distance travelled at regular intervals of time given the values of u and a. The program should provide the flexibility to the user to select his own time intervals and repeat the calculations for different values of u and a.

Code:

#include<stdio.h> #include<conio.h> #include<math.h> main() { int u,t1,t2,a; float s=0; printf("enter initial velocity"); scanf("%d",&u); printf("enter acceleration"); scanf("%d",&a); printf("enter time interval t1 & t2"); scanf("%d%d",&t1,&t2); s=(u*(t1-t2)+(float)(0.5*a*pow((t1-t2),2))); printf("the distance travelled is:%f",s); getch(); }

Output:
enter u: 2 enter a: 4 enter t1 & t2: 42 distance traveeled is:12.00

B) Write

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)

Code: #include<stdio.h> #include<conio.h> main() { char ch; int a,b; float r=0; clrscr(); printf("enter a & b"); scanf("%d%d",&a,&b);
28

flushall(); printf("enter + for add,- for substraction,* for multiplication & / for div"); scanf("%c",&ch); switch(ch) { case '+': r=a+b; break; case '-': r=a-b; break; case '*': r=a*b; break; case '/': r=(float)a/b; break; default: printf("enter valid option"); } printf("result is:%f",r); getch(); } Result: enter a & b: 6 2 enter + for add,- for substraction,* for multiplication & / for div + result is:8.00

WEEK-5

29

A) AIM: integers

A c- program to find both the largest and smallest number in list of

Algorithm:1. Start 2. Read n 3. for i 0 to n 4. do read a[i]

5. small a[0] 6. for i 0 to n 7. 8. 9. do if small > a[i] then small a[i] write small

10. large 0 11. for i 0 to n 12. 13. 14. do if large <a[i] then large a[i] write large

15. Stop

30

Flow Chart:Start

Read n F

for i 0 to n step by 1

Read elements in array

Small a[0]

for i 0 to n step by 1 T Small > a[i] T Small a[i] F

Write small

large 0

1 1 F

for i 0 to n step by 1 31

large < a[i] T

large a[i]

Write large

Stop

PROGRAM:/* Declaring C - Libraries */ #include <stdio.h> #include <conio.h> /* Main function is starting */ main() { /* Variable Declaration part */ int i,n,small=0,large=0; int a[30]; /* Clearing previous output on output screen */ clrscr(); /* Giving Upper bound + 1 of the array */ printf("\n Enter size of the array:"); scanf("%d",&n); /* Array Initialization using scanf function and for loop */ printf("\n Enter values in array elements:"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } /* logic to find smallest element in array */ small = a[0]; for(i=0;i<n;i++) { if(small > a[i]) small = a[i];

32

} printf("\n The smallest element in given array is %d",small); /* logic to find largest element in array */ large=0; for(i=0;i<n;i++) { if(large < a[i]) large = a[i]; } printf("\n The largest element in given array is %d",large); printf("\n :End of the Main Program:"); getch();

RESULT:
Input : Enter size of the array: 9 Enter values in array elements: 96 46 86 6 36 76 26 16 56 Output: The smallest element in given array is 6 The largest element in given array is 96 :End of the Main Program:

33

B). AIM:
two mattrices.

Write a c- program that uses functions to perform matrice addition on

Algorithm (pseudo code):1. Start 2. read r1,r2,c1,c2 3. if r1 r2 and c1 c2 4. then matrix addition is not possible 5. else 6. do init_mat(a,r1,c1) 7. print_mat(a,r1,c1) 8. init_mat(b,r2,c2) 9. print_mat(b,r2,2) 10. add_mat(a,b,c,r1,c1) 11. print_mat(c,r1,c1) 12. Stop init_mat(a4,r4,c4) 1. for i 0 to r4 2. do for j 0 to c4 3. read a4[i][j] print_mat(a4,r4,c4) 1. for i 0 to r4 2. do for j 0 to c4 3. print a[i][j] 4. print next_line add_mat(a4,b4,c24.r4,c4) 1. for i 0 to r4 2. do for j to c4 3. c[i][j] a[i][j] + b[i][j]

34

Flowchart:Start

Read r1,r2,c1,c2

r1r2 and c1 c2 True

False

Matrix addition is not possible A init_mat(a,r1,c1)

print_mat(a,r1,c1)

init_mat(b,r2,c2)

print_mat(b,r2,c2)

35

add_mat(a,b,c,r1,c1)

print_mat(c,r1,c1)

Stop

Start of init_mat (a4,r4,c4) return F for i 0 to r4 step by 1 F

for i 0 to r4 step by 1 T read a[i][j] Start of print_mat (a4,r4,c4)

36

F return for i 0 to r4 step by 1 False

for j 0 to c4 step by 1

print a[i][j]

Start of add_mat (a4,b4,c4,r4,c24) F return for i 0 to r4 step by 1 False

for j0 to c24 step by 1

c[i][j] = a[i][j] + b[i][j]

37

PROGRAM:/* Declaring C-Libraries */ #include <conio.h> #include <stdio.h> /* declaring function prototypes */ void init_mat (int [][10], int, int); void print_mat (int [][10], int, int); void add_mat (int [][10], int [][10], int [][10], int, int); /* Main Function starting */ main() { int r1,r2,c1,c2; int a[10][10],b[10][10],c[10][10]; clrscr(); /* Giving order of the Matrix - A */ printf("\n Enter the order of Matrix A:"); scanf("%d%d",&r1,&c1); /* Giving order of the Matrix - B */ printf("\n Enter the order of Matrix B:"); scanf("%d%d",&r2,&c2); if(r1!=r2 || c1!=c2) { printf("\n Matrix Addition is not possible "); getch(); exit(0); } else { /* Matrix - A */ printf("\n Enter the elements of Matrix A:"); init_mat(a,r1,c1); printf("\n The elements of Matrix - A"); print_mat(a,r1,c1); /* Matrix - B */ printf("\n Enter the elements of Matrix - B"); init_mat(b,r2,c2); printf("\n The elements of Matrix - B"); print_mat(b,r2,c2); /* Function call to Matrix addition logic */ add_mat(a,b,c,r1,c1); /* Matrix after addition */ printf("\n The elements of Matrix - C after addition of A & B"); print_mat(c,r1,c1); } getch();

/* Function for two dimensional array initialization */

38

void init_mat(int mat[][10],int r,int c) { int i,j; for(i=0;i<r;i++) { for(j=0;j<c;j++) { scanf("%d",&mat[i][j]); } } } /* Function for printing element in Matrix form */ void print_mat(int mat[][10],int r, int c) { int i,j; printf("\n"); for(i=0;i<r;i++) { for(j=0;j<c;j++) { printf(" %d ",mat[i][j]); } printf("\n"); } } /* function for matrix addition logic */ void add_mat(int a[][10],int b[][10],int c[][10],int r1,int c1) { int i,j; for(i=0;i<r1;i++) { for(j=0;j<c1;j++) { c[i][j] = a[i][j]+b[i][j]; } } }

RESULT: Case - 1 Input :


Enter the order of Matrix A: 2 2 Enter the order of Matrix B: 2 2 Enter the elements of Matrix A: 1 2 3 4 The elements of Matrix A: 1 2 3 4 Enter the elements of Matrix B: 1 2 3 4 The elements of Matrix B: 1 2 2 4

Output:

The elements of Matrix - C after addition of A & B: 2 4 4 8

39

Case 2 Input :
Enter the order of Matrix A: 2 3 Enter the order of Matrix B: 2 2

Output :
Matrix Addition is not possible

40

B) AIM:

WRITE A C- PROGRAM THAT USES FUNCTIONS TO PERFORM MATRICE MULTIPLICATION ON TWO MATRICES.

Algorithm (pseudo code):13. Start 14. read r1,r2,c1,c2 15. if r1 c2 16. then matrix multiplication is not possible 17. else 18. do init_mat(a,r1,c1) 19. print_mat(a,r1,c1) 20. init_mat(b,r2,c2) 21. print_mat(b,r2,2) 22. mul_mat(a,b,c,r1,c1,c2) 23. print_mat(c,r1,c1) 24. Stop init_mat(a4,r4,c4) 4. for i 0 to r4 5. do for j 0 to c4 6. read a4[i][j] print_mat(a4,r4,c4) 5. for i 0 to r4 6. do for j 0 to c4 7. print a[i][j] 8. print next_line mul_mat(a4,b4,c24.r4,c4,c5) 4. for i 0 to r4 5. do for j to c5 6. do c[i][j] 0 7. for k 0 to c4 8. c[i][j] c[i][j] + a[i][k]*b[k][j]

41

Flow Chart:Start

Read r1,r2,c1,c2

r1r2 and c1 c2 Yes

False

Matrix addition is not possible A init_mat(a,r1,c1)

print_mat(a,r1,c1)

init_mat(b,r2,c2)

print_mat(b,r2,c2)

mul_mat(a,b,c,r1,c1,c2) return F 42 print_mat(c,r1,c1) Start read a[i][j] for j 0 Init_mat to iof r4 step A c4 Stop (a4,r4,c4) by 1

Start of print_mat (a4,r4,c4)

F return

for i 0 to r4 step by 1 F for j 0 to c4 step by 1

Print a[i][j]

Start of mul_mat (a4,b4,c,r4,c4,c5) return F for i 0 to r4 step by 1 F

for j 0 to c5 step by 1

c[i][j] 0

F for k 0 to c4 step by 1 c[i][j] c[i][j] + a[i] [k] + b[k][j]

43

PROGRAM :
/* Declaring C-Libraries */ #include <stdio.h> #include <conio.h> /* Declaring function prototypes */ void init_mat (int [][10], int, int); void print_mat (int [][10], int, int); void mul_mat (int [][10], int [][10], int [][10], int, int, int); /* Main Function starting */ main() { int r1,r2,c1,c2; int a[10][10],b[10][10],c[10][10]; clrscr(); /* Giving order of the Matrix - A */ printf("\n Enter the order of Matrix A:"); scanf("%d%d",&r1,&c1); /* Giving order of the Matrix - B */ printf("\n Enter the order of Matrix B:"); scanf("%d%d",&r2,&c2); if(r1!=c2) { printf("\n :: Matrix Multiplication is not possible :: "); getch(); exit(0); } else { /* Matrix - A */ printf("\n Enter the elements of Matrix A:"); init_mat(a,r1,c1); printf("\n The elements of Matrix A:"); print_mat(a,r1,c1); /* Matrix - B */ printf("\n Enter the elements of Matrix B:"); init_mat(b,r2,c2); printf("\n The elements of Matrix B:"); print_mat(b,r2,c2); /* Logic for matrix multiplication */ mul_mat(a,b,c,r1,c1,c2); /* Matrix after Multiplication */ printf("\n The elements of Matrix - C after multiplication of A & B:"); print_mat(c,r1,c2); } getch();

/* Function for two dimensional array initialization */

44

void init_mat(int mat[][10],int r,int c) { int i,j; for(i=0;i<r;i++) { for(j=0;j<c;j++) { scanf("%d",&mat[i][j]); } } } /* Function for printing elements in Matrix form */ void print_mat(int mat[][10],int r, int c) { int i,j; printf("\n"); for(i=0;i<r;i++) { for(j=0;j<c;j++) { printf(" %d ",mat[i][j]); } printf("\n"); } } /* Function for matrix multiplication logic */ void mul_mat(int a[][10],int b[][10],int c[][10],int r1,int c1,int c2) { int i,j,k; for(i=0;i<r1;i++) { for(j=0;j<c2;j++) { /* Initializing Matrix - C with 0's */ c[i][j] = 0; /* logic for Multiplication */ for(k=0;k<c1;k++) { c[i][j] += a[i][k] * b[k][j]; } } } }

RESULT: Case - 1 Input :


Enter the order of Matrix A: 2 2 Enter the order of Matrix B: 2 2 Enter the elements of Matrix A: 1 2 3 4 The elements of Matrix A: 1 2 3 4

45

Output:

Enter the elements of Matrix B: 1 2 3 4 The elements of Matrix B: 3 2 4 4

The elements of Matrix - C after multiplication of A & B: 7 10 15 22

Case 2 Input : Output :


Enter the order of Matrix A: 2 3 Enter the order of Matrix B: 1 2

Matrix Multiplication is not possible

46

WEEK-6 A). AIM: WRITE A C- PROGRAM THAT USES FUNCTIONS TO INSERT A SUBSTRING IN TO A GIVEN MAIN STRING FROM A GIVEN POSITION.

Algorithm:1. start 2. read str (string) 3. read n(position), substr (sub string) 4. ins_substr(str,substr,p,n) 5. stop ins_substr(str,substr,p,n) 1. 2. 3. 4. 5. 6. 7. 8. k Length[str] m p-1 for i m and j n to k substr[j] str[i] substr[j] NULL for j 0 and i m to Length[substr] str[i] substr[j] str[i] NULL

9. print str

47

Flowchart:-

Start Read str, sub_str, position, n

Ins_substr(str,sub -str,n,p)

Stop

Start of ins_substr(str,sub_str,p,n)

For i q-1, j n to Length[str[i]], step by 1

T substr[j] str[i] 1 substr[j] NULL

48

For j 0, i p-1 to Length[substr[j]], step by 1

T substr[j] str[i]

substr[j] NULL

Print str

return

49

PROGRAM:/* Declaring C-Libraries */ #include <stdio.h> #include <conio.h> /* Declaring function prototypes */ void ins_substr(char [], char [], int, int); /* main function is starting */ main() { int p,n,i,j; char str[50],substr[50]; clrscr(); /* Initializing character array */ puts("\n Enter the String:"); gets(str); fflush(stdin); /* Entering the position where you want to insert a substring */ printf("Enter the specific position "); scanf("%d",&p); printf("\n Enter the Number of Characters:"); scanf("%d",&n); fflush(stdin); puts("\n Enter Sub-String:"); gets(substr); /* function call to inserting string in main string */ ins_substr(str,substr,p,n); printf("\n :: End of the main program ::"); getch(); } /* logic to insert sub string in main string */ void ins_substr(char str[], char substr[], int p, int n) { int q,i,j; q=p-1; for(i=q,j=n;str[i]!='\0';i++,j++) substr[j]=str[i]; substr[j]='\0'; for(j=0,i=q;substr[j]!='\0';j++,i++) str[i]=substr[j]; str[i]='\0'; printf("\n The string after inserting substring :"); puts(str); }

RESULT: Case - 1 Input :


50

Output :

Enter Enter Enter Enter

the String: KS INSTITUTE OF TECHNOLOGY the specific position : 3 the Number of Characters: 1 Sub-String: N

The string after inserting substring : KSN INSTITUTE OF TECHNOLOGY :: End of the main program ::

Case - 2 Input :
Enter Enter Enter Enter the String: KSN INSTITUTE OF TECH the specific position : 21 the Number of Characters: 6 Sub-String: NOLOGY

Output :

The string after inserting substring : KSN INSTITUTE OF TECHNOLOGY :: End of the main program ::

Case - 3 Input :
Enter Enter Enter Enter the String: KSN INSTITUTE TECHNOLOGY the specific position : 14 the Number of Characters: 2 Sub-String: 0F

Output :

The string after inserting substring : KSN INSTITUTE OF TECHNOLOGY :: End of the main program ::

51

ii) AIM: -

WRITE A C- PROGRAM THAT USES FUNCTIONS TO DELETE N CHARACTRES FROM A GIVEN POSITION IN A GIVEN STRING.

Algorithm (pseudo code):1. 2. 3. 4. 5. 6. start read str(main string) read p (position) read n (number of characters to delete) del_str(str,p,n) stop

del_str(str,p,n) 1. for i 0 , j 0 to Length[str] 2. do if i = p-1 3. ii+n 4. str[j] str[i] 5. str[j] NULL 6. print str

52

Flow Chart:Start

Read str (string), p (position), n del_str(str,p,n)

Stop

Starting of del_str (str,p,n)

F X

for i 0, j 0 to Length[str] by step 1 T T i = p-1 F Z

53

i i+n

s[j] s[i]

S[j] NULL

Print str

return

54

PROGRAM://* Declaring C - Libraries */ #include <stdio.h> #include <conio.h> /* declaring prototype of function */ void del_str(char [],int, int); /* Main function starting */ main() { int n,p; char str[30]; clrscr(); printf("\n Enter the String::"); gets(str); fflush(stdin); printf("\n Enter the position from where the characters are to be deleted:"); scanf("%d",&p); printf("\n Enter Number of characters to be deleted:"); scanf("%d",&n); /* function call to deletion of n-characters */ del_str(str,p,n); printf("::End of the Main program::"); getch(); } /* function call to Logic of delete n-characters from string */ void del_str(char str[],int p, int n) { int i,j; for(i=0,j=0;str[i]!='\0';i++,j++) { if(i==(p-1)) { i=i+n; } str[j]=str[i]; } str[j]='\0'; /* the string after deletion */ puts(" The string after deletion of characters::"); puts(str); }

RESULT: Case - 1 Input :


Enter the String: KSN INSTITUTE OF TECHNOLOGY Enter the position from where the characters are to be deleted: 5 Enter Number of characters to be deleted: 9

Output :
The string after deletion of characters:: KSN OF TECHNOLOGY

55

:: End of the main program ::

Case - 2 Input :
Enter the String: KSN INSTITUTE OF TECHNOLOGY Enter the position from where the characters are to be deleted: 1 Enter Number of characters to be deleted: 3

Output :
The string after deletion of characters:: INSTITUTE OF TECHNOLOGY :: End of the main program ::

Case - 3 Input : Output :


Enter the String: KSN INSTITUTE OF TECHNOLOGY Enter the position from where the characters are to be deleted: 27 Enter Number of characters to be deleted: 1 The string after deletion of characters:: KSN INSTITUTE OF TECHNOLOG :: End of the main program ::

56

B) AIM: -

WRITE A C- PROGRAM TO DETERMINE IF THE GIVEN STRING IS A PALINDROME OR NOT

Algorithm:1. Start 2. read str (string) 3. 4. 5. 6. 7. len Length[str] for i 0 (increment step), j len-1 (decrement step) to Length[str] do str[i] str[j] print not palindrome stop

8. print palindrome 9. stop

57

Flowchart:Start

Read str

Len Length[str]

For i 0, j len-1 to length[str[i]], i step by 1, j step by -1

str[i] str[j] T Print not palindrome

Print palindrome stop

58

PROGRAM:/* Declaring C-library */ #include <stdio.h> #include <conio.h> /* Main function definition */ main() { int i,n,j,len=0; char str[30]; clrscr(); printf("\n Enter String:"); gets(str); /* logic to checking string for palindrome */ for(i=0;str[i]!='\0';i++) len++; printf("\n The length of the string is %d",len); for(i=0,j=len-1;str[i]!='\0';i++,j--) { if(str[i]!=str[j]) { printf("\n :The given string is not a palindrome:"); getch(); exit(0); } } printf("\n :the given string is palindrome:"); getch(); }

RESULT: Case - 1 Input :


Enter the String: MALAYALAM The length of the string is 9

Output :
:the given string is palindrome:

Case - 2 Input :
Enter the String: MADAM The length of the string is 5

Output :
:the given string is palindrome:

Case - 3 Input :
Enter the String: KSN The length of the string is 3 The given string is not a palindrome:

59

WEEK-7 A) AIM: WRITE A C- PROGRAM THAT DISPLAYS THE POSITIONS OR INDEX OF IN THE STRING S WHERE THE STRING T BEGINS, OR -1 IF STRING S DOESNOT CONTAIN STRING T.

Algorithm:1. Start 2. read s, t 3. while Length[str] 4. 5. 6. 7. 8. 9. j 0, n i do if s[i] == t[j] and s[i+1] == t[j+1] then break if i = Length[s] then print -1 goto end

10. while Length[t[j]] 11. 12. 13. 14. 15. 16. 17. print n+1 18. end: 19. stop else print -1 goto end do if s[i] == t[j] then i i+1 j j+1

60

Flowchart:start

Read s,t (strings) i0 j0

F nex t

S[i] NULL

Con T

S[i] = t[j] and s[i+1] = t[j+1]

T next

F Inr

Compare i with Length[s]

61

Print -1

Stop i i +1 Inr next

Con

j0 in wh i t[j] NULL No yes 2 B

62

End

Print n+1

stop

no s[i] = t[j] End yes i i +1 jj+1

whi

Print -1

stop

63

PROGRAM:/* declaring C-Libraries */ #include <stdio.h> #include <conio.h> #include <string.h> /* main function is starting */ main() { int i,j,n; char s[40],t[40]; clrscr(); printf("\n Enter the string:"); gets(s); fflush(stdin); printf("\n Enter the sub string:"); gets(t); /* logic to search sub string */ i=0; j=0; while( s[i] != '\0') { if((s[i] == t[j]) && (s[i+1] == t[j+1])) break; if(i==strlen(s)) { printf("-1"); getch(); exit(0); } i++; } j=0; n=i; while(t[j] != '\0') { if(s[i] == t[j]) { i++; j++; } else { printf("-1"); getch(); exit(0); } } printf("\n The string is found at %d",n+1); getch(); }

64

RESULT: Case - 1 Input : Output :


Enter the String: BALAJIRAIDU Enter substring : RAI

The String is found at 7

Case - 2 Input :
Enter the String: BALAJIRAIDU Enter substring : BAL

Output :
The String is found at 1

Case - 3 Input : Output :


Enter the String: BALAJIRAIDU Enter substring : J

The String is found at 5

65

B) AIM: A GIVEN TEXT

WRITE A C- PROGRAM TO COUNT THE LINES, WORDS, CHARACTERS IN

Algorithm:1. start 2. read text 3. while text[i] != EOF 4. do i i+1

5. print i 6. 7. 8. 9. 10. 11. 12. 13. 14. print ch 15. print w+1 16. print l 17. print sp for i 0 to Length[text] do ch++ if text[i] = 32 and text[i+1] then w++ sp++ if text[i] = \n then l++ w++

66

Flow Chart:-

start Read text

Test[i] != EOF

Text [i] getch() ii+1

Text [i] NULL

pr i

For i 0 to Length [text] step by 1

fo

67

ch ch + 1

no Text[i] = 32 and text [i+1] = Space yes ww+1 sp sp +1 n e

n e yes ll+1 ww+1 Text[i] = new line no pr i

fo

68

Print ch Print w+1 Print l Print sp

stop

PROGRAM:/* Declaring C - Libraries */ #include <conio.h> #include <stdio.h> /* Main function is starting */ main() { char text[200]; int i,l,ch,w,sp; clrscr(); /* logic to count number of characters */ i=0; printf("\n Enter lines of text and press ^Z"); while((text[i]=getchar())!=EOF) { i++; } printf("\n The number of characters is %d",i); /* logic to count the lines, words and spaces in text */ text[i]='\0'; l=0; ch=w=sp=0; for(i=0;text[i]!='\0';i++) { ch++; if(text[i]==32 && text[i+1] != ' ') { w++; sp++; } if(text[i] == '\n')

69

{ l++; w++; } } printf("\n printf("\n printf("\n printf("\n getch(); } Total size of the text : %d",ch); Number of Words : %d",w+1); Number of Lines : %d",l); Number of Spaces : %d",sp);

Result:
n Enter lines of text and press ^Z BALAJI RAIDU is a HOD of OUR COLLEGE n Total size of the text: 36 n Number of Words:8 Number of Lines:1 Number of Spaces:7

70

WEEK 8 a) Aim:
Write an algorithm, Pascals triangle. flowchart and program to generate

Algorithm:
Step 1: Start Step 2: Read the height of the pascal triangle Step 3: for i := 0 to n-1 do Step 3.1: for k:= 1 to n-i do Step 3.1.1: Print blankspace Step 3.1.2: k := k+1 Step 3.2: for j:= 0 to i do Step 3.2.1: if ( j==0) or (i==j) then Step 3.2.1.1: a[i,j] := 1 Step 3.2.2: else Step 3.2.2.1: a[i,j] = a[i-1,j-1] + a[i-1,j] Step 3.2.3: End if Step 3.2.4: print a[i,j] Step 3.2.5: j := j+1 Step 3.3: i := i+1 Step 4: Stop

Flowchart:
71

START

Read height n of pascal triangle

STOP

For i=0 to n-1 by step 1

For k=1 to n-i by step 1 Print

For j=0 to i by step 1

True

j==0 Or i==j

False

a[i][j]=a[i-1][j-1]+a[i-1][j]

a[i][j]=1

Print a[i][j]

Print \n

Program:
72

#include <stdio.h> #include <conio.h> main() { int a[10][10],i,j,k,n; clrscr(); printf("Enter the height of the pascal traingle"); scanf("%d",&n); for(i=0;i<n;i++) { for(k=1;k<=n-i;k++) printf(" "); for(j=0;j<=i;j++) { if(j==0 || i==j) a[i][j]=1; else a[i][j]=a[i-1][j-1]+a[i-1][j]; printf("%d ",a[i][j]); } printf("\n");

} }

Result: Enter height of pascal triangle: 2 1 2 2

b) Aim:

Write an algorithm, pyramid of numbers.

flowchart

and

program

to

construct

73

Algorithm:
Step 1: Start Step 2: Read height n of the pyramid Step 3: for j := 0 to n do Step 3.1: for k:= 1 to 2*(n-j) do Step 3.1.1: Print blankspace Step 3.1.2: k := k+1 Step 3.2: for i:= -j to j do Step 3.2.1: print abs(i) Step 3.2.2: i := i+1 Step 3.3: j := j+1 Step 4: Stop

Flowchart:
74

START

Read height n of pyramid

STOP

For j=0 to n by step 1

For k=1 to 2*(n-j) by step 1 Print

For i=-j to j by step 1

Print abs(i)

Print \n

75

Program:
#include <stdio.h> #include <conio.h> main() {

int i,j,k,n; clrscr(); printf("Enter the height of the pyramid"); scanf("%d",&n); for(j=0;j<=n;j++) { for(k=1;k<=2*(n-j);k++) printf(" "); for(i=-j;i<=j;i++) printf("%d ",abs(i)); printf("\n"); }

Result:
Enter the height of the pyramid: 2 1 2 2

76

WEEK 9 A) Aim:
Write an algorithm, flowchart and a C program to read in two numbers, x and n, and then compute the sum of this geometric progression:

1+x+x2+x3+x4+.+xn 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.

Algorithm :
Step 1: Start Step 2: rept: Step 3: Read values for x and n Step 4: if n > 0 then Step 4.1: for i := 0 to n do Step 4.1.1: sum := sum +pow(x,i) Step 4.1.2: i := i+1 Step 4.2 : print x, n and sum Step 5: else Step 5.1: print not a valid n value Step 5.2: goto rept Step 6: End if Step 7: Stop

Flowchart:
77

START

Read values of x and n


False

IS n>0 True

Print not a valid n value

For i=0 to n by step 1 sum += pow(x,i)

Print x, n, sum

STOP

Program:
78

#include <stdio.h> #include <conio.h> #include <math.h> main() { int x,n,sum=0,i; start: clrscr(); printf("enter the values for x and n"); scanf("%d%d",&x,&n); if(n>0) { for(i=0;i<=n;i++) { sum = sum+pow(x,i); } printf( x is - %d, n is -%d \n,x,n); printf("The sum of the geometric progression is:%d",sum); } else { printf("not a valid n:%d value",n); getch(); goto start; } }

Result:
enter the values for x and n 1 1 The sum of the geometric progression: 2

79

WEEK10 a) Aim:
Write an algorithm, flowchart and a C program for finding the 2s complement of a binary number

Algorithm:
Step 1: Start Step 2: Read the binary number Step 3: copying the binary number to strdp Step 4: len := strlen(str) Step 5: for i := 0 to len-1 do Step 5.1: if str[i] == 1 then Step 5.1.1: str[i] == 0 Step 5.2: else Step 5.2.1: str[i] == 1 Step 5.3: i := i+1 Step 6: mask := 1 Step 7: for i := len-1 to 0 do Step 7.1: if mask == 1 then Step 7.1.1: if str[i] == 1 then Step 7.1.1.1: str[i] := 0 Step 7.1.1.2: mask := 1 Step 7.1.2: else Step 7.1.2.1: str[i] := 1 Step 7.1.2.2: mask := 0 Step 7.1.3: End if Step 7.2: End if Step 8: print the 2s complement Step 9: Stop

80

Flowchart:
START

Read a binary number

len=strlen(str)

For i=0 to len by step 1

True

IS Str[i]==1

False

Str[i]=0

Str[i]=1

Mask=1

81

For i=len-1 to 0 by step -1

IS mask== 1
True

True

IS str[i]==1

False

Str[i]=0 mask=1

Str[i]=1 mask=0

Print str (2s complement)

STOP

82

Program:
#include <stdio.h> #include <conio.h> #include <string.h> main() { char str[32],strdp[32]; int mask,i; clrscr(); printf("Enter a binary number:"); scanf("%s",str); strcpy(strdp,str); /* creating duplicate copy */ for(i=0;i<strlen(str);i++) /* computing 1's complement */ { if(str[i]=='1') str[i]='0'; else str[i]='1'; } printf("1\'s complement of %s is %s\n",strdp,str); mask=1; for(i=strlen(str)-1;i>=0;i--) /* computing 2's complement */ { if(mask==1) { if(str[i]=='1') { str[i]='0'; mask=1; } else { str[i]='1'; mask=0; } } } printf("2\'s complement of %s is %s",strdp,str); }

Result:
Enter a binary number: 1111 1s complement is: 0000 2s complement is: 0001

83

B) Aim:

Write an algorithm, flowchart and a C program to convert a Roman numeral to its decimal equivalent.

Algorithm:
Step Step Step Step 1: 2: 3: 4: Start Read the roman numeral len := strlen(roman) for i := 0 to len-1 do Step 4.1: switch(roman[i]) Step 4.1.1: case m: Step 4.1.2: case M: Step 4.1.2.1: d[i]:=1000 Step 4.1.3: case d: Step 4.1.4: case D: Step 4.1.4.1: d[i]:=500 Step 4.1.5: case c: Step 4.1.6: case C: Step 4.1.6.1: d[i]:=100 Step 4.1.7: case l: Step 4.1.8: case L: Step 4.1.8.1: d[i]:=50 Step 4.1.9: case x: Step 4.1.10: case X: Step 4.1.10.1: d[i]:=10 Step 4.1.11: case v: Step 4.1.12: case V: Step 4.1.12.1: d[i]:=5 Step 4.1.13: case i: Step 4.1.14: case I: Step 4.1.14.1: d[i]:=1

Step 5: for i :=0 to len-1 do Step 5.1: if (i==len-1) or (d[i]>=d[i+1]) then Step 5.1.1: deci += d[i] Step 5.2: else Step 5.2.1: deci -= d[i] Step 6: print the decimal equivalent of roman numeral Step 7: Stop

84

Flowchart: START

Read roman numeral

len=strlen(roman)

For i=0 to len1 by step 1 2 roman[i ]


M or m D or d C or c L or l

d[i]=1000 d[i]=500 d[i]=100 d[i]=50

X or x V or v I or i

d[i]=10 d[i]=5 d[i]=1

85

For i=0 to len1 by step 1

True

i== len-1 or d[i]>=d[i+1 ]]

False

deci += d[i]

deci -= d[i]

print decimal number

STOP

86

Program:
#include <stdio.h> #include <conio.h> main() { char roman[30]; int deci=0; int len,i,d[30]; clrscr(); printf("The following table shows the Roman equivalent to decimal\n"); printf("Decimal:.........Roman\n"); printf("%5d............%3c\n",1,'I'); printf("%5d............%3c\n",5,'V'); printf("%5d............%3c\n",10,'X'); printf("%5d............%3c\n",50,'L'); printf("%5d............%3c\n",100,'C'); printf("%5d............%3c\n",500,'D'); printf("%5d............%3c\n",1000,'M'); printf("Enter a Roman numeral:"); scanf("%s",roman); len=strlen(roman); for(i=0;i<len;i++) { switch(roman[i]) { case case case case case case case case case case case case case case 'm': 'M': d[i]=1000; break; 'd': 'D': d[i]= 500; break; 'c': 'C': d[i]= 100; break; 'l': 'L': d[i]= 50; break; 'x': 'X': d[i]= 10; break;; 'v': 'V': d[i]= 5; break; 'i': 'I': d[i]= 1;

} } for(i=0;i<len;i++) { if(i==len-1 || d[i]>=d[i+1]) deci += d[i]; else deci -= d[i]; } printf("The Decimal equivalent of Roman numeral %s is d", roman, deci); }

Result:
Enter a Roman numeral: L The Decimal equivalent of Roman numeral L is :50

87

WEEK 11 Aim:
Write an algorithm, flowchart and a functions to perform the following operations: i) ii) iii) iv) Reading a complex number Writing a complex number Addition of two complex numbers Multiplication of two complex numbers C program that uses

Algorithm:
Step Step Step Step Step Start Read the first complex number by calling readcomplex() Read the second complex number by calling readcomplex() read the operator op switch(op) Step 5.1: case +: c3 := add(c1,c2) Step 5.2: case - : c3 := sub(c1,c2) Step 5.3: case *: c3 := mul(c1,c2) Step 5.4: case e: program end Step 6: print c3 by calling printcomplex(c1,c2,c3,op) Step 7: Stop add (c1,c2) step 1: c3.x := c1.x + c2.x step 2: c3.y := c1.y + c2.y step 3: return c3 sub(c1,c2) step 1: c3.x := c1.x - c2.x step 2: c3.y := c1.y - c2.y step 3: return c3 mul(c1,c2) step 1: c3.x :=(c1.x*c2.x+c1.y+c2.y)/(c2.x*c2.x+c2.y*c2.y) step 2: c3.y :=(c2.x*c1.y-c1.x*c2.y)/(c2.x*c2.x+c2.y*c2.y) step 3: return c3 1: 2: 3: 4: 5:

88

Flowchart: START

C1=readcomplex()

C2=readcomplex()

Read operator op

OP

OP=+

OP=-

OP=*

C3=add(c1,c2 )

C3=sub(c1,c2 ) printcomplex(c1,c2,c3,op)

C3=mul(c1,c2 )

OP=e

STOP

89

add(complex c1,complex c2 ) c3.x=c1.x+c2.x c3.y=c1.y+c2.y return(c3) mul(complex c1,complex c2)

c3.x=(c1.x*c2.x+c1.y+c2.y)/(c2.x*c2.x+c2.y*c2.y) c3.y=(c2.x*c1.y-c1.x*c2.y)/(c2.x*c2.x+c2.y*c2.y) return(c3) sub(complex c1,complex c2)

c3.x=c1.x-c2.x c3.y=c1.y-c2.y return(c3) readcomplex()

Read c.x and c.y

return c

90

printcomplex()

Print c3

Program:
#include <stdio.h> #include <stdlib.h> struct compl { int x; int y; }; typedef struct compl complex; main() { complex c1,c2,c3; complex add(complex c1,complex c2); complex sub(complex c1,complex c2); complex mul(complex c1,complex c2); complex readcomplex(); complex printcomplex(complex c1,complex c2,complex c3,char op); char op; clrscr(); printf("Reading the first complex number\n"); c1=readcomplex(); printf("Reading the second complex number\n"); c2=readcomplex(); printf("Enter + for addition \n" "Enter * for multiplication\n" "Enter - for subtraction\n" "Enter e for exit:"); fflush(stdin); op=getche(); switch(op) { case '+': c3=add(c1,c2); break; case '-': c3=sub(c1,c2); break; case '*': c3=mul(c1,c2); break; case 'e': exit(0); } printcomplex(c1,c2,c3,op); getch(); }

91

complex add(complex c1,complex c2) { complex c3; c3.x=c1.x+c2.x; c3.y=c1.y+c2.y; return(c3); } complex sub(complex c1,complex c2) { complex c3; c3.x=c1.x-c2.x; c3.y=c1.y-c2.y; return(c3); } complex mul(complex c1,complex c2) { complex c3; c3.x=(c1.x*c2.x+c1.y+c2.y)/(c2.x*c2.x+c2.y*c2.y); c3.y=(c2.x*c1.y-c1.x*c2.y)/(c2.x*c2.x+c2.y*c2.y); return(c3); } complex readcomplex() { complex c; printf("Enter the values of x and y of a complex number"); scanf("%d%d",&c.x,&c.y); return(c); } complex printcomplex(complex c1,complex c2,complex c3,char op) { printf("\n(%d+i%d)%c(%d+i%d)=%d+i(%d)",c1.x,c1.y,op,c2.x,c2.y,c3.x,c3.y); }

Result:
Reading the first complex number: 2 + 2i Reading the second complex number: 2 - 2i Enter + for addition "Enter * for multiplication\n" "Enter - for subtraction\n" "Enter e for exit : * Result is: 0

92

WEEK-12 B) AIM:
Write a C program which copies one file to another.

PROGRAM:
#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(); }

Result: File created is passed as parameter: File is copied

B) AIM:

Write a C program to reverse the first n characters in a file. (Note: The file name and n are specified on the command line.)

93

ALGORITHM:
STEP1: Declare the variables and file pointer STEP2: Check the number of arguments in command line if arg is not equal to 3 then print invalid arguments exit STEP3: Open an existed file in read mode STEP4: if file not found then print file can not be open STEP5: Assign 2nd argument in command line to a variable STEP6: Read the contents from existed file and reverse first n characters in string from file. the

PROGRAM:
#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=atoi(argv[2]); n = fread(a,1,k,fp); a[n]='\0'; len=strlen(a); for(i=len-1;i>=0;i--) { s[j]=a[i];

94

} s[j+1]='\0'; getch(); }

printf("%c",s[j]); j=j+1;

Result: Abc.txt: raidu is a good boy Output: yob doog a si udiar

95

WEEK-13: AIM: Write

a C program that uses functions to perform the following operations on singly linked list. i) creation iii) Deletion ii) insertion iv) Traversal

Program:

#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; int opt; void create(node *p); node *insert(node *head); node *delete(node *head); int count(node *p); void print(node *p); clrscr(); head = (node *)malloc(sizeof(node)); create(head); printf("\n"); print(head); printf("\n"); printf("\nNumber of items = %d \n", count(head)); while(1) { printf("Enter 1. insertion\n" " 2. deletion \n" " 3. traversal \n" " 4. exit:"); scanf("%d",&opt); switch(opt) { case 1: head=insert(head); break; case 2: head= delete(head); break; case 3: print(head); break; case 4: exit(0); } }

} void create(node *list)

96

{ 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 { list->next = (node *)malloc(sizeof(node)); create(list->next); } 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); } return; } int count(node *list) { if(list->next == NULL) return (0); else return(1+ count(list->next)); } 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) /* move to next item */

97

printf("\n key not found \n"); else /* delete key node */ { p = n1->next->next; /* pointer to the node following the keynode */ free(n1->next); n1->next = p; /* free key node */ /* establish link */

} } return(head);

} node *insert(node *head) { node *find(node *p, int a); node *new; node *n1; int key; int x; 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 *)malloc(sizeof(node)); new->number = x; new->next = head; head = new; } else { n1 = find(head, key); if(n1 == NULL) printf("\n key is not found \n"); else { new = (node *)malloc(sizeof(node)); new->number = x; new->next = n1->next; n1->next = new; } } return(head); } node *find(node *list, int key) { if(list->next->number == key) return(list); else if(list->next->next == NULL) return(NULL); find(list->next, key); }

/* key found */

/* end */

else

98

Result: 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 1 Enter the List of no.s and stop with 100 25 36 45 69 100 Count = 4 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 2 Enter the no you want to insert : 3 Enter the position you want to insert : 3 Count = 5 The inserted element is : 3 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 3 Enter position do you want to delete : 3 Count = 3 Deleted element is : 3 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 4 Null ->25->36->45->69->NULL 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 5
99

WEEK-14 AIM:
Write a C program that uses functions to perform the following operations on doubly linked list. i) creation iii) Deletion ii) insertion iv) Traversal in both ways

Program:
#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,count; DUBLL NodeAlloc(); void CreateItem(); void AppendItem(); void PrintItem(); void DeleteItem(); 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 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(); break; case 2: AppendItem(); break; case 3:

100

PrintItem(); break; case 4: DeleteItem(); break; case 5: InsertItem(); break; case 6: exit(); default: puts("Invalid choice."); } } break; puts("\nPress any key to go back to main menu."); getch(); }

/* 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; count++; } 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; temp_node->rightlink=NULL; last=low->rightlink; count++; }

101

} /* 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; printf("\n--Printing The List In Forward direction--\n"); while(temp_node->rightlink!=NULL) /*In forward direction*/ { printf("\t %d",temp_node->data); temp_node = temp_node->rightlink; } printf("\t %d",temp_node->data); printf("\n"); printf("\n--Printing The List In Backward direction--\n"); last=temp_node; while(last->leftlink !=NULL) { printf("\t %d",last->data); last = last->leftlink; } printf("\t %d",last->data);

/* 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=high; while(pntr != NULL) { if( pntr->data == value) { if(pntr->leftlink==NULL) { temp_node=pntr; pntr=pntr->rightlink; pntr->leftlink=NULL; high=pntr; free(temp_node);

102

} if(pntr==NULL) printf("The item is not found"); } /* 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,i; 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); temp_node->rightlink=temp_node->leftlink=NULL; for(i=1,pntr=high;i<=count && pntr!=NULL;i++,pntr=pntr->rightlink) { if(i==node) { if(node==1)

} pntr=pntr->rightlink;

} else if(pntr->rightlink == NULL) { pntr->leftlink->rightlink = NULL; free(pntr); } else { pntr->leftlink->rightlink=pntr->rightlink; pntr->rightlink->leftlink=pntr->leftlink; free(pntr); } count--; break;

103

{ temp_node->rightlink=high; high->leftlink=temp_node; high=temp_node;

} } }

} else { temp_node->rightlink=pntr; temp_node->leftlink=pntr->leftlink; pntr->leftlink->rightlink=temp_node; pntr->leftlink=temp_node; } printf("\n Item has been Inserted."); count++; getch(); break;

Result: 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 1 Enter the List of no.s and stop with 100 25 36 45 69 100 Count = 4 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 2 Enter the no you want to insert : 3 Enter the position you want to insert : 3 Count = 5 The inserted element is : 3 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 3 Enter position do you want to delete : 3 Count = 3
104

Deleted element is : 3 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 4 Null ->25->36->45->69->NULL 1. Create 2. Insert 3. Delete 4. Display 5. Exit Enter Choice : 5

105

WEEK-15 i) AIM:
Write a C program that implements stack (its operations) using Arrays

Program:
#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; }

106

case 4: exit(1); break; default: printf("\nYour choice is invalid.\n"); break; } } } /*Implementing the push() function. */ void push_ele(int ele) { if(t==99) { printf("STACK is Full.\n"); getch(); exit(1); } st_arr[++t]=ele; } /*Implementing the 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]); }

Result: Enter size of stack: 4 Enter option push,pop & display Enter element to push: 3 Enter option push,pop & display Enter element to push: 5 Enter option push,pop & display Element 5 deleted Enter option push,pop & display Elements in stack are: 3

1 1 2 3

107

ii) AIM:

Write a C program that implements stack (its operations) using Pointers

Program:
#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: "); 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: {

108

printf("\n\tElements present in the stack are:\n\t"); display_ele(); getch(); break;

case 4: exit(1); break; default: printf("\nYour choice is invalid.\n"); break; } } } /*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\tSTACK 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; } }

109

Result: Enter size of stack: 4 Enter option push,pop & display Enter element to push: 3 Enter option push,pop & display Enter element to push: 5 Enter option push,pop & display Element 5 deleted Enter option push,pop & display Elements in stack are: 3

1 1 2 3

WEEK-16
110

i) AIM:

Write a C program that implements Queue (its operations) using Arrays.

Program:
#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);

111

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)

} }

112

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"); }

Result: enter queue size: 3 Enter add,delete & display 1 Enter element to add: 3 Enter add,delete & display 1 Enter element to add: 5 Enter add,delete & display 3 Elements in queue are: 3 5

113

ii) AIM:
Pointers.

Write a C program that implements Queue (its operations) using

Program:
#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; }

114

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; }

115

} /* 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; } } }

Result: enter queue size: 3 Enter add,delete & display 1 Enter element to add: 3 Enter add,delete & display 1 Enter element to add: 5 Enter add,delete & display 3 Elements in queue are: 3 5

116

WEEK-17
Write a C program to do i) conversion of infix expression to postfix notation. ii) simple expression evaluator, that can handle +,-,/ and *.

i)Aim: Code:

conversion of infix expression to postfix notation.

/* INFIX TO POSTFIX */ #include<stdio.h> #include<conio.h> #include<ctype.h> #include<math.h> int top=-1; char stack[20]; main() { char infix[20]; clrscr(); printf("enter the infix expression"); gets(infix); intopo(infix); getch(); } intopo(char infix[20]) { char postfix[20],s,t; int index=0,pos=0,l; l=strlen(infix); push('#'); while(index<l) { s=infix[index]; switch(s) { case '(':push(s); break; case ')':t=pop(); while(t!='(') { postfix[pos++]=t; t=pop(); } break; case '+': case '-': case '*': case '/': case '^': while(pre(stack[top])>=pre(s)) { t=pop();

117

postfix[pos++]=t; } push(s); break;

default:postfix[pos++]=s; break; } index++; } while(top>0) { t=pop(); postfix[pos++]=t; } postfix[pos++]='\0'; puts(postfix); } push(char s) { if(top==19) printf("stack over flow\n"); else { top++; stack[top]=s; } } pop() { char c; if(top==-1) printf("stack is empty\n"); else { c=stack[top]; top--; } return(c); } pre(char c) { if(c=='^') return(5); else if(c=='/'||c=='*') return(4); else if(c=='+'||c=='-') return(3); else return(2); }

Output:
enter the infix expressiona+b*c abc*+

118

ii)Aim: simple expression evaluator, that can handle +,-,/ and *.


/*EVALUATION OF POSTFIX EXPRESSION */ #include<stdio.h> #include<conio.h> #include<ctype.h> #include<math.h> int top=-1; int stack[20]; main() { int data[20],i,val; char postfix[20]; clrscr(); printf("enter the postfix expression"); gets(postfix); for(i=0;postfix[i]!='\0';i++) { if(isalpha(postfix[i])) { printf("enter the number: %c",postfix[i]); scanf("%d",&data[i]); }} val=evalpost(postfix,data); printf("the value of postfix expression is: %d",val); getch(); } evalpost(char postfix[20],int data[20]) { int j,opa,opb; char ch; for(j=0;postfix[j]!='\0';j++) { ch=postfix[j]; if(isalpha(postfix[j])) { push(data[j]); } else { opa=pop(); opb=pop(); switch(ch) { case '+':push(opb+opa); break; case '-':push(opb-opa); break; case '*':push(opb*opa); break; case '/':push(opb/opa); break; case '^':push(pow(opb,opa)); break; } } } return(pop());

119

} push(int n) { if(top==19) printf("stack over flow\n"); else { top++; stack[top]=n; } } pop() { int k; if(top==-1) printf("stack is empty\n"); else { k=stack[top]; top--; } return(k); }

Output:
enter the postfix expressionab*c+ enter the number: a2 enter the number: b2 enter the number: c2 the value of postfix expression is: 6

120

WEEK 18 Aim:
Implement binary search tree using linked list and perform the following operations i) Insertion ii) Deletion iii) In order traversal iv) preorder traversal v) Post order traversal

Code:
#include<stdio.h> #include<alloc.h> #include<conio.h> struct btr { int data; struct btr *left,*right; }; typedef struct btr node; node *root,*ptr,*temp; insert() { int no,flag; root = (node*)malloc(sizeof(node)); root->left = NULL; root->right =NULL; puts("Enter Number (0 to stop)"); scanf("%d",&no); root->data = no; puts("Enter Number (0 to stop)"); scanf("%d",&no); while(no) { flag=0; ptr = root; temp = (node*)malloc(sizeof(node)); temp->data = no; temp->left=NULL; temp->right=NULL; while(flag==0) { if(ptr->data>temp->data) { if(ptr->left==NULL) { ptr->left=temp; flag=1; } else ptr=ptr->left; } else { if(ptr->data<temp->data) { if(ptr->right==NULL) { ptr->right=temp; flag=1; }

121

else ptr=ptr->right; } } puts("Enter the number(0 to stop)"); scanf("%d",&no); } } preorder(node *root) { node *root1; root1 = root; if(root1!=NULL) { printf("%4d",root1->data); preorder(root1->left); preorder(root1->right); } } inorder(node *root) { node *root1; root1 = root; if(root1!=NULL) { inorder(root1->left); printf("%4d",root1->data); inorder(root1->right); } } postorder(node *root) { node *root1; root1 = root; if(root1!=NULL) { postorder(root1->left); postorder(root1->right); printf("%4d",root1->data); } }

node *delete(node *root) { node *current,*suc,*temp1,*p; int k,x; if(root==NULL) { printf("\nEmpty TREE"); getch(); return(root); } else {

122

} preorder(root); return(root); } main() { int ch; clrscr();

puts("Enter the Element to be deleted"); scanf("%d",&x); current=root; suc=root; while(current->data!=x&&current!=NULL) { suc = current; if(current->data >x) { current=current->left; k=1; } else { current=current->right; k=2; } } if(current==NULL) puts("Element Not Found"); else { if(root->data==x&&root->right!=NULL) { temp1=root->left; current=root->right; root=root->right; } else { temp1=current->left; current=current->right; if(k==1) suc->left=current; else if(k==2) suc->right=current; } while(current!=NULL) { p = current; current=current->left; } p->left=temp1; }

while(1) { puts("\n1 - Insertion\n2 - Preorder\n3 - Inorder\n4 - postorder\n5 - Delete");

123

scanf("%d",&ch); switch(ch) { case 1: insert(); break; preorder(root); break; inorder(root); break; postorder(root); break; case 5: root=delete(root); break; default: exit(0); } } getch();

case 2:

case 3: case 4:

Output:
1 - Insertion 2 - Preorder 3 - Inorder 4 - postorder 5 - Delete 1 Enter Number (0 to stop) 34 Enter Number (0 to stop) 12 Enter the number(0 to stop) 67 Enter the number(0 to stop) 0 1 - Insertion 2 - Preorder 3 - Inorder 4 - postorder 5 - Delete 2 34 12 67 1 - Insertion 2 - Preorder

124

3 - Inorder 4 - postorder 5 - Delete 3 12 34 67 1 - Insertion 2 - Preorder 3 - Inorder 4 - postorder 5 - Delete 4 12 67 34 1 - Insertion 2 - Preorder 3 - Inorder 4 - postorder 5 - Delete 6

125

WEEK19 Aim:
Write a C program to Implement the following searching method. i) linear search ii) Binary search

Code: i) Linear search:

/*SEQUENTIAL SEARCH*/ #include<stdio.h> main() { int a[10],i,n,key,co=0; clrscr(); printf("how many you want"); scanf("%d",&n); printf("enter array elements:"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("enter the searching elements"); scanf("%d",&key); for(i=0;i<n;i++) { if(a[i]==key) co++; } if(co>0) printf("Element is found"); else printf("Not found"); getch(); }

Output:
how many you want5 enter array elements:3 1 7 12 45 enter the searching elements12 Element is found

ii) Binary search

: /*BINARY SEARCH USING RECURSSION */ #include<stdio.h> main() { int a[10],i,j,t,n,key,low,high,co; clrscr(); printf("how many you want"); scanf("%d",&n); printf("enter array elements:"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n;i++) {

126

for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } }} low=0; high=n-1; printf("enter the searching elements"); scanf("%d",&key); co=Rbinarysearch(a,low,high,key); if(co==-1) printf("Not found"); else printf("Element is found"); getch(); } Rbinarysearch(int a[10],int low,int high,int key) { int mid; if(low>high) return(-1); mid=(low+high)/2; if(key==a[mid]) return(mid); if(key<a[mid]) return(Rbinarysearch(a,low,mid-1,key)); else return(Rbinarysearch(a,mid+1,high,key)); }

Output:

how many you want5 enter array elements:32 1 45 67 98 enter the searching elements98 Element is found

WEEK-20
127

i) AIM:

Write C programs that implement the following sorting methods to sort a given list of integers in ascending order by using Bubble sort.

Algorithm for Bubble sort :


1. 2. 3. 4. 5. 6. 7. start take list(array), num readlist(list,num) printlist(list,num) bub_sort(list,num) printlist(list,num) stop

readlist (list, num) 1. for j 0 to num 2. read list[j]. printlist(list,num) 1. for j 0 to num 2. write list[j]. bub_sort(list,num) 1. for i 0 to num 2. for j 0 to (num i) 3. if( list[j] > list[j+1]) 4. swapList( address of list[j], address of list[j+1]) swapList( address of list[j], address of list[j+1]) 1. temp value at list[j] 2. value at list[j] value at list[j+1] 3. value at list[j+1] temp

PROGRAM:
#include <stdio.h> #define MAX 10 void swapList(int *m,int *n) { int temp; temp = *m; *m = *n; *n = temp; } /* Function for Bubble Sort */ void 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]);

128

} 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 list */ void printlist(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\n\n***** Enter 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); getch(); }

Output:

Enter the number of elements [Maximum 10]: 5 Enter the elements:4 1 8 2 3 nElements in the list before sorting are: 4 1 8 2 3 Elements in the list after sorting are:1 2 3 4 8

129

ii) AIM:

Write C program that implement the following sorting methods to sort a given list of integers in ascending order by using Quick sort.

Algorithm for Quick Sort:


1. 2. 3. 4. 5. 6. 7. start read list(array),num read_list(list,num) print_list(list,num) quicksort(list,0,num-1) print(list,num) stop

read_list(list,num) 1. for i 0 to num 2. read list[i] print_list(list,num) 1. for i 0 to num 2. write list[i] quicksort (list1, m, n) 1. if(m<n) 2. do k get_key_position(m,n) 3. swap( address of list[m], address of list[k]) 4. key list[m], i m+1, j n 5. while(i <= j) 6. while (( i <= n) and (list[i] <= key)) 7. i i+1 8. while((j>=m) and (list[j] > key)) 9. j j-1 10. if(i < j) 11. swap (address of list[m], address of list [j]) 12. swap(address of list[m], address of list[j]) 13. quick(list,m,j-1) 14. quick(list,j+1,n)

PROGRAM:
#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 Sort */ void quicksort(int list[],int m,int n) { int key,i,j,k; if( m < n)

130

{ 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 data */ void 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 data void 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(); }

Result: Enter the number of elements [Maximum 10]: 5


Enter the elements:4 1 8 2 3 nElements in the list before sorting are: 4 1 8 2 3 Elements in the list after sorting are:1 2 3 4 8

131

WEEK-21 A) AIM:
Write C program that implement the following sorting methods to sort a given list of integers in ascending order by using Insertion sort.

Algorithm for Insertion Sort:


1. 2. 3. 4. 5. 6. 7. start for i 0 to 5 read num [i] inst_sort(num) for i 0 to 5 write num[i] stop

inst_sort(num) 1. for i 1 to 5 2. do k num[j] 3. for i j-1 to 0, conditon i >=0 and k < num[i] 4. num[i+1] num[i] 5. num [i+1] k

PROGRAM:
#include<stdio.h> #include<conio.h> void inst_sort(int []); void main() { int num[5],count; clrscr(); 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 Sorting */ void 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;

132

} }

Result:
Enter the number of elements [Maximum 10]: 5 Enter the elements:4 1 8 2 3 nElements in the list before sorting are: 4 1 8 2 3 Elements in the list after sorting are:1 2 3 4 8

B) AIM: Write C program that implement the following sorting methods to sort a given list of integers in ascending order by using Merge sort. Algorithm for Merge Sort :
1. start 2. read j 3. j 0 4. for j 0 to 10 5. read ary[j] 6. for j 0 to 10 7. write ary [j] 8. merge_sort(ary, 0 , 9) 9. for j 0 to 10 10. write ary [j] 11. stop merge_sort( x[], end, start) 1. read j 0, mid 0, mrg1 0, mrg2 0 2. size start end + 1 3. read executing[10] 4. if(end = start) 5. return 6. mid (end + start) /2 7. merge_sort(x, end, mid) 8. merge_sort(x,mid+1,start) 9. for 0 to size 10. executing [j] x[end + j] 11. mrg1 0, mrg2 mid end +1 12. for j 0 to size 13. do if ( meg2 <= start - end) 14. if(mrg1 <= mid - end) 15. if(executing [mrg1] > executing [mrg2]) 16. x [j + end ] executing [mrg2 mrg2 +1] 17. else 18. x [j + end] executing [ mrg1 mrg1 + 1] 19. else 20. x [j + end ] executing [mrg2 mrg2 + 1] 21. else 22. x [j + end ] executing [mrg1 mrg1 + 1]

133

PROGRAM:
#include <stdio.h> #include <stdlib.h> #define MAX_ARY 10 void 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++) {

134

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++]; } }

Result:
Enter the number of elements [Maximum 10]: 5 Enter the elements:4 1 8 2 3 nElements in the list before sorting are: 4 1 8 2 3 Elements in the list after sorting are:1 2 3 4 8

Week 22: Aim:


Code: main() { int i,j,k,n; float term,sum,x1,x[20],f[20]; textcolor(LIGHTCYAN); clrscr(); printf("enter n value"); scanf("%d",&n); for(i=0;i<n;i++) { printf("enter the values for x,f[x]"); scanf("%f%f",&x[i],&f[i]); } printf("enter the value"); scanf("%f",&x1); sum=0; for(k=1;k<=n;k++) { term=1; for(j=1;j<=n;j++) { if(j!=k) term=term*((x1-x[j])/(x[k]-x[j])); } sum=sum+term*f[k]; } printf("%f=%f",x1,sum); 135
Write C programs to implement the Lagrange interpolation and NewtonGregory forward interpolation.

getch(); } /* NEWTON GREGORY FORWARD INTERPOLATION */ #include<math.h> #include<stdlib.h> main() { int i,j,k,n; float h,u,f,x[100],fx[100],term,xx; clrscr(); printf("enter the no.of values"); scanf("%d",&n); for(i=0;i<n;i++) { printf("enter the values x,fx"); scanf("%f%f",&x[i],&fx[i]); } printf("enter the values xx"); scanf("%f",&xx); h=x[2]-x[1]; u=(xx-x[0])/h; for(i=1;i<=n;i++) { for(j=n-1;j>=i;j--) { fx[j]=fx[j]-fx[j-1]; } } k=1;f=0;term=1; for(i=0;i<n;i++) { f=f+term*fx[i]; term=term*(u-k+1)/k; k++; } printf("the value is:%f",f); getch(); }

Output: Enter the initial approximation: 0.5 Root: 1.125000 Function value: 0.390625 No. of Iterations: 1

136

Week 23: Aim:


Write C programs to implement the linear regression and polynomial regression algorithms.

Code:
/* LINEAR REGRESSION */

#include<math.h> #include<stdio.h> #include<conio.h> main() { int n,i; float x,y,m,c,d; float sumx=0,sumxsq=0,sumy=0,sumxy=0; clrscr(); printf("enter the number of values for n:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("enter values of x and y"); scanf("%f%f",&x,&y); sumx=sumx+x; sumxsq=sumxsq+(x*x); sumy=sumy+y; sumxy=sumxy+(x*y); } d=n*sumxsq-sumx*sumx; m=(n*sumxy-sumx*sumy)/d; c=(sumy*sumxsq-sumx*sumxy)/d; printf("M=%f\tC=%f\n",m,c); getch(); }
/* POLYNOMIAL REGRESSION */

#include<math.h> #include<stdio.h> #include<conio.h> main() { int i,j,k,m,n; float x[20],y[20],u,a[10],c[20][20],power,r; clrscr(); printf("enter m,n:"); scanf("%d%d",&m,&n); for(i=1;i<=n;i++) { printf("enter values of x and y"); scanf("%f%f",&x[i],&y[i]); } for(j=1;j<=m+1;j++) 137

for(k=1;k<=m+1;k++) { c[j][k]=0; for(i=1;i<=n;i++) { power=pow(x[i],j+k-2); c[j][k]=c[j][k]+power; } } for(j=1;j<=m+1;j++) { c[j][m+2]=0; for(i=1;i<=n;i++) { r=pow(x[i],j-1); c[j][m+2]=c[j][m+2]+y[i]*r; } } for(i=1;i<=m+1;i++) { for(j=1;j<=m+2;j++) { printf("%.2f\t",c[i][j]); } printf("\n"); } for(k=1;k<=m+1;k++) for(i=1;i<=m+1;i++) { if(i!=k) { u=c[i][k]/c[k][k]; for(j=k;j<=m+2;j++) { c[i][j]=c[i][j]-u*c[k][j]; } } } for(i=1;i<=m+1;i++) { a[i]=c[i][m+2]/c[i][i]; printf("a[%d]=%f\n",i,a[i]); } getch(); } Result: This program run correctly under all conditions.

138

Week 24: Aim: Code:


/* Write C programs to implement Trapezoidal and Simpson methods. */ TRAPEZOIDAL RULE

#include<math.h> #include<stdio.h> main() { int i,n; float sum,s1,s2,h,x0,xn,fn,f0; clrscr(); printf("enter the values x0,xn,n:"); scanf("%f%f%d",&x0,&xn,&n); s1=s2=0; h=(xn-x0)/n; f0=x0*x0; fn=xn*xn; s1=f0+fn; for(i=1;i<=n-1;i++) { x0=x0+h; f0=x0*x0; s2=s2+f0; printf("x[%d]=%f\tf[%d]=%f\n",i,x0,i,f0); } sum=(h*(s1+2*s2))/2; printf("\tThe intergal value is:%f",sum); getch(); }
/* SIMPSONS 1/3rd RULE */

#include<math.h> #include<stdio.h> main() { int i,n; float sum,s0,s1,s2,h,x0,xn,fn,f0; clrscr(); printf("enter the values x0,xn,n:"); scanf("%f%f%d",&x0,&xn,&n); s0=s1=s2=0; h=(xn-x0)/n; f0=x0*x0; fn=xn*xn; s0=f0+fn; for(i=1;i<=n-1;i++) { x0=x0+h; f0=x0*x0; 139

if(i%2!=0) s1=s1+f0; else s2=s2+f0; printf("x[%d]=%f\t f[%d]=%f\n",i,x0,i,f0); } sum=(h*(s0+4*s1+2*s2))/3; printf("\tThe intergal value is:%f",sum); getch(); }
/* SIMPSONS 3/8th RULE */

#include<math.h> #include<stdio.h> main() { int i,n; float sum,s0,s1,s2,h,x0,xn,fn,f0; clrscr(); printf("enter the values x0,xn,n:"); scanf("%f%f%d",&x0,&xn,&n); s0=s1=s2=0; h=(xn-x0)/n; f0=x0*x0; fn=xn*xn; s0=f0+fn; for(i=1;i<=n-1;i++) { x0=x0+h; f0=x0*x0; if(i%3==0) s1=s1+2*f0; else s2=s2+3*f0; printf("x[%d]=%f\t f[%d]=%f\n",i,x0,i,f0); } sum=(3*h*(s0+s1+s2))/8; printf("\tThe intergal value is:%f",sum); getch(); } Result: Enter the no. strips :2 1.4011

4 2.3360 6 4.0001 8 6.9632 10 7.6201 Enter Upper and Lower limits of integral 1

Integral from 1.0000 to 4.0000 is 2.98976

By K.B.Raidu B.Tech; MS., HOD(KSNIT)


140

You might also like