Exercise On Developing Algorithms
Exercise On Developing Algorithms
Algorithm in C Language
Algorithm is a step-by-step procedure, which defines a set of instructions to be executed in a certain order
to get the desired output. Algorithms are generally created independent of underlying languages, i.e. an
algorithm can be implemented in more than one programming language.
From the data structure point of view, following are some important categories of algorithms −
Characteristics of an Algorithm
Unambiguous − Algorithm should be clear and unambiguous. Each of its steps (or phases), and
their inputs/outputs should be clear and must lead to only one meaning.
Input − An algorithm should have 0 or more well-defined inputs.
Output − An algorithm should have 1 or more well-defined outputs, and should match the
desired output.
Finiteness − Algorithms must terminate after a finite number of steps.
Feasibility − Should be feasible with the available resources.
Independent − An algorithm should have step-by-step directions, which should be independent
of any programming code.
There are no well-defined standards for writing algorithms. Rather, it is problem and resource dependent.
Algorithms are never written to support a particular programming code.
As we know that all programming languages share basic code constructs like loops (do, for, while), flow-
control (if-else), etc. These common constructs can be used to write an algorithm.
We write algorithms in a step-by-step manner, but it is not always the case. Algorithm writing is a process
and is executed after the problem domain is well-defined. That is, we should know the problem domain,
for which we are designing a solution.
Example
Problem − Design an algorithm to add two numbers and display the result.
Step 1 − START
Step 6 − print c
Step 7 − STOP
Step 3 − c ← a + b
Step 4 − display c
Step 5 − STOP
In design and analysis of algorithms, usually the second method is used to describe an algorithm.
It makes it easy for the analyst to analyze the algorithm ignoring all unwanted definitions. He can
observe what operations are being used and how the process is flowing.
We design an algorithm to get a solution of a given problem. A problem can be solved in more than one
ways.
Hence, many solution algorithms can be derived for a given problem. The next step is to analyze those
proposed solution algorithms and implement the best suitable solution.
Algorithm Analysis
Efficiency of an algorithm can be analyzed at two different stages, before implementation and after
implementation. They are the following −
We shall learn about a priori algorithm analysis. Algorithm analysis deals with the execution or running
time of various operations involved. The running time of an operation can be defined as the number of
computer instructions executed per operation.
Algorithm Complexity
Suppose X is an algorithm and n is the size of input data, the time and space used by the algorithm X are
the two main factors, which decide the efficiency of X.
Time Factor − Time is measured by counting the number of key operations such as comparisons
in the sorting algorithm.
Space Factor − Space is measured by counting the maximum memory space required by the
algorithm.
The complexity of an algorithm f(n) gives the running time and/or the storage space required by the
algorithm in terms of n as the size of input data.
Space Complexity
Space complexity of an algorithm represents the amount of memory space required by the algorithm in its
life cycle. The space required by an algorithm is equal to the sum of the following two components −
A fixed part that is a space required to store certain data and variables, that are independent of the
size of the problem. For example, simple variables and constants used, program size, etc.
A variable part is a space required by variables, whose size depends on the size of the problem.
For example, dynamic memory allocation, recursion stack space, etc.
Space complexity S(P) of any algorithm P is S(P) = C + SP(I), where C is the fixed part and S(I) is the
variable part of the algorithm, which depends on instance characteristic I. Following is a simple example
that tries to explain the concept −
Algorithm: SUM(A, B)
Step 1 – START
Step 2 – C ← A + B + 10
Step 3 – Stop
Here we have three variables A, B, and C and one constant. Hence S(P) = 1 + 3. Now, space depends on
data types of given variables and constant types and it will be multiplied accordingly.
Time Complexity
Time complexity of an algorithm represents the amount of time required by the algorithm to run to
completion. Time requirements can be defined as a numerical function T(n), where T(n) can be measured
as the number of steps, provided each step consumes constant time.
For example, addition of two n-bit integers takes n steps. Consequently, the total computational time is
T(n) = c ∗ n, where c is the time taken for the addition of two bits. Here, we observe that T(n) grows
linearly as the input size increases.
Algorithm 1: Add two numbers entered by the user
Step 1: Start
Step 2: Declare variables num1, num2 and sum.
Step 3: Read values num1 and num2.
Step 4: Add num1 and num2 and assign the result to sum.
sum←num1+num2
Step 5: Display sum
Step 6: Stop
Algorithm 5: Find the Fibonacci series till the term less than 1000
Step 1: Start
Step 2: Declare variables first_term,second_term and temp.
Step 3: Initialize variables first_term ← 0 second_term ← 1
Step 4: Display first_term and second_term
Step 5: Repeat the steps until second_term ≤ 1000
5.1: temp ← second_term
5.2: second_term ← second_term + first_term
5.3: first_term ← temp
5.4: Display second_term
Step 6: Stop
Flowchart in C Language
Flowchart is a diagrammatic representation of sequence of logical steps of a program. Flowcharts
use simple geometric shapes to depict processes and arrows to show relationships and
process/data flow.
A flowchart is a diagrammatic representation of an algorithm. A flowchart can be helpful for both
writing programs and explaining the program to others.
Symbols Used In Flowchart
Note: Though flowcharts can be useful for writing and analyzing a program, drawing a flowchart
for complex programs can be more complicated than writing the program itself. Hence, creating
flowcharts for complex programs is often ignored.
1. Add two numbers entered by the user.
2. Find the largest among three different numbers entered by the user.
1. Documentation Section
It is the section in which you can give comments to make the program more interactive. The
compiler won’t compile this and hence this portion would not be displayed on the output screen.
2. Preprocessor directives Section
This section involves the use of header files that are to included necessarily program.
3. Definition section
This section involves the variable definition and declaration in C.
4. Global declaration Section
This section is used to define the global variables to be used in the programs, that means you can
use these variables throughout the program.
5. Function prototype declaration section
This section gives the information about a function that includes, the data type or the return
type, the parameters passed or the arguments.
6. Main function
It is the major section from where the execution of the program begins. The main section
involves the declaration and executable section.
7. User-defined function section
When you want to define your function that fulfills a particular requirement, you can define them
in this section.
1. Program to demonstrate Structure of a simple C Program
4. Exercise on Keywords, identifiers, constants, variables
What is variable?
Variables in C have the same meaning as variables in algebra. A variable in C is a storage unit,
which sets a space in memory to hold a value and can take different values at different times
during program execution.
Rules to construct a valid variable name
1. A variable name may consists of letters, digits and the underscore ( _ ) characters.
2. A variable name must begin with a letter. Some system allows to starts the variable name with
an underscore as the first character.
3. ANSI standard recognizes a length of 31 characters for a variable name. However, the length
should not be normally more than any combination of eight alphabets, digits, and underscores.
4. Uppercase and lowercase are significant. That is the variable Totamt is not the same
as totamt and TOTAMT.
5. The variable name may not be a C reserved word (keyword).
Some valid variable names
Naming Conventions
Generally, C programmers maintain the following conventions for naming variables.
Start a variable name with lowercase letters.
Try to use meaningful identifiers
Separate "words" within identifiers with mixed upper and lowercase (for example empCode)
or underscores (for example emp_code).
For symbolic constants use all uppercase letters (for example #define LENGTH 100, #define
MRP 45).
Keywords and Identifiers
Every C word is classified as either a keyword or an identifier. Each keyword has a specific
meaning and these meanings cannot be changed. Keywords serve as basic building blocks for
program statements. There are only 32 keywords in C. The list of all keywords in ANSI C is listed
in the following table. All keywords must be written in lowercase.
05 241
7,412
$120
Rules to construct Real Constant
A real constant is a number that may have a fractional part.
0.0045 -.71
+45.203 0.45e3
-0.547 0.78e-4
337. 2.79E4
.478. -4.69E-4
Initialization of Variables
Variables are given initial values, or initialized, when declared. See the following examples :
char abc = 'X';
int marks =77;
float amount = 45.23;
Write initialized variables on a separate line and a comment beside the variable name is a good idea. See
the following examples :
int qty; /* quantity of an item */
float value = 12.10; /* purchase value of an item */
int marks; /* marks of a subject */