Sei sulla pagina 1di 206

PROGRAMMING ANALYSIS IN C

PROGRAMMING ANALYSIS IN C

Dedicated To,

My Late Grandfather Mitra Man Palikhe


and also to School Of Engineering (SOE)-POKHARA UNIVERSITY & PALIKHE FAMILY

2069 Asoj 16/2012 October 2 TUE

Devendra Man Palikhe


(devendramanpalikhe@yahoo.com)
You can get soft copy of this book @ www.scribd.com/dpalikhe

PREFACE
This book entitled PROGRAMMING ANALYSIS IN C on C-Programming is the first of its kind being published and written by student of SCHOOL OF ENGINEERING (SOE), POKHARA UNIVERSITY. It mainly presents the programs and their solutions regarding C-Programming during first semester in Engineering. This book is meant to help the reader learn, understand, familiarize, and analyze how to program in C. This book is for the purpose of building up the creative ideas regarding C-Programming in mind of learners instead of the definitions and it includes all the difficulties that the learners encounter during their voyage in C-Programming. This book is mainly meant for the difficult programs that learners come across their journey in C-Programming and it includes all those questions which have appeared in previous examinations of POKHARA UNIVERSITY that are a hard nut to crack for the students but not merely all the questions. Most of the tough solution of this book is based on analyzing problem through possible illustrative ways, analyzing the problem for coding it into programs rather than on plain statements of rules. For the majority part, the programs are entire, real programs, rather than solitary fragments. So this book is not an opening programming manual; it assumes some experience and knowledge with programming concepts like variables, assignments, statements, loops, logics, and functions. The small programs, at last in projects that are just to enhance the creativity of the learners, are self understood as they are written in very simple statements and in sequential manner with outputs. All programs of this book are complied in Borland C++ 5.02. I wish to acknowledge my greatest indebtness to my teacher Yagyanath Rimal and my brothers Nitesh Palikhe and Nischal Palikhe for their constructive suggestions, encouragement and constant support during publication of this book. I would also like to thank all my colleagues. All the thoughtful criticisms and

critical suggestions of my friends, colleagues, readers and well-wishers for improvement of this book are heartily welcome and will be highly appreciated.

ACKNOWLEDGEMENT
My sincere gratitude goes to my colleagues of school of engineering whose constant support and encouragement has always been my source of inspiration.

Devendra Man Palikhe 2 Semester, BCE School Of Engineering POKHARA UNIVERSITY

You can get soft copy of this book @www.scribd.com/dpalikhe

