You are on page 1of 47

CS1010: Programming Methodology http://www.comp.nus.edu.

sg/~cs1010/

Week 1: Problem-Solving and Algorithm


1. 2. 3. 4. 5. Computing Fundamentals Problem-Solving Algorithm Control Structures Tasks: Writing Algorithms in Pseudo-code

This symbol indicates the focus of todays lesson.


CS1010 (AY2013/4 Semester 1)

Week1 - 2

Computing Fundamentals
Monitor and speaker (output) Houses processor, memory, buses, etc.

Keyboard and mouse (input)

Set of instructions to perform tasks to specifications Programs are software


Week1 - 3

CS1010 (AY2013/4 Semester 1)

Software (1/4)

Program

Sequence of instruction that tells a computer what to do Performing the instruction sequence Language for writing instructions to a computer Machine language or object code Assembly language High-level

Execution

Programming language

Major flavors

CS1010 (AY2013/4 Semester 1)

Week1 - 4

Software (2/4)

Program

Sequence of instruction that tells a computer what to do Performing the instruction sequence Language for writing instructions to a computer Machine language or object code Program to which computer can Assembly language respond directly. Each instruction High-level

Execution

Programming language

Major flavors

is a binary code that corresponds to a native instruction.

Example: 0001001101101110
CS1010 (AY2013/4 Semester 1)
Week1 - 5

Software (3/4)

Program

Sequence of instruction that tells a computer what to do Performing the instruction sequence Language for writing instructions to a computer Machine language or object code Assembly language Symbolic language High-level for coding machine

Execution

Programming language

Major flavors

language instructions.

Example: ADD A, B, C

CS1010 (AY2013/4 Semester 1)

Week1 - 6

Software (4/4)

Program

Sequence of instruction that tells a computer what to do Performing the instruction sequence Language for writing instructions to a computer Machine language or object code Assembly language Detailed knowledge of the machine is not required. Uses a vocabulary High-level Examples: Java, C, C++, Prolog, Scheme.

Execution

Programming language

Major flavors

and structure closer to the problem being solved.

CS1010 (AY2013/4 Semester 1)

Week1 - 7

Translation

High-level language programs (source codes) must be translated into machine code for execution Translator

Accepts a program written in a source language and translates it to a program in a target language

Compiler

Standard name for a translator whose source language is a high-level language


A translator that both translates and executes a source code

Interpreter

CS1010 (AY2013/4 Semester 1)

Week1 - 8

Edit, Compile and Execute


Editor
eg: vim welcome.c

produces

Source code
welcome.c

Executable code

Compiler
eg: gcc welcome.c

produces
a.out

Execute
eg: a.out

Output

produces

Hello, welcome to CS1010!

CS1010 (AY2013/4 Semester 1)

Week1 - 9

Logging into UNIX system (1/3)


We will do more programming next week. You will need your UNIX account user-name and password. To create SoC UNIX account: https://mysoc.nus.edu.sg/~newacct We will do a quick demonstration now.

CS1010 (AY2013/4 Semester 1)

Week1 - 10

Logging into UNIX system (2/3)


1. Look for the SSH Secure Shell Client icon on your desktop, and double click on it. 2. Click on Quick Connect to get the pop-up window. 3. Enter sunfire.comp.nus.edu.sg for Host Name (or simply sunfire if you are using the PC in the lab) and your own user name as illustrated here.

CS1010 (AY2013/4 Semester 1)

Week1 - 11

Logging into UNIX system (3/3)


4. Enter your UNIX password.

5. Once you log in successfully into your UNIX account, you will see this screen (actual display may vary).

6. To log out from your UNIX account, type exit or logout.

CS1010 (AY2013/4 Semester 1)

Week1 - 12

Introductory Workshop

We will conduct an Intro Workshop on 16 August, Friday and 20 August, Tuesday

Meant for students who did not attend the UNIX workshop conducted by CompClub. Optional for those who have attended the UNIX workshop conducted by CompClub. 16 August is meant for students in all sectional groups except SG31 and SG32. 20 August is meant for students in SG31 and SG32.

Very important, please attend and be punctual!

Please refer to IVLE forum Intro Workshop and sign up there.


