Title: Problem solving vs. programming
1Problem solving vs. programming
- Problem solving
- vs.
- algorithm development
- vs.
- programming
2Problem Solving
- understand and define the problem
- what is it that needs to be solved
- Identify an approach
- the basic equations, relations, etc
- Develop and specify an algorithm
- sequence of steps to be executed
- specify how data is organized
3.
- Evaluate the algorithm
- always provide correct results ?
- efficient ?
- Coding (or Programming)
4.
- Test and validate
- Debug program
- confirm -- gives expected results?
- confirm efficiency
5.
- Documentation
- problem, its solution, algorithm, program,
testing procedure - Program maintenance
- Make necessary changes if errors are found
- Ensure that it meets user changing requirements
6Problem Understanding and definition
- Perhaps the most important step
- Understanding is based on interaction with
customer - From vague statements to full specification
- Starts with develop software that helps me with
inventory control - Ultimately develop a problem definition
7.
- Input data
- List of input parameters
- Parameter type ( Integer, real, character)
- Special symbols to indicate end of list, for
instance
8.
- Output data
- List of parameters, format, headings, etc.
- Required processing
- understand and specify how output is related to
input - Identify special processing to handle error
conditions, corner cases - e.g. list is too long, invalid parameter
value
9Algorithms
- steps needed to solve the problem
- Definition of an algorithm
- an ordered sequence of
- well-defined and effective operations
- which, when executed,
- will terminate in a finite amount of time
- and produce correct result
-
10.
- Ordered sequence
- Well-defined and effective
- Terminate ( always)
- Produce correct results
11Correct Result ?
- Given area of a rectangle A, and one of the sides
d, find the other side s. - s A / d
- Input A, d and get output s
- If input d 0, then what happens?
- Take care in the algorithm itself.
-
12Well defined?.
- compute largest prime
- compute square root of x
13Termination
- To find complement of given set of angles
- Ask for first value of angle A
- Read the value as entered by user
- Print 90 A
- Repeat for next value of A
- When does this program terminate?
14Finding Square root
- Given a number m
- find n
- Such that n x n m
- Paper-pencil method ??
- on computer
- 3 different ways
15Algorithm 1
- Given m, guess n such that n x n m
- If not, try next nearest number
- Consider m 70
- n lies between 8 and 9
- Try 8.5, 8.5 x 8.5 72.25
- Try between 8 and 8.5
- 8.2 x 8.2 67.24
- 8.35 x 8.35 69.7225
- 8.37 x 8.37 70.0569
16Algorithm 2
- or try systematically
- 8.01, 8.02,
- Initial guess very crucial
- Step size also important
- Why??
- Better algorithm should be independent of
initial guess and step size
17Better algorithm
- m j x k
- root n lies between j k
- Let m 36,
- Choose any j, say 9
- j 9 , so k m / j 4
- 9 x 9 81 4 x 4 16
- Root definitely lies between 9 and 4
- Let j ( 9 4 ) / 2 6.5
18 - 6.5 x 6.5 is more than 36
- k 36 / 6.5 5.53
- k x k 5.53 x 5.53 30.58
- Better estimate j ( 6.5 5.53) / 2
- j 6.015
- Now j x j almost 36
- Can improve k 36 / 6.015 5.985
- Next j (6.015 5.985 )/2 6
19 - May not yield exact root
- But gets very close
- Converging to actual root
- stop when difference two roots less than certain
error - Does not heavily depend on initial guess
20Method
- Initial guess can be m/2
- Let g1 and g2 be the two factors
- let g2 m / 2
- Repeat the following
- g1 g2
- g m / g1
- g2 ( g1 g ) /2
- until g1 and g2 are very close
21Another algorithm
- Smallest divisor of an integer
22Find smallest exact Divisor
- 23 1 no other number
- 625 5 other than 1
- 242 2
- 711 9
- 323 ? Find out
- Keep on dividing by 2,3,4,5,..,n 1
- Make a note of no. of divisions needed
- 17
23improvements
- All divisors necessary?
- Consider 127
- Divisors 2,3,4,5,6,7,8,9,10,11
- If no. is even, then 4,6,8,10no need.
- if no. is odd then also not needed
- So even numbers no testing needed
- 247568 ( smallest divisor is 2 )
- Examine only odd numbers
24More improvements
- Potential divisors 3,5,7,9,11,13,
- Till what number ?
- Consider 323
- 3,5,7,..,313,315,317,319,321
- Consider 48
- 2x24, 3 x16, 4x 12, 6x 8
- 8 x 6, 12 x 4, 16 x 3, 24 x 2 (repetition)
- Can stop test at sq. root of 48
25- Holds for any factorizable number
- Should hold true for prime nos. as well
- Consider 53
- 3,5,7,9,11,13,15,17,19,21,23,,51
- No need to test beyond 7 or 8
26Algorithm
- Check if divisible by 2
- If not proceed further
- d 3
- rem n mod d
- while ( rem ! 0 and d lt sqrt(n) )
- d d 2
- rem n mod d
- Why compute sqrt every time ??
27Refined algo.
- if n mod 2 0 then sd 2
- else sn integer part of sqrt (n)
- d 3
- rem n mod d
- while ( rem ! 0 and d lt sn )
- d d 2
- rem n mod d
- how to know if sd 1 or otherwise ?
28Actually no need to find square root of n
- Look at factors of 320
- 5 x 64
- 8 x 40
- 10 x 32
- 16 x 20
- After that it will be just a repetition of
factors, so no point proceeding after the number
20 - At every step the range of divisors keeps on
reducing - This will hold good for any odd number as well
29Final idea for the algorithm
- So given a number n, check if it is even
- If not start with a divisor d 3
- Now the range of divisors to be selected is up to
p ( n / d). - If there is a remainder, increase d through
- d d2
- Find new p the rangeand continue loop
30How to represent algorithms
- English language
- Pseudo code
- flowchart
31English language
- Ambiguous
- Print names of all students who are majoring in
computer science and whose grade point average is
below 3.00 or whose current status is Graduate. - Interpretation 1
- Print names of computer sc. students with GPA
below 3.00 or - Graduate students (of any major and any GPA)
- Interpretation 2
- Print names of students who are computer sc
majors - with GPA below 3.00 or graduate students.
32Pseudo coding
- A pseudo code language is a semi-informal
English like language - With a limited vocabulary
- Written in a shorthand form
- Produce simple narrative notation
- Any algorithm needs 3 basic control structures
- Sequence ( statements),
- selection (if-then-else),
- repetition (for , while loop)
33Example of problem solving
- Develop a computer program to compute income tax
from tax rate schedules - Tax tables can be used for taxable incomes less
than 50,000. Otherwise, one has to use the tax
rate schedules - Single gt49,300 11000 31 of amount gt49300
- Married filing jointly
- 34,000lt Income lt82000 5100 28 of amount gt
34000 - Income gt82,000 18600 31 of amount over 82000
- Married filing separatelyetc.
- Head of household .etc.
34Problem analysis
- Input
- Taxable income
- Filing status ( interactive inputs )
- Output
- Printing the inputs and computed tax
- Constraints
- Income below 50,000 not acceptable
- Filing status only as desired in specifications
- formulas
35Top-Down Stepwise Refinement
- Compute income tax from tax schedules first
algorithm - Read and verify income
- Read and verify filing status
- Compute tax
- Print income, status and computed tax
- Each step now needs to be expanded further
36Step 1 refined
- Print Enter income should be gt50000
- read income
- while income lt 50000
- begin
- Print Enter income00
- Read income
- end
- end while
- Note Indentation of begin, end , while etc.
37Refinement of step 2
- First decide how do you want this data to be
entered by the user - In string form or in form of numbers?
- String form may be difficult to match with upper
case/lower case/spaces /spellings etc - May be wiser to supply a menu and ask them just
to enter a choice of number
38Step 2 continued
- How to verify that the choice of filing status is
entered correctly - Use a while loop
- while entered value is incorrect (tricky ?)
- ask user to enter correct value
- end while
- Suppose again he enters wrong value ?
39Step 3
- This is easy, just use if else statements and
the given formula - Step 4
- If filing status 1 print single etc.
40flowcharting
- Flowchart is a graph consisting of geometrical
shapes that are connected by flow lines - OK for small algorithms
- For large algorithms the loops may be complicated
and very long - Not recommended
41- Successful algorithms must consider all possible
cases presented by acceptable data. - You will succeed more quickly at constructing
algorithms if you make it a habit to - think about the problem and its data, then
- enumerate all the special cases that the
algorithm must handle.
42(No Transcript)
43(No Transcript)
44Properties of good algorithms 1.
Precision each step must be clear and
unambiguous in its meaning the order of
execution of the steps must be clear the
number of steps must be finite each step
must itself be finite 2. Simplicity
each step must be simple enough that it can be
easily understood each step should
translate into only a few (or one) computer
operation or instruction 3. Levels of
abstraction the steps in the algorithm
should be grouped into related modules or
blocks you may use one module inside
another module you may refer to other
algorithms by name instead of including all of
their steps in the current algorithm
45Abstraction
- In Computer Science
- Abstraction refers to the LOGICAL GROUPING
of concepts or objects. -
- We focus on general characteristics instead
of concrete realities, specific objects or actual
instances -
- Define/implement the general idea, isolate
the details
46 Well-designed algorithms will be organized in
terms of abstraction. This means that we can
refer to each of the major logical steps without
being distracted by the details that make up each
one. The simple instructions that make up each
logical step are hidden inside modules. These
modules allow us to function at a higher level,
to hide the details of each step inside a module,
and then to refer to that module by name whenever
we need it. B By hiding the details inside
appropriate modules, we can understand the main
ideas without being distracted. This is a key
goal of using levels of abstraction Each
module represents an abstraction. The name of the
module describe the idea that the module
implements. The instructions hidden within the
module specify how that abstraction is
implemented. We can see what is being done
(the idea) by reading the descriptive name of the
module without having to pay attention to how it
is being done. If we want to understand
how it is being done, we can look inside the
module to find out.
47Software Development Steps of developing software
to solve a problem 1. Problem
Understanding Read the problem carefully
and try to understand what is required for its
solution. 2. Analysis Identify problem
inputs and outputs. 3. Design (Top-down
design) Map out the modular structure of
your algorithm. Refine your modular
design. Give a descriptive identifier for each
module. Does each module do only one logical
task? Subdivide any module that does not, as
many times as necessary. Define the
interface of each module before writing any
code. Begin the bottom-up work of
constructing each module. 4.
Implementation Implement the algorithm as
a (C) program. Convert steps of the
algorithm into programming language
statements. 5. Testing and Verification
Test the completed program, and verify that it
works as expected. Use different test
cases (not one) including critical test cases.