CONTENTS
SOME BEGINNING PROGRAMS
Decision making Loop A program to convert degree Celsius to Fahrenheit A program to find positive or negative A program to find numbers between 0 to 100 divisible by 3 and not by 5 Factorial` Leap year H.C.F. by division method Reference-interchange two values Flowchart of Greatest among four numbers Greatest among three numbers Some types of numbers Armstrong numbers Even and odd numbers Prime numbers

FIBONACCI SERIES
1, 0, 1, 1, 2, 1, 3, 2, 5, 3, 8, 5, 13, 8, 21 .. 13, 21

DIGITS OF A NUMBER
Digits taking from a number

PALINDROME
Palindrome for number An analysis of returning back number from its digits Palindrome for string

Using reversing string function A char[] is declared where each time a new last character from string is taken one by one as array and then check is done to original string Palindrome for string containing even or odd quantity of characters Palindrome for string using for-loop

ELECRTICITY AUTHORITY

ARRAY
2d PU2008FALL 2b) finding an element of 2D-array Finding greatest and smallest number among n numbers (using array)

PATTERNS OF CHARACTERS AND NUMBERS


Scanf function for numbers Patterns of characters and numbers using printf function Basic principle of printing patterns Some more patterns Floyds triangle Patterns of * Some more difficult patterns Pyramid of triangle Reverse pyramid of triangle Pascals triangle PU2002 FALL 5 WAP that takes angle in degrees and give out value of sine for that angle without using sin () function of math library Conversion Decimal to binary Binary to decimal Exclusive use of switch-case and goto statements 2005PU A program that takes a sum of money and converts it into smaller units, where user can choose his starting unit. The conversion is in such a way that the first starting units takes maximum possible conversion then the left sum is supplied to conjugate term following it, this process continues till the end

SORTING
Selection sorting Bubble sorting Third sorting process Analysis of the solution of third sorting A special analysis in sorting-third sorting PU2011FALL 5b) Sort n numbers by function (special) Description A SPECIAL ANALYSIS Now we are adding a new feature to above program Examples of sorting of numbers and strings in selection and bubble sorting Median and standard deviation

MATRIX ARRAY
Case-1: Finding smallest and greatest of a matrix Case-2: Sum of diagonal elements of square 3*3 matrix 1. sum of diagonal from right top to left bottom 2. sum of diagonal from left top to right bottom Case-3: Finding a matrix element in a matrix Case-4: sum of all elements in a matrix Case-5: transpose of a matrix Matrix Multiplication Matrices multiplication of (3*3) and (3*3) More generalization of matrices multiplication

TASK A simple program that takes students marks in various subjects, name and roll numbers to print out ranks, roll numbers and marks (both % and marks) in Descending order. Solution of the task

RECURSIVE FUNCTION
Factorial by function Factorial by recursive Fibonacci series by recursive

13

21

Fibonacci series by recursive 0 1 1 2 3 5 8 13 21 .

To calculate power by recursive Calculate sum of digits by recursive Armstrong using function Armstrong using recursive

WITHOUT FUNCTION
To check case without using any function Calculate power without function To reverse a sentence without any function Concatenate two strings without function

A DETAIL OF STRINGS
Finding a sequence of words Finding a sequence of words any Finding a sequence of words (working) Finding a word in a sentence Finding a word in a sentence (working) Finding a word in a sentence (input from user)

OPERATORS
Table Post/pre increment/decrement operators For-blocks execution flow ASSIGNMENT OPERATORS

OUTPUTS
Hints to PU 2008 FALL 3a) PU 2006 SPRING 2 a) 2 b) 3b 2 c)

PU 2009 SPRING 2 b) PU 2011 FALL PU 2009 FALL 3 a) 3 a)

important 3 b) 3 b)

3 a) very important

PU 2007 FALL 2 a) 2 b) PU 2012 FALL 2b i) very important PU 2011 SPRING Ternary operators nested use PU2006FALL 3) Print out combinations of 1, 2, 3 using for-loop PUFALL2003 2 b) Read temperature of a month of 10 cities and print out average of ten cities using array and for-loop Second way of solving

POINTERS
Pointer declaration in arrays Program demonstrating pointer variables resembling with special array i.e. character array (string) Using void type pointer as required Demonstrating the 2d pointers in 2d array Call by address/ pass by pointer Pointers in structure Passing whole structure to function PU 2006 SPRING 5a) Meaning of some pointer expressions 2003 fall 4 a) Write a program with user defined function using pointers to convert all the uppercase letters to lower-case and vice versa in a string given by the user

SOME CONCEPTUAL TERMS


Returning multiple value by functions Program documentation Important casting mechanism Variables Call by value vs. call by reference A simple program demonstrating structure: It takes data and print info of whose address is pokhara

FILE HANDLING
File pointer vs. std

PU2009 SPRING 6 b) WAP to read name, author and price of 500 books and store the info to library.dat and print info of books of price > 300 PU2009 FALL 6 b) Create a structure for the following data: Id, Name, Address, Salary, Date of join and write program to input 100 employee, save in emp.dat file then print info of employee who have the address 'pokhara' Due fee Prints student info whose due fee is less than 100 PU2002 Consumed charged data merged with file handling: WAP that stores following data of customer of electricity authority in file elect.dat: id, name, old reading, new reading and amount to be paid

PROJECTS
Books Phone book Mark sheet by harder method Mark sheet by easier method Updated mark sheet Stores Updated stores

You can get soft copy of this book @ www.scribd.com/dpalikhe You can get soft copy of this book @ www.scribd.com/dpalikhe You can get soft copy of this book @ www.scribd.com/dpalikhe

PROGRAMMING ANALYSIS IN C
SOME BEGINNING PROGRAMS
DECISION MAKING
While going to the solution of a problem, we encounter many problems to which small decisions or a group of small decisions or a loop of small decision can give a meaningful output. As much as possible, decisions must be easier, simpler to read, understand and analyze being in great purpose to the problems solution.

LOOP
One of the important processes in C programming is the repetition of statements (same for all time or change gradually with time or condition or variables or inputs supplied by users, etc.). The array is based on this looping (especially dynamic array).

A PROGRAM TO CONVERT DEGREE CELCIUS TO FAHRENHEIT


//A PROGRAM TO CONVERT DEGREE CELCIUS TO FAHRENHEIT #include<stdio.h> #include<conio.h> int main() { int celcius, fahrenheit; clrscr(); printf("Enter temperature in celcius\t"); scanf("%d",&celcius); fahrenheit=(celcius*1.8)+32; printf("\n The equivalent temperature of %d in Fahrenheit is %d",celcius,fahrenheit); getch(); return 1;}

A PROGRAM TO FIND POSITIVE OR NEGATIVE


We can conclude a number is positive or negative by comparing it with zero and the sum here is the previous value stored in sum plus new value need to be stored in sum i.e. sum=sum + num. Here sum is calculated and average is calculated by dividing sum by number of items. To calculate the number of items we declared a counter whose initial value is zero and it gets incremented by one each time the second if gets executed and hence average is calculated. #include<stdio.h> #include<conio.h> void main() { int n,num[100],positive=0,negative=0,i; printf("Enter how many numbers do you want to test?"); scanf("%d",&n); for(i=0;i<n;i++) { printf("Enter a number\n"); scanf("%d",&num[i]); if(num[i]>0) { positive=positive+1; }

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
else if(num[i]<0) { negative=negative+1; } else { // for the case of zero number we do nothing } } printf("\nThe number of positive numbers is %d",positive); printf("\nThe number of negative numbers is %d",negative); getch();}

A PROGRAM TO FIND NUMBERS BETWEEN 0 TO 100 DIVISIBLE BY 3 AND NOT BY 5


#include<stdio.h> #include<conio.h> void main() { int i; printf("The numbers between 0 to 100 that are divisible by 3 exactly and not divisible by 5 are:"); for(i=1;i<=100;i++) { if(i%3==0 && i%5!=0) printf("\n%d",i); } getch();} Here numbers are taken from 0 to 100 by the help of for-loop (pre-test loop) and others are arithmetic and logical operations where % modulo sign gives remainder. We can extend this program by asking n1 and n2 and fixing these limits for the values of i, so that only numbers from n1 to n2 are checked where n1<n2.

FACTORIAL
n!=1*2*3*4*5.(n-2)*(n-1)*n #include<stdio.h> #include<conio.h> void main() { int i,factorial,n; factorial=1; printf("Enter number?"); scanf("%d",&n); for(i=1;i<=n;i++) factorial=factorial*i; printf("\nThe required factorial is%d",factorial); getch();} Here the factorial is found by multiplying from 1 to n. For this initialization is made factorial=1 (it simply represents factorial of 1) and then the loop of i (from 1 to n) is taken which multiply the

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
previous factorial by a new number i (i is incremented each time by one to final to n) to get factorial of new number i i.e. a new value of i. So factorial at initial is initialized 1 so that multiplication runs smoothly, it should be clear that initializing zero creates error.

LEAP YEAR
Firstly a leap year is exactly divisible by 4. A year greater than 100 must be divisible by 4 is leap. A year less than 100 but divisible by 400 and 4 is leap year. It is because for number smaller than 100; if it is divisible by 4 then it is leap year but for the number greater than 100 (i.e. takes place between 100- 1000), we calculate by division with 40 also so that 400 (is 4s multiple in 100s range i.e. 1001000) if is exactly gone, is leap for 100s (i.e. 100-1000) range else not.

#include<stdio.h> #include<conio.h> void main() { int year; int factorial=1; printf("Enter a year?"); scanf("%d",&year); if(year%4==0){ if(year%100!=0){ printf("\nThe given year is a leap year"); } else if(year%400==0){ printf("\nThe given year is a leap year"); } else { printf("\nThe given year is not a leap year"); } } else { printf("\nThe given year is not a leap year"); } getch();}

H.C.F BY (DIVISION METHOD)


Here in between two numbers (or can be extended to more numbers), a number is divided by another number; the remainder divides the divisor till the remainder is zero (for more than two numbers, each new number is added in dividend and above process continues till remainder zero). For the last instant, the divisor is the H.C.F. (Highest Common Factor).

You can get soft copy of this book @ www.scribd.com/dpalikhe.


By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { int n1,n2,divisor,divident,remainder; printf("Enter First Number"); scanf("%d",&n1); printf("Enter Second Number"); scanf("%d",&n2); if(n1>n2){ divident=n1; divisor=n2; } else if(n2>n1){ divident=n2; divisor=n1; } else if(n2=n1){ printf("The H.C.F. of two numbers is %d",n1); exit(0); } do { remainder=divident%divisor; divident=divisor; divisor=remainder; } while(remainder>0); printf("The H.C.F. of two numbers is %d",divident); getch();}

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
REFERENCE- INTERCHANGE TWO VALUES
Two variables have two values. In some other languages like Q-Basic, a direct function swap interchanges their values regarding to identifiers. However there is no such in C. For e.g. if we directly declare an identifier to value of other identifier i.e. value_a =value_b Then both will have value b against our intension to also to get value_b=a, but here value_a gets b and its original value a disappears which cant be restored. So a temporary variable must store the value. Take two stone in two hands. How can they be interchanged, one is directly but in C there is not so function so the other indirect method is used. Here the stone is transferred from one hand to table and then the stone of other hand is transferred to first hand and then stone from table to second hand. This is similar to declaring temporary variable and storing a value whose identifier is made to take other value and then assigning the temporary value to the identifier whose value was assigned by other. Thus declaration completes. temp =value_b; value_b=value_a; value_a=temp; #include<stdio.h> #include<conio.h> void main() { int diff,a,b; printf("Enter a Number"); scanf("%d",&a); printf("\nEnter another Number"); scanf("%d",&b); diff=a-b; a=a-diff; b=b+diff; printf("\nThe interchanged numbers are like of this order %d\t%d",a,b); getch();} The next method is to take difference between two numbers taking one as a reference. The difference is according to the reference number (the number before minus) so the number taken as reference is subtracted to difference to get another number (because reference is the comparison of another number with respect to a number) and another is added to difference to get first number as its comparison s already with reference number. Making a number reference is to compare according to its magnitude or direction but here magnitude is sufficient. #include<stdio.h> #include<conio.h> void main() { int diff,a,b; printf("Enter a Number"); scanf("%d",&a); printf("\nEnter another Number"); scanf("%d",&b); diff=a-b; a=a-diff;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
b=b+diff; printf("\nThe interchanged numbers are like of this order %d\t%d",a,b); getch();} FLOW CHART Greatest among four numbers

Greatest among three numbers

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
SOME TYPES OF NUMBERS
ARMSTRONG NUMBERS It is number equal to sum of cubes of all the digits present in number. For e.g. 153, 370, 371. To check Armstrong, take each digit and save each time to sum its cube (i.e. Sum=sum + digits power 3) and at last check the sum to original number. Please refer digit taking from a number given in coming part; for the digit taking process. #include<stdio.h> #include<conio.h> #include<math.h> void main() { int num,digit,sum=0,temp_num; clrscr(); printf("Enter a number"); scanf("%d",&num); temp_num=num; /*here temp_num is necessary to hold transition values of num*/ while(temp_num>0){ digit= temp_num%10; temp_num=temp_num/10; sum=sum+pow(digit,3); } if(sum==num) printf("IT IS ARMSTRONG"); /*to preserve originality necessary for comparison 'num' holds original value */ else printf("IT IS NOT ARMSTRONG"); getch(); } Please look recursive function for further advancement.

EVEN AND ODD NUMBERS Find remainder by division by two using % (modulo division) and then and check it is 0 or not, if 0 then even else odd. #include<stdio.h> #include<conio.h> #include<math.h> void main() { int num; clrscr(); printf("Enter a number"); scanf("%d",&num); if(num%2==0) printf("IT IS EVEN"); else printf("IT IS ODD"); getch(); }

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
We generally use for-loop to add limiting values for numbers to be checked. Lets us look a small program that prints even numbers from 107 to 221 and prints sum of odd numbers of the given range. #include<stdio.h> #include<conio.h> #include<math.h> void main() { int odd_sum=0,i; printf("The even sumbers are\n"); for(i=107;i<=221;i++){ if(i%2==0) printf("\t%d",i); else odd_sum=odd_sum+i; /*those which are not even are odd*/ }// for-loop terminal printf("\nThe sum of odd is:\t%d",odd_sum); getch(); } PRIME NUMBERS Prime number is such which is only exactly divisible by 1 or itself but not by others i.e. modulo division (%) by only 1 and itself gives zero remainder but not by any else. #include<stdio.h> #include<conio.h> #include<stdlib.h> //for exit()function void main() { int number,i; clrscr(); printf("Enter a number"); scanf("%d",&number); for(i=2;i<number;i++) { if(number%i==0) {printf("NOT PRIME NUMBER"); if (getch()) exit(0); } } printf("IT IS PRIME NUMBER"); getch(); } Here we are checking the division of the number from 2 to a value less than number, if it is divisible for at least for one case then it is not even or it is composite but if the whole for-loop terminates without any possible remainder zero then at last it is prime is printed. It must be clear that exit() function jumps all execution flow to end of program escaping all statements directly. #include<stdio.h> #include<conio.h> void main() { int number,i,divisible=0; /*here for others like number and i initialization is not compulsory as i is intialized in for-loop and for number it is initialized by 'scanf-function'*/ clrscr(); printf("Enter a number"); scanf("%d",&number); for(i=1;i<=number;i++) {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(number%i==0) divisible++; } if(divisible==2) printf("IT IS PRIME NUMBER"); else printf("IT IS COMPOSITE OR NOT PRIME NUMBER"); getch(); } Here i loop starts from zero to number and for each exact division, variable divisible is incremented by one, so that after the for-loop terminates if divisible is equal to two only; shows that the number was divisible by one and itself only but not by any numbers from zero to number, so it is prime. NOTE: Every number is exactly divisible by one and by itself, prime numbers are strictly limited to it but composite numbers are exactly divisible by at least one new number in addition to it. #include<stdio.h> #include<conio.h> void main() { int number,divident=2; clrscr(); printf("Enter a number"); scanf("%d",&number); while(divident<number){ if(number%divident==0) { printf("IT IS COMPOSITE OR NOT PRIME NUMBER"); if(getch()) exit(0); } /*here getch() is used to hold statement printed on the screen beefore 'exit'-function is executed */ divident++; } printf("IT IS PRIME NUMBER"); getch(); // to hold the value printed on screen till any character is given } Here we are using while-loop instead of for-loop. It is similar to the case of for-loop. These forloop, while-loop can also be replaced by goto-statement like this #include<stdio.h> #include<conio.h> void main() { int number,divident=2; clrscr(); printf("Enter a number"); scanf("%d",&number); again: if(divident<number) { /* here we are limiting the range of divident, it is our first aim to limit the divident than the checking of divisible so this 'if' is used at first*/ if(number%divident==0) { printf("IT IS COMPOSITE OR NOT PRIME NUMBER"); if(getch()) exit(0); } divident++; goto again; /*we can place these statements in 'else'-statement too*/ } printf("IT IS PRIME NUMBER"); getch(); }

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

FIBONACCI SERIES
IF THE FIBONACCI SERIES IS
1, 1, 2, 3, 5, 8, 13, 21 ..

We see pattern from third term that it is sum of two numbers before it; 2=1+1, 3=2+1, 5=3+2. For this, our result is sum of two numbers whose one number is previous sum and other is one step more previous sum (or the number proceeding to what we are concerning to for sum or the number we are concerning with). a b c printed value (c) statement value statement value statement value a=0 0 b=1 1 a+b 1 1 a=b 1 b=c 1 a+b 2 2 a=b 1 b=c 2 a+b 3 3 a=b 2 b=c 3 a+b 5 5 a=b 3 b=c 5 a+b 8 8 a=b 5 b=c 8 a+b 13 13 a=b 8 b=c 13 a+b 21 21 a=b 13 b=c 21 a+b 34 34 And this process goes on. In the program 1 at initial is printed to maintain pattern and this happened due to inefficient initialization of values a and b. The approaching next method cracks it. #include<stdio.h> #include<conio.h> void main() { int a=0; int b=1; int c,i,n; printf("Enter a Number\t"); scanf("%d",&n); printf("%d\t",b); for(i=1;i<n;i++) { c=a+b; printf("%d\t",c); a=b; b=c; } getch();} Here for our initialization purpose we declare a=0, b=1 so that our sum c=0+1 is 1 initially and second time after interchanging a, b, c we get c=2 so we print b (=1) initially we continue the pattern however the loop continues for n-1 times as the first number is made to print automatically on any cost or input.

10

IF THE FIBONACCI SERIES IS By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
0, 1, 1, 2, 3, 5, 8, 13, 21

Then we conclude that 0 must be sum of two terms in such a way that the second of two terms=zero =1. So these numbers must be -1 and 1. Other interchanging and printing process are same to above. a statement value a=-1 -1 a=b 1 a=b 0 a=b 1 a=b 1 a=b 2 a=b 3 a=b 5 And this process goes on. b statement b=1 b=c b=c b=c b=c b=c b=c b=c c statement a+b a+b a+b a+b a+b a+b a+b a+b printed value (c) 0 1 1 2 3 5 8 13

value 1 0 1 1 2 3 5 8

value 0 1 1 2 3 5 8 13

#include<stdio.h> #include<conio.h> void main() { int a=-1,b=1,c,n,i; printf("Enter a number\t"); scanf("%d",&n); for(i=1;i<=n;i++) { c=a+b; printf("%d\t",c); a=b; b=c; } getch();}

11

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

DIGITS OF A NUMBER
DIGITS TAKING FROM A NUMBER
Digit taking from a number is very useful and important task because while dealing to numbers in C, we need the digits calculations. Digits of any number in its corresponding number system are nothing but the remainder by division by the base of the system to the particular number. So we divide by 10 and take the remainder for the purpose. However after a digit is taken, we need to remove a digit (last) from the number so that we can take next digit by similar above process. For removing last digit (i.e. at ones place) we make integer division by 10(this takes quotient before decimal point). This process continues till num>0 and digits are taken each time to which we can process. #include<stdio.h> #include<conio.h> void main() { int digit[15],num,i=0,j; printf("Enter a Number"); scanf("%d",&num); while(num>0) { digit[i]=num%10; num=num/10; i=i+1; } for(j=i-1;j>-1;j--){ printf("\nThe digit in %d place is %d",j+1,digit[j]); } getch();}

12

The next way is not to remove digit(last) from numbers instead calculating digits by dividing the num each time by ones..tens.hundreds (tens multiples) and the remainder is divided by appropriate ones..tens. Here the onestens..of the later is one step-down above step because the remainder of initial contains the levels of digits of required plus the digits below the level so they are removed by integer division. Here level means digits place from right (ones, tens, hundreds). #include<stdio.h> #include<conio.h> void main() { int digit[15],d,num,i=0,j,a=1,b=10,temp; printf("Enter a Number");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
scanf("%d",&num); temp=num; while(temp>0) { d=num%b; digit[i]=d/a; a=a*10; b=b*10; temp=temp/10; i=i+1; } for(j=i-1;j>-1;j--){ printf("\nThe digit in %d place is %d",j+1,digit[j]); } getch();} Here a variable temp is required to continue loop for number of digits available. A number (decimal) continuously divided by 10 for n times until quotient 0, gives number of digits because each digit disappears in integer division by 10 (base of decimal system).

Similarly we can convert the number to string and its each character can be taken by string function and then its (each characters) integer value can be reversed back. It is because there are string functions that work on characters. Let num be a character digit then X=num-0zero It gives difference in ASCII values of num and zero i.e. actual number (integer value) Number is converted to character like 123 #include<stdio.h> #include<conio.h> #include<string.h> void main() { int j; char num[15]; char dconvert[15]; printf("Enter a Number"); scanf("%s",num); strcpy(dconvert,num); for(j=0;j<strlen(dconvert);j++){ printf("\nThe digit in %d place has ASCII value = %d",j+1,dconvert[j]); } getch();}

13

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

PALINDROME
PALINDROME FOR NUMBER A palindrome number is that number for which the digits scanned from front is equal to glanced from back. For e.g. 12321, 121, 125797521. Here we are taking each digit and converting the digits (of number) to values. Here we are not sure with how many digits are there so this can be solved especially by two ways- one connecting each numbers(digits) by converting to character and concatenating them and finally string to integer value and then comparing the value with original value to find whether it is palindrome or not. #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> void main() { int j,number=0,digit; char num[15]; char dconvert[15]; printf("Enter a Number"); scanf("%s",&num); strcpy(dconvert,num); for(j=strlen(dconvert)-1;j>=0;j--){ digit=dconvert[j]-'0'; number=(number*10)+digit; } printf("The reversed number is\t%d\n",number); if(atoi(num)==number) printf("It is palindrome"); else printf("It is not Palindrome"); getch();} In above process after a digit is calculated then the previous number is multiplied by 10 (if available) so as to increase its level i.e. from ones to tens, tens to hundreds and so on and the digit is added to it to make required number. As for the case we take second digit from left of 51 i.e. 5 whose succeeding digit is 1 already stored in number is multiplied by 10 and added to new digit, i.e., (1*10)+5, that equals 15 which is reverse of 51 but not palindrome number. Similar method is used in below program. But for the process using numerical tools, we first up all find digits and each previous digit (if available) then multiplied by suitable and then the new digit is added to. This process continues till digits come. Here suitable means 10 each time because ten is the base of decimal or each digit differ from its left digit by tens.

14

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Here atoi defined in <stdlib.h> converts string to integer. #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> void main() { int j=0,number=0,digit=0,digita=0,numa=0; char dconvert[100],num[10]; printf("Enter a Number"); scanf("%s",&num); int a=0; for(j=(strlen(num)-1);j>=0;j--){ digita=num[a]-'0'; a+=1; numa=(numa*10)+digita; digit=num[j]-'0'; number=(number*10)+digit; } if(numa==number) printf("\nIt is palindrome"); else printf("\nIt is not Palindrome"); getch(); } String can be converted to number directly by function 'atoi' but it can be done taking a character of string each time and subtracting it to ASCII value of zero i.e. '0'(ASCII values are those particular numbers representing some characters, letters or any symbol in computer).In these processes we can take characters of string either from front or from back but the index num[j] in above should be in increasing and decreasing respectively from 0 to length-1 and length-1 to 0 respectively.

15

AN ANALYSIS OF RETURNING BACK NUMBER FROM DIGITS The method is to find each digits similar to above and then each digit is multiplied by suitable and then added to previous digit (or number if available). Here suitable means power of 10 because the new value means increase in tens level. #include<stdio.h> #include<conio.h> #include<math.h> void main() { int i,num,number,digit,lastdigit=0; printf("Enter a Number"); scanf("%d",&num); for(i=0;num>0;i++) { digit=num%10; num=num/10; int temp=digit*pow(10,i);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("\n%d is added to%d",temp,lastdigit); lastdigit=digit*pow(10,i)+lastdigit; } printf("\nThe supplied number was%d",lastdigit); getch(); }

PALINDROME FOR STRING Similar to palindrome numbers, palindrome strings are those strings in which characters glanced from front is equal to glanced from back. For e.g. radar, madam, yagay, eye, eve.

1. Using reversing string function


#include<stdio.h> #include<conio.h> #include<string.h> void main() { char string[10]; char temp[10]; printf("Enter a String"); scanf("%s",string); strcpy(temp,string); strrev(string); if(strcmp(temp,string)==0) printf("\nThe String is Palindrome"); else printf("\nThe String is not Palindrome"); getch();} OR #include<conio.h> #include<string.h> void main() { char string[100],comp[100]; printf("Enter a String"); scanf("%s",string); strcpy(comp,string); strrev(string); if(strcmp(comp,string)==0){ printf("\nThe String is Palindrome"); } else { printf("\nThe String is not Palindrome");

16

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} getch();} Here temp variable is for transition case and sudden change in string before comparison.

2. A char[] is declared where each time a new last character from string is taken one by one as array and then checking is done to original string
#include<stdio.h> #include<stdio.h> #include<conio.h> #include<string.h> int main() { int i; char temp[2]; char string[30]="",newstring[30]=""; printf("Enter a String"); scanf("%s",string); for(i=strlen(string)-1;i>=0;i--) { temp[0]=string[i]; strcat(newstring,temp); } if(strcmp(newstring,string)==0){ printf("hello.........."); printf("the String is Palindrome"); } else { printf("hello"); printf("\nThe String is not Palindrome"); } getch(); return 0; }

17

Here the newstring is to hold old value which is every time concatenated with new value.

3. Palindrome for string containing even or odd quantity of characters


This method uses the property of even and odd in palindrome that half alphabets taken from front if equals to half alphabets taken from back then it is palindrome. But for odd (half-1/2) is compared because the central alphabet is always constant as its pace from front is equal to from backward. For e.g. In case of even number of characters containing string like YAGGAY, here we need to read first three characters from Y to G and store in front variable then we need to read last three characters from Y to G in reverse manner and store in reverse variable. If reverse is same to front variable then it is palindrome, for the particular case it is palindrome.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
In case of odd numbers of characters containing string like YAGAY, here we need to read first two characters YA and store it in front and similarly read last two characters YA in reverse manner and store in reverse and comparison is done. Here the central character G holds the same value for the same position when read either from front or from reverse, so the comparison for this central character is rejected from front and reverse variables.

#include<stdio.h> #include<conio.h> #include<string.h> void main() { int i; char string[100],front[100]="",reverse[100]=""; printf("Enter a String"); scanf("%s",string); if(strlen(string)%2==0){//for case of even strncat(front,string,strlen(string)/2); strncat(reverse,strrev(string),strlen(string)/2); } else {//for case of odd strncat(front,string,(strlen(string)-1)/2); strncat(reverse,strrev(string),(strlen(string)-1)/2); } if(strcmp(front,reverse)==0) printf("\nThe String is Palindrome"); else printf("\nThe String is not Palindrome"); getch();}

18

4. Palindrome for string using for-loop


#include<stdio.h> #include<conio.h> #include<string.h> int main() { int i; char string[100]="",newstring[100]=""; printf("Enter a String"); scanf("%s",string); static char temp[1]; for(i=(strlen(string)-1);i>=0;i--) { temp[0]=string[i]; strcat(newstring,temp); } if(strcmp(newstring,string)==0){ printf("\nThe String is Palindrome");} else{ printf("\nThe String is not Palindrome");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} getch(); return 0;}

ELECRTICITY AUTHORITY
An electricity board charges according to the following rates: Units Charges (In NRs.) 0-100 40 101-200 50 201-ABOVE 60 All users are also charged meter charge, which is equal to Rs. 50. Write a complete C program to read the number of units consumed and print out the total charges. Here the first condition is to check whether the unit is within range 0 to 100 or 101 to 200 or 201 to above. After this we calculate the charge for units above higher maximum range then the units is reduced for lower range continuously whereas on the other hand, charge is added systematically from higher to lower level. Here goto has a special purpose of direct connection. It connects higher range to lower range before this, units of higher are reduced to lower because goto sends to lower where calculations of lower range only is necessarily to be done. /*ELECTRICITY AUTHORITY CHARGES AS FOLLOW Units Charges (In NRs.) 0 to100 R.s.40 101 to 200 R.s.50 201to ABOVE R.s.60 AND IT TAKES Rs. 50 as meter charge. A PROGRAM THAT INTAKE UNITS CONSUMED AND FIND OUT TOTAL CHARGE.*/ #include<stdio.h> #include<conio.h> void main() { int units=0,charge=0,choice=0,totalcharge=0; printf("ELECTRICITY AUTHORITY CHARGES AS FOLLOW\nUnits----Charges (In NRs.)\n0 to100 R.s.40\n\n101 to 200 R.s.50\n\n201to ABOVE R.s.60\n\nAND IT TAKES Rs. 50 as meter charge\n"); printf("\nEnter Units Consumed\t"); scanf("%d",&units); int old=units; if(units>200){ choice=200; } else if(units>100){ choice=100; } else { choice=0; }

19

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
switch (choice){ case 200: charge=(units-200)*60; units=200; totalcharge=charge; printf("\nAbove '200' units i.e. 201 to %d (%d * 60)= %d",old,old-200,charge); old=200; goto A; case 100: A: charge=(units-100)*50; totalcharge=totalcharge+charge; units=100; printf("\nAbove '100' units i.e. 101 to %d (%d * 50)= %d",old,old-100,charge); old=100; goto B; case 0: B: charge=units*40; totalcharge=totalcharge+charge; printf("\nAbove '0' units i.e. 0 to %d (%d * 40) = %d",old,old-0,charge); totalcharge+=50; printf("\n Meter Charge = %d",50); break; default: printf("Invalid Input"); } printf("\n-------------------------------------------------------"); printf("\nThe total cost of power consumed is NRs. %d",totalcharge); getch(); }

20

We can improve its continuity by adding a line and a index using goto statement, like this. /*ELECTRICITY AUTHORITY CHARGES AS FOLLOW Units Charges (In NRs.) 0 to100 R.s.40 101 to 200 R.s.50 201to ABOVE R.s.60

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
AND IT TAKES Rs. 50 as meter charge. A PROGRAM THAT INTAKE UNITS CONSUMED AND FIND OUT TOTAL CHARGE.*/ #include<stdio.h> #include<conio.h> void main() { printf("ELECTRICITY AUTHORITY CHARGES AS FOLLOW\nUnits----Charges (In NRs.)\n0 to100 R.s.40\n\n101 to 200 R.s.50\n\n201to ABOVE R.s.60\n\nAND IT TAKES Rs. 50 as meter charge\n"); int units=0,charge=0,choice=0,totalcharge=0; maina : printf("\nEnter Units Consumed\t"); scanf("%d",&units); int old=units; if(units>200){ choice=200; } else if(units>100){ choice=100; } else { choice=0; } switch (choice){ case 200: charge=(units-200)*60; units=200; totalcharge=charge; printf("\nAbove '200' units i.e. 201 to %d (%d * 60)= %d",old,old-200,charge); old=200; goto A; case 100: A: charge=(units-100)*50; totalcharge=totalcharge+charge; units=100; printf("\nAbove '100' units i.e. 101 to %d (%d * 50)= %d",old,old-100,charge); old=100; goto B; case 0: B: charge=units*40; totalcharge=totalcharge+charge; printf("\nAbove '0' units i.e. 0 to %d (%d * 40) = %d",old,old-0,charge); totalcharge+=50; printf("\n Meter Charge = %d",50); break; default: printf("Invalid Input"); } printf("\n-------------------------------------------------------"); printf("\nThe total cost of power consumed is NRs. %d",totalcharge); printf("\n\n do you continue\n press 1 to continue");

21

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(getch()=='1') { goto maina;} }

Here maina index repeats the statements only if 1 value is entered. getch() takes a character so 1 is user to make 1 as character. PU2006SPRING 3b) Electricity board charges according to the following rates. For the first 100 units -------------------------- Rs. 40 per unit For the next 200 units ------------------------- Rs. 50 per unit Beyond 300 units ------------------------------ Rs. 60 per unit All users are also charged meter charge, which is equal to Rs. 50. Write a complete C program to read the number of units consumed and print out the total charges. Next analyzing way in a little bit detail #include<stdio.h> #include<conio.h> /* units range cost 301 Rs. 60 101 - 300 Rs. 50 1 - 100 Rs. 40 */ void main() { float units=0,cost=0; printf("\nEnter Units Consumed:\n"); scanf("%f",&units); if(units>300) { cost=100*10+200*50; units=units-300;

22

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
cost=cost+(units*60); } else if (units>100) { cost=100*40; units-=100; cost=cost+(units*50); } else { cost= units*40; // the only last possible condition units>0 } cost=cost +50;//we can replace it by using this to each blocks of if-elseif ladder /*In scase instead of 50 as charge if 15% is taken as any kind of sharge like meter charge or vat then 'cost=115/100*cost' or'cost=cost+(15/100*cost)' can be used*/ printf("The total cost of %f units is %f",units,cost); getch(); } --------------------------------------------program termination---------------------------------------------Next view for analyzing problem in next way but for these no real program codes are written /* units range cost 1 - 100 Rs. 40 101 - 300 Rs. 50 301 Rs. 60 */ if(units<100) { cost=units*40; } elseif(units<300) { cost=100*40; units-=100; cost=cost+unit*50; } else { cost=100*40+50*200+(units-300)*60;// a single statement like this can also work } cost+=50; ---------------------------termination of one way of viewing program-----------------------------Next view for analyzing problem in next way but for these no real program codes are written (by simple if statements using logical operators) declare global_units=units; if(units<100 { // this can ber replaced bu units>0 && units<100 cost=units*40;

23

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} if(units<300 && units>100) { cost=10*/40+(units-100)*50; } if(units>300) { cost=100*40+200-50+(units-300)*60; } ---------------------------termination of one way of viewing program-----------------------------The coming process is similar to done in ELECRTICITY AUTHORITY already but this process is simple in the manner that it doesn't use goto, which may be confusing for readers to analyze. This coming method uses the technique of dividing operations in parts in such a way that each part is executed if only the condition in 'if' is satisfied. If the condition is satisfied then some operations is done. This operation is related to the condition of the particular 'if' then the necessary quantity whose calculation is done is removed from the value to which calculation is to be done as a whole. Realizing problem in codes speak more than words or programming analysis is great than language taking programming. if(units>0) { if(units>100){ cost=100*40; units-=100; } else { cost=units*40; units=0; } } if(units>0) { if(units>200){ cost=cost+200*50; units-=200; } else { cost=cost+units*50; units=0; } } if(units>0) { cost=cost+units*60; units=0; } ---------------------------termination of one way of viewing program------------------------------

24

Here block of if-statement checks condition as follow: By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
block block block block block part part part part part Checks units >100 Checks units <100 Checks units >200 Checks units <200 Checks units >300

Here each block has specified work to do. Block calculates the sum for the units between 1 to 100 units and then it extracts the calculated portion from the total consumed units by subtracting units to calculated amount of units. So that the next block of if needs to calculate the sum for next range of units, i.e. 2of 10 units to 300 units but its range is 200 and as calculated part (1 to 100) is extracted so ------------0-------------------------100--------------------200--------------------300--------------

It is extracted

It is left

In the last part, we similarly do for the range (101-300) and finally the left all is done by block. Here in each terminating of part of each block, units is assigned zero. Sothere is no necessary of further calculations. It is because the part of each block (except block) works taking the condition on the basis that it works for particular range with leaving some range for succeeding block. It means, for e.g. part of block works in such that in it works for particular range of 101-300 and leaving 300-above range for block so here units is still left to be calculated for block and this all is the reflection of the condition of if of part of block if (units>200) i.e. from 101 to 300. For e.g. If 500 units is consumed then calculation takes as below:(Termination in block) Block Block Block Block Block units>0 500>0 True -

25

units>100

500>100

True

cost=100*40 units-=100 -

4000 500-100 -

4000 400 -

units>0

400>0

True

units>200

400>0

True

cost=cost+200*50 units-=200 cost=cost+(units*60) units=0

4000+200*50 400-200 14000+200*60

14000 200 26000

units>0

200>0

True

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Let us assume consider for value units 60 that must terminate in block Block- Block- Block- Block- units>0 60>0 True -

units>100

60>100

False

cost=units*40 units=0 -

60*40 0 -

2400 0 -

units>0

0>0

False

units>0

0>0

False

Let us consider for value units 150 that terminate in block:Block Block Block Block Block units>0 150>0 True -

26

units>100

150>100

True

cost=100*40 units-=100 -

100*40 150-100 -

4000 50 -

units>0

50>0

True

units>0

50>200

False

cost=cost+(unit*50) unit=0 -

4000+(50*50) 0 -

6500

units>0

0>0

False

Actually in designing problem, we need to consider ourself as programmer and we need to analyze all the steps or execution that takes for each possible input of users. Then we must realize in writing and executing. Here in above program, we need to analyze the execution of value of cost and units for each possible input of users. There are many possible conditions even including simple if, it depends on flow of direction of executing from top range to low range or vice-versa.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

ARRAY
The derived structured data types are more effective in C because user can himself declare according to his requirement where every element has some relationship forming a structure. Arrays are important regarding structure type data and these structures can be efficiently, easily used on userinterference dynamically by numbers, characters or strings (sum of characters). Names and locations are unique for the ordinary purposes but when we want to use a common term related to both we use array. Arrays are two-one that is fixed i.e. static whose declaration is completed before initialization or running of main part of program. Such array are less effective, easier and the only two purposes of such array is to-one for just demonstration of way of using array or how array works and the other may be making collection of characters or numbers in small space rather than making separate space for each terms. The other dynamic is vast because it include static plus the working that is not possible from any else (even static). The dynamic array works on the principle of two-one in which its limit is fixed by program and the other is made by user himself. The later one is more effective. For this the program either directly or indirectly or through process of calculations declares the size of array. To make arrays cycle, we use loop with a variable different each time (by+1, -1 or any according to the conditions). Usually we declare by incrementing each value by 1 because in array numbers are taken in sequential addresses starting from 0 to one number less than total quantity of elements. For this purpose we can use, if and using counter and goto, similarly while, counter or simply for. The easier one, concise one is for, we generally use it except for case where if is used when condition is needed more to be focused, goto if direct linkage is necessary immediately or in some making program more effective, fast etc. However using if and exit inside for-loop can work. In array, we use for-loop generally from (i=1 to n) to take numbers and give them to addresses i=0 to i=n-1 because in array address starts from 0 but quantity is n, so last address is n-1. Similarly, we use such loop for output of numbers or characters. It they are sequentially to be printed out we use i=0 to n-1 (i=1 to n) incrementing or decrementing (i=n to 1 or i=n-1 to 0) by 1 but sometimes a gap of addresses is required for this appropriate increment or decrement is done. For the case of sorting-bubble, selection, two loops were taken and array calculation was done. This is illustrated in Loop Section. However while understanding array calculation we must be clear about loop. Because it is only way to read or write the array elements in its proper address of finite or infinite array elements (infinite here means in the way that we dont know the exact quantity of elements as it is user-dependent). Any program must be logically and technically strong enough to hand no limitations regarding quantity and quality of values provided by users for unlimited time purpose. #include<stdio.h> #include<conio.h> void main() { int number[5],i; for(i=0;i<5;i++) { printf("Enter a Number"); scanf("%d",&number[i]); } for(i=0;i<5;i++) { printf("\nThe %d th number is %d",i+1,number[i]); } getch(); }

27

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Besides reading and writing, loops are used to continue many cycles in arrays, some for comparisons, some for arithmetic and logical calculations, some for arrangements and many more. In sort, there were two loops for comparison and interchanging calculations. Look sorting for detail analysis. However in this we will be concerned with array only. In each loop, we find different sequentially coming array elements compared with other sequentially. In this way every array elements got compared and our purpose satisfied. Such loops and arrays are just general purposes. We can extend it to 2-D, 3-D or even multi-dimensional purpose. Each time we use more dimension, we need a looping more i.e. if 2 loops for 1-D then for the same purpose 3 loops is necessary for 2-D and similarly for others because one more loop is necessary for 1-D to 2-D because in each step of D, there is one more necessity of a loop in defining array elements. For 3-D process, for same one more loop is required to find the one more dimension of array. So regarding the purpose of sorting, 2 loops for 1-D, 3 loops for 2-D, four loops for 3-D and so on for multi-dimensional.

2D:
In 2-d array, two co-ordinates are use to specify the point of address as there are rows and columns. So the two loops to define 2-D array elements. #include<stdio.h> #include<conio.h> void main() { int number[2][2],i,j; for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("Enter a Number"); scanf("%d",&number[i][j]); } } for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("\nThe number in %d row and %d column is \t %d",i+1,j+1,number[i][j]); } } getch(); }

28

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
a 1 2 3 4 b 1 to 1 1 to 2 1 to 3 1 to 4 result 1 12 123 1234

PU2008FALL 2b)
WAP that asks a user for a number and finds out if the number is present in the D array given below: int arr[3][3] ={{6,37,33}, {12,11,13}' {14,85,96} };

#include<stdio.h> #include<conio.h> void main() { int found=0; int i,j,num,arr[3][3]={ {6,37,33}, {12,11,13}, {14,85,96} }; printf("Enter a number:\t"); scanf("%d",&num); for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(arr[i][j]==num) found++; } } if(found==1)printf("Found"); else printf("Not Found"); getch(); } In this program, it uses one of the techniques of declaring values in 2D-array. Here row elements are 6, 37and 33, row elements are 12, 11and 13 and row elements are 14, 85, and 96. Row Column 0 1 2 0 1 2

29

6 37 33

12 11 13

14 85 96

GREATEST AND SMALLEST NUMBER AMONG N NUMBERS (using array)


Here a variable greatest and smallest is declared and then the comparison is done with the variable to other numbers serially coming in arrays by the help of for-loop. According to our necessity-

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
greatest or lowest, the sign of comparison is assigned and value is assigned if condition is true. After the completion of all comparison, we get greatest and smallest among n numbers. #include<stdio.h> #include<conio.h> void main() { int i=0,j=0,number,num[100],great,small; printf("\n Enter how many numbers?\n"); scanf("%d",&number); printf("\n\n\n Enter numbers\n"); for(i=0;i<number;i++) { scanf("%d",&num[i]); great=small=num[0]; if(num[i]>great) { great=num[i]; } if(num[i]<small){ small=num[i]; } } printf("The greatest number is %d\t and the smallest number is %d",great,small); getch(); }

30

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
PATTERNS OF CHARACTERS AND NUMBERS
For the purpose array is necessary because we deal with pointer rather than values even though it may seem that the output has connection with values. [NOTE: In some values have connections for this looping may be sufficient.] After talking about arrays, generally looping comes itself for the general case of dynamics. The output of Floyds triangle is a 2-D. so two loops are sufficient (in simple cases), one outer loop defines the rows and the second inner loop is for printing the pattern of columns corresponding to each rows declared by outer loop. The main analysis is needed for inner loop because the outer loop is just for counting the rows but inner has many things to do. The inner lop must develop a formula connecting the outer loops value with the patters to be printed and its connection to further coming patterns of inner loop. For this purpose, counter may be declared, incremented, decremented, multiplied, divided or reduced (in case of strings) or many variables that may be transitional or temporary or others can be declared according to the availability of resources and values of outer loop for the purpose of pattern resembling columns of corresponding outer loop. The above all we discussed is all about loops and arrays however our pattern can also be achieved by scanf and printf. These formatted functions use various field widths for various outputs but we need to develop a formula analyzing the printing patterns with the field width. These functions generally work for characters, however it works more conveniently with numbers but numbers being arithmetic are implemented by arithmetic process rather than by functions. However, output doesnt vary. In some, it is necessary for using such functions. Some of the tips for using these functions are as below:1. The field width is less than length of string implies that all to be printed as usual. 2. The value after decimal (if is present) implies the number of characters to be printed. If it is zero, nothing is printed. 3. The value before decimal makes the space to which printing is done. The printing is done in such a way from right (in reference to space) but from left (in reference to values it have). 4. The negative sign causes no gap in printing i.e. top-most left shifting. 5. If nothing is before decimal then the printing is usual however number after decimal restricts (if present).

31

An example to demonstrate the above function


#include<stdio.h> #include<conio.h> void main(){ int i; char string[]="NEPAL"; for(i=1;i<=5;i++) { printf("%-5.*s\n",i,string); } getch(); } Output: N NE NEP NEPA NEPAL

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Here in the function * is the value supplied by i. this function format is usually used in UNIX. Similarly, we can replace * by our necessary number and for this a more number or variable is declared in argument part. Analysis:- In the program, 5 defines the space to which printing is done it is every time (or for every loop it is 5), the negative sign shifts the output to left-most part. The * is pointed to I, whose value change from 1 to 5 so that each time the loop continues, the number of patterns increases serially one by one as the value of I of loop increases. So even though the output is in two-dimensional but a single loop works. Because the loop does two ting in this case (this case is for using functions), one it provides the rows to be printed and other it defines the number of characters to be printed corresponding to the row. For the case the number of rows is equal to the number of characters to be printed, so there is no necessity of declaring, calculating any more variables or any.

SCNAF FUNCTION FOR NUMBERS:All the above five tips are similar with two new things- one is 0 is declared before some number value before decimal point, then the spaces vacant are filled by zeros i.e.

printf("%07d",9855)

32
And other is that d can be replaced by ld, hd, d for long integers, short integers, etc. Here number before decimal gives total space and number after decimal gives space for decimal values. But the case for exponential is little different that part, that exponential takes the values according to the number value available and take separate place whose place cant be defined.

For e.g. float y=223.34568; printf("%-10.2e",y); 2 . 2 3 e + 0 0 2

Note: printf(%*.*f,width,precision,number) is valid. These functions are used for various patterns but especially these are used to concise large value in terms of exponent with proper width and precisions.

PATTERNS OF CHARACTERS AND NUMBERS USING PRINTF FUNCTIONS:For this case, as our patterns are in 2-D so usually two loops are required, however in some cases one loop works (if the value of one loop can compensate other also). One loop is for outer purpose of row and other is for column purpose. Similar to the 2-D array, here the purpose of two loops is similar. The main focus is on inner loop because the pattern is determined by it.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
BASIC PRINCIPLE OF PRINTING PATTERNS
Here two loops need to be required as general case but (being a special case) here) the row equals to the number of characters of the string NEPAL to be printed. So here one loop is efficient if concatenating function is used.

#include<stdio.h> #include<conio.h> #include<string.h> void main(){ int i; char a[]="NEPAL"; for(i=0;i<5;i++) { char final[5]=""; strncat(final,a,i+1); printf("%d%s",i,final); printf("\n"); } getch(); } Output: 0N 1NE 2NEP 3NEPA 4NEPAL

33

#include<stdio.h> #include<conio.h> void main(){ char a[]="NEPAL"; int i,j; for(i=1;i<=5;i++) { for(j=1;j<=i;j++) { printf("%c",a[j-1]); } printf("\n"); } getch(); } Output: N NE NEP NEPA NEPAL

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
As usual it uses two loops. Here the second is adjusted in such a way that it takes values from 1 to number of rows it is present or from 1 to the value of outer loop it corresponds to. This is the basic principle of making patterns. The above starts from 1 to 5, increasing 1 at a time means increasing 1 at time for each row increasing.

#include<stdio.h> #include<conio.h> void main(){ char a[]="NEPAL"; int i,j,k; for(i=1;i<=5;i++) { for(k=4;k>=i;k--){ printf(" "); } for(j=1;j<=i;j++) { printf("%c",a[j-1]); } printf("\n"); } getch(); } Output: N NE NEP NEPA NEPAL

34

Here as the rows increases, space decreases and in the same wave number of characters increases. However k is essential to declare that gives required space because here the value of k is decreasing but I and j are increasing. From above we can make a conclusion that the second loop is important and the main base is the second loop which under takes the consideration of outer-loop. We did for strings and similar is for numbers with the same basic fundamental principle.

Note: There are generally two ways of patterns- one is using string function directly and the other is using character one at each time by 2d-loops like for-loop. We have practiced both the methods in the examples above.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

SOME MORE PATTERNS


PU 2005 FALL5 IF INPUT IS NEPAL then output must be

1N 2EE 3PPP 4AAAA 5LLLLL


This program shows how the value of i can be used in both- characters printing and number printing. The corresponding value of i for number printing is one more than for characters as sharacter array starts from zero. #include<stdio.h> #include<conio.h> #include<string.h> void main(){ char a[50]; int i=0,j=0; printf("Enter a string"); scanf("%s",&a); for(i=0;i<strlen(a);i++) { printf("%d",i+1); for(j=0;j<=i;j++) { printf("%c",a[i]); } printf("\n"); } getch(); }

35

Nepal Nepa Nep Ne N

#include<stdio.h>

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
#include<conio.h> int main(){ char a[100]="Nepal"; int i=0,j=0,k=0; for(i=1;i<=5;i++) { for(j=1;j<=(5-i+1);j++) { printf("%c",a[j-1]); } printf("\n"); } getch(); return 0; }

Hello Hello Hel He H

36

#include<stdio.h> #include<conio.h> int main(){ char a[100]="hello"; int i=0,j=0,k=0; for(i=1;i<=5;i++) { for(k=1;k<i;k++){ printf(" ");} for(j=1;j<=(5-i+1);j++) { printf("%c",a[j-1]); } printf("\n"); } getch(); return 0; }

h he

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
hel hell hello

#include<stdio.h> #include<conio.h> int main(){ char a[100]="hello"; int i=0,j=0,k=0; for(i=1;i<=5;i++) { for(k=1;k<i;k++){ printf(" ");} for(j=1;j<=i;j++) { printf("%c",a[j-1]); } printf("\n"); } getch(); return 0; }

37

1 12 123 1234 12345


#include<stdio.h> #include<conio.h> int main(){ int number; printf("Enter a Number"); scanf("%d",&number); int i=0,j=0,k=0; for(i=1;i<=number;i++) { for(k=1;k<i;k++){ //space management printf(" ");} for(j=1;j<=i;j++) { //printing number from 1 to i for each line given by 'i' printf("%d",j);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} printf("\n");} getch(); return 0; }

= !
!

= 1 + +

+..

#include<stdio.h> #include<conio.h> #include<math.h> int main(){ printf("Enter power of e"); int x; scanf("%d",&x); printf("Enter n to be run"); int n; scanf("%d",&n); int i,j; float sum=0; float fact=1; for(i=0;i<=n;i++){ float value= pow(x,i); for(j=1;j<i;j++) fact=fact*j; /*factorial calculation*/ sum=sum+(value/fact); } printf("sum is %f ",sum); getch(); return 0; }

38

#include<stdio.h> #include<conio.h> #include<math.h> int main(){ printf("Enter value of x"); int x; scanf("%d",&x); printf("Enter n to be run");

1 2 3 4 5 6 + + +

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int n; scanf("%d",&n); int i,j; float sum=0; for(i=1;i<=n;i++){ float value= pow(x,i); if(i%2==0) { sum=sum-i/value; /*for the case of even index sign is negative*/ } else { sum=sum+i/value; /*for the case of odd index sign is positive*/ } } printf("sum is %f ",sum); getch(); return 0; }

PU2004
= + + . . 1! 2! 3! 4! 5!

39

#include<stdio.h> #include<conio.h> #include<math.h> int main(){ printf("Enter value of x"); int x; scanf("%d",&x); printf("Enter n to be run"); int n; scanf("%d",&n); int i; float sum=0,term; term= pow(x,1); for(i=1;i<=n;i++){ sum=sum+((-x*term)/i); } printf("sum is %f ",sum); getch(); return 0; } Here we are using a pattern =

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Where represents term and n is given by the for-loop; by i which gives the position of the term and x is the input given by user. We can do this by next method using a function that finds out factorial and taking help of i to find power of x and changing sign +,- after each term is found out and adding to sum , which is printed at last.

Pu2011-fall-4b WAP to print the series upto term is less than 250 Series

, . upto term>250

#include<stdio.h> #include<conio.h> #include<math.h> void main(){ int i=1; float sum=(pow(1,2)+pow(2,2))/3, oldsum=0; while(sum<250) { i+=1; oldsum=sum; sum=(pow(i,2)+pow(i+1,2))/(i+2); } printf("sum less than 250 is %f",oldsum); getch(); } Here actually at first the first term is kept in sum in initialization then it is checked and printed then i is incremented to meet the next term of the series but before printing it is checked strictly. Here sum is kept in float because we are not sure that the term is in int or not.

40

1111 1111 1111 1111


#include<stdio.h> #include<conio.h> int main(){ int i=0; for(i=1;i<=16;i++) { printf("%d",1); if(i%4==0){ printf("\n");} }

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
getch(); return 0; } Here we are using a single loop of i, as after the numeric value of i divisible (4, 8, 12, 16) is printed then line is broken out.

1 12 123 1234
#include<stdio.h> #include<conio.h> int main(){ int i=0,j=0,k=0; for(i=1;i<=4;i++) { for(k=1;k<=(4-i);k++){ /*to maintain required spacing*/ printf(" "); } for(j=1;j<=i;j++) { printf("%d",j); } printf("\n"); } getch(); return 0; }

41

hints 1 121 12321 1234321 11 1

1111

111

#include<stdio.h> #include<conio.h> #include<math.h> int main(){ int i=0,j=0,k=0; int num=0; int counter=0; for(i=1;i<=4;i++) { counter=counter*10+1; for(k=1;k<=(4-i);k++){ printf(" ");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} num=counter*counter; printf("%d",num); printf("\n"); } getch(); return 0; }

1 12 123 1234

#include<stdio.h> #include<conio.h> int main(){ int i=0,k=0; for(i=1;i<=4;i++) { for(k=1;k<=i;k++){ printf("%d",k); } printf("\n"); } getch(); return 0; }

42

4321 432 43 4
#include<stdio.h> #include<conio.h> int main(){ int i=0,k=0; for(i=4;i>=1;i--) { for(k=4;k>=(4-i+1);k--){ printf("%d",k); } printf("\n");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} getch(); return 0; }

0.1

0.03

0.005 0.0007 0.00009 . for n terms

//0.1 0.03 0.005 0.0007 0.00009 . for n terms #include<stdio.h> #include<conio.h> #include<math.h> int main(){ int n; double counter=1; printf("enter value of n"); scanf("%d",&n); int i; int zeroafterdecimal=0; for(i=1;i<=n;i++) { counter/=10; zeroafterdecimal++; printf("%f\t",counter); counter=counter+(2/pow(10,zeroafterdecimal)); } getch(); return 0; }

43

Floyds triangle 1 10 101 1010 10101 101010 . . . upto n lines


/*1

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
10 101 1010 10101 101010 */ #include<stdio.h> #include<conio.h> int main(){ int n; printf("enter value of n"); scanf("%d",&n); int i,j; for(i=1;i<=n;i++) { for(j=1;j<=i;j++) { if(j%2==0) printf("0"); else printf("1"); } printf("\n"); } getch(); return 0; }

44
55555.. upto n terms

55

555

5555 55555. upto n terms


5555

//5 55 555 #include<stdio.h> #include<conio.h> int main(){ int n; printf("enter value of n"); scanf("%d",&n); int i,j; int count=5; for(i=1;i<=n;i++) {

printf("%d\t",count); count=count*10; count+=5; } getch(); return 0; }

NEPAL EPA P By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
#include<stdio.h> #include<conio.h> #include<string.h> int main() { printf("enter a string (odd length)\t"); char string[40]; scanf("%s",&string); int length=strlen(string); int i,j,k; int tim=length; for(i=1;i<=((length/2)+1);i++){ for(k=1;k<i;k++) printf(" "); for(j=i;j<=tim;j++){ printf("%c",string[j-1]); } tim=tim-1; printf("\n"); } getch(); return 0; } OR /* NEPAL EPA P */ #include<stdio.h> #include<conio.h> #include<string.h> int main() { printf("enter a string (odd length)\t"); char string[40]; scanf("%s",&string); int length=strlen(string); int i,j,k,con=0; for(i=length-1;i>=0;i--){ for(k=i;k<length-1;k++) printf(" "); for(j=con;j<=i;j++){ printf("%c",string[j]); } con++ ; printf("\n"); } getch(); return 0; }

45

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Here in second case I = 4to 0 shows last position of character of each line up to which js value starts from k=0 in first and then k++ i.e. k=1..to k=2.however for k=3, i=1 so , j<=i doesnt satisfy and runs without any output. However the loop of I runs 2 more then necessary this can be controlled by adding a condition that is if (k=i) break; in this condition the value of j is controlled up less or equal to equal or less.

1 2 3 4 4 3 4 2 3 4

#include<stdio.h> #include<conio.h> #include<string.h> int main() { int n; printf("enter a number\t"); char string[40]; scanf("%d",&n); int i,j,k; for(i=0;i<n;i++){ for(k=1;k<n-i;k++) printf(" "); for(j=0;j<=i;j++){ printf("%d",i+1); } printf("\n"); } getch(); return 0; }

46

1 22 333 4444 55555


#include<stdio.h>

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
#include<conio.h> #include<string.h> int main() { int n; printf("enter a number\t"); char string[40]; scanf("%d",&n); int i,j,k; for(i=0;i<n;i++){ for(k=0;k<i;k++) printf(" "); for(j=0;j<=i;j++){ printf("%d",i+1); } printf("\n"); } getch(); return 0; }

PATTERNS OF * * ** *** ****


#include<stdio.h> #include<conio.h> int main(){ int n; printf("enter value of n"); scanf("%d",&n); int i,j; for(i=1;i<=n;i++) { for(j=1;j<=i;j++) { printf("*"); } printf("\n"); } getch(); return 0; }

47

**** *** By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
** *
#include<stdio.h> #include<conio.h> int main(){ int n; printf("enter value of n"); scanf("%d",&n); int i,j; for(i=n;i>=1;i--) { for(j=1;j<=i;j++) { printf("*"); } printf("\n"); } getch(); return 0; }

48

***** **** *** ** *


#include<stdio.h> #include<conio.h> int main(){ int n; printf("enter value of lines"); scanf("%d",&n); int i,j,k; for(i=n;i>=1;i--) { for(k=1;k<=(n-i);k++) { printf(" "); } for(j=1;j<=i;j++) { printf("*"); } printf("\n"); }

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
getch(); return 0; }

* *** *****
/* * *** ***** */ #include<stdio.h> #include<conio.h> int main(){ int n; printf("enter no of * but odd only else it change to lowest nearest odd"); scanf("%d",&n); int i,j,k; int count=0; for(i=1;i<=n;i+=2) { count++; for(k=1;k<=(n-count);k++) { printf(" "); } for(j=1;j<=i;j++) { printf("*"); } printf("\n"); } getch(); return 0; }

49

***** *** *
/* ***** ***

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
* */ #include<stdio.h> #include<conio.h> int main(){ int n; printf("enter no of * but odd only "); scanf("%d",&n); int i,j,k; int count=0; for(i=n;i>=1;i-=2) { count++; for(k=1;k<count;k++) { printf(" "); } for(j=1;j<=i;j++) { printf("*"); } printf("\n"); } getch(); return 0; }

50

* ** *** ****
#include<stdio.h> #include<conio.h> int main(){ int n; printf("enter no of lines"); scanf("%d",&n); int i,j,k; int count=0; for(i=1;i<=n;i++) { count++; for(k=i;k<n;k++) { printf(" "); } for(j=1;j<=i;j++) { printf("*"); } printf("\n"); } getch();

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
return 0; }

* ** *** ****
Here one space increase by each new line. #include<stdio.h> #include<conio.h> int main(){ int n; printf("enter no of lines"); scanf("%d",&n); int i,j,k; for(i=1;i<=n;i++) { for(k=0;k<i-1;k++) { printf(" "); } for(j=1;j<=i;j++) {

51

printf("*"); } printf("\n"); } getch(); return 0; }

SOME MORE DIFFICULT PATTERNS Pyramid of numbers: 1 By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
2 3 4 5 6 5 7 4 6 8 3 5 7 9 2 4 6 8 3 5 7 4 6 5

#include<stdio.h> #include<conio.h> void main() { int i,j,n=5; for(i=1;i<=n;i++){ for(j=1;j<=n-i;j++) printf("\t"); for(j=i;j<=2*i-1;j++) printf("\t%d",j); for(j=2*i-2;j>=i;j--) printf("\t%d",j); printf("\n"); } getch();}

52
9 7 5 3 1 8 6 4 2 7 5 3 6 4 5

Reverse pyramid of numbers 5 6 4 7 5 3 8 6 4 2

#include<stdio.h> #include<conio.h> void main() { int i,j,n=5; for(i=0;i<=n;i++){ for(j=n-i;j<=2*n-2*i-1;j++) printf("\t%d",j); for(j=2*n-2*i-2;j>=n-i;j--) printf("\t%d",j); printf("\n"); for(j=0;j<=i;j++) printf("\t"); } getch();}

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

Herein pyramid of numbers and its reverse, we are printing pattern in installments i.e. is in two parts; one part contains first 5 rows and the second contains left 4 rows. Such patterns are little bit difficult and are useless for exam-oriented so its details are exclude.

1 01 101 0101 10101 010101 1010101 01010101 101010101


Here back variable is used to alter the stored value (it is printed); 1 and 0, back variable works within a line only i.e. it changes value for appropriate values to be printed on same line. In contrast, fback variable stores the first character (here 1, 0 are printed as characters) for each line. To maintain pattern back and fback are initialized as zero. It is important to note the pattern that old value of fback not only changes fback but also back, but this alternating takes place one time for each new line, whereas the value of back alters within a same line for the number of times equal to the number of characters to be printed in the particular line. Study the scope of different for-loop for this purpose. #include<stdio.h> #include<conio.h> void main(){ int i,j,fback=1,back=1,n=20; for(i=0;i<n;i++) { for(j=0;j<=i;j++) if(back==1) back=0,printf("1"); else back=1,printf("0"); printf("\n"); if(fback==1) fback=0,back=0; else fback=1,back=1; } getch();}

53

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
1 2 3 4 5 6 5 7 4 6 8 3 5 7 9 2 4 6 8 3 5 7 4 6 5

Here input is 123456789. Read the relationship between outer i loop and inner j loop. Realizing the problem in 2D method, the rows of the above pattern or lines of above patterns are represented by i-loop and similarly the columns of the above pattern or values at specific positions are represented by j-loop. These things are mostly common in all 2D patterns; however the above pattern has many things to state. We have used a separate variable-s to manage spacing but we can use i variable (comparing i with a constant value) to manage space (such cases were done in former cases). The value of i-loop is not only used in specifying line but also in j-loop to specify characters. It is the coincidence that the line represented by i resembles first value to be printed for the line so i is used in j-loop. Similarly kloop (used to print the reverse mannered numbers) used the property of j as only for initialization purpose and uses variable- a but in decremented order to maintain reversed pattern. #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main() { int i,s,j,k; char string[100]; printf("Enter a string"); scanf("%s",string); printf("\n"); if(strlen(string)%2==0) {/*odd number of characters*/ printf("ODD quantity of string is only preferrable");/*this is the limitation of the pattern*/ exit(0); } for(i=0;i<((strlen(string)/2)+1);i++) { for(s=0;s<((strlen(string)/2)-i);s++) {/*space management*/ printf(" "); } for(j=i;j<((2*i)+1);j++) { printf("%c",string[j]); } int a=j-2; for(k=j+1;k<(j+1+i);k++){ printf("%c",string[a]); a--; } printf("\n"); }

54

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
getch(); return 0; }

Pascals triangle 1 1 1 1 1 1 1 6 5 15 4 10 20 3 6 10 15 2 3 4 5 6 1 1 1 1 1 1

55

Here input is 7. This pattern is same to binomial coefficients of Newtons expansion. The conclusion of the above pattern is element [row] [column] = element [row-1] [column-1] + element [row-1] [column] And a necessary vision is that the numbers glanced at from front or from behind each line is 1 for all the time. The expression if(j ==0 || j==i){ line[i][j]=1; declares it. Here j=0 means first value for each new line and j=i is the last possible value of j for the particulat line, the other thing we find is that the value of i for not only supports the row of pattern (or number of particular line) but also it supports the total quantity of numbers to be printed; if(j ==0 || j==i) here i has the second purpose but line[i][j]=1 has the first purpose. line[i][j]=line[i-1][j-1]+line[i-1][j]; this expresses the expression of above tabulation. printf("\t\t"); here double tab maintains the necessary pattern between the numbers within a same line. #include<stdio.h> #include<conio.h> void main() {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int i,j,k,n,line[50][50]; //clrscr(1); printf("Enter a Number"); printf("\t"); scanf("%d",&n); for(i=0;i<n;i++){ for(k=0;k<n-(i+1);k++){/*for tab space management before numbers*/ printf("\t"); } for(j=0;j<=i;j++){ if(j ==0 || j==i){ line[i][j]=1; printf("%d",line[i][j]); } else { line[i][j]=line[i-1][j-1]+line[i-1][j]; printf("%d",line[i][j]); } printf("\t\t"); /*for tab space management between numbers*/ } printf("\n\n"); /*for making more clearity of pattern*/ } getch(); }

56

PU2002 FALL 5
WAP that takes angle in degrees and give out value of sine for that angle without using sin() function of math library. Actually, do you how your computer or a pocket calculator finds the value of sine? It is the application of Taylors series for sine as follow:

sin x = ! ! + ! ! +

..

here, x is in radians. We can convert degrees to radians by : radian= #include<stdio.h> #include<math.h> #include<conio.h> float factorial(x){ float fact=1; int i; for(i=1;i<=x;i++){ fact=fact*i; } return (fact); } void main () { float degree,radian,sum=0,term;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int i,power; printf("Enter the angle in terms of degrees:\t"); scanf("%f",&degree); radian=(degree*3.14)/180; for(i=1;i<=10;i++) { power=(2*i)-1; if(i%2==1) { term=pow(radian,power)/(factorial(power)); } else { term=(-1*pow(radian,power)/(factorial(power))); } sum=sum+term; } printf("Sine(%f) =\t%f",degree,sum); getch(); }

Here we use factorial that calculates factorial for the term required. Initially after taking angle in degree we convert it into radians. Then a for-loop running ten times is used so that we can calculate the sum for ten terms, but this can be increased to any number (may be 99 or 999) so that we get our required accuracy in float values after decimal. Here we are using a pattern which shows that: 1. Each term has power like 1, 3, 4, 5, 7. i.e. (2n-1), where n shows the index of term indicating the position. For first position n=1 gives power=(2*1-1)=1, similarly for second term, power(2*2-1)=3, third has (3*2-1)=5 and so on.. So we are using variable power to represent the power for the term. 2. Each term is alternatively positive and negative. First term one is positive, second term is negative, third term is again positive, fourth term is negative and so on.. From this pattern, we see that if the index of term representing the position of the term is odd then the term is positive else it is negative. if (i%2==1) THEN term=(pow(radian,power)/(factorial(index))); else term=(-1*pow(radian,power)/(factorial(index))); As we know i here represents the index so we are checking if for i to find whether term is positive or negative and the statement following calculates required term with appropriate sign + or -. NEXT METHOD: #include<stdio.h> #include<math.h> #include<conio.h> void main () { float degree,radian,sum=0,term;

57

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int i; printf("Enter the angle in terms of degrees:\t"); scanf("%f",&degree); radian=(degree*3.14)/180; term=pow(radian,1); for(i=2;i<=2;i++) { term=term-1*(term*pow(radian,2))/((2*i-2)*(2*i-1)); sum=sum+term; } printf("Sine (%f) =\t%f",degree,sum); getch(); } Here we have little bit analyze the pattern of the terms with reference to two things: one is term preceding the term to be calculated and the other is with the index representing the position of the term to be calculated. If we study the pattern, we come with many conclusions, one of them may be like this (this one is used in the program): 1. In the numerator of each term, each term succeeding is multiplied by - to preceding term. 2. In the denominator, for eg. look 3! (of second term) is converted to 5! (of third term), by multiplying 3! by 4 and 5 one after another consecutively. We may analyze that each new term is obtained by dividing each preceding term to (2n-1) and (2n-2),i.e. denominator of any term=denominator of preceding term*(2n-1)*(2n-2), where n is the index representing the term to be found out. For e.g. denominator of third term=denominator of second term*[(2*3-1)*(2*3-2)=5*4]. This is how 3! is changed to 5!. (2n-1)*(2n-2) can be changed to (2n-2)*(2n-1) in order to make the order of ascending according to our easiness for the pattern of the program. Similarly, we may change this (2n-2)*(2n-1) = 2(n-1)*(2(n-1)+1) and we may use this in our code instead of (2n-2)*(2n-1), where i is used instead of n in code. By above, we come to conclusion, term x term = 2n 2 2n 1 OR term = term x 2n 1 2n 1

58

Where, n represents the index of the term to be found out. NOTE: if we cant any library function then in above instead of pow() use the method described to calculate power without any function of without function-section.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Conversion Decimal to binary

2 2 2 2

12 6 3 1 0 0 0 1 1

So 12 = 1100
Here factor-variable works as a multiplier to obtain appropriate numbers of appropriate digits, please refer Digits taking from number for further. // decimal to binary #include<stdio.h> #include<conio.h> int main() { int deci; int r; int sum=0; int factor=1; printf("enter decimal number\t"); scanf("%d",&deci); while(deci>0) { r=deci%2; deci=deci/2; sum=sum+r*factor; factor*=10; } printf("The answer is %d",sum); getch(); return 0; }

59

Binary to decimal 1100=1 2 + 1 2 + 0 2 +(0*2 )


// binary to decimal #include<stdio.h> #include<conio.h> #include<math.h> int main() {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int bina; int digit; int sum=0; int i=0; printf("enter binary number\t"); scanf("%d",&bina); while(bina>0) { digit=bina%10; bina/=10; sum=sum+digit*pow(2,i); i++; } printf("The answer is %d",sum); getch(); return 0; }

Exclusive use of switch-case and goto statements 2005PU


A program that takes a sum of money and starts converting it to smaller units where user can choose his first starting unit. The conversion is in such a way that the first starting units takes maximum possible conversion then the left sum is supplied to conjugate term following it, this process continues till the end. #include<stdio.h> #include<conio.h> int main(){ int currency; int choice; int m; printf("Enter currency\t"); scanf("%d",&currency); printf("\n Enter 1000 to start from 1000"); printf("\n Enter 500 to start from 500"); printf("\n Enter 100 to start from 100"); printf("\n Enter 50 to start from 50"); printf("\n Enter 20 to start from 20"); printf("\n Enter 10 to start from 10"); printf("\n Enter 5 to start from 5"); printf("\n Enter 2 to start from 2"); printf("\n Enter 1 to start from 1"); printf("-----------------------------------------------\n\n\n\n"); scanf("%d",&choice); switch (choice) { case 1000: goto thousand;

60

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
case 500: goto fivehun; case 100: goto hundred; case 50: goto fifty; case 20: goto twenty; case 10: goto ten; case 5: goto five; case 2: goto two; case 1: goto one; }

61

thousand: m=currency/1000; currency=currency%1000; printf("The no. of thousands(1000) is\t\t\t%d\n",m); goto fivehun; fivehun: m=currency/500; currency=currency%500; printf("The no. of five hundreds(500) is\t\t\t%d\n",m); goto hundred; hundred: m=currency/100; currency=currency%100; printf("The no. of hundreds(100) is\t\t\t%d\n",m); goto fifty; fifty: m=currency/50; currency=currency%50; printf("The no. of fifty(50) is\t\t\t%d\n",m); goto twenty; twenty:

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
m=currency/20; currency=currency%20; printf("The no. of twenty(20) is\t\t\t%d\n",m); goto ten; ten: m=currency/10; currency=currency%10; printf("The no. of ten(10) is\t\t\t%d\n",m); goto five; five: m=currency/5; currency=currency%5; printf("The no. of five(5) is\t\t\t%d\n",m); goto two; two: m=currency/2; currency=currency%2; printf("The no. of two(2) is\t\t\t%d\n",m); goto one; one: m=currency/1; currency=currency%1; printf("The no. of one(1) is\t\t\t%d\n",m); getch(); return 1; }

62

The general mechanism of each block of indices like fifty: five hun:.. checks whether the sum of money left for it after preeceeding calculations; are sufficient enough to hold that value or not. If yes then it does calculation. Here calculation means subtracting the left sum by the respective amounts

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
and then goto-statement transfers the execution flow to next succeeding block of indices until last index one:. Here m=variable gives the quantity of each amount in each block. At first user is given choice to start converting money from what bigger amount of sum like from 500 or 1000 or 100 or 50 or any. So the above mechanism starts from the respective block only. Here swich-case is used to meet users choice in various alternatives. If someone wants to coiunt money from 500 then the sum he enters will not be counted from 1000 instead it will be counted from 500 then 100 then 50 then 20 then 10 then5 then 2 and finally 1. It is not necessary that all blocks assume some value because the sum we enter are divisible for some; not for other and even if it is divisible the sum to be calculated on a block changes from block to block as the calculation begins.

SORTING

Selection sorting
Algorithm (for ascending) Compare a [1] with second element a [2]. If a [2] is smaller than a [1] then interchange their values. Compare a [1] with a [3]; interchange their values if a [3] is smaller than a [1]. Continue comparing a [1] with other numbers. Repeat above processes (1, 2 and 3) for a[2],a[3]a[n-1] comparing a[2] from a[3] to a[n], a[3] from a[4] to a[n]a[n-1] with a[n].

63

In the repeated trips the each element compares with other remaining elements coming after it and the smallest numbers come up directly by selection (or it may step up wisely by co-incidence). Hence it is called selection sorting as each element compares with the other. Actually, there is the comparison of no element but there is the comparison of elements of specified addresses. Elements dont change, however their addresses change. So in sorting, comparison is between addresses that take values as per condition; that is suited for the purpose-ascending or descending. Here each loop decides the comparison of element of an address to the other addresses but not of all addresses. So the inner loops successively give the necessary sorting. The trend of loops goes on decreasing from (n-1) to1 because as the loop continues each time, each address gets secured on its position.

We have started comparing numbers from j=0 to j=n-1 so the address (1) gets secured and then in next i=1 address (2) gets secured and so on. If we had started from j=n to j=2 (similarly to above case, here j=1 automatically secured after last loop because according to the sense we know any number of things can change their physical property; place in reference to a single thing or with reference to a body, others can only change in regard to the values they posses, not on the specific places they posses and hence in above case j=1 is not taken) the addresses of j=n first gets secured then j=n-1, j=n-2j=2 and j=1 automatically gets secured.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
While the outer loop, is to supply each number (or actually each address) at a time which can be altered in any positions of numbers from 1 to n-1 or n to 2. Here one is not taken this is the similar case described above because one becomes our reference address again.

Work of outer loop (i) is to just facilitate each numbers each time except the reference address. Work of inner loop (j) is to compare each address (pointer) with the other taking a reference address. The result wont alter if we take under consideration- the comparison of reference address but a good program minimizes the working time and process and in other proper understanding of pointers is the input for this program. So we dont take the reference pointer under consideration.

You can get soft copy of this book @ www.scribd.com/dpalikhe.


Illustration of Selection Sort of four items

64

In each trip, a value gets secured (or a pointer gets secured). The number of comparisons= (n-1) + (n2) + (n-3) +1 Sum of (n-1).1 is n (n-1)/2

[NOTE: Actually, we directly dont declare reference pointer but on our assumptions, automatically the reference pointer is achieved. We need to analyze it for more efficiency of the program.]

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
For descending we can simply change the condition; inverse the condition. NOTE: Examples are done in coming using selection and bubble sorting.

Bubble sorting
For ascending, Compare first two elements a [1] and a [2]. If a [2] is smaller than a [1], interchange their values. Compare a [2] and a [3]; interchange them if a [3] is smaller than a [2]. Continue for all values serially. Repeat above (1, 2, and 3) for (n-1) times.

In repeated trips through the array, the smallest elements bubble up to the top one step at one loop (inner loop). Because of this bubbling up effect, this algorithm is called bubble sorting. Ilustratration of Bubble Sort of four items

65

In each trip, the smallest number 10 shifts one position up at the end of trips. The number of comparisons = n (n-1)/2 In above,

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
4(4-1)/2 = 3+2+1 6=6 proved For Descending, change if (a[j]>a [j+1]) { to if (a[j] <a [j+1]) {

Third sorting process


The number of loops for both bubble and selection remains the same. The sorting processes are the same for both string and numbers. The above two sorting processes worked on the basis that each number is compared with others in the order of (n-1) to (n-2) to (n-3) to (n-4).to 1 times. This may sometime give unnecessary processes that take long time consuming in the case of dealing with a large quantity of numbers. Co-incidentally two or more numbers sometime may be in ascending or descending before our interaction with them. This ascending or descending may be with numbers of small packet range to higher packet range (here packet means a group i.e. numbers in consequent places) or these packets may be in large quantities i.e. more in numbers quantitatively. However the above programs cannot take the consideration or advantage of this (if it is available by co-incidence) because the above program works taking the base of pointer first then the numbers in pointers. There two loops were used. This advantage can be used by a concept using goto and a single loop. The above programs worked on the basis of securing each pointer each time and decreasing the inner loops, each time of outer loop. Taking both the advantages one of decreasing inner loop and other of taking probability of packets of ascending or descending numbers( that may have high probability of low or 0 co-incidentally), we can solve this by taking our base with the numbers (i.e. their values) at first then the pointers that are connected to. This is as follow: for(i=0;i<n;i++) { scanf("%d",&number); A: for(j=0;j<i;j++) { if(num[j]<number) { temp=num[j]; num[j]=number; number=temp; j++; /*deleting these two statements j++ ,goto A: also doesnt affect the output of program*/ goto A; } } } for(i=0;i<5;i++) { printf("%d",num[i]); } This method is exclusively used in coming sorting program.

66

Analysis of the solution


Numbers fixed 2. Numbers dynamic: - Dynamics over come and its special case is static. So, we take the dynamic array analysis. Each time a number is taken from users. Before that, array with proper dimensions and sizes are declared. So there are vacant spaces for the numbers. It

1.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
doesnt matter whether the consideration with string, character or numbers. Let us consider the above program for 1-D and for numbers. First of all the loop under (i) takes each number from user but it is not assigned to array because if it is assigned a next loop will be required a more time and this is with basis of pointer rather than number similar to above sorting processes and hence it doesnt work on our requirement. Assigning to an array means basis on pointers rather than numbers. So the number is stored in variable called number that takes different values supplied for different times or in different loops of (i). Then the second loop of (j) starts here A: has important to do (to be discussed in coming parts). The number is compared to num[j] (initially 0) and hence the number is assigned to num[j] (i.e. initially num [0]). This is a special case that works for the first number supplied by user. Now num[j] is not vacant.

Interchanging values is done in above sections, refer it for analysis. Here number supplied gets its position (but not secured positions because there are still many numbers to be supplied by users and to be compared by program). At i=0, j=0, number takes value of temp; value of original num[j] =0. So it goes to A: label but condition fails( and it is intended to fail) because num[j]<numbervalue supplied initially <0 (which failed for positive value), if the value is negative the case will be other because if the number is negative then during first condition before goto the condition fails the negative number supplied goes to vain. There is no space, no array for negative numbers because the num[j] =0 automatically (initially). So our program works with the assumption that the first number should be positive but the second, thirdnumbers can be both negatives and positives. However we can take advantages of this case for the case of positive numbers. We can remove the disadvantage by taking a very negative number as num [0] and executing all but in this case the output of sorted numbers should be from num [0] to num [n-1] as regular in above. This is for the case of descending. Now the number zero (declared automatically) goes to vain. This was intended to do. J=0 to I j=0to0 and the inner loop exits and i=1 so that a number is taken from user compared to num[0] if number is big it replaces it and values interchange and goto makes to take the other value to other array element. In this way, if the condition of if is satisfied then it displace the value of certain array index and the value of array index is tested for array [index+1] so that the values get proper place for their descending values.

67

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

68
Here the value of j is incremented for j, because the displaced numbers need to be compared with the index after it which is sure to be displaced by it because the process is in descending at last of each loop. In this way, our achievement is got. Advantage Sorting is based on each number so the sorting is purely dynamic, each case and each end of loop gives required sorting of numbers. This sorting even in transition period can be useful for our various purposes and projects. Disadvantage If sorted packets arent available in sufficient way or it cant overcome the pointer basis sorting (that may be due to less probability in gradual sequential deviation) then the number of loops is high and time consuming.

In all cases descending and ascending are changed by inversing the condition within if (). But in third sorting for descending, num [0] is declared zero it can also be left doing nothing as with ascending (depending upon compiler).

PU2011FALL 5b) Sort n numbers by function (special)


/* we are sorting in ascending order, this process is a type of third sorting we described in sorting-section

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
*/ #include<stdio.h> #include<conio.h> int i,j,number,num,temp; int innersort[100]; //declare it globally void sorting(int num); void printing(); void main(){ printf("how many numbers?"); scanf("%d",&number); for(i=0;i<number;i++){ printf("\nEnter a number:\t"); scanf("%d",&num); sorting(num);// call the function for each value entered } printing(); getch(); } void sorting(int num) { static int counter=0; //can be declared as global variable too printf("num to be ckd=%d\n\n",num); for(j=0;j<counter;j++) { if(num<innersort[j]) { temp=innersort[j]; printf("one swapping done\t"); /*this line shows only execution (swap occurs) if entered new number is less than previously entered numbers and the number of execution of this statement for a newly entered number shows that the number of times the swapping is done for the new number with the stored numbers*/ innersort[j]=num; num=temp; } } innersort[counter]=num; counter++; } void printing(void) { printf("\nsorted list is\n"); for(i=0;i<number;i++){ printf("\n%d",innersort[i]); } }

69

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

Description
It is good if you look the 3 sorting type described in the sorting portion. This above technique takes each number from user and does innersort-function invoke. This function takes each number as input and sort in the series of previously sorted list. To count the previously saved sorted numbers counter variable (static type is used here so that its value has scope within function and the declaration static counter=0 is used only in 1 time function calling, later in coming calls the statement counter++ affects it only increasing by one per time the new number is given as argument to function but it doesnt hamper if we use counter a global variable in main method. Similar as counter we can declare innersort[100] as static type inside function but the problem is that at last while printing the sorted output we need to print the values of innersort which is done by printing() function as it cant use static innersort() declared inside sorting function, so extern or globally the variable innersort is declared) is used. The loop of I starts from 0 to counter-1. The input num is checked to array of innersort[], if condition is met then the num replaces the particular innersort[]s value and the innersort[]s value is taken by num and the loop still continues till all numbers are checked in condition. Here the new num checks the values for the left part of i-loop and at last, after successive replacing appropriate values at appropriate places there is left a value num whose address of address of array, so the innersort[counter]=num gives the last position to the number. Counter is increased each time as each new num is assigned a new place so each time a number is increasing. The declaration of counter, increment, scope using of counter in specific positions of the program has its own vital and specific purposes. Initially counter=0 so that the loop of i fails and it is our intention too because at initializing 1 number there is no need of any sorts of comparisons. Then the number sis initialized to array index0; the 1 position then counter is incremented showing that how many numbers are sorted in the list. Hence the value of counter at various points shows the number of elements sorted and added in the list of innersort array. But after a condition is met, the number from innersort and assigned to num has nothing to do with the left upcoming pattern of sorting in i-loop except finding a place between number replacing its origin place and the number previously succeeding it. So we can use a method below:-

70

For e.g. 1 20Man 50 100 By Devendra Palikhe

PROGRAMMING ANALYSIS IN C
If If the new num is 20 is the list of innersort[] elements. then it must be inserted in between 20 25 and 50 as like

1 Index 0

20 1

50 2

100 3 resulting into

1 Index 0

20 1

25 2

50 3

100 4

Such direct replacement is not possible in C, so we continue our while loop of i and replace in each loop and at last a new position is declared. Let us analyze the problem in reality Solution: Here 4 numbers 1, 20, 50, and 100 are already declared in inner loop as innerloop[0]=1 innerloop[1]=20 innerloop[2]=50 innerloop[3]=100

71

Now the function sorting() is called; let us suppose for a new value 25 as

sorting(25).

Here the value of counter =4 because as we know counter=number of values sorted in innersort[] as described earlier. So the remaining process goes like for (i=0 to 3) i 0 Condition 25<1 Result False Remark Just continue loop of i

25<20

False

Just continue loop of i

25<50

True

Replace num and innersort[2]s value i.e. temp=20; innersort[2]=25;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
num=50; (cont..) So the list now in innersort looks like Index Value 1 0 1 20 2 25 3 100

and the variable num=50. Now this variable needs to be inserted but it doesnt matter us because there is still a loop of i to be continued. i 3 Condition 50<100 Result True Remark Replace num and innersort[3]s value i.e. temp=100; innersort[3]=502; num=100;

Now the list of innersort looks Index Value and num=100. Now it is directly assigned by innersort[counter] i.e. innersort[4]=100; and the list is as Index Value 0 1 1 20 2 25 3 50 4 100 1 0 1 20 2 25 3 50

72

This is our required aim of function. In this way the function maintains the sorting ability for each new number taken each time from user.

A SPECIAL ANALYSIS
We saw that after we have replaced 25 in its position the new num for the particular instant was 50 and for next loop was 1 needs no further comparison in between themselves i.e. after the comparison of num with the sorted list and getting its appropriate the other numbers need o other comparisons as they were sorted in previous sorting i.e. of previous function call. So, we can just change their address positions index by +1, like below:-

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
void sorting(num){ for(i=0;i<counter;i++) { //i=0 to counter-1 if(num<innersort[i]) { temp[counter-1-i]; temp[0]=innersort[i]; innersort[i]=num; for(j=1;j<counter-i;j++) { //j=1 to counter-1-i temp[j]=innersort[i+j]; } for(k=0;k<counter-i;k++) { //k=0 to counter-1-i innersort[i+k+1]=temp[k]; } printing();//break the function } } The declaration temp[counter-1-i]; why? counter show total positions but as the array starts from zero index so -1 is used as i times the loop is runned already or the particular instant value of i resembles the number of index of innersort up to which value is sorted. Then this temp-array assigns all the values including the value replaced by the num to all the succeeding values. We take advantage of value of j in finding the left positions of values and assigning it to temp governed by j. so j has two purposes, one finding position of preceding values and assigning to new temp values.

73

At last k-loop is run, innersort[i+k+1]=temp[k] ? The value of i is of index and similarly is with k, but the position value differs by +1 as we need the next position to the index i so at first i+k+1=i+0+1=i+1, next time i+1+1=i+2 and so on, the value is index resenting temp[]. As value of k increases, the new position of innersort is assigned a new value at each time of increment. Now we are adding a new feature to above program /* we are sorting in ascernding order, this process is a type of third sorting we described in sorting-section */ #include<stdio.h> #include<conio.h> int i,j,num,temp,counting_num=0; int innersort[100]; void sorting(int num); void printing(void); void main() {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
readnextnumber: printf("Enter any number\nOr enter -999 to look sorting:\t"); scanf("%d",&num); if(num==-999){ goto outside;} counting_num++; sorting(num); goto readnextnumber; outside: printing(); getch(); } void sorting(int num) { static int counter=0; for(j=0;j<counter;j++) { if(num<innersort[j]) { temp=innersort[j]; innersort[j]=num; num=temp; } } innersort[counter]=num; counter++; } void printing(void) { printf("The sorted list is\n"); for(i=0;i<counting_num;i++){ printf("%d\n",innersort[i]); } }

74

Here we are not directly asking how many number to be sorted instead we are saying that -999 made as an input shall determine the end of input automatically.

EXAMPLES OF SORTING SORT NUMBERS ASCENDING (SELECTION SORTING) By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
//SORT NUMBERS ASCENDING (SELECTION SORTING): #include<stdio.h> #include<conio.h> int main() { int i=0,j=0,number[100],temp,n; printf("Enter how many numbers\t"); scanf("%d",&n); printf("\n\n\n"); for(i=0;i<n;i++) { printf("Enter [%d] number\t",i+1); scanf("%d",&number[i]); } /*Sorting begins-ascending*/ for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { if(number[i]>number[j]) { temp=number[i]; number[i]=number[j]; number[j]=temp; } } } printf("\n Ascending List \n\n"); for(i=0;i<n;i++) printf("%d\t",number[i]); getch(); return 0;

75

SORT NUMBERS DESCENDING (BUBBLE SORTING)


//SORT NUMBERS DESCENDING (BUBBLE SORTING) #include<stdio.h> #include<conio.h> int main() { int i=0,j=0,number[100],temp=0,n; printf("Enter how many numbers\t"); scanf("%d",&n);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("\n\n\n"); for(i=0;i<n;i++) { printf("Enter [%d] number\t",i+1); scanf("%d",&number[i]); } /*Sorting begins-ascending*/ for(i=0;i<n;i++) { for(j=(i+1);j<n;j++) { //for(j=1;j<=n-i;j++)can be used as at first point j=(i+1)=(0+1)=1 and j<=n-i is same to j<n if(number[i]<number[j]) { temp=number[i]; number[i]=number[j]; number[j]=temp; } } } printf("\n Descending order \n\n"); for(i=0;i<n;i++) printf("\t%d\t",number[i]); getch(); return 0; }

76
SORT 5 NAMES ASCENDING (BUBBLE SORTING)
Here sort is necessary we use bubble sort or selection sort or the last sort we looked in sort portion, similarly here dummy; a temporary variable works as temp variable of before whose only purpose is to interchange values. Strcpy() copies string [j-1] (string[0], string[1], string[2].)to dummy which is taken by string[j] (string[1],string[2]) All its process are similar to the above three cases of numeric.

//SORT NAMES ASCENDING (BUBBLE SORTING) #include<stdio.h> #include<conio.h> #include<string.h> void main() { char string[100][20],dummy[20]; int i=0,j=0,n; printf("Enter quantity\n"); scanf("%d",&n); while (i<n) { printf("Enter a name\t:"); scanf("%s",&string[i++]); } //while-loop terminal /*Sorting begins-ascending*/ for(i=1;i<n;i++) { for(j=1;j<=n-i;j++) { if(strcmp(string[j-1],string[j])>0) { strcpy(dummy,string[j-1]);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
strcpy(string[j-1],string[j]); strcpy(string[j],dummy); } } } printf("\n Alphabetical List \n\n"); for(i=0;i<n;i++) printf("\n[%d]=\t%s",i+1,string[i]); getch(); }

77
SORT NAMES DESCENDING (SELECTION SORTING)
//SORT NAMES DESCENDING (SELECTION SORTING) #include<stdio.h> #include<conio.h> #include<string.h> void main() { char string[100][20], dummy[20]; int i=0,j=0; int num; printf("Enter qunatity:\t"); scanf("%d",&num); printf("Enter names of %d items\n",num); while (i<num) { printf("Enter a name"); scanf("%s",&string[i++]); } for(i=0;i<(num-1);i++) { //the last is rejected automatically for(j=i+1;j<num;j++) { if((strcmp(string[i],string[j]))<0) { strcpy(dummy,string[j]); strcpy(string[j],string[i]); strcpy(string[i],dummy); } } } printf("\n Descending List \n\n");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
for(i=0;i<num;i++) printf("\n[string%d]=%s",i+1,string[i]); getch(); }

A PROGRAM THAT TAKES NAMES AND FIVE SUBJECT MARKS OF FIVE STUDENTS THAT
DISPLAY STUDENT RANKS AND SUBJECT MARKS (BY USING SELECTION SORTING) Hints: Here array is an important too to store names, their corresponding subject marks, and its percentages. We sort percentage, in the way of sorting percentage, we interchange corresponding values of names so that in the way of our sorting (in this case descending-for mark sheet) percentage it corresponds to its names and hence the two field names and percentage interchange simultaneously. If we want to print subject marks, then we need to interchange subject marks pointer similar to the above cases.

Median and Standard Deviation For median We first arrange in ascending or descending order then For even quantity of numbers, median= For odd, median=

78
/

value

value

//median #include<stdio.h> #include<conio.h> int main() { int i=0,j=0,number[100],temp; int n; int median; printf("Enter how many numbers\t"); scanf("%d",&n); printf("\n\n\n"); for(i=0;i<n;i++) { printf("Enter [%d] number\t",i+1); scanf("%d",&number[i]); } /*Sorting begins-ascending*/ for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { if(number[i]>number[j]) {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
temp=number[i]; number[i]=number[j]; number[j]=temp; } } } if(n%2==0) { median=(float)(number[n/2-1]+number[n/2+1-1])/2; /*here in contrast to formula,'-1', 1 is subtracted at last ascharacter array starts from zero so to maintain equilibrium with such array*/ } else { median=number[n/2+1-1]; /*same to above*/ } printf("the median is %d",median); getch(); return 0; }

79

For standard deviation We find mean; Mean= x

then variance is find out


Variance= x mean

Standard deviation=variance

//mean, variance and standard deviation #include<stdio.h> #include<conio.h> #include<math.h> int main() { int i=0,number[100]; int n; float mean=0,variance,sd; printf("Enter how many numbers\t"); scanf("%d",&n); printf("\n\n\n"); By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
for(i=0;i<n;i++) { /*input and mean calculation*/ printf("Enter [%d] number\t",i+1); scanf("%d",&number[i]); mean=mean+(float)number[i]/n; /*as we know total quantity then mean is the sumation of all numbers divided by total quantity*/ /*here casting is essential to prevent truncation of value (losing values afetr deciaml)due to integer division*/ } printf("The mean is \t%.4f\n",mean); for(i=0;i<n;i++) { /*variance calculation*/ variance=(float)1/n*(pow(((float)number[i]-mean),2)); /* instead we can do divide by 'n' after all summation afetr for-loop too*/ /*casting is essential*/ } printf("The variance is \t%.4f\n",variance); sd=pow(variance,0.5); /*standard deviation calculation*/ printf("The standard deviation is \t%.4f",sd); getch(); return 0; }

80

MATRIX ARRAY
Matrix is 2-D like in similar way the array elements are actually stored (whether it is 2-D or 3-D or multi-D). So taking this advantage matrix can be easily expressed in terms of array elements where loops are used to define and express array elements (detailed in Array Section). Here define means declaration and intake whereas express means printing or analyzing array elements for calculations or comparisons.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
CASES: Case-1: Finding smallest and greatest of a matrix
For this we keep the first value to small and big and compare each value according to required and if condition satisfies the new value is assigned to the variables and lastly we print output. //greatest and smallest element in matrix #include<stdio.h> #include<conio.h> void main(){ int matrix[3][3]; int small,big; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix[i][j]); } } small=matrix[0][0]; big=matrix[0][0]; printf("\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(matrix[i][j]>big) big= matrix[i][j]; if(matrix[i][j]<small) small= matrix[i][j]; } } printf("The smallest matrix element is %d\n",small); printf("The biggest matrix element is %d",big); getch();}

81

Case-2: Sum of diagonal elements of square 3*3 matrix 1.


1 4 7 2 3 5 6 8 9

sum of diagonal from right top to left bottom

here required = 3+5+7

3=matrix[0][2] 5= matrix[1][1] 7= matrix[2][0] i.e the value of sum of indices is less than 3 or equal to 2

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
//sum of diagonal from right top to left bottom #include<stdio.h> #include<conio.h> void main(){ int matrix[3][3]; int i,j; int sum=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix[i][j]); } } printf("\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i+j==2){ //i+j<3 also works sum=sum+matrix[i][j]; } } } printf("The sum of diagonal from right top to left bottom %d\n",sum); getch(); }

82

2.
1 4 7

sum of diagonal from left top to right bottom


2 3 5 6 8 9 here required = 1+5+9

3=matrix[0][0] 5= matrix[1][1] 7= matrix[2][2] i.e the value of index I= indexj

//sum of diagonal from left top to right bottom #include<stdio.h> #include<conio.h> void main(){ int matrix[3][3]; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix[i][j]); } } int sum=0;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i==j){ sum=sum+matrix[i][j]; } } } printf("The sum of diagonal from left top to right bottom %d\n",sum); getch();}

Case-3: Finding a matrix element in a matrix


For this, comparison is done with all values or elements of matrix and lastly result is shown. If it is found then counter =1 and hence we dont print not found. // Finding a matrix element in a matrix #include<stdio.h> #include<conio.h> void main(){ int matrix[3][3]; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix[i][j]); } } int search; printf("Enterthe element to be find out?\t"); scanf("%d",&search); int counter=0; printf("\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(matrix[i][j]==search){ printf("the element [%d] is found in [%d] row and [%d] column",search,i+1,j+1); counter+=1; } } }

83

if(counter!=1){ printf("not found"); } getch();}

Case-4: sum of all elements in a matrix By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Here sum sums all the values of matrix. //Case-3: sum of allelements in a matrix #include<stdio.h> #include<conio.h> void main(){ int matrix[3][3]; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix[i][j]); } } int sum=0; printf("\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=sum+matrix[i][j]; } } printf("the sum is %d",sum); getch(); }

84

Case-5: transpose of a matrix


Here we know in transpose matix the values are interchanged in rows and columns that is I and j are interchanged. 1 4 7 1 2 3 // transpose of matrix #include<stdio.h> #include<conio.h> int main(){ int matrix[3][3],newmatrix[3][3]; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix[i][j]); } } 2 3 5 6 8 9 4 7 5 8 6 9

Its transpose is

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int sum=0; printf("\n\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { newmatrix[j][i]=matrix[i][j]; } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("%d\t",newmatrix[i][j]); } printf("\n"); } getch(); }

Matrix Multiplication

of nm and mp orders np orders matrix

Here the new matrix is of order n p. So the outer loop is from i=0 to n-1, second loop is similarly i=0 to p-1, then an inner loop is for looping till the required sum is obtained. This sum is obtained from summing column elements of second matrix i.e. p times to the row elements of first matrix. It doesnt matter how many row elements are considered because we have earlier declared the positions of new matrix by first and second loops. Third loop is just for sum. So third loop is from k=0 to m-1. The obtained final matrix is of order np. matrix1[n][m] matrix2[m][p] matrix3[n][p] for i= 0 to n-1 { for j= 0 to p-1 { sum=0 for k = 0 to m-1 { sum=sum+matrix1[i][k]*matrix2[k][j]; } matrix3[i][j]=sum } }

85

Here i=0 to n-1 (and similarly for j, k) because in array addresses starts from 0 to n-1 for n elements. By matrix multiplication, as element of new matrix has the row equal to first matrix and column equal to second matrix and during multiplication there is the sum of elements in such that first matrix row remains same and column changes in such a way that it equals to second row and its column constant. This is illustrated above. There first matrixs row i=constant, second matrix column

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
j= constant but firsts column and seconds row changes k=not constant even within loop of j. This is basic principle of matrix multiplication of any order matrix to any order matrix. This can be simplified to 33 matrix 33 matrix, for this m=n=3. 1 4 7 2 3 5 6 8 9 1 1 0 1 1 0 0 then output is 0 1 3 1 4 9 4 10 15 7 16

If inputs are

and

//MATRIX MULTIPLICATION OF (3*3) AND (3*3) MATRICES #include<stdio.h> #include<conio.h> #define N 3 int main(){ int matrixa[3][3],matrixb[3][3],matrixc[3][3]; int sum=0,i,j,k; printf("MATRIX MULTIPLICATION OF (3*3) AND (3*3) MATRICES\n\n\n"); printf("\n\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("Enter matrixa[%d][%d]",i,j); scanf("%d",&matrixa[i][j]); } } printf("\n\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("Enter matrixb[%d][%d]",i,j); scanf("%d",&matrixb[i][j]); } } for(i=0;i<N;i++){ for(j=0;j<N;j++){ sum=0; for(k=0;k<N;k++){ sum=sum+((matrixa[i][k])*(matrixb[k][j])); } matrixc[i][j]=sum; } } printf("\nNew matrix3\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%d\t",matrixc[i][j]); } printf("\n"); } getch(); return 1; }

86

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

More generalization of matrices multiplication


//MATRIX MULTIPLICATION OF (n*m) AND (m*p) MATRICES #include<stdio.h> #include<conio.h> void main(){ int matrix1[100][100],matrix2[100][100],matrix3[100][100],n,m,p,sum,i,j,k; printf("MATRIX MULTIPLICATION OF (n*m) AND (m*p) MATRICES\n\n\n"); printf("Enter value of n"); scanf("%d",&n); printf("Enter value of m"); scanf("%d",&m); printf("Enter value of p"); scanf("%d",&p); printf("\n\n"); for(i=0;i<n;i++) { for(j=0;j<m;j++) { printf("Enter matrix1[%d][%d]",i,j); scanf("%d",&matrix1[i][j]); } } printf("\n\n"); for(i=0;i<m;i++) { for(j=0;j<p;j++) { printf("Enter matrix2[%d][%d]",i,j); scanf("%d",&matrix2[i][j]); } } for(i=0;i<n;i++){

87

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
for(j=0;j<p;j++){ sum=0; for(k=0;k<m;k++){ sum=sum+matrix1[i][k]*matrix2[k][j]; } matrix3[i][j]=sum; } } printf("\nNew matrix3\n"); for(i=0;i<n;i++) { for(j=0;j<p;j++) { printf("%d\t",matrix3[i][j]); } printf("\n"); } getch(); }

TASK: A simple program that takes students marks in various subjects, name and roll numbers to print out ranks, roll numbers and marks (both % and marks) in Descending order.
Hints: Use concept of array in such a way that the marks, percentages, names and roll numbers while in sorting by descending by any method to marks-percentage corresponds to same change in every other variable so that name, marks, percentage, roll and rank corresponds to required particular person. You may add search by roll or search by few initial words options. For this use string function to compare the input to available name values stored and in true then print output. For few initial words firstly find string-length so that comparison is done to only that much length of names stored. Solution: //a program taking student's marks and printing out rank without using file handling and just to array for beginners #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> int count=0; int roll[100]; char name[100][100]; float mark1[100],mark2[100],percent[100]; int main() { int num; int number,a; int temp_count=count; char dummy[20]; int check; char checkk[30];

88

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int j=0,k=0; float temp=0; int temp_i=0; A: printf("What do you want to do?\n"); printf("[1]\tto add mark list\n"); printf("[2]\tto look mark list\n"); printf("[3]\tto search by roll\n"); printf("[4]\tto search by name\n"); printf("[5]\tto exit\n"); printf("-------------------------------------------\n"); scanf("%d",&num); printf("-------------------------------------------\n"); switch(num) { case 1: printf("Enter the number of input student's marks?\t"); scanf("%d",&number); for(a=temp_count;a<(number+temp_count);a++) { printf("Enter Roll\n"); printf("Enter Name(ENTER Single name)\n"); printf("Enter Marks in Computer\n"); printf("Enter Marks in Maths\n"); scanf("%d",&roll[a]); scanf("%s",&name[a]); scanf("%f",&mark1[a]); scanf("%f",&mark2[a]); percent[a]=(mark1[a]+mark2[a])/2; count++; } if(getch()) goto A; case 2: printf("MARKSHEET OF STUDENTS\t(RANK WISE)\n\n"); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("PERCENT"); //Sorting begins-descending by bubble method for(j=1;j<count;j++) { for(k=1;k<=count-j;k++) { if(percent[k-1]<percent[k]) { temp_i=roll[k-1]; roll[k-1]=roll[k]; roll[k]=temp_i; strcpy(dummy,name[k-1]); strcpy(name[k-1],name[k]); strcpy(name[k],dummy);

89

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
temp=mark1[k-1]; mark1[k-1]=mark1[k]; mark1[k]=temp; temp=mark2[k-1]; mark2[k-1]=mark2[k]; mark2[k]=temp; temp=percent[k-1]; percent[k-1]=percent[k]; percent[k]=temp; } } } // Rank List int i; for(i=0;i<count;i++) { printf("%d\t",i+1); printf("\n%d\t",roll[i]); printf("%s\t",name[i]); printf("%f\t",mark1[i]); printf("%f\t",mark2[i]); printf("%f\n",percent[i]); } if(getch()) goto A;

90

case 3: printf("Enter roll number\t"); scanf("%d",&check); for(i=0;i<count;a++) { if(roll[i]==check){ printf("MARKSHEET OF STUDENTS\t(RANK WISE)\n\n"); printf("\n\n----------------------------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("PERCENT\n"); printf("%d\t",i+1); printf("%d\t",roll[i]); printf("%s\t",name[i]); printf("%f\t",mark1[i]); printf("%f\t",mark2[i]); printf("%f\n\n",percent[i]); break; } } if(getch()) goto A; case 4: printf("Enter name\t");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
scanf("%s",&checkk); for(i=0;i<count;a++) { if(strncmp(name[i],checkk,strlen(checkk))==0){ printf("hello"); printf("MARKSHEET OF STUDENTS\t(RANK WISE)\n\n"); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("PERCENT\n"); printf("%d\t",i+1); printf("%d\t",roll[i]); printf("%s\t",name[i]); printf("%f\t",mark1[i]); printf("%f\t",mark2[i]); printf("%f\n\n\n",percent[i]); break; } } if(getch()) goto A; case 5: printf("THANKS TO YOU AND HOPE YOU TO LOOK SIMILAR USING FIHE HANDLING IN COMING LESSONS"); if(getch()){ exit(0); } } getch(); return 1; }

91

RECURSIVE FUNCTION
It is a method for dividing a problem into smaller units in such a way that each units are similar to other irrespective of some small changes that can be made change gradually and eventually to al so that a function is called for required number of times within another function, the last condition of function to be called or not must be declared for e.g. in factorial

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(n==1) return (1); is last condition that terminates the function. A function is repeatedly called to individual thje problem into parts however a function is called within another function so there is the combination of results to give a net output. To calculate number of permutations and combinations using function factorial

For permutation n For combination n n! n r! r! n! n r!

#include<stdio.h> #include<conio.h> int factorial(int n) { int fact=1; int i; for(i=1;i<=n;i++) fact=fact*i; return fact; } int main() { int n,r; printf("n\t"); scanf("%d",&n); printf("r\t"); scanf("%d",&r); int f1,f2,f3; f1=factorial(n); f2=factorial(n-r); f3=factorial(r); int com=f1/(f2*f3); int per=f1/f2; printf("The combination is %d",com); printf("\n The permutation is %d",per); getch(); return 0;}

92

Factorial by recursive #include<stdio.h> #include<conio.h>

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int factorial(int); void main() { int num; printf("Enter a number\t"); scanf("%d",&num); printf("The factorial of %d is %d\t",num,factorial(num)); getch(); } int factorial(int num) { if(num==1){ return(1); } else { return(num*factorial(num-1)); } } Fibonacci series by recursive 1 1 2 3 5 8 13 21 .

#include<stdio.h> #include<conio.h> int fibo(int); int main() { int num; printf("Enter a number\t"); scanf("%d",&num); printf("The fibonaci \t"); int i; for(i=0;i<num;i++) { printf("\t%d",fibo(i+1)); } getch(); return 1; } int fibo(int num) { if(num==1){ return(1); } else if(num==2){ return(1); } else { return(fibo(num-2)+fibo(num-1)); } }

93

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Fibonacci series by recursive 0 1 1 2 3 5 8 13 21 .

#include<stdio.h> #include<conio.h> int fibo(int); int i; int main() { int num; printf("Enter a number\t"); scanf("%d",&num); printf("The fibonaci \t"); for(i=0;i<num;i++) { printf("\t%d",fibo(i+1)); } getch(); return 1; } int fibo(int num) { if(num==1){ return(0); } else if(num==2){ return(1); } else { return(fibo(num-2)+fibo(num-1)); } } To calculate power by recursive #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> float power(float x,int n){ if(exp<0) {exit(1);} else if (n==0) { return (1);} else return (x*power(x,n-1)); getch(); } void main() { float x; int n; printf("Enter a number\t"); scanf("%f",&x); printf("enter power \t"); scanf("%i",&n);

94

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("The answer is %f",power(x,n)); getch(); } Calculate sum of digits by recursive #include<stdio.h> #include<conio.h> extern suma=0; int sum(int num){ int i=1,digit=0; digit=num%10; suma+=digit; num/=10; i++; if(num>0){ sum(num); } return (suma); } void main() { int number; printf("Enter a number\t"); scanf("%d",&number); printf("The answer is %d",sum(number)); getch(); }

95

Armstrong using function #include<stdio.h> #include<conio.h> #include<math.h> int arms(int num) { int sum=0; int digit=0; do { digit=num%10; num=num/10;sum=sum+pow(digit,3);} while (num>0); return sum; } int main() { int num; printf("Enter a number\t"); scanf("%d",&num);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(arms(num)==num) { printf("yes it is armstrong"); } else printf("not"); getch(); return 1; } Armstrong using recursive #include<stdio.h> #include<conio.h> #include<math.h> int arms(int num) { int sum=0;//must be inside function arms() so that for each recursive it starts from 0 so it is local int digit; printf("the num is %d\n",num); printf("the sum is %d\n",sum); if(num==0){ return 0;} else { digit=num%10; num=num/10; sum=pow(digit,3); return(sum+arms(num)); } } int main() { int digit; int total=0; int a; int num; printf("Enter a number\t"); scanf("%d",&num); if(arms(num)==num) { printf("yes it is armstrong"); } else printf("not armstrong"); getch(); return 1; }

96

WITHOUT FUNCTION
To check token without using any function By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
#include<stdio.h> #include<conio.h> int main() { printf("enter a token:\t"); char b; scanf("%c",&b); //address '&' is compulsory here int a=b; if(a>=48 && a<=57) { printf("digit"); } else if(a>=65 && a<=90) { printf("Ucase"); } else if(a>=97 && a<=122) { printf("Lcase"); } else { printf("special"); } getch(); return 0; }

97
Calculate power without function
//calculate power #include<stdio.h> #include<conio.h> int main() { int base; printf("enter base\t"); scanf("%d",&base); int power; printf("enter power\t"); scanf("%d",&power); int i; int result=1;; for(i=1;i<=power;i++){ result=result*base; } printf("The answer is %d",result); getch(); return 0; }

To reverse a sentence without any function

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Here length of string is calculated by while loop that increments varable length staring from zero until we read \0 i.e. the termination of string, while reading each character of string by help of counter i that increase for each loop of while, the value of i starting from zero that measn reading character of string from character array position zero. Then i= length-1 cause the no of index in character array ends to length-1. j loop starts from 0 to length-1 where I continuously increases that is reading position of string increases in the other hand the character to be signed is done by j in such a way that it fills the last space of rev string continuing to fill up to first. Here j=from 0 to length-1 and i=length-1 to 0 So the loop exactly matches to both reading and writing material. // To reverse a sentence without any function #include<stdio.h> #include<conio.h> #include<string.h> int main() { int j; char rev[100]; int length=0,i=0; char input[100]; printf("enter a sentence\t"); gets(input); while (input[i]!='\0') { length++; i++; } i=length-1; for(j=0;j<length;j++,i--) rev[j]=input[i]; rev[j]='\0'; printf("%s",rev); getch(); return 0; }

98

Concatenate two strings without function


// this process is exactly similar to working-mecchanism of strcat() function Here similar to above process we calculate the length of two strings s1 and s2. The value of i=0 after the length of s1 is found so that no new variable is needed.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
After that a new variable cona takes all values of s1 one by one by character array method where i=0to length of l1-1 then in second loop i=length of l1 to less than sum of both length because the adding process in cona must start from the ending of last loop of i so and this second loop continues for length of l2 times if count from 1. So the loop starts from l1 to less than (l1+l2). Finally \0 is added to make a string.

//Concatenate two strings without function #include<stdio.h> #include<conio.h> #include<string.h> int main() { char s1[100],s2[100]; printf("enter a string\t"); gets(s1); printf("enter another string\t"); gets(s2); int l1=0,l2=0,i=0; while (s1[i]!='\0') { l1++; i++; } i=0; while (s2[i]!='\0') { l2++; i++; } char cona[200]; for(i=0;i<l1;i++){ cona[i]=s1[i]; } int j=0; for(i=l1;i<(l1+l2);i++,j++) cona[i]=s2[j]; cona[i]='\0'; printf("%s",cona); getch(); return 0; }

99

Search specific word in given string Here for(i=0;i<=(l1-l2);i++){ // the maximum possible condition to find word this loop starts from zerp to maximum possible to find the word

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
for e.g if ef is to be find in abcdef then five loops must go on each loops length equal to length ef that is 2 .loops from 0 to 4 For loop0 compare ef to ab For loop1 compare ef to bc For loop2 compare ef to cd For loop3 compare ef to de For loop4 compare ef to ef The fifth loops is thus the maximum possible for comparison asd above. In above case ef is put at last to show maximum possible case. Here number of loops= Zero to (length of in find string- length o two find string) i.e. 5 =1+(6-2) 5=5 proved. Here for(j=i,k=0;j<(l2+i);j++){ total count is equal to l2, so this loop has number of loops equal to l2 as we know we need to compare l2 with other so l2 is importantly taken under consider. Here, temp[k]=input[j]; k++; } for each new loop of I, k startsfrom zero i.e. new comparison starts up to the number of characters equal to l2 but for each loop of j,k increases trhat in new position of temp[] variable is fulfilled and after its length becomes equal to length of l2 trhen comparison is done. The value of j starts from mi because after each comparisons done at last, there is no necessity to compare for those characters already compared so the value of j starts from previous value of I i.e. new characters are compared each time and in the other hand the complete comparison for all characters is possible and termination is also possible.

100

//searching a character or string in a sentecnce #include<stdio.h> #include<conio.h> #include<string.h>

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int main() { char input[100],search[100]; printf("enter a sentence\t"); gets(input); printf("enter specific word\t"); gets(search); int l1=0,l2=0,i,j,k; l1=strlen(input); l2=strlen(search); char temp[100]; for(i=0;i<=(l1-l2);i++){ // the maximum possible condition to find word for(j=i,k=0;j<(l2+i);j++){ temp[k]=input[j]; k++; } temp[k]='\0'; //compulsory else the blank spaces may make obstacle and temp is not a complete string as'\0' is last character of all string if(strcmp(temp,search)==0) { printf("found"); break; } } getch(); return 0; }

101

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
A DETAIL OF STRINGS
Finding a sequence of words // searching whole sentence #include<stdio.h> #include<conio.h> #include<string.h> void main(){ char check[50]=""; int i=0,j=0,nooffound=0; char name[100]="NEPAL A HEAVEN"; printf("ENTER"); scanf("%[^\n]",&check); for(i=0;i<strlen(name);i++) { if(name[i]==check[j]){ nooffound++; j++; continue; //this may be omitted } } if(nooffound==strlen(name)){ printf("all words matched"); } else if(nooffound==0) printf("no matching with a character even"); else printf("some characters or words are matched but not all"); getch(); }

102

Finding a sequence of words any //searching sequential characters #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main(){ char check[50]; int i,nooffound=0; char name[100]; int max=0; int count=0; int temp=0; printf("ENTER a sentence\n"); scanf("%[^\n]",&name); printf("ENTER\n"); scanf("%s",&check); for(i=0;i<strlen(name);i++) {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(name[temp]==check[count]){ printf("I=%d",i); nooffound++; if(nooffound>max) { max=nooffound; } count++; temp++; } else { if(nooffound>max) { max=nooffound; } nooffound=0; if(count>0) { count=0; } temp++; } if(count==strlen(check)) { count=0; } if(nooffound==strlen(name)){ printf("exactly found"); if(getch()) exit(0); } } printf("Not foundexactly"); printf("\n[%d]characters are in sequence",max); getch(); return 0; }

103

Finding a sequence of words (working) //searching sequential characters #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main(){ char check[50]; int i,nooffound=0; int max=0; int count=0; int temp=0; char name[100]="nepal is a hindu country"; printf("ENTER\n");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
scanf("%[^\n]",&check); for(i=0;i<strlen(name);i++) { printf("\ncount=[%d]",count); printf("\ncheck=[%c] and name=[%c]",check[count],name[temp]); if(name[temp]==check[count]){ if(nooffound>max) { max=nooffound; } nooffound++; printf("NO OF FOUND%d",nooffound); count++; temp++; } else { if(nooffound>max) { max=nooffound; } if(count>0) { count=0; } temp++; nooffound=0; } if(count==strlen(check)) { count=0; } if(nooffound==strlen(check)){ printf("exactly found"); if(getch()) exit(0); } } printf("Not foundexactly"); printf("\n[%d]characters are in sequence",max); getch(); return 0; } Finding a word in a sentence #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main(){ int i; int a=-1; char incheck[50]; char name[50]="My country is Nepal , a heaven"; char check[50]=""; clrscr();

104

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("My country is Nepal , a heaven\n\n"); printf("ENTER A WORD\n"); scanf("%s",check); for(i=0;i<strlen(name);i++) { a++; incheck[a]=name[i]; if((strncmp(incheck,check,(strlen(check)))==0)) { printf("found\nInput any thing to exit"); if(getch())exit(0); } else if(name[i]==' '){ strcpy(incheck,""); a=-1; } } printf("not found"); getch(); return 0; }

105
Finding a word in a sentence (working) #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main(){ int i; int a=-1; char incheck[50]; char name[50]="My country Nepal is heaven"; char check[50]=""; printf("My country Nepal is heaven\n"); printf("ENTER A WORD\n"); scanf("%s",check); for(i=0;i<strlen(name);i++) { a++; incheck[a]=name[i]; printf("\ncheck=[%s] and incheck=[%s]\n",check,incheck); if((strncmp(incheck,check,(strlen(check)))==0)) { printf("found\nInput any thing to exit"); if(getch())exit(0); } else if(name[i]==' '){ printf("above space"); printf("incheeeeeeeeeeeeeeek=%s\n",incheck); strcpy(incheck,"");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
a=-1; } } printf("not found"); getch(); return 0; }

Finding a word in a sentence (input from user) #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main(){ int i; int a=-1; char incheck[50]=""; char name[50]=""; char check[50]=""; printf("Enter A Long Sentence\n"); scanf("%[^\n]",&name); printf("ENTER A WORD\n"); scanf("%s",&check); for(i=0;i<strlen(name);i++) { a++; incheck[a]=name[i]; if((strncmp(incheck,check,(strlen(check)))==0)) { printf("found\nInput any thing to exit"); if(getch())exit(0); } else if(name[i]==' '){ strcpy(incheck,""); a=-1; } } printf("not found"); getch(); return (0); }

106

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
OPERATORS
The numeric values used in any expression or used like -2,3,5.0,10.67,10e-2 are operands but the signs or symbols used to operate between operands are called operators. Operators are various types listed below:-

TABLE
Rank 1 2 3 4 5 6 7 8 9 10 11 12 Operator (), [] + (unary), -(unary),++,--,! ,*(indirection) *,%,/ +,<<,>>(shifts) <,<=,>,>= ==,!= && || ?:(conditional or tertiary) =,*=,/=,%=,+=,-=,&=(assignment operators) . (dot) ,(comma) Associativity L to R R to L L to R L to R L to R L to R L to R L to R L to R R to L R to L L to R

The rank list shows the priority of which operators to take execution at first or second .and similarly so on. The inner () has highest priority than gradually surrounding (). Inside the same rank, the table shows direction of associativity - L to R means left to right and R to L means right to left. This direction shows how the calculations execution takes place. If in any expressionthere is more than on operators of a same rank, then the associativity directs the flow of execution. The operators directed according to associativity come into execution as an when it is encounted. For e.g. 100+20/(3+5)*(6+2) Here () has 1 priority + has 3 priority /,* has 2 priority

107

So at 1 () must be calculated but there are two (3+5) and (3+2) expressions but as we know () has L to R associativity, (3+5) must be first calculated and (6+2) second resulting, =100+20/8*(6+2) =100+20/8*8 Now we come for 2 priority /,* It has also left to right associativity, so =100+2*8 // 20/8 gives 2 as it is integer division (is that takes operates between 2 integer operands) that truncates decimal part

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
=100+16 Now + is operated which has 3 priority, =116 Few more examples, 20%8*30(L to R associativity) = 4*30 = 120

HOW ERRORS MAY OCCUR? ERROR CALCULATION 3.5+12%6*3 =3.5+12%18 =3.5+12 =15.5 Here %,* has L R associativity but in our calculation we didint consider it and we did R to L asscociativity knowingly or unknowingly, this is our mistake. In numeric calculations, one mistake is sufficient to bring wrong answer.

108

CORRECT CALCULATION 3.5+12%6*3 =3.5+0*3 =3.5+0 =3.5

Comparing the underlined parts of these two calculations we see that one gives 12 but another 0, this shows the actual difference which occurred due to incorrect associativity. Hence the above two examples illustrates the vast differences due to small errors.

For leap year A leap year is a year if it is divisible by 4 but not by 100, except that years divisible by 400 are leap years.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

if((year%4==0 && year%100!=0) || year%400==0) printf("leap year"); else printf("Not leap year"); a%b; here % is modulo division that gives remainder when a is divided by b, but a and b must be int type as % cannot accept float datas.

Let us give year=20 then if((20%4==0 && 20%10!=0) || 20%400==0) Here the inner () has 1 priority. Inside this inner parenthesis (), % has 1 priority but there are two % signs so by L-R associativity of %we get

1 step =if((0==0 && 20%10!=0) || 20%400==0) 2 step =if((0==0 && 0!=0) || 20%400==0)

109

Now, ==, != has priority with L-R associativity 4 step =if((True && False) || 20%400==0) 3 step =if((True && 0!=0) || 20%400==0)

5 step =if((False) || 20%400==0) =if(False || 20%400==0)

Because True and False gives False refer Truth Table

In above case, we did all calculations of inner () so outer is now to be taken consideration. Here, % has 1 priority ,== 2 priority and || 3 priority. So, 7 step =if(False || True) 8 step =if(True) 6 step =if(False || 0==0)

So 20 is the leap year, we did it in 8 steps.

POST/PRE INCREMENT/DECREMENT OPERATORS By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Prefix(before the variable: ++a) and postfix(after the variable: a++) ++n increments n before its value is used n++ increments n after its value has been used. LINE 1 2 3 POST x=5; //x=5 x++; //x=5 x; //x=6 PRE x=5; //x=5 ++x; //x=6 x; //x=6

In 2 line of pre-, first x is incremented by 1 i.e. x becomes 6 and this value of x is used however in 2 line of post- the value of x=5 is used then only after its one time use, the x is incremented by 1 i.e. x becomes now 6 which is shown by line 3 of post, but x becomes 6 already from line 2 of pre-. In post a++ or a- In this particular line value of a is originals but the next time or may be on next line the value is initially incremented or decremented before than under-consideration of a or statements or expressions including a or including its parts.

110

FOR-BLOCKS EXECUTION FLOW


For block Initialize a value (let say i) Check condition (if true then follow statement else terminate for-loop) Statement Statement Statement . . . . . Update value controlling for loop(here it is i) (actually there are two controlling methods one is counter-controlling and the next is sentinelcontrolling loop, counter controlling is definite but in sentinel it is not definite and the termination is determined by some undefinite terms like may be users input)

Illustration of pre/post operators in detail

for(i=1;i<+5;i++) print("%u",i); and

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
for(i=1;i<=5;++i) print("%u",i); // here u means unsigned int

These two for-expressions use post and pre increments of i but does not hamper the statements inside, it holds. It is because both post and pre are declared in one line and its use like printing i is declared in next line or a next statement, so the output are same. But let us look an example:for(i=1;i<+5;a=i++){ print("%d",i); print("%d",a); } and for(i=1;i<+5;a=++i){ print("%d",i); print("%d",a); }

Here in a=i++, ++ has first priority than = so, first is 1++, which means that i has 1 value but in next statement that using i, there i will be 2, but here a=i++ takes the instant value of i in the line i.e. before increment as it is for only the next statement using i, where i will be incremented. So a=1 as it is, but in second example, a will be 2. We are not going to deal with these post/pre fix operators in detail here however we will clear them when we encounter them in coming parts.

111

ASSIGNMENT OPERATORS
i=i+2=5; here = has R to L so, i+2=5 1 step but from 1 step i+2=5 i=i+2 2 step

so, from 2 step i=5

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
OUTPUTS
NOTE: Before looking outputs, please once more revise operators-section. HINTS TO pu2008fall 3a) x=++x+y;//++x has first priority so,++3+4=4+4=8 z*=(x+y) //z=z*(x+y) 3b) #include<conio.h> #include<stdio.h> void main() { int x=0,i=0; for(i=1;i<10;++i) { if(i%2==1) x+=i; else { x--; printf("%d",x); break; } } printf("\nx=%d",x); getch(); }

112

i 1 2

Condition i%2==1 1%2==1 2%2

Result True False

Operations x=x+i x- -

Remarks X=0+1

X=1 print 0 Here in the line x--, the value of x is original that is 1, but in the following line print x, the value of x is 0. Now the break; statement breaks the for-loop and the value of x=0 is printed.

You can get soft copy of this book @ www.scribd.com/dpalikhe.


PU 2006 SPRING2 a) #include<stdio.h> #include<conio.h>

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int a = 100, b = 200; int funct1 (int c); main ( ) { int count, c; for (count = 1; count <= 5; ++count) { c= 4 * count * count; printf ( " %d ", funct1 ( c ) ); } getch(); } funct1 ( int x) { int c; c = (x < 50) ? (a + x) : (b - x) ; return( c ); }

113
We can use table under appropriate column names to make easier to calculation like below:

count

c=4*count*count

condition x<50

result

operations

c=4*1*1=4

4<50

TRUE

c=a+x=100+4=104 print 104

c=4*2*2=16

16<50

TRUE

c=a+x=100+16=116 print 116

c=4*3*3=36

36<50

TRUE

c=a+x=100+36=136 print 136

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
4 c=4*4*4=64 64<50 FALSE c=b-x=200-64=136 print 136

c=4*5*5=100

100<50

FALSE

c=b-x=200-100=100 print 100

2 b) #include<stdio.h> #include<conio.h> main( ) { int i=0,x=0; for(i=1;i<10;++i ) { if (i%2==1) x+=i; else x--; printf("%d", x); continue; } printf ( " \nx = %d ", x ); getch(); }

114

i 1

Condition i%2==1 1%2==1

Result true

Calculation first x=x+i x=0+1 i.e. 1

Calculation second print 1 continue loop

// continue; statement simply continues the for-loop in this case however it may make greater difference for others where the statements below continue-statement but inside for-loop are just aborted.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
2 3 4 5 6 7 8 9 2%2==1 3%2==1 4%2==1 5%2==1 2%2==1 7%2==1 2%2==1 3%2==1 false true false true false true false true x--=1-x=x+i=0+3=3 x--=3-x=x+i=2+5=7 x--=7-x=x+i=6+7=13 x--=13-x=x+i=12+9=21 print 0 print 3 print 2 print 7 print 6 print 13 print 12 print 21

2) c #include <stdio.h> #include<conio.h> #define ROWS 3 # define COLUMNS 4 int z [ROWS][COLUMNS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; main ( ) { int a, b, c; for ( a = 0; a < ROWS; ++a) { c = 999; for ( b = 0; b < COLUMNS; ++b ) if ( z[a][b] < c ) c = z[a][b]; printf ( " %d ", c ); } getch(); }

115

While checking 999 with all numbers, no new number is > than 999 so c is 999 and 999 is thus printed.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

PU2009SPRING 2 b) important #include<stdio.h> #include<conio.h> void main() { int sum,a,k,j; sum=0; a=12345; while (a!=0) { j=a%10; printf("%d",j); if(j%2==0) { sum=sum+j; } a=a/10; } printf("sum=%d",sum); getch(); } The exact question inquestion paper is mistake as while(a!=0) while(12345!=0) never becomes false and no termination so we keep a=a/10 and the purpose of program seems that it sums all even digits of a and prints sum.

116

Condition (a!=0)

Result (T/F)

Computations (j=a%10) and print j j=12345%10=5 print 5 j=1234%10=4 print 4 j=123%10=3 print 3 j=12%10=2 print 2 j=1%10=1 print

Condition (j%2==0)

Result

Calculation

Valve of a (a=a/10)

12345!=0 1234!=0 123!=0 12!=0 1!=0 0!=0

T T T T T False

5%2==0 4%2==0 3%2==0 2%2==0 1%2==0

False True False True False

sum=0+4=4 sum=4+2=6 -

a=12345/ 10=1234 a=1234/1 0=123 a=123/10 =12 a=12/10= 1 a=1/10=0

(------end of while-loop------) print sum =6

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

3 a) very important #include<stdio.h> #include<conio.h> void main() { int x=0, i=0; for (i=1; i<10; i++){ if (i%2==0) x += i; else { x -- ; printf ("%d\t", x); } } printf("\nx=%d", ++x); getch(); }

117
Result Calculation Update i of forloop (i++) i=1++ (see how 1++ changes to 2 in next statement) i=2++ i=3++ i=4++ i=5++ i=6++ i=7++ i=8++ i=9++

Condition (i%2==0) 1%2==0

False

x=0- print -1

2 3 4 5 6 7 8 9

2%2==0 3%2==0 4%2==0 5%2==0 6%2==0 7%2==0 8%2==0 9%2==0

T F T F T F T F

x=x+i=-1+2=1 x=1- print 0 x=x+i=0+4=4 x=4-print 3 x=x+i=3+6=9 x=9-print 8 x=x+i=8+8=16 x=16-print 15

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
i=10 but i<10 is only permissible for for-loop, so loop terminates. print x=16 //++15 is 16

PU2011FALL 3 a) #include<stdio.h> #include<conio.h> void main() { int i=5,j=4,k=9; i=(i+k)/3+k%(j+i)+j*k%i/2; printf("%d",i); getch(); } i=(5+9)/3+9%(4+5)+4*9%5/2 here () has highest priority and follows L to R associativity. So, i=14/3+9%(4+5)+4*9%5/2 i=14/3+9%9+4*9%5/2 (1 step) (2 3

118

now, %,*,/ has high precedence with L to R associativity, so i=4+9%9+4*9%5/2 i=4+0+4*9%5/2 i=4+0+36%5/2 i=4+0+1/2 i=4+0+0

(7

(6

(5

now + has high precendence than =,so i=4+0 i=4 (8

(9

now the value of i is 4, print i //4 prints out

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
3 b) #include<stdio.h> #include<conio.h> void main() { int x=16,y=18,z; y+=x++; z=++x+y++; x=x+y+z--; printf("\n x=%d\ny=%d\nz=%d",x,y,z); getch(); } y+=x++; her, ++ has high precedence than assignment operator +=. So, at first x++ is calculated. 16++ means x has 16 value o the line but 17 on next line. So, y=y+16++ =18+16++ =34 In next line, ++ has R to L associativity so , at first y++ is calculated, then ++x, then + is done and finally assigned to z. z=++x+34++ =++17+34++ =18+34++ =52 z=52 In 3 line x=18+35+52-=18+35+52 =105 (1 step) (2 step)

119

Line

x Value before calculation of line 16

Value after calculation of line 16++

y Value before calculation of line 18

Value after calculation of line

z Value before calculation of line

Value after calculation of line

18+16++=18+16=34 Not Not defined(garbage defined( it value) gives error

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
like no value declared when printed) 52 52-51

2 17 ++17=18 3 15 105 4 105 105 Print x=105, y=35, z=51

34 35 35

34++ 35 35

52 51

Hints: Read each line of statement separately and make a general table like above which includes values of x,y,z in various lines and sub-divide the values into two parts- one stores value before the calculation of the line is done and the next stores value after the calculation of the line has been done. In order to do calculation for a particular line we need to take the value from value before calculation of line and do our all calculations of the line. In calculation of a line, a value may go under various sort of changes it doesnt matter to us and we have to remember a thing that a variable has only one address so a value changed from any where or at any time automatically changes the value where its old values are erased without any delay so one by one step method makes everything clear.

For e.g. a=5 a++,b=a- Value of a before calculation, a=5 In calculation, 5++ but later changed to 6 on next using of a Then after calculation a- -means 6- - on next line it is a=5 sometime a variables value may be changed more than 1 time abruptly within a single statement or line. Lets return to our lesson, after the calculation we need to fill the value after calculation of line with the new arising values but we should be careful that I post operators write the symbol++ or - as it is so we change it into its real form by initialization ofnext line. For e.g. the x is 16++ of line 1 changes to x is 17 in line2. So this table-work must go side-by-side with the line-by-line calculation.

120

PU2009FALL 3 a) #include<stdio.h> #include<conio.h> void main() { int m = 100, n = 50; printf ("%d\n", 10+m++); //1^st line printf ("%d\n", 10+n--); //2^nd line

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf ("%d\n", 10+--n); //3^rd line getch(); } 1 line 10+ 110 10+

10+100 // 100 for this line and 101 for next print 2 line

10+50 // 50 for this line and 49 for next print 3 line 60 10+n

10+48 58 Value of m Before 100 101 101 Value of n Before 50 50 49 Printing on line 10+ 100=110 1+ 50 =60 10+48=58

print

121
After 100 101 101 After 50 50 =48

Line number 1 2 3

49

Neglect unnecessary values in the table for the case on line 2 and 3 values of m and value of n on line 1. But in long statements, this unnecessary tabulation may give a great relief to us.

3 b) #include<stdio.h> #include<conio.h> void main()

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
{ char string [ ] = "HELLO WORLD"; int m; for (m=0;string[m]!='\0';m++) { if (m%2==0) printf ("%c",string[m]); } getch(); }

Condition of forCondition Result Calculation Update of m loop (m%2==0) (m++) string[m]!= \0 0 True 0%2==0 T print H 0++ 1 T 1%2==0 F 1++ 2 T 2%2==0 T print L 2++ 3 T 3%2==0 F 3++ 4 T 4%2==0 T print O 4++ 5 T 5%2==0 F 5++ 6 T 6%2==0 T print W 6++ 7 T 7%2==0 F 7++ 8 T 8%2==0 T print R 8++ 9 T 9%2==0 F 9++ 10 T 10%2==0 T print D 10++ 11 F (-------for-loop terminates--------) Here we are checking the condition of for-loop in order to demonstrate how character array works.

122

OUTPUT: HLOWRD

PU2007FALL 2 a) #include<stdio.h> #include<conio.h> void main() { int x =10,a =10,b=0, y =11, z =12; x+=++a-b++; // line x-=++z%--b; // line x*=++a+b++*z-- ; // line printf("a=%d\tb=%d\tx=%d\ty=%d\tz=%d",a,b,x,y,z); getch(); }

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

Without assigning a variable a value and using it makes error but it doesnt hamper for assignment so we have supposed b=0 in the question. But even after that something divide by b (zero) gives complilation error so the program gact run. However here we are going to rewad the process of calculation by assuming error as correct. line ++ has priority and R L associativity x=x+(++a-b++) (first step) x+(++10)-0 ( second step) x+11-0 x=x+11 ( step) x=10+11 =21

line 2 x-=++z%- -b x-=++z%- -1 (first step) x-=++12%0// here int divide by zero may give error x- =13%0 (second step) x-=13 ( third step) x=21-13=8 write the actual values instead of variable only when the particular calculation is to be done else it will confuse you. Line 3 x*=++a+b++*z- x*=++a+b++*13- - (first step) x*=++a+0++*13 x*=++a+0*13 ( second step) x*=++11+0*13 x*=12+0*13 (third step) x*=12+0 ( fourthstep) x*=12 ( fifthstep) x=x*12 ( sixth step) x=8*12=96

123

Line 1 2 3

x before 10 21 8

after 21 8 96

y before 11 11 11

after 11 11 11

z before 12 12 13

after 12 13

a before 10 11 11

after ++10=11 11 ++11=12

B before 0 1 0

after 0++ 0 0++

Here, now on the particular line after execution x=96, y=11 (never changed in any line), z=(i.e. 13 on line but changes 12 on line which is not defined in program), a=11,b= (i.e. 0 on line but 1 on coming line).

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
About answer of c; it is undeclared variable so it gives error as undeclared variable when access c in program.

2 b) #include<stdio.h> #include<conio.h> void main() { int k, a; a = 10; for(k=0;k<10;k++) { if(k%2==0) a = a+k; else a = a-1; printf("a=%d\n",a); } printf("\n the value of a = %d", a); getch(); } k 0 1 2 3 4 5 6 7 8 9 print a=25 Condition (K%2==0) 0%2==0 1%2==0 2%2==0 3%2==0 4%2==0 5%2==0 6%2==0 7%2==0 8%2==0 9%2==0 Result T F T F T F T F T F Calculation a=a+k=10+0=10 a=a-1=10-1=9 a=a+k=9+2=11 a=a-1=11-1=10 a=a+k=10+4=14 a=a-1=14-1=13 a=a+k=13+6=19 a=a-1=19-1=18 a=a+k=18+8=26 a=a-1=26-1=25 print a print 10 print 9 print 11 print 10 print 14 print 13 print 19 print 18 print 26 print 25

124

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

2012FALL 2b i) Very important #include<stdio.h> #include<conio.h> void main() { int x=10,y=20,z=5,i; i=x*(++y+z++)%3+y/x*2-5; x+=z; y-=z; x--; z+=10; z--; printf("x=%d\ny=%d\nz=%d",x,y,z); printf("\ni=%d",i); getch(); }

125

1 line () has high priority in which ++ has 1 play with R to L associativity then outside () for *,/,% with L to R associativity then +,- eith L to R associativity, Here steps are written when actual calculation is done excluding actual value assignment. 1 line i=x*(++y+z++)%3+y/x*2-5 = x*(++y+5++)%3+y/x*2-5 =x*(++20+5)%3+y/x*2-5 = x*(21+5)%3+y/x*2-5 = x*26%3+y/x*2-5 = 10*26%3+y/x*2-5 =260%3+y/x*2-5 =2+21/10*2-5 4 step 5 step 2 step 3 step 1 step

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

Note:- what happen if these way z/x instead earlier said that a post operators actual value comes into play either in next line if there is no further use of that variable in that line or if there is use in same line that the actual and final value must come into play play so instead of 5++ in Table for z, we must write 6 for the case. 6 step 7 step 8 step 9 step

=2+2*2-5 =2+4-5 =6-5 =1 So i =1 TABLE Line

1 2 3 4 5 6 7

x Before calculation of line 10 10 16 16 15 15 10

After calculation of line 10 16 16 16- 15 15 No any calculation

y Before calculation of line 20 21 21 15 15 15 15

After calculation of line ++20=21 21 21-6=15 15 15 15 No any calculation

z Before calculation of line 5 6 6 6 6 16 15

After calculation of line 5++ 6 6 6 16 16- No any calculation

126

2 line x+=z i.e. x=x+z=10+6=16 3 line y-=z i.e. y=y-z=21-6=15 6=15 4 line x- - i.e. 16- 5 line z+=10 i.e. z=z+10=6+10=16 6 line z- - i.e. 16- Print x= 15 y=15 z=15 i=1

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

PU 2011 SPRING Ternary Operators nested use


#include<stdio.h> #include<conio.h> void main() { int i=-4,j,num=0; j=(num>5?(num<=10?100:20):500); printf("%d",num); printf("%d",j); getch(); } Output: 0500

Here inner () is operated at first in ternary operator num<=10 0<=10 (True) So, j=(num>5?100:500) As the inner condition condition becomes true so 100 is taken but remember it is not assigned to num, num still has 0 value. Now, num>5 0>5 (False) So, j=500. While printing num=0 and j=500 so 0500is printed out.

127

PU2006FALL 3 Print out combinations of 1, 2, 3 using for-loop


#include<stdio.h> #include<conio.h> void main(){ int i,j,k,num,flag=1; for(i=1;i<=3;i++) { flag=1; num=i; for(j=1;j<=3;j++) { if(j==i) continue; num=num*10+j;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
for(k=1;k<=3;k++) { if(k==i || k==j) continue; num=num*10+k; printf("%d\n",num); flag=0; break; } if(flag==0) break; } } getch(); }

PUFALL2003 2 b)
Read temperature of a month of 10 cities and print out average of ten cities using array and for-loop #include<stdio.h> #include<conio.h> void main(){ int i,j,sum=0; char city[10][25]; int tmp[10][30]; for(i=0;i<10;i++) { printf("Enter name of city"); scanf("%s",&city[i]); } for(i=0;i<10;i++) { for(j=0;j<30;j++) { printf("Enter temperature of %s for %d day",city[i],j+1); scanf("%d",&tmp[i][j]); } } for(i=0;i<10;i++) { sum=0; //for each value of i i.e. for eachnew city sum must starts from zero for(j=0;j<30;j++) { sum=sum+tmp[i][j]; } printf("average of %s city is %d",city[i],sum/30); } getch(); }

128

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

SECOND WAY OF SOLVING #include<stdio.h> #include<conio.h> void main(){ int i,j,avg[10]; char city[10][25]; int tmp[10][30]; for(i=0;i<10;i++) { printf("Enter name of city"); scanf("%s",&city[i]); } for(i=0;i<10;i++) { avg[i]=0; for(j=0;j<30;j++) { printf("Enter temperature of %s for %d day",city[i],j+1); scanf("%d",&tmp[i][j]); avg[i]=avg[i]+(tmp[i][j]/30); } } for(i=0;i<10;i++) { printf("average of %s city is %d",city[i],avg[i]); } getch(); } Here average is calculated directly as the sum of such values which has got ratio (or fraction) to the total number of species i.e. 30

129

For e.g, if there are data 10, 50,60,5 then its average can be calculated as Avg=(10+50+60+5)/4=31.25 (in I CASE) But in second case it is calculated as Avg= 4 + 4 + 4 +4=31.25 As here 4 represent the total quantity of data, formerly in program it was 30
10 50 60 5

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

POINTERS
Pointer declaration in arrays
1-D array: Declaration *a[3]={1,2,3}; To access *a[i]; such that i running from 0 to 2

130
2-D array: Declaration *(a+i)+j; or (*a)[]; or *a[][]; // or to pass value by address or pointer To access *(*(a+i)+j); or *(a[i]+j); // to use value

int x,*p,y; x=5; p=&x; y=*p; //accessing x through p-pointer variable *p=50; //accessing 50 to x through pointer p

In 1-D, *(x+i) represents 1-D array x[i] and *(*(a+i)+j) represents a[i][j]

In p[i][j] p p+i pointer to 1 row pointer to row

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
*(p+i) *(p+i)+j *(*(p+i)+j) pointer to 1 element in row pointer to element(column) in row value of row and column

PROGRAM DEMONSTRATING POINTER VARIABLES RESEMBLENSE WITH SPECIAL ARRAY i.e. CHARACTER ARRAY (STRING) N E P A L \0

Address

54 (name)

59 (ptr)

#include<stdio.h> #include<conio.h> void main(){ char *name; char *ptr; name="NEPAL"; ptr=name; while(*ptr!='\0') { printf("%c is stored at address %d\n",*ptr,ptr); ptr++; } printf("\n length=%d\n",ptr-name); getch(); }

131

DESCRIPTION The pointer ptr points the name variable so ptr gives address of each characters of name variable i.e. NEPAL and similarly *ptr access each characters.

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
After while termination, the ptr has gained one more succeeding address after L of NEPAL i.e. of \0 so its subtraction with name which has address of 1 character of name variable i.e. N of NEPALgives length of NEPAL.

USING VOID TYPE POINTER AS REQUIRED


void* v; //a void pointer int a =50; v=&a; printf("%d",*(int*)v); //prints 50 //here '(int*)v' declare v as int type pointer

Demonstrating the 2D pointers in 2d array


#include<stdio.h> #include<conio.h> int main() { int*matrix[2][2]; int i,j; printf("first matrix"); for(i=0;i<2;i++) for(j=0;j<2;j++) scanf("%d",*(matrix+i)+j); //printf("\n%d",*(matrixa+i)+j); for(i=0;i<2;i++) for(j=0;j<2;j++) printf("output:%d",*(*(matrix+i)+j)); getch(); return 1; }

132

CALL BY ADDRESS/PASS BY POINTER


int x=5; cahnge(&x); // call by reference or address printf("%d",x); // x=15

change(int* p) { /*here in int* p, * has R-L associativity. So, p is a variable of type pointer as p has priority than * and of type int. Here the input as argument is taken by p not *p, *p shows the p is pointer type alse we can say int* is one thing and p another, int* showing type of value taken by p and type of p-variable i.e. int and (pointer) respectively. */ *p=*p+10;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
}

POINTERS IN STRUCTURE struct student *ss; to assign or access value we use (*ss).id //* has R-L associativity but we need L-R associativity so () used or we use ss->id PASSING WHOLE STRUCTURE TO FUNCTION function_name(struct_name obj); //calling and we can directly accesss elements of structure inside function

PU 2006 SPRING 5a Meaning of some pointer expressions: Qn. i) ii) iii) iv) v) Explain the meaning of the following declaration: int *p; int *p[10]; int (*p)[10]; int *p(void); int (*p)(char*a);

133

Answer: Meaning of i): It simply declares a variable p which is pointer type that means it stores address of some other variable but this pointer type is int so , it stores only address of int type some other variable.

Meaning of ii) and iii): *has lower precedence than [], so *p[10] declare p has an array of 10 pointers but (*p)[10] declare p as an pointer to an array of 10 elements. {*has R-L}and{(),[] has L-R}

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Meaning of iv): POINTER TO FUNCTIONS: iv) int *p(void); declare p as a function (taking void means nothing as argument) returning a pointer type int value. It is because () has high priority and L R associativity i.e. p(void) p is a function wioth no argument and similarly * has R to L associatrivity in addition to 2 priority so int*p(void) ; is a function returning pointer type. Meaning of v): int (*p)(char*a); The 1 priority () has L to R associativity. So, (*p) is taken 1 than (char*a) i.e. p is a pointer to a function taking argument as pointer type vartiable-a and this function returns int value.

2003 fall 4 a) Write a program with user defined function using pointers to convert all the uppercase letters to lower-case and vice versa in a string given by the user. For example: The C pRogramming. tHE c PrOGRAMMING.

134

#include<stdio.h> #include<conio.h> #include<string.h> int main() { void converter(char*); char string[50]; printf("enter a string\t"); scanf("%[^\n]",&string); converter(&string); getch(); return 0; } void converter(char* string){ int i; for(i=0;i<strlen(string);i++){ int a=string[i]; if(a>=65 && a<=90) { // if we look the ASCII value table this range is for Upper case a=a+32; // the ASCII value difference betweenlower and upper is32 } else if(a>=97 && a<=122) { // similarly this range is for Lower case a=a-32; By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} printf("%c",a); } }

SOME CONCEPTUAL TERMS


RETURNING MULTIPLE VALUES BY FUNCTION
Show how pointers can be used to return more than one values from a function (PU2003FALL4 a)]
A function is a block that takes arguments (char, int, float of normal type or pointer type) and does either some sort of calculations or other processes and may either return a value or return no value as a direct visible output. So realizing in a direct method or by just using simple ordinary variables, a function can return at most one value, but by using pointer variables, a function can return multiple values. These output parameters are obtained by &(address operator) and indirection operator(*). For e.g. #include<stdio.h> #include<conio.h> void calculation(int x, int y, int* sum, int* sub) { *sum=x+y; *sub=x-y; } void main() { int x=5, y=2, a, s; calculation(x,y,&a,&s); printf("Sum=%d\t diff=%d",a,s); getch(); }

135

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Here as argument two pointer variables are passed in addition to two simple variables. The sum and diff is assigned to address of a ands or to pointer variables pointing address. Now from the main method these values are accessed. So the function does calculations and stores values in addresses by help of pointers. A function directly returns at most only one variable but can choose what value to be returned among many depending upon conditions- meeting.

PROGRAM DOCUMENTATION
It means remarkations used to give information or declaration of some lines. Two types-single line and multiline denoted by //.and /**/. This documentation increases the readability sand in execution of program, these statements arte left and the flow of execution rejects it and directly goes to next line so it doesnt hamper the speed of execution of program. So it is advantageous. Documentation makes easy to understand a program even for beginning users and also to programmer himself if for a big program, he might lose concentration after long programming or recovering the program after a long time.

IMPORTANT CASTING MECHANISM


#include<stdio.h> #include<conio.h> void main() { int a=20,b=6; float r1,r2; r1=a/b; printf("%f",r1);//3.000000 r2=(float)a/b; printf("\n%f",r2);//3.333333 printf("\n%f",(float)(a/b));//3.000000 getch(); }

136

Here on first printing float is in top hierarchy than int so int value 3(because 20/6=3 in int integer division)is converted into float by r1=a/b; statement, but in second printing the a is converted into float by =(float)a/b; and here () has precedence than / and the result is in float type, however in third printing (float)(a/b), first up all a/b is done which is 3 then only it is changed into float so printing 3.00000.

VARIABLES
Automatic variables are those local variables (variables accessible within only a specified block) declared inside functions so that it is only accessible within function, it make up its own new address

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
so that it does not alter the variable of main method even if main method has the same name variable and at last, these variables are generated only after function is called and their lifetime is limited until the end of execution of the same function for the same particular call of function i.e. when we call a function for a number of times then the local variable are evolved and terminated for the same number of times, and each time creating new space, new value (may be some initialization) where old values have no existence.

But if we want to use the old values of local variables then static type local variables must be declared, i.e. in static type local variables within between many calls of a same function, the value of a variable remains still in the sense that it exits but, changes in the sense that it may not hold a value for the all time in a specified position i.e. in automatic variable at initialization a variable holds a same value for all calls but this mightnt be in static. Here the variable is generated when a first call is given to function and it only terminates on whole execution of program.

Global variables are accessible, changeable and assignable from any part of a program- main method or any sub-module, module, block, etc.

CALL BY VALUE VS CALL BY REFERENCE


What actually is a function? A function is a block that does some operation. It may do two types of operation and by two different ways. One operation sis the internal operation which plays role for inner calculations and the next operation adds some feature in addition to former operation i.e. the operation is visible to where the function is called or the function returns some value. This value returned is very much co-related to the way by which the function is operated and we know a function is operated by two ways- one is by passing some values as input in order to process it or operate it whereas the other is passing no value at all. But now, we are concerned with methods of passing values and memory space. In call by value, the actual arguments we pass in function are copied to some local variables of the function. As we know local variables specify their own addresses or locations so if we now make some changes to the variable then we make change for local variable not for the real variables passed from main method. int a=5,b=2; sum(a,b); printf("x=%dand y=%d",x,y); void sum(x,y) { int sum=x+y; } Here 5 and 2 are copied to the function and hence the local variables x and y store them but they are not accessible from outside (main method). int a=5; change(a); printf("%d",a); //gives output 5 instead of 0 void change(a){

137

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
a=0; } Now look here a declared in function is different than declared in main method as we see that the print of a in main method even after function call shows that a=5 still, this shows that the address of a, b in function is different than address of a, b in main method. Now call by address or reference is just oppose of what we have gone through. In call by address, the value is changed by any sort of changes either in function or in main method as in both cases there is only one value with only one address for a variable.

A Simple program demonstrating structure: It takes data and print info of whose address is pokhara.
A Simple program demonstrating structure: It takes data and print info of whose address is pokhara #include<stdio.h> #include<conio.h> #include<string.h> struct employee { char name[40]; char address[30]; int tel; int salary; struct yrofjoin { int y; } year; }e1[100]; void main(){ int i; int n; printf("number of data"); scanf("%d",&n); for(i=0;i<n;i++){ printf("Name\t"); scanf("%s",e1[i].name); printf("Address\t"); scanf("%s",e1[i].address); printf("Telephone\t"); scanf("%d",&e1[i].tel); printf("Salary\t"); scanf("%d",&e1[i].salary); printf("Year of Join\t"); scanf("%d",&e1[i].year.y); } for(i=0;i<n;i++){ if(strcmp(e1[i].address,"pokhara")==0) {

138

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("\n the info of persons whose address is pokhara are"); printf("\n\t%s\t%s\t%d\t%d\t%d\n",e1[i].name,e1[i].address,e1[i].tel,e1[i].salary,e1[i].year.y); } } getch(); }

FILE HANDLING
File pointer vs std
fscanf(stdin,"%d",&roll); This is the next format of 'fscanf', here it will just take input from screen as stdin means standard input i.e. input from screen but does nothing to file similar this 'stdout' by 'fprintf' prints data not from file but from program to screen i.e. std means reading from input of user i.e. from screen to program or printing to screen from program.

139

printf("Enter Phone number\n"); fscanf(stdin,"%s",&phone); // it takes input from screen to program fprintf(fp1a," %s %s %d",name,add,phone); //this prints data from program to file defined by fp1a fscanf(fp1a," %s %s %d",name,add,phone); //it reads data from file defined by pointer fp1a fprintf(stdout,"\n%s\t%s %d\n\n",name,add,phone); //it prints data from program to screen

by above we come to two conclusions that if there is file pointer in the function that does connect between program and file (it may be both reading and writing operations) however std does connection between program and screen, even though fprintf or fscanf seems to be only with file handling. The other conclusion is that there must be certain relationship:

Screen

Program

File

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

From the above example, we see that at first phone number is taken from user as input to program that is then stored in file and similarly, phone number is read from file to program then only printed to screen, however direct printing and reading between screen and file is not possible.

PU2009 SPRING 6 B) WAP to read name, author and price of 500 books to library.dat and then print info of books of price > 300. #include<stdio.h> #include<conio.h> struct library { char book_name[35]; char book_author[15]; float book_price; }element[500]; void main() { int i; FILE*fp; printf("\nEnter Information of 500 Books\n"); fp=fopen("library.dat","w");//cause creating a new file or replacing if there is old file for(i=0;i<500;i++) { printf("Enter name:"); scanf("%s",&element[i].book_name); printf("Enter Author:"); scanf("%s",&element[i].book_author); printf("Enter Price:"); scanf("%f",&element[i].book_price); fprintf(fp," %s %s %f",element[i].book_name,element[i].book_author,element[i].book_price); } fclose(fp); fp=fopen("library.dat","r"); printf("\n Books whose price greater than Rs. 300\n"); printf("Name\t\t Author\t\t price\n"); for(i=0;i<500;i++) { // it is describe din B-part // while(fp!=feof) { or while(fp!=NULL) { can be used instead this is described in A-part fscanf(fp," %s %s %f",&element[i].book_name,&element[i].book_author,&element[i].book_price); if(element[i].book_price>300) { printf("%s\t%s\t\t0.3%f\n",element[i].book_name,element[i].book_author,element[i].book_price); } } //TO HERE fclose(fp); getch(); }

140

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
Analysis: Problem: Here we need three variables to store name of book, author of book and price of book, but these variables work only to a book so an array of 5800 book is required. We need to store all the information of 500 books to a file and after that we have to read them and print the books having price more than 300. So here an structure; a simple structure is necessary as there is no necessary of branching structure elements as name of book, author and price are totally independent to each other as well as they belong to different groups. The entity of that structure must be an array of 500 which can be used to read elements. But for the particular case of above we use its advantage in printing too i.e. the 500 elements are used for checking the conditio0n (price>300) and printing if satisfied.

B-part: We know that there are 500 books so we directly did it, i.e. we continued our loop of i for 500 times but in case we are unsure we follow A. In B, we are using the structure again from its object elements initial value 0 to 499 to store the value from the file. If the condition is met, then it is printed out. Instead of the array of structures object element we can use a single variable that stores a value at a loop and check condition and work according to condition and for next loop the variable stores next value and similarly so for goes on OR we may use array of variables without any structure; it is because the array has noth8ing to do with the condition as each array check at each time which is same to each variable at a time.

141

PU2009fall6 b)
Create a structure for the following data: ID Name Address Salary Date of joining dd mm yy

And write program to input 100 employees, save in emp.dat file and print info of employee who have the address 'pokhara'. #include<stdio.h> #include<conio.h> #include<string.h> struct employee { int id; char name[40]; char address[30]; int salary; struct yrofjoin {

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
int d; int m; int y; } yoj; }e1[100]; void main(){ int i; FILE*fp; fp=fopen("emp.dat","w"); for(i=0;i<100;i++){ printf("ID\t"); scanf("%d",&e1[i].id); printf("Name\t"); scanf("%s",&e1[i].name); printf("Address\t"); scanf("%s",&e1[i].address); printf("Salary\t"); scanf("%d",&e1[i].salary); printf("Day of Join\t"); scanf("%d",&e1[i].yoj.d); printf("Month of Join\t"); scanf("%d",&e1[i].yoj.m); printf("Year of Join\t"); scanf("%d",&e1[i].yoj.y); fprintf(fp,"%d-%s-%s-%d-%d-%d%d/",e1[i].id,e1[i].name,e1[i].address,e1[i].salary,e1[i].yoj.d,e1[i].yoj.m,e1[i].yoj.y); } printf("\n\n"); fclose(fp); fp=fopen("emp.dat","r"); printf("DATA STORED ABOUT EMPLOYEE WHO LIVES IN POKHARA\n"); printf("ID\t"); printf("Name\t\t"); printf("Address\t\t"); printf("Salary\t\t"); printf("Date of join\n\n"); for(i=0;i<100;i++){ fscanf(fp,"%d-%s-%s-%d-%d-%d%d/",&e1[i].id,&e1[i].name,&e1[i].address,&e1[i].salary,&e1[i].yoj.d,&e1[i].yoj.m,&e1[i].yoj.y); if(strcmp(e1[i].address,"pokhara")==0) { printf("%d\t%s\t%s\t%d\t%d-%d%d/",e1[i].id,e1[i].name,e1[i].address,e1[i].salary,e1[i].yoj.d,e1[i].yoj.m,e1[i].yoj.y); } } fclose(fp); getch(); }

142

We have used:-

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fprintf(fp,"%d-%s-%s-%d-%d-%d-%d/", e1[i].id,e1[i].name,e1[i].address,e1[i].salary,e1[i].yoj.d,e1[i].yoj.m,e1[i].yoj.y); here %d-%s-%s-%d-%d-%d-%d/ Is the format to store data, instead of and / we can use other symbols too. Why are they used? Let us suppose an input like ID: 1 NAME: abc ADDRESS: pokhara SALARY: 500 DAY OF JOIN:1 MONTH OF JOIN:2 YEAR OF JOIN:2069 And if we put the format like this %d%s%s%d%d%d%d Without any space and symbols then in it will be save like this 1abcpokhara500122069 And while reading from file by fscanf(fp,%d%s%s%d%d%d%d.); %d will surely extract 1, but %s succeeding %d will extract abcpokhara because in the stored data abcpokhara is a single string but here our intensition was to just extract NAME: abc, the second %s succeeding it will extract no string as abc pokhara is already extracted by preceding %s and 500122069 is not a string.similarly the %d intentended to extract salary:500 will extract 500122069 and left %d%d%d for day, month,year will have nothing to extract. So we need to use either appropriate symbols that has not been used in datas stored or we can simply use single or double or more spaces or tabs according to complexity of data storage like this %d %s %s %d %d %d %d Here double space has been used, it is good not to use single space if we are storing string because string like name can have space between first and last name. Look carefully %d-%s-%s-%d-%d-%d-%d/

143

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
We have used /, why think reasonably. It is because in file datas are added one-by-one in compact manner i.e. if we store two datas like this: ID: 1 NAME: abc ADDRESS: pokhara SALARY: 500 DAY OF JOIN:1 MONTH OF JOIN:2 YEAR OF JOIN:2069 And the format of saving in file is %d-%s-%s-%d-%d-%d-%d Then file it will be stored like this 1-abc-pokhara-500-1-2-20692-xyz-lekhnath-123-5-11-2066 Here you notice that in 20692, 2069 is year for first person and 2 is id of second person, but similar to above, 20692 will be extracted as a single int type data and there will be no id to extract for second person so we use %d-%s-%s-%d-%d-%d-%d/ which will change the above format of storing into 1-abc-pokhara-500-1-2-2069/2-xyz-lekhnath-123-5-11-2066 It is better if you use /%d-%s-%s-%d-%d-%d-%d Here / is in front so that before each set of data is stored / is stored keeping a barrier between sets of data, but use what you feel good and what program accepts without destroying the barrier between set of data and also within the data of same set. We discussed about two barriers- one internal between data of same set and another external between sets of data. NOTE: In reading file by file_pointer, the last term of each installment of data in file must be completely free from spaces or any symbols used as barrier like this %d %s %f because file pointers read all (symbols too) showing that file is not feof i.e. it reads some symbols like this while(!feof(fp)){ fscanf(fp, %d %s %f ); fprintf(stdout, %d %s %f); } Here even after all required values of data have been read and printed then fscanf reads last double space which shows feof of while is false (means while-loop executes once more) even after all required datas is already printed then fprint is executed but the format does match as the ID: 2 NAME: xyz ADDRESS: lekhnath SALARY: 123 DAY OF JOIN:5 MONTH OF JOIN:11 YEAR OF JOIN:2066

144

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
double spaces of file is unmatched to %d %s %f so the previous latest values of variables are once more printed which means the last data of file is double printed. But next time, feof is true and while-loop terminates.

Due fee Prints student info whose due fee is less than 100
#include<stdio.h> #include<conio.h> void main(){ FILE *fp; int n; int roll; float duefee; int i; char name[50]; fp=fopen("student.txt","w"); printf("How many input"); scanf("%d",&n); for(i=0;i<n;i++) { printf("Enter Student ID\t"); printf("Enter Student Name\t"); printf("Enter Duefee\n\n"); fscanf(stdin,"%d",&roll); fscanf(stdin,"%s",&name); fscanf(stdin,"%f",&duefee); fprintf(fp," %d %s %f",roll,name,duefee); } fclose(fp); fp=fopen("student.txt","r"); printf("STUDENTS WITH DUE FEES LESS THAN 100\n"); while(!feof(fp)){ fscanf(fp," %d %s %f",&roll,&name,&duefee); if(duefee<100){ printf("ID\t"); printf("Name\t"); printf("Duefee\n\n"); fprintf(stdout,"\n%d\t%s\t%f\n",roll,name,duefee); } } fclose(fp); getch(); }

145

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

PU2002 Consumed charged data merged with file handling: WAP that stores following data of customer of electricity authority in file elect.dat: id, name, old reading, new reading and amount to be paid.

146

ELECRTIC DATA MERGED WITH FILE HANDLING


WAP that stores following data of customer of electricity authority in file elect.dat: Amount to be paid Hints: The amount to be paid is calculated by calculating the units consumed by subtracting New reading to Old reading and following given list shows the range of units and rate as: Range of units Rate per unit 0-200 4.5 201-400 5.5 400-above 7.5 Use this file to store data from user until user supplies 0 as Id then after display the above list. #include<stdio.h> #include<conio.h> struct customer{ int id; char name[40]; int old_reading; int new_reading; float amount; }cus[1000]; float calculation(int x){ float amount; if(x<=200) { amount=x*4.5; Id Name Old reading New reading

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
} else if(x>200 && x<=400) { amount=200*4.5; x=x-200; amount=amount+(x*5.5); } else { amount=200*4.5+200*5.5; x=x-400; amount=amount+x*7.5; } return (amount); } void main(){ int i=-1,value; FILE*fp; fp=fopen("elect.dat","w"); do { i++; printf("CUSTOMER ID\t"); scanf("%d",&cus[i].id); printf("Name\t"); scanf("%s",&cus[i].name); printf("Old Reading\t"); scanf("%d",&cus[i].old_reading); printf("New Reading\t"); scanf("%d",&cus[i].new_reading); value=cus[i].new_reading-cus[i].old_reading; cus[i].amount=calculation(value); fprintf(fp," %d %s %d %d %.2f",cus[i].id,cus[i].name,cus[i].old_reading,cus[i].new_reading,cus[i].amount);/* we are using double space as the string has scope over symbols like / or-*/ } while((cus[i].id)!=0); printf("\n\n"); fclose(fp); fp=fopen("elect.dat","r"); printf("DATA STORED ABOUT CUSTOMERS OF ELECTRICITY AUTHORITY\n"); printf("ID\t"); printf("Name\t\t"); printf("Old reading\t\t"); printf("New reading\t\t"); printf("Amount to be paid\n\n"); i=0; /*previously 'i' was used to store to file now for reading from file so must be initialized as zero or any value or nothing too works, even other variables can be declared but similar change to all preceding program*/ while(!feof(fp)) { fscanf(fp," %d %s %d %d %f",&cus[i].id,&cus[i].name,&cus[i].old_reading,&cus[i].new_reading,&cus[i].amount); printf("\n");

147

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("%d\t%s\t%d\t%d\t%.2f",cus[i].id,cus[i].name,cus[i].old_reading,cus[i].new_reading,cus[i].am ount); } fclose(fp); getch(); }

148
Here calculation() function returns amount to be paid in float type whereas it takes consumed units as input. For calculation, here we the very simple process among the ways we discussed in ELECRTICITY AUTHORITY sector.

As we see that do-while loop has condition to be checked which contains i so here the value of i must not increase or simply updated just before while-condition as this directly hampers the condition of while so we have incremented i in line following do-loop, but as we know i must starts from 0 and there is increment just after do-loop, so initially i is assigned -1. The while-loop only continues if the Id provided by user previously is not zero then continues with new input from user saves it in file and then only checks if the id sent by user is zero or not, i.e. in file, we find that the last stored data must have zero as id. Besides, it includes all data like name, readings, amount for the customer to which our intension was not to be saved in file. This is the defect of the above program. This can be removed by adding a if=statement checking whether the input Id is zero or not, if zero then goto outside else continue by using goto inside:, like below: #include<stdio.h> #include<conio.h> struct customer{ int id; char name[40]; int old_reading; int new_reading; float amount;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
}cus[100]; float calculation(int x){ float amount; if(x<=200) { amount=x*4.5; } else if(x>200 && x<=400) { amount=200*4.5; x=x-200; amount=amount+(x*5.5); } else { amount=200*4.5+200*5.5; x=x-400; amount=amount+x*7.5; } return (amount); } void main(){ int i=0,net_unit=0; FILE*fp; fp=fopen("elect.dat","w"); inside: printf("CUSTOMER ID\t"); scanf("%d",&cus[i].id); if((cus[i].id)==0) goto outside; printf("Name\t"); scanf("%s",&cus[i].name); printf("Old Reading\t"); scanf("%d",&cus[i].old_reading); printf("New Reading\t"); scanf("%d",&cus[i].new_reading); net_unit=cus[i].new_reading-cus[i].old_reading; cus[i].amount=calculation(net_unit); fprintf(fp," %d %s %d %d %.2f",cus[i].id,cus[i].name,cus[i].old_reading,cus[i].new_reading,cus[i].amount); goto inside; outside: printf("\n\n"); fclose(fp); fp=fopen("elect.dat","r"); printf("DATA STORED ABOUT CUSTOMERS OF ELECTRICITY AUTHORITY\n"); printf("ID\t"); printf("Name\t\t"); printf("Old reading\t\t"); printf("New reading\t\t"); printf("Amount to be paid\n\n"); i=0; //here it is noted that i=0 for each time the loop of while so a static counter variable can be usrd to store various data at varous steps

149

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
while(!feof(fp)) { fscanf(fp," %d %s %d %d %f",&cus[i].id,&cus[i].name,&cus[i].old_reading,&cus[i].new_reading,&cus[i].amount); printf("%d\t%s\t%d\t%d\t%.2f\n",cus[i].id,cus[i].name,cus[i].old_reading,cus[i].new_reading,cus[i]. amount); } fclose(fp); getch(); }

Study in above program; some changes taking place to value initialization of i carefully.

150

PROJECTS
BOOKS
#include<stdio.h> #include<conio.h> void main(){ FILE *fp; int n; int code; float price; int i; char name[50]; char book[50]; fp=fopen("booksinfo.txt","a"); printf("How many inputs?\t"); scanf("%d",&n); for(i=0;i<n;i++) { printf("Enter Book Code\n");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("Enter Author Name\n"); printf("Enter Book Name\n"); printf("Enter Cost Of Book\n"); fscanf(stdin,"%d",&code); fscanf(stdin,"%s",&name); fscanf(stdin,"%s",&book); fscanf(stdin,"%f",&price); fprintf(fp," %d %s %s %f",code,name,book,price); } printf("\n\n"); fclose(fp); fp=fopen("booksinfo.txt","r"); printf("DATA STORED ABOUT BOOKS\n"); printf("CODE\t"); printf("NAME\t\t"); printf("BOOK\t\t"); printf("PRICE\n\n"); while(!feof(fp)){ fscanf(fp," %d %s %s %f",&code,&name,&book,&price); fprintf(stdout,"\n%d\t%s\t%s\t%f\n",code,name,book,price); } fclose(fp); getch(); }

151

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
PHONE BOOK
Store in a file phonebook.txt following: Name Address Telephone

Using switch-case statement, keep insert option and search option that searches info of the file in regard to the number or string or even a character given by user. Here it means that few characters also does working as an input for searching.

#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> int main() { long double phone;/* these numbers have high range unsigned long int range from 0 to 4294967295 i.e. 10 digits but lesser than mobile numbers even float is small so long double of 80 bits ranging 3.4e-4932 to 1.1e+4932 is used */ char phone_check[25]; // while comparing it is possible with string or character only int num,found; FILE *fp1a; FILE*fp2a; FILE*fp3a; FILE*fp4a; FILE*fp5a; char name[25],add[50],name_check[25],add_check[50],phone_str[30]; printf("If you are using first time then goto option 1\n\n"); head: found=0;// for each time head is referred a new initialization is required printf("What do you want to do?\n"); printf("[1]\tto add info\n"); printf("[2]\tto look info list\n"); printf("[3]\tto search by name\n"); printf("[4]\tto search by address\n"); printf("[5]\tto search by telephone\n"); printf("[6]\tto exit\n"); printf("-------------------------------------------\n"); scanf("%d",&num); printf("---------------------------------------------------------\n"); switch(num) { case 1: printf("Enter Name(ENTER Single name)\n");

152

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("Enter Address\n"); printf("Enter Phone number\n"); fscanf(stdin,"%s",&name); fscanf(stdin,"%s",&add); fscanf(stdin,"%lf",&phone); fp1a=fopen("phonebook.txt","a"); fprintf(fp1a," %s %s %.0lf",name,add,phone); //".0" as phone number has no value after decimal fclose(fp1a); if(getch())goto head;

case 2: printf("INFO OF FRIENDS YOU KNOW\n"); printf("\n\n--------------------------------------------------------------\n"); printf("NAME "); printf("ADDRESS "); printf("PHONE NUMBER\t\n"); fp2a=fopen("phonebook.txt","r"); while(!feof(fp2a)){ fscanf(fp2a," %s %s %lf",&name,&add,&phone); fprintf(stdout,"\n%s\t%s\t%.0lf\n\n",name,add,phone); } fclose(fp2a); if(getch())goto head;

153

case 3: printf("Enter name to be searched\t"); scanf("%s",&name_check); fp3a=fopen("phonebook.txt","r"); printf("\n\n\n\n INFO OF FRIENDS beginning with name \'%s\'\t\n",name_check); printf("\n\n--------------------------------------------------------------\n"); printf("NAME "); printf("ADDRESS "); printf("PHONE\t"); while(!feof(fp3a)){ fscanf(fp3a," %s %s %lf",&name,&add,&phone); if(strncmp(name,name_check,strlen(name_check))==0) {

fprintf(stdout,"\n%s\t%s\t%.0lf\n\n",name,add,phone);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
found++; } } fclose(fp3a); if(found==0) { printf("\nNOT FOUND\n"); } if(getch())goto head; case 4: printf("Enter address to be searched\t"); scanf("%s",&add_check); fp4a=fopen("phonebook.txt","r"); printf("\n\n\n\n INFO OF FRIENDS beginning with address \'%s\'\t\n",add_check); printf("\n\n--------------------------------------------------------------\n"); printf("NAME "); printf("ADDRESS "); printf("PHONE\t"); while(!feof(fp4a)){ fscanf(fp4a," %s %s %lf",&name,&add,&phone); if(strncmp(add,add_check,strlen(add_check))==0) {

154

fprintf(stdout,"\n%s\t%s\t%.0lf\n\n",name,add,phone); found++; } } fclose(fp4a); if(found==0) { printf("\nNOT FOUND\n"); } if(getch())goto head; case 5: printf("Enter phone to be searched\t"); scanf("%s",&phone_check); fp5a=fopen("phonebook.txt","r"); printf("\n\n\n\n INFO OF FREIENDS beginning with phone \'%s\'\t\n",phone_check);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("\n\n--------------------------------------------------------------\n"); printf("NAME "); printf("ADDRESS "); printf("PHONE\t"); while(!feof(fp5a)){ fscanf(fp5a," %s %s %s",&name,&add,&phone_str); //here '%s' at last of format works because numbers can be string but string cannot be numbers

if(strncmp(phone_str,phone_check,strlen(phone_check))==0) { fprintf(stdout,"\n%s\t%s\t%s\n\n",name,add,phone_str); found++; } } fclose(fp5a); if(found==0) { printf("\nNOT FOUND\n"); } if(getch())goto head;

case 6: printf("THANKS TO YOU\n GOOD BYE !"); if(getch()){ exit(0); } } return 1; }

155

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

156

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

157

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

MARKSHEET BY HARDER
#include<stdio.h> #include<conio.h> #include<stdlib.h> FILE *fp; FILE *fp1; FILE*fp2; int num; int number,a; int roll; int roll_array[1000]; int j=0,k=0; int i=0; int roll_t;float mark1_t;float mark2_t;float mark3_t;float mark4_t;float mark5_t;float perct_t; int rol; int abc=1; float mark1,mark2,mark3,mark4,mark5,percent; float mark1_array[100],mark2_array[100],mark3_array[100],mark4_array[100],mark5_array[100],perct_ array[100]; float mar1,mar2,mar3,mar4,mar5,perc;

158

char name[100]; char nam[30]; char name_array[1000][30]; char dummy[20]; char nam[30]; int main() { printf("If it is your first time then goto option 1\n\n"); head: printf("What do you want to do?\n"); printf("[1]\tto add mark list\n"); printf("[2]\tto look mark list\n"); printf("[3]\tto exit\n"); printf("-------------------------------------------\n"); scanf("%d",&num); printf("-------------------------------------------\n"); switch(num) { case 1: printf("Enter the number of input student's marks?\t");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
scanf("%d",&number); fp=fopen("marksheet.txt","a"); for(a=0;a<number;a++) { printf("Enter Roll\n"); printf("Enter Name(ENTER Single name)\n"); printf("Enter Marks in Computer\n"); printf("Enter Marks in Maths\n"); printf("Enter Marks in Electrical\n"); printf("Enter Marks in Thermal\n"); printf("Enter Marks in Physics\n"); fscanf(stdin,"%d",&roll); fscanf(stdin,"%s",&name); fscanf(stdin,"%f",&mark1); fscanf(stdin,"%f",&mark2); fscanf(stdin,"%f",&mark3); fscanf(stdin,"%f",&mark4); fscanf(stdin,"%f",&mark5); percent=(mark1+mark2+mark3+mark4+mark5)/5; fprintf(fp," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); } fclose(fp); if(getch()) goto head; case 2: fp=fopen("marksheet.txt","r"); while(!feof(fp)){ fscanf(fp," %d %s %f %f %f %f %f %f",&roll_array[i],&name_array[i],&mark1_array[i],&mark2_array[i],&mark3_array[i],&mark4_arra y[i],&mark5_array[i],&perct_array[i]); i++; } fclose(fp); //Sorting begins-descending by bubble method for(j=1;j<i;j++) { for(k=1;k<=i-j;k++) { if(perct_array[k-1]<perct_array[k]) { roll_t=roll_array[k-1]; roll_array[k-1]=roll_array[k]; roll_array[k]=roll_t; strcpy(dummy,name_array[k-1]); strcpy(name_array[k-1],name_array[k]); strcpy(name_array[k],dummy); mark1_t=mark1_array[k-1]; mark1_array[k-1]=mark1_array[k]; mark1_array[k]=mark1_t; mark2_t=mark2_array[k-1];

159

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
mark2_array[k-1]=mark2_array[k]; mark2_array[k]=mark2_t; mark3_t=mark3_array[k-1]; mark3_array[k-1]=mark3_array[k]; mark3_array[k]=mark3_t; mark4_t=mark4_array[k-1]; mark4_array[k-1]=mark4_array[k]; mark4_array[k]=mark4_t; mark5_t=mark5_array[k-1]; mark5_array[k-1]=mark5_array[k]; mark5_array[k]=mark5_t; perct_t=perct_array[k-1]; perct_array[k-1]=perct_array[k]; perct_array[k]=perct_t; } } } // Rank List fp1=fopen("ascending list of mark_sheet.txt","w"); for(j=0;j<i;j++) { fprintf(fp1," %d %s %f %f %f %f %f %f",roll_array[j],name_array[j],mark1_array[j],mark2_array[j],mark3_array[j],mark4_array[j],mark5 _array[j],perct_array[j]); } fclose(fp1); printf("MARKSHEET OF STUDENTS\t(RANK WISE)\n\n"); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); fp2=fopen("ascending list of mark_sheet.txt","r"); while(!feof(fp)){ fscanf(fp," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",abc,rol,nam,mar1,mar2,mar3,mar4,mar5,perc); abc++; } if(getch()) goto head;

160

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
case 3: printf("Thanks for your attention , please also refer 'by easier' and 'updated' method"); if(getch()) exit(0); } getch(); return 1; }

161

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

MARKSHEET BY EASIER
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> FILE*fp; FILE*fp1; FILE *fp3; FILE*fp4; int rola; int num; int rol; int check; int rol3; int number,a; int roll; int abca; int founda; int count; int abc3; int found3; int abc;

162

float mara1,mara2,mara3,mara4,mara5,perca; float mark1,mark2,mark3,mark4,mark5,percent; float mar31,mar32,mar33,mar34,mar35,perc3; float mar1,mar2,mar3,mar4,mar5,perc;

char nama[30]; char name[100]; char c; char nam3[30];

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
char nam[30]; char checkk[30]; char file_status[10]="old";

int main() { fp=fopen("marksheet.txt","r"); if(fp==NULL) { printf("No file was created till now\nNow created...\n\n"); fclose(fp); fp=fopen("marksheet.txt","w"); fclose(fp); strcpy(file_status,"new"); }

A: printf("What do you want to do?\n"); printf("[1]\tto add mark list\n"); printf("[2]\tto look mark list\n"); printf("[3]\tto search by roll\n"); printf("[4]\tto search by name\n"); printf("[5]\tto exit\n");

163

abca=0; founda=0; abc3=0; found3=0; abc=1; printf("-------------------------------------------\n"); scanf("%d",&num); printf("-------------------------------------------\n"); switch(num) { case 1:

printf("Enter the number of input student's marks?\t"); scanf("%d",&number); for(a=0;a<number;a++) { count=0; //for each new entered number or each new loop of 'i' count=0 printf("Enter Roll\n"); printf("Enter Name(ENTER Single name)\n"); printf("Enter Marks in Computer\n"); printf("Enter Marks in Maths\n"); printf("Enter Marks in Electrical\n"); printf("Enter Marks in Thermal\n");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("Enter Marks in Physics\n"); fscanf(stdin,"%d",&roll); fscanf(stdin,"%s",&name); fscanf(stdin,"%f",&mark1); fscanf(stdin,"%f",&mark2); fscanf(stdin,"%f",&mark3); fscanf(stdin,"%f",&mark4); fscanf(stdin,"%f",&mark5); percent=(mark1+mark2+mark3+mark4+mark5)/5; fp=fopen("marksheet.txt","r"); fp1=fopen("temp of mark_sheet.txt","w");

if(strcmp(file_status,"old")==0){ while(!feof(fp)){ fscanf(fp," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc);

if(count==0){ if(percent<perc) { fprintf(fp1," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } else { count++; fprintf(fp1," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); //this means that new data is entered fprintf(fp1," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } } else { fprintf(fp1," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } } //while-loop brace if(count==0) fprintf(fp1," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); /*this means that new data is entered for the case comparison is done to all values of files but all data of files if found descending than this new value thewn at last new value is added i.e. in this case after while loop terminates*/ }

164

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
else { /* if file is new then just print it the value as fp in reading newly created file gives some unnecessary old values so it is done*/ fprintf(fp1," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); //this means that new data is entered strcpy(file_status,"old"); } fclose(fp); fclose(fp1); fp=fopen("marksheet.txt","w"); fp1=fopen("temp of mark_sheet.txt","r"); while((c=getc(fp1))!=EOF) { putc(c,fp); } fclose(fp); fclose(fp1); } if(getch())goto A; case 2: printf("MARKSHEET OF STUDENTS\t(RANK WISE)\n\n"); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); fp=fopen("marksheet.txt","r"); while(!feof(fp)){ fscanf(fp," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",abc,rol,nam,mar1,mar2,mar3,mar4,mar5,perc); abc++; } fclose(fp); if(getch())goto A; case 3: printf("Enter roll number\t"); scanf("%d",&check);

165

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp3=fopen("marksheet.txt","r"); printf("\n\n\n\n MARKSHEET OF STUDENTS with roll \'%d\'\t\n",check); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); while(!feof(fp3)){ abc3++; fscanf(fp3," %d %s %f %f %f %f %f %f",&rol3,&nam3,&mar31,&mar32,&mar33,&mar34,&mar35,&perc3); if(rol3==check) { fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",abc3,rol3,nam3,mar31,mar32,mar33,mar34,mar35,perc3); found3++; } } fclose(fp3); if(found3==0) { printf("\nNOT FOUND\n"); } if(getch())goto A; case 4: printf("Enter name\t"); scanf("%s",&checkk); fp4=fopen("marksheet.txt","r"); printf("\n\n\n\n MARKSHEET OF STUDENTS beginning with name \'%s\'\t(RANK WISE)\n",checkk); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); while(!feof(fp4)){ abca++; fscanf(fp4," %d %s %f %f %f %f %f %f",&rola,&nama,&mara1,&mara2,&mara3,&mara4,&mara5,&perca);

166

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(strncmp(nama,checkk,(strlen(checkk)))==0) { fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",abca,rola,nama,mara1,mara2,mara3,mara4,mara5,perca); founda++; } } fclose(fp4); if(founda==0) { printf("\nNOT FOUND\n"); } if(getch())goto A; case 5: printf("THANKS TO YOU FOR VISITING THIS MARKSHEET PROGRAM"); if(getch()){ exit(0); } } getch(); return 1; }

167

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

168

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

169

UPDATED MARKSHEET
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> FILE *fp; FILE *fp1a; FILE*fp1b; FILE*fp1c; FILE *fp2a; FILE*fp1d; FILE *fp3a; FILE *fp4a; FILE *fp5a; FILE *fp5b; FILE *fp5c; FILE *fp5d; FILE *fp6a;

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
FILE *fp6b; FILE *fp6c; FILE *fp6d; int num,number,a,roll,rol,roll_check,roll_delete; float mar1,mar2,mar3,mar4,mar5,perc,mark1,mark2,mark3,mark4,mark5,percent; char c,nam[30],name[100],name_check[30],name_delete[15],file_status[5]="old";

int main() { fp=fopen("marksheet.txt","r"); if(fp==NULL) { printf("No file was created till now\nNow created...\n\n"); fclose(fp); fp=fopen("marksheet.txt","w"); fclose(fp); strcpy(file_status,"new"); } printf("If your are using first time then goto option 1\n\n"); head: printf("What do you want to do?\n"); printf("[1]\tto add mark list\n"); printf("[2]\tto look mark list\n"); printf("[3]\tto search by roll\n"); printf("[4]\tto search by name\n"); printf("[5]\tto delete by roll\n"); printf("[6]\tto delete by name\n"); printf("[7]\tto exit\n"); printf("-------------------------------------------\n"); int count,found=0,abc=1; scanf("%d",&num); printf("---------------------------------------------------------\n"); switch(num) { case 1:

170

printf("Enter the number of input student's marks?\t"); scanf("%d",&number); for(a=0;a<number;a++) { count=0; //same to previous 'easier method' refer it printf("Enter Roll\n"); printf("Enter Name(ENTER Single name)\n"); printf("Enter Marks in Computer\n"); printf("Enter Marks in Maths\n"); printf("Enter Marks in Electrical\n"); printf("Enter Marks in Thermal\n"); printf("Enter Marks in Physics\n"); fscanf(stdin,"%d",&roll);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fscanf(stdin,"%s",&name); fscanf(stdin,"%f",&mark1); fscanf(stdin,"%f",&mark2); fscanf(stdin,"%f",&mark3); fscanf(stdin,"%f",&mark4); fscanf(stdin,"%f",&mark5); percent=(mark1+mark2+mark3+mark4+mark5)/5; fp1a=fopen("marksheet.txt","r"); fp1b=fopen("temp of mark_sheet.txt","w"); if(strcmp(file_status,"old")==0){ while(!feof(fp1a)){ fscanf(fp1a," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); if(count==0){ if(percent<perc) { fprintf(fp1b," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } else { count++; fprintf(fp1b," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); fprintf(fp1b," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } } else fprintf(fp1b," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } //while-loop terminal brace if(count==0) fprintf(fp1b," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); /* same to old method: this means that new data is entered for the case comparison is done to all values of files but all data of files if found descending than this new value thewn at last new value is added i.e. in this case after while loop terminates*/ } else { /* if file is new then just print it the value as fp in reading newly created file gives some unnecessary old values so it is done*/ fprintf(fp1b," %d %s %f %f %f %f %f %f",roll,name,mark1,mark2,mark3,mark4,mark5,percent); //this means that new data is entered strcpy(file_status,"old"); }

171

fclose(fp1a); fclose(fp1b); fp1c=fopen("marksheet.txt","w");

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp1d=fopen("temp of mark_sheet.txt","r"); while((c=getc(fp1d))!=EOF) { putc(c,fp1c); } fclose(fp1c); fclose(fp1d); } // terminal of for-loop if(getch())goto head; case 2: printf("MARKSHEET OF STUDENTS\t(RANK WISE)\n\n"); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); fp2a=fopen("marksheet.txt","r"); while(!feof(fp2a)){ fscanf(fp2a," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",abc,rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } fclose(fp2a); if(getch())goto head; case 3: printf("Enter roll number\t"); scanf("%d",&roll_check); printf("\n\n\n\n MARKSHEET OF STUDENTS beginning with \'%d\'\t(RANK WISE)\n",roll_check); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); fp3a=fopen("marksheet.txt","r");

172

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
while(!feof(fp3a)){ count++; fscanf(fp3a," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); if(rol==roll_check) { fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",count,rol,nam,mar1,mar2,mar3,mar4,mar5,perc); found++; } } fclose(fp3a); if(found==0) { printf("\nNOT FOUND\n"); } if(getch())goto head; case 4: printf("Enter name\t"); scanf("%s",&name_check); fp4a=fopen("marksheet.txt","r"); printf("\n\n\n\n MARKSHEET OF STUDENTS beginning with \'%s\'\t(RANK WISE)\n",name_check); printf("\n\n--------------------------------------------------------------\n"); printf("RANK "); printf("ROLL "); printf("NAME\t"); printf("Computer "); printf("Maths "); printf("Electrical "); printf("Thermal "); printf("Physics "); printf("PERCENT"); while(!feof(fp4a)){ count++; fscanf(fp4a," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); if(strncmp(nam,name_check,(strlen(name_check)))==0) { fprintf(stdout,"\n%d\t%d %s\t %.2f\t %.2f %.2f %.2f \t%.2f %.2f\n\n\n",count,rol,nam,mar1,mar2,mar3,mar4,mar5,perc); found++; } } fclose(fp4a); if(found==0) { printf("\nNOT FOUND\n"); }

173

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(getch())goto head; case 5: printf("Enter Roll number whose marksheet is to be deleted"); scanf("%d",&roll_delete); fp5a=fopen("marksheet.txt","r"); fp5b=fopen("temp of mark_sheet.txt","w"); while(!feof(fp5a)){ fscanf(fp5a," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); if(roll_delete==rol){ printf("Marksheet is updated\n"); } else { fprintf(fp5b," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } } fclose(fp5a); fclose(fp5b); fp5c=fopen("marksheet.txt","w"); fp5d=fopen("temp of mark_sheet.txt","r"); while((c=getc(fp5d))!=EOF) { putc(c,fp5c); } fclose(fp5c); fclose(fp5d); if(getch()){ goto head; } case 6: printf("Enter name beginning with to be deleted"); scanf("%s",name_delete); fp6a=fopen("marksheet.txt","r"); fp6b=fopen("temp of mark_sheet.txt","w"); while(!feof(fp6a)){ fscanf(fp6a," %d %s %f %f %f %f %f %f",&rol,&nam,&mar1,&mar2,&mar3,&mar4,&mar5,&perc); if(strncmp(nam,name_delete,strlen(name_delete))==0){ printf("Marksheet is updated\n"); } else { fprintf(fp6b," %d %s %f %f %f %f %f %f",rol,nam,mar1,mar2,mar3,mar4,mar5,perc); } } fclose(fp6a); fclose(fp6b);

174

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp6c=fopen("marksheet.txt","w"); fp6d=fopen("temp of mark_sheet.txt","r"); while((c=getc(fp6d))!=EOF) { putc(c,fp6c); } fclose(fp6c); fclose(fp6d); if(getch()){ goto head; } case 7: printf("THANKS TO YOU\n GOOD BYE !"); if(getch()){ exit(0); } } return 1; }

175

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

176

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

177

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

STORES
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> FILE *fp; FILE*fp1; FILE*fp2; FILE*fp3; FILE*fp11; struct tempcalculation { char tempname[40]; int tempquantity; float temprate; }temp[100]; int num; int code; int stock; int costcode; int costquantity; int new; int n,i; int code; int na; int naa; int neew; int tempi; float price; float rate;

178

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
float total; char item[100]; char name[40]; char item[100]; char file_status[10]="old"; int main(){ fp=fopen("stores.txt","r"); if(fp==NULL) { printf("No stores file was created till now\nNow created...\n\n"); fclose(fp); fp=fopen("stores.txt","w"); fclose(fp); strcpy(file_status,"new"); } printf("****************************************WELCOME TO STORES*****************************\n\n\n"); printf("-----------------------------------------------------------------------------------\n"); printf("Enter your full name:-\t"); scanf("%[^\n]",name); main: printf("\n\n----------------------------------\n"); printf("What do you want to do?\n"); printf("[1]\tto look list\n"); printf("[2]\tto calculate\n"); printf("[3]\tto add items\n"); printf("[4]\tto change stock\n"); printf("[5]\tto add stock\n"); printf("[6]\tto exit\n\n"); printf("---------------------------------------------\n"); scanf("%d",&num); printf("---------------------------------------\n"); tempi=0;//this must be initialized for each new install of calculation switch (num) { case 1: fp=fopen("stores.txt","r"); printf("DATA STORED ABOUT ITEMS\n\n"); printf("\n\n-----------------------------------------------------------------------------------\n"); printf("CODE\t"); printf("ITEM NAME\t\t"); printf("PRICE\t\t"); printf("STOCK\n\n"); while(!feof(fp)){ fscanf(fp," %d %s %f %d",&code,&item,&price,&stock); fprintf(stdout,"\n%d\t%s\t\t%f\t\t%d\n",code,item,price,stock); } fclose(fp); if(getch()){

179

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
goto main; } case 2: printf("CALCULATION\n"); tempcheck: printf("Enter[0/0] to end\n"); printf("Enter [code]/[quantity]\t\t"); scanf("%d/%d",&costcode,&costquantity); if(costcode==0 && costquantity==0 ) { total=0; printf("YOUR COST\n\n"); printf("-----------------------------------------------------------------------------\n"); printf("ITEMS\t\t\tRATE\t\t\tQUANTITY\t\tSUM\n"); printf("----------------------------------------------------------------------------\n"); for(i=0;i<tempi;i++) { printf("%s\t\t",temp[i].tempname); printf("%f\t\t",temp[i].temprate); printf("%d\t\t",temp[i].tempquantity); printf("%f\n",temp[i].temprate*temp[i].tempquantity); total=total+(temp[i].temprate*temp[i].tempquantity); } printf("--------------------------------------------------\n"); printf("\t\t\t\t\t\tTOTAL==Rs.%.2f\n",total); printf("Checked by :\t%s",name); if(getch()){ goto main; } } else { fp=fopen("stores.txt","r"); fp1=fopen("tempofstore.txt","w"); while(!feof(fp)) { fscanf(fp," %d %s %f %d",&code,&item,&price,&stock); if(costcode==code){ if(costquantity>stock){ printf("\n%s is not in stock\n",item); fprintf(fp1," %d %s %f %d",code,item,price,stock); continue; } new=stock-costquantity; fprintf(fp1," %d %s %f %d",code,item,price,new); strcpy(temp[tempi].tempname,item);//temp[tempi].tempname=item; temp[tempi].temprate=price; temp[tempi].tempquantity=costquantity; tempi++; }

180

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
else { fprintf(fp1," %d %s %f %d",code,item,price,stock); } } fclose(fp); fclose(fp1); fp3=fopen("tempofstore.txt","r"); fp2=fopen("stores.txt","w"); while(!feof(fp3)){ fscanf(fp3," %d %s %f %d",&code,&item,&price,&stock); fprintf(fp2," %d %s %f %d",code,item,price,stock); } fclose(fp3); fclose(fp2); goto tempcheck; } case 3: fp=fopen("stores.txt","a"); printf("How many inputs?\t"); scanf("%d",&n); for(i=0;i<n;i++) { printf("Enter Code\n"); printf("Enter Item Name\n"); printf("Enter Rate\n"); printf("Enter Stocks\n"); fscanf(stdin,"%d",&code); fscanf(stdin,"%s",&item); fscanf(stdin,"%f",&rate); fscanf(stdin,"%d",&stock); fprintf(fp," %d %s %f %d",code,item,rate,stock); } fclose(fp); if(getch()){ goto main; } case 4: printf("Enter code\t"); scanf("%d",&na); printf("Change it by\t");

181

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
scanf("%d",&new); fp=fopen("stores.txt","r"); fp1=fopen("tempofstore.txt","w"); while(!feof(fp)){ fscanf(fp," %d %s %f %d",&code,&item,&price,&stock); if(na==code){ fprintf(fp1," %d %s %f %d",code,item,price,new); } else fprintf(fp1," %d %s %f %d",code,item,price,stock); } fclose(fp); fclose(fp1); fp1=fopen("tempofstore.txt","r"); fp=fopen("stores.txt","w"); while(!feof(fp1)){ fscanf(fp1," %d %s %f %d",&code,&item,&price,&stock); fprintf(fp," %d %s %f %d",code,item,price,stock); } fclose(fp); fclose(fp1); if(getch()){ goto main; } case 5: printf("Enter code\t"); scanf("%d",&naa); printf("Add it by\t"); scanf("%d",&neew); fp=fopen("stores.txt","r"); fp11=fopen("tempofstore.txt","w"); while(!feof(fp)){ fscanf(fp," %d %s %f %d",&code,&item,&price,&stock); if(naa==code){ neew=stock+neew; fprintf(fp11," %d %s %f %d",code,item,price,neew); } else fprintf(fp11," %d %s %f %d",code,item,price,stock); } fclose(fp); fclose(fp11); fp1=fopen("tempofstore.txt","r");

182

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp=fopen("stores.txt","w"); while(!feof(fp1)){ fscanf(fp1," %d %s %f %d",&code,&item,&price,&stock); fprintf(fp," %d %s %f %d",code,item,price,stock); } fclose(fp); fclose(fp1); if(getch()){ goto main; } case 6: printf("\n\n------------------------------------------------------\n"); printf("THANKS %s FOR YOUR SERVICE",name); printf("\n\n----------------------------------------\n"); if(getch()){ exit(1); } }return 1;}

183

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

184

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

UPDATED STORES
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> FILE *fp; FILE *fp1a; FILE *fp2a; FILE*fp2b; FILE*fp2c; FILE*fp2d; FILE*fp3aa; FILE*fp3a; FILE*fp3b; FILE*fp3c; FILE*fp3d; FILE*fp4a; FILE*fp4b; FILE*fp4c; FILE*fp4d; FILE*fp5a; FILE*fp5b; FILE*fp5c; FILE*fp5d; FILE*fp6a; FILE*fp6b; FILE*fp6c; FILE*fp6d; FILE*fp7a; FILE*fp8a; struct tempcalculation { char tempname[40]; int tempquantity; float temprate; }temp[100]; int num; int code; int stock; int costcode; int costquantity; int new; int n,i; int code; int na; int naa; int neew; int tempi; int new_stock,count=0,codef,stockf,del,na,naa,neew,code_search;

185

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
float price; float rate; float total; float ratef; float vat; char item[100]; char name[40]; char itemf[100],c,item_search[15]; char file_status[10]="old"; int main(){ fp=fopen("stores.txt","r"); if(fp==NULL) { printf("No stores file was created till now\nNow created...\n\n"); fclose(fp); fp=fopen("stores.txt","w"); fclose(fp); strcpy(file_status,"new"); } printf("***********************************WELCOME TO STORES*****************************\n\n\n"); printf("**********************Programmer-Devendra Man Palikhe**************************\n\n"); printf("------------------------------------------------------------------------------\n"); printf("Enter your full name:-\t"); scanf("%[^\n]",&name); main: printf("\n\n----------------------------------------\n"); printf("What do you want to do?\n"); printf("[1]\tto look list\n"); printf("[2]\tto calculate\n"); printf("[3]\tto add items\n"); printf("[4]\tto delete item\n"); printf("[5]\tto change stock\n"); printf("[6]\tto add stock\n"); printf("[7]\tto search item by code\n"); printf("[8]\tto search item by item_name\n"); printf("[9]\tto exit\n\n"); printf("-------------------------------------------\n"); scanf("%d",&num); printf("-------------------------------------------\n"); tempi=0;//this must be initialized for each new install of calculation vat=0; switch (num) { case 1: printf("\n");

186

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp1a=fopen("stores.txt","r"); printf("DATA STORED ABOUT ITEMS\n\n"); printf("\n\n--------------------------------------------------------------\n"); printf("CODE\t"); printf("ITEM NAME\t\t"); printf("PRICE\t\t"); printf("STOCK\n\n"); while(!feof(fp1a)){ fscanf(fp1a," %d %s %f %d",&code,&item,&price,&stock); fprintf(stdout,"\n%d\t%s\t\t%f\t\t%d\n",code,item,price,stock); } fclose(fp1a); if(getch()){ goto main; } case 2: printf("CALCULATION\n"); tempcheck: printf("Enter[0/0] to end\n"); printf("Enter [code]/[quantity]\t\t"); scanf("%d/%d",&costcode,&costquantity); if(costcode==0 && costquantity==0 ) { total=0; printf("YOUR COST\n\n"); printf("--------------------------------------------------\n"); printf("ITEMS\t\t\tRATE\t\t\tQUANTITY\tSUM\n"); printf("--------------------------------------------------\n"); for(i=0;i<tempi;i++) { printf("%s\t\t",temp[i].tempname); printf("%.2f\t\t",temp[i].temprate); printf("%d\n",temp[i].tempquantity); printf("%.2f\n",temp[i].temprate*temp[i].tempquantity); total=total+(temp[i].temprate*temp[i].tempquantity); } printf("--------------------------------------------------\n"); printf("If any, then include VAT:\t"); scanf("%f",&vat); printf("\t\t\t\t\t\tNET TOTAL==Rs.%.2f\n",total+(total*vat/100)); printf("\t\t\t\t\t\tVAT==Rs.%.2f\n",total*vat/100); printf("\t\t\t\t\t\tTOTAL==Rs.%.2f\n",total+(total*vat/100)); printf("Checked by :\t%s",name); if(getch()){ goto main; } } else { fp2a=fopen("stores.txt","r");

187

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp2b=fopen("temp of stores.txt","w"); while(!feof(fp2a)){ fscanf(fp2a," %d %s %f %d",&code,&item,&price,&stock); if(costcode==code){ if(costquantity>stock){ printf("\n%s is not in stock\n",item); fprintf(fp2b," %d %s %f %d",code,item,price,stock); continue; } new_stock=stock-costquantity; fprintf(fp2b," %d %s %f %d",code,item,price,new_stock); strcpy(temp[tempi].tempname,item);//temp[tempi].tempname=item; temp[tempi].temprate=price; temp[tempi].tempquantity=costquantity; tempi++; } else { fprintf(fp2b," %d %s %f %d",code,item,price,stock); } } fclose(fp2a); fclose(fp2b); fp2c=fopen("temp of stores.txt","r"); fp2d=fopen("stores.txt","w"); while(!feof(fp2c)){ fscanf(fp2c," %d %s %f %d",&code,&item,&price,&stock); fprintf(fp2d," %d %s %f %d",code,item,price,stock); } fclose(fp2c); fclose(fp2d); goto tempcheck; } case 3: printf("How many inputs?\t"); scanf("%d",&n); for(i=0;i<n;i++) { next: count=0; //for each new entered input or each new loop of 'i' count=0 printf("Enter Code\t"); printf("Enter Item Name\t"); printf("Enter Rate\t"); printf("Enter Stocks\n\n"); fscanf(stdin,"%d",&code); fscanf(stdin,"%s",&item); fscanf(stdin,"%f",&rate); fscanf(stdin,"%d",&stock); fp3aa=fopen("stores.txt","r"); while(!feof(fp3aa)){

188

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fscanf(fp3aa," %d %s %f %d",&codef,&itemf,&ratef,&stockf); if(code==codef) { printf("%d code is already in used, so it is invalid and not responded\n",code); i++; goto next; } } fclose(fp3aa); fp3a=fopen("temp of stores.txt","w"); fp3b=fopen("stores.txt","r"); if(strcmp(file_status,"old")==0){ while(!feof(fp3b)){ fscanf(fp3b," %d %s %f %d",&codef,&itemf,&ratef,&stockf); if(count==0){ if(code<codef) { /*previously in markshhet data of file were only printed here both because here it is ascending purpose but in marksheet just opposite or to maintain static we can change '<' to '>'*/ fprintf(fp3a," %d %s %f %d",code,item,rate,stock); fprintf(fp3a," %d %s %f %d",codef,itemf,ratef,stockf);/*we can directly print the data from file too as if in a assecnding list a new number is added then the position of previous value replaced by new number changes by +1 and similarly for others but here to others we do by illogical way that is one by one*/ count++; } else {/*it is also reverse to marksehet*/ fprintf(fp3a," %d %s %f %d",codef,itemf,ratef,stockf); } } else fprintf(fp3a," %d %s %f %d",codef,itemf,ratef,stockf);/*when the new data is already insetred given by count=1 then just copying data from file to another file*/ } //while loop's terminal if(count==0) fprintf(fp3a," %d %s %f %d",code,item,rate,stock); /*this statement is also found in marksheet both work for same purpose; the statement executes when the new data has no position in between or infront of data of file; here for ascending case and in marksheet for descending*/ } else { fprintf(fp3a," %d %s %f %d",code,item,rate,stock); strcpy(file_status,"old"); } fclose(fp3a); fclose(fp3b); fp3c=fopen("stores.txt","w"); fp3d=fopen("temp of stores.txt","r"); while((c=getc(fp3d))!=EOF) { putc(c,fp3c); } fclose(fp3c); fclose(fp3d); }

189

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
if(getch()){ goto main; } case 4: printf("enter code of item to be deleted\t"); scanf("%d",&del); fp4a=fopen("stores.txt","r"); fp4b=fopen("temp of stores.txt","w"); while(!feof(fp4a)){ fscanf(fp4a," %d %s %f %d",&codef,&itemf,&ratef,&stockf); if(del==codef){ } else { fprintf(fp4b," %d %s %f %d",codef,itemf,ratef,stockf); } } fclose(fp4b); fclose(fp4a); fp4c=fopen("stores.txt","w"); fp4d=fopen("temp of stores.txt","r"); while((c=getc(fp4d))!=EOF) { putc(c,fp4c); } fclose(fp4c); fclose(fp4d); if(getch()){ goto main; }

190

case 5: printf("Enter code\t"); scanf("%d",&na); printf("Change it by\t"); scanf("%d",&new_stock); fp5a=fopen("stores.txt","r"); fp5b=fopen("temp of stores.txt","w"); while(!feof(fp5a)){ fscanf(fp5a," %d %s %f %d",&code,&item,&price,&stock); if(na==code){ fprintf(fp5b," %d %s %f %d",code,item,price,new_stock); } else fprintf(fp5b," %d %s %f %d",code,item,price,stock); } fclose(fp5a); fclose(fp5b);

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
fp5c=fopen("temp of stores.txt","r"); fp5d=fopen("stores.txt","w"); while(!feof(fp5c)){ fscanf(fp5c," %d %s %f %d",&code,&item,&price,&stock); fprintf(fp5d," %d %s %f %d",code,item,price,stock); } fclose(fp5c); fclose(fp5d); if(getch()){ goto main; } case 6: printf("Enter code\t"); scanf("%d",&naa); printf("Add it by\t"); scanf("%d",&neew); fp6a=fopen("stores.txt","r"); fp6b=fopen("temp of stores.txt","w"); while(!feof(fp6a)){ fscanf(fp6a," %d %s %f %d",&code,&item,&price,&stock); if(naa==code){ neew=stock+neew; fprintf(fp6b," %d %s %f %d",code,item,price,neew); } else fprintf(fp6b," %d %s %f %d",code,item,price,stock); } fclose(fp6a); fclose(fp6b); fp6c=fopen("temp of stores.txt","r"); fp6d=fopen("stores.txt","w"); while(!feof(fp6c)){ fscanf(fp6c," %d %s %f %d",&code,&item,&price,&stock); fprintf(fp6d," %d %s %f %d",code,item,price,stock); } fclose(fp6c); fclose(fp6d); if(getch()){ goto main; } case 7: printf("Enter Code to be searched"); scanf("%d",&code_search); fp7a=fopen("stores.txt","r"); printf("DATA STORED ABOUT ITEM YOUR SEARCHED\n\n");

191

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
printf("\n\n--------------------------------------------------------------\n"); printf("CODE\t"); printf("ITEM NAME\t\t"); printf("PRICE\t\t"); printf("STOCK\n\n"); while(!feof(fp7a)) { fscanf(fp7a," %d %s %f %d",&code,&item,&price,&stock); if(code==code_search){ fprintf(stdout,"\n%d\t%s\t\t%f\t\t%d\n",code,item,price,stock); count++; } } if(count==0){ printf("Sorry, your inquiry is not available !"); } fclose(fp7a); if (getch()){ goto main; } case 8: printf("Enter Code_name to be searched"); scanf("%s",&item_search); fp8a=fopen("stores.txt","r"); printf("DATA STORED ABOUT ITEM YOUR SEARCHED BEGINNING WITH NAME \%s\\n\n",item_search); printf("\n\n--------------------------------------------------------------\n"); printf("CODE\t"); printf("ITEM NAME\t\t"); printf("PRICE\t\t"); printf("STOCK\n\n"); while(!feof(fp8a)) { fscanf(fp8a," %d %s %f %d",&code,&item,&price,&stock); if(strncmp(item,item_search,strlen(item_search))==0){ fprintf(stdout,"\n%d\t%s\t\t%f\t\t%d\n",code,item,price,stock); count++; } } if(count==0){ printf("Sorry, your inquiry is not available !"); } fclose(fp8a); if (getch()){ goto main;

192

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C
}

case 9: printf("\n\n----------------------------------------\n"); printf("------------------THANKS FOR YOUR SERVICE-----%s",name); printf("\n\n----------------------------------------\n"); if(getch()){ exit(1); } } return 1; }

193

By Devendra Man Palikhe

PROGRAMMING ANALYSIS IN C

194

/*THE END*/

*******
You can get soft copy of this book @ www.scribd.com/dpalikhe
By Devendra Man Palikhe

This book is an open book with an analysis of CProgramming. In market we can only get text books based on syllabus and curriculum with definitions and repeated ideas. This book is an example to show that it is important to analyze topics rather than following the old tracks. Studying is not only to be based upon the books but also to modify it into different forms with different ideas according to time and situation, which is the main theme of understanding the topic.

Potrebbero piacerti anche