Week1 - 13

CS1010 (AY2013/4 Semester 1)

Problem Solving Process


Determine problem features Write algorithm Produce code Check for correctness and efficiency
CS1010 (AY2013/4 Semester 1)

Analysis Rethink as appropriate

Design

Implementation

Testing
Week1 - 14

Plya: How to Solve It (1/5)


A great discovery solves a great problem but there is a grain of discovery in the solution of any problem. Your problem may be modest; but if it challenges your curiosity and brings into play your inventive faculties, and if you solve it by your own means, you may experience the tension and enjoy the triumph of discovery. Such experiences at a susceptible age may create a taste for mental work and leave their imprint on mind and character for a lifetime. George Plya

CS1010 (AY2013/4 Semester 1)

Week1 - 15

Plya: How to Solve It (2/5)


Phase 1: Understanding the problem

Phase 2: Devising a plan


Phase 3: Carrying out the plan Phase 4: Looking back

What is the unknown? What are the data? What is the condition? Is it possible to satisfy the condition? Is the condition sufficient to determine the unknown? Draw a figure. Introduce suitable notation.

CS1010 (AY2013/4 Semester 1)

Week1 - 16

Plya: How to Solve It (3/5)


Phase 1: Understanding the problem

Phase 2: Devising a plan


Phase 3: Carrying out the plan Phase 4: Looking back

Have you seen the problem before? Do you know a related problem? Look at the unknown. Think of a problem having the same or similar unknown. Split the problem into smaller sub-problems. If you cant solve it, solve a more general version, or a special case, or part of it.
Week1 - 17

CS1010 (AY2013/4 Semester 1)

Plya: How to Solve It (4/5)


Phase 1: Understanding the problem

Phase 2: Devising a plan


Phase 3: Carrying out the plan Phase 4: Looking back

Carry out your plan of the solution. Check each step. Can you see clearly that the step is correct? Can you prove that it is correct?

CS1010 (AY2013/4 Semester 1)

Week1 - 18

Plya: How to Solve It (5/5)


Phase 1: Understanding the problem

Phase 2: Devising a plan


Phase 3: Carrying out the plan Phase 4: Looking back

Can you check the result? Can you derive the result differently? Can you use the result, or the method, for some other problem?

CS1010 (AY2013/4 Semester 1)

Week1 - 19

Algorithmic Problem Solving

An algorithm is a well-defined computational procedure consisting of a set of instructions, that takes some value or set of values, as input, and produces some value or set of values, as output.

Input

Algorithm

Output

CS1010 (AY2013/4 Semester 1)

Week1 - 20

Algorithm

Each step of an algorithm must be exact. An algorithm must terminate. An algorithm must be effective. An algorithm must be general.

Can be presented in pseudo-code or flowchart.

Exact

Terminate

Effective

General

CS1010 (AY2013/4 Semester 1)

Week1 - 21

Find maximum and average of a list of numbers (1/2)

Pseudo-code
sum count 0 max 0

The need to initialise variables.

// sum = sum of numbers // count = how many numbers are entered? // max to hold the largest value eventually

for each num entered, count count + 1 sum sum + num The need to indent. if num > max then max num ave sum / count print max, ave Are there any errors in this algorithm?

CS1010 (AY2013/4 Semester 1)

Week1 - 22

Find maximum and average of a list of numbers (1/2)


Terminator box Process box sum count 0 max 0

Flowchart

start

Decision box

Yes

end of input? No increment count sum sum + num No

ave sum/count

print max, ave

num > max?


No

Yes

max num

end

CS1010 (AY2013/4 Semester 1)

Week1 - 23

Control structures
Sequence Branching Loop

(selection)

(repetition)

CS1010 (AY2013/4 Semester 1)

Week1 - 24

Data Representation

Internal representation: bits (binary digits) 0 and 1


1 byte = 8 bits We will not deal with bit level and bit operations

Data types (lists here are not exhaustive):


Integers: int, short, long Real numbers: float, double Characters: char

Read up Lesson 1.4 in reference book on your own

A variable holds some data and it belongs to a data type and occupies some memory space, shown as a box in the following slides.
Week1 - 25

CS1010 (AY2013/4 Semester 1)

Algorithm: Example #1 (1/2)

Sequence

Example 1: Compute the average of three integers.


A possible algorithm:
num1

Variables used:
num2 num3

enter values for num1, num2, num3 ave ( num1 + num2 + num3 ) / 3 print ave

ave

Another possible algorithm:


num1

Variables used:
num2 total num3

enter values for num1, num2, num3 total ( num1 + num2 + num3 ) ave total / 3 print ave

ave

CS1010 (AY2013/4 Semester 1)

Week1 - 26

Algorithm: Example #1 (2/2)

Sequence

How the code might look like


Week1_prog1.c // This program computes the average of 3 integers #include <stdio.h> int main(void) { int num1, num2, num3; float ave; printf("Enter 3 integers: "); scanf("%d %d %d", &num1, &num2, &num3); ave = (num1 + num2 + num3) / 3.0; printf("Average = %.2f\n", ave); return 0; }

CS1010 (AY2013/4 Semester 1)

Week1 - 27

Algorithm: Example #2 (1/3)


Algorithm A: enter values for num1, num2 // Assign smaller number into final1, // larger number into final2 if (num1 < num2) then final1 num1 final2 num2 else final1 num2 final2 num1

Selection

Example 2: Arrange two integers in increasing order (sort).


Variables used:
num1 num2

final1

final2

// Transfer values in final1, final2 back to num1, num2 num1 final1 num2 final2
// Display sorted integers print num1, num2
CS1010 (AY2013/4 Semester 1)
Week1 - 28

Algorithm: Example #2 (2/3)


Algorithm B: enter values for num1, num2 // Swap the values in the variables if necessary if (num2 < num1) then temp num1 num1 num2 num2 temp // Display sorted integers print num1, num2

Selection

Example 2: Arrange two integers in increasing order (sort).


Variables used:
num1 num2

temp

CS1010 (AY2013/4 Semester 1)

Week1 - 29

Algorithm: Example #2 (3/3)

Selection

How the code might look like (for algorithm B)

Week1_prog2.c // This program arranges 2 integers in ascending order #include <stdio.h> int main(void) { int num1, num2, temp; printf("Enter 2 integers: "); scanf("%d %d", &num1, &num2); if (num2 < num1) { temp = num1; num1 = num2; num2 = temp; } printf("Sorted: num1 = %d, num2 = %d\n", num1, num2); return 0; }
CS1010 (AY2013/4 Semester 1)
Week1 - 30

Algorithm: Example #3 (1/2)


Algorithm: enter value for n // Initialise a counter count to 1, and ans to 0 count 1 ans 0 while (count <= n) do the following ans ans + count // add count to ans count count + 1 // increase count by 1 // Display answer print ans

Repetition

Example 3: Find the sum of positive integers up to n (assuming that n is a positive integer).
Variables used:
n

count

ans

CS1010 (AY2013/4 Semester 1)

Week1 - 31

Algorithm: Example #3 (2/2)

Repetition

Week1_prog3.c // Computes sum of positive integers up to n #include <stdio.h> int main(void) { int n; // upper limit int count=1, ans=0; // initialisation printf("Enter n: "); scanf("%d", &n); while (count <= n) { ans += count; count++; } printf("Sum = %d\n", ans);

How the code might look like

return 0;
}
CS1010 (AY2013/4 Semester 1)
Week1 - 32

Euclidean algorithm

First documented algorithm by Greek mathematician Euclid in 300 B.C.

To compute the GCD (greatest common divisor) of two integers.

1. Let A and B be integers with A > B 0. 2. If B = 0, then the GCD is A and algorithm ends. 3. Otherwise, find q and r such that A = q.B + r where 0 r < B

4. Replace A by B, and B by r. Go to step 2.

CS1010 (AY2013/4 Semester 1)

Week1 - 33

Step-wise Refinement (1/3)

From the examples, we see that in general an algorithm comprises three steps:

Input (read data) Compute (process input data to generate some answers) Output (display answers)

The compute step is the most complex.


Step-wise refinement break down a complex step into smaller steps.

CS1010 (AY2013/4 Semester 1)

Week1 - 34

Step-wise Refinement (2/3)

Example: Given a value in miles, convert it into kilometres Recall Phase 1 of How To Solve It: Understanding the problem.

Is the problem clear? If not, ask questions!

One possible algorithm:


1. Read in distance (m) in miles 2. Convert the distance to kilometres (k) 3. Print the distance (k) in kilometres // step 1: input // step 2: compute // step 3: output

CS1010 (AY2013/4 Semester 1)

Week1 - 35

Step-wise Refinement (3/3)

We can actually stop here, if we are clear about how to do each step. If not, we need to refine the step. For instance, step 2, how do we convert miles to kilometres

we refine step 2 to:


// step 1: input // step 2: compute // step 3: output

1. Read in distance (m) in miles 2. Convert the distance to kilometres 2.1 calculate k = m * 1.609 3. Print the distance (k) in kilometres

CS1010 (AY2013/4 Semester 1)

Week1 - 36

Tasks for practice on Problemsolving and writing Algorithms in Pseudo-code

CS1010 (AY2013/4 Semester 1)

Week1 - 37

Task 1: Area of a Circle (1/2)

What is the data? Side of square = 2a


What is the unknown? Area of circle, C.

2a

What is the condition? If radius r is known, C can be calculated. How to obtain r?

CS1010 (AY2013/4 Semester 1)

Week1 - 38

Task 1: Area of a Circle (2/2)


a r a

Pythagoras theorem:
Area of circle

CS1010 (AY2013/4 Semester 1)

Week1 - 39

Task 2: Coin Change

Given these coin denominations: 1, 5, 10, 20, 50, and $1, find the smallest number of coins needed for a given amount. You do not need to list out what coins are used.

Example 1: For 375 cents, 6 coins are needed. Example 2: For 543 cents, 10 coins are needed.

CS1010 (AY2013/4 Semester 1)

Week1 - 40

Task 2: Coin Change A possible algorithm

CS1010 (AY2013/4 Semester 1)

Week1 - 41

Task 3: Breaking Up an Integer

A common sub-task in many problems involves number manipulation


252040312 2 5 2 4 3 1 2

Example: Given a positive integer n, how do you sum up all its individual digits?

The answer for the above example is 19 (2 + 5 + 2 + 0 + 4 + 0 + 3 + 1 + 2)

CS1010 (AY2013/4 Semester 1)

Week1 - 42

Algorithm before coding

The earlier examples show that we can discuss problems and their solutions (algorithms) without writing out the codes. A sample program development process:

Understanding the problem (if in doubt, ask questions!): 5 minutes Writing the algorithm: 30 minutes Testing the algorithm: 20 minutes Writing the program: 20 minutes Testing and debugging the program: 30 minutes to 3 hours or more

For more complex problems, time spent in thinking about the algorithm could far exceed time spent in writing the program. The more time you invest in writing a good algorithm, the more time you will save in debugging your program.

CS1010 (AY2013/4 Semester 1)

Week1 - 43

Quotes for CS1010 Students

Before you succeed, you must fail many times.

Dont ask me what this code does, trace it yourself!


Think! Think! Think! Practise! Practise! Practise! Its all about logic. Every step must be clear to you.

CS1010 (AY2013/4 Semester 1)

Week1 - 44

Summary for Today

Todays most important lessons

Module objectives and resources

Module website, IVLE, CS1010 Handbook, etc.

Problem-solving

As a systematic, logical process Steps in problem-solving

Algorithms

Control structures: sequence, selection, repetition How to write algorithms in pseudo-codes


Week1 - 45

CS1010 (AY2013/4 Semester 1)

Announcements/Things-to-do

Reminders

Discussion classes start in week 3 Check module website and IVLE forums regularly Read IVLE forum about the Intro workshop (only for students who did not attend the one conducted by CompClub; optional if you have attended that) and sign up for it Read CS1010 Student Handbook Revise Chapter 1 Programming Fundamentals Read Chapters 2 and 3 Learn vim and practise using it Create your UNIX account (if you have not done so) and bring along your UNIX password next week
Week1 - 46

Preparation for next week:

CS1010 (AY2013/4 Semester 1)

End of File

You might also like