Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 ·...

25
IIT Bombay Computer Programming Dr. Deepak B Phatak Dr. Supratik Chakraborty Department of Computer Science and Engineering IIT Bombay Session: Iteration Idioms: Motivation 1 Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

Transcript of Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 ·...

Page 1: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Computer ProgrammingDr. Deepak B Phatak

Dr. Supratik ChakrabortyDepartment of Computer Science and Engineering

IIT Bombay

Session: Iteration Idioms: Motivation

1Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

Page 2: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

• Structure of a simple C++ program

• Sequential execution of statements

• Conditional execution of statements

• Programming to solve simple problems

2 Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

Quick Recap of Relevant Topics

Page 3: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

• Need for iteration in programming• Convenience

• Necessity

• Intuitive programming

• Generic iteration construct

• Iteration constructs in C++

3 Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

Overview of This Lecture

Page 4: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

A Simple Problem

Read quiz 1 marks of ten CS101 students and print their sum, average, maximum and minimum

Can we solve using what we’ve learnt so far?

assignment statements, input/output statements

arithmetic expressions

sequential and conditional execution of statements

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 4

Page 5: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Overall Strategy

• Maintain “running” sum, max and min (aggregates)

• Initialize aggregates

• Read input 1 and update aggregates

• Read input 2 and update aggregates

• Read input 10 and update aggregates

• Compute average as sum/10

• Output sum, average, max, min

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 5

Page 6: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

A Simple Flowchart

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 6

Initialize aggregates

Ask for input 1Read input 1

Update aggregates

Ask for input 2Read input 2

Update aggregates

Ask for input 3Read input 3

Update aggregates

Ask for input 4Read input 4

Update aggregates

Ask for input 9Read input 9

Update aggregates

Ask for input 10Read input 10

Update aggregates

average = sum/10Output average, sum, min, max

Page 7: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

C++ Program

int main() {

// Variable declarations

int marks, sum, min, max;

float average;

// Initialization of aggregates

sum = 0; average = 0;

// Further code comes here

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 7

Page 8: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

C++ Program

int main() {

// Variable declarations and initialization of sum and average

cout << “Give quiz marks of student 1: “;

cin >> marks;

sum = sum + marks;

// Initialize min and max with first input

min = marks; max = marks;

// Further code comes here

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 8

Page 9: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

C++ Program

int main() {

// Variable declarations and initialization of sum and average

// Read marks of student 1, and update aggregates

cout << “Give quiz marks of student 2: “;

cin >> marks;

sum = sum + marks;

min = (min > marks) ? marks: min;

max = (max < marks) ? marks: max;

// Further code comes here

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 9

Page 10: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

C++ Program

int main() {

// Variable declarations and initialization of sum and average

// Read marks of students 1 and 2, and update aggregates

cout << “Give quiz marks of student 3: “;

cin >> marks;

sum = sum + marks;

min = (min > marks) ? marks: min;

max = (max < marks) ? marks: max;

// Further code comes here

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 10

Page 11: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

C++ Program

int main() {

// Variable declarations and initialization of sum and average

// Read marks of students1, 2 … 10, and update aggregates

// Calculate and print aggregates

average = sum/10.0;

cout << “Average: “ << average << “Sum: “ << sum;

cout << “Min: “ << min << “Max: “ << max << endl;

return 0;

}

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 11

Page 12: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Some Observations

• (Almost) same instructions repeated multiple timescout << “Give marks of student 3: “;

cin >> marks;

sum = sum + marks;

min = (min > marks) ? marks : min;

max = (max < marks) ? marks : max;

• Intuitively, we would like to execute (almost) the same instructions for all students

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 12

Slightly different for student 1:min = marks; max = marks;

Page 13: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Some Observations

• Suppose we had a construct in C++ that allowed us to effectively say

Repeat the following block of instructions a specified

number of times

• Could we write a less repetititve C++ program to aggregate quiz 1 marks ?

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 13

Page 14: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Another Attempt At Our C++ Program

int main() {

// Variable declarations and initialization of aggregates

int count = 1;

// Repeat the following block of code 10 times

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

// Update min and max appropriately

count = count + 1;

} // End of block of code to be repeated

// Code for computing average and printing comes here

return 0;

}Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 14

Page 15: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Another Attempt At Our C++ Program

int main() {

// Variable declarations and initialization of aggregates

int count = 1;

// Repeat the following block of code 10 times

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

if (count == 1) { min = marks; max = marks; }

else { min = (min > marks) ? marks:min; max = (max < marks) ? marks: max; }

count = count + 1;

} // End of block of code to be repeated

// Code for computing average and printing comes here

return 0;

}Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 15

Updating min and max appropriately

Page 16: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Another Attempt At Our C++ Program

int main() {

// Variable declarations and initialization of aggregates

int count = 1;

// Repeat the following block of code 10 times

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

if (count == 1) { min = marks; max = marks; }

else { min = (min > marks) ? marks:min; max = (max < marks) ? marks: max; }

count = count + 1;

} // End of block of code to be repeated

// Code for computing average and printing comes here

return 0;

}Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 16

Need for this?

Currently, only for this message

Page 17: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Another Attempt At Our C++ Program

int main() {

// Variable declarations and initialization of aggregates

int count = 1;

// Repeat the following block of code 10 times

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

if (count == 1) { min = marks; max = marks; }

else { min = (min > marks) ? marks:min; max = (max < marks) ? marks: max; }

count = count + 1;

} // End of block of code to be repeated

// Code for computing average and printing comes here

return 0;

}Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 17

Compared to our earlier program, this one is less repetititve, and closer to intuition

Yet, the original problem could have been solved without the repetition/iteration construct

Page 18: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Repetition in Programming

• Wasteful

If you can achieve something by coding once, why code again?

• Potential source of bugs and inconsistencies• Afterthought: Want to say “Thank you” after each marks is read• cout << “Thank you”; at 10 places• What if there was a typo (“Think yoo”) at one place?• Can be more dangerous than just a message being printed wrong

• Maintainability of large code with repetition difficult• Small change in replicated code requires replicating change at several places

• Reuse as much code as possible, avoid repetitions consciously

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 18

Page 19: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

More General Iteration

int main() {

// Variable declarations and initialization of aggregates

int count = 1;

// Repeat the following block of code 10 times

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

if (count == 1) { min = marks; max = marks; }

else { min = (min > marks) ? marks:min; max = (max < marks) ? marks: max; }

count = count + 1;

} // End of block of code to be repeated

// Code for computing average and printing comes here

return 0;

}Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 19

What if we want to aggregate marks of “n” students, where “n” is

user specified?

Number of repetitions cannot be determined when writing program

Page 20: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

More General Iteration

int main() {

// Variable declarations and initialization of aggregates

int count = 1;

// Repeat the following block of code 10 times

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

if (count == 1) { min = marks; max = marks; }

else { min = (min > marks) ? marks:min; max = (max < marks) ? marks: max; }

count = count + 1;

} // End of block of code to be repeated

// Code for computing average and printing comes here

return 0;

}Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 20

What if we want to aggregate marks of “n” students, where “n” is

user specified?

Number of repetitions cannot be determined when writing program

Necessity of repetition/iteration construct:Problem cannot be solved without this

Page 21: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

More General Iteration

int numStudents, count;

cout << “Give number of students in CS101: “; cin >> numStudents

count = 1;

// Repeat the following block of code while (count <= numStudents)

{ cout << “Give marks of student “ << count << “: “;

cin >> marks;

sum = sum + marks;

if (count == 1) { min = marks; max = marks; }

else { min = (min > marks) ? marks:min; max = (max < marks) ? marks: max; }

count = count + 1;

} // End of block of code to be repeated

// Code to compute aggregates and print them

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 21

Iterate while a logical condition is satisfied

Crucial: Affects logical condition

for loop termination

Page 22: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

A Generic Iteration Construct

• General structure of program with iteration

Part of program before iterationIteration initialization (setting up initial values, etc)Iterate/Repeat as long as a logical condition stays true

{ Block of statementsOptional instructions to execute at end of every iteration }

Part of program after iteration

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 22

Page 23: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

A Generic Iteration Construct

• General structure of program with iteration

Part of program before iterationIteration initialization (setting up initial values, etc)Iterate/Repeat as long as a logical condition stays true

{ Block of statementsOptional instructions to execute at end of every iteration }

Part of program after iteration

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 23

Loop Condition

Loop

Loop Body

Page 24: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

C++ Iteration Constructs

• Several iteration constructs in C++• while (loopCondition) { Block of Statements to Iterate Over };

• do { Block of Statements to Iterate Over} while (loopCondition);

• for (initializationCode; loopCondition;

CodeToExecuteAfterEachIteration)

{ Block of Statements to Iterate Over };

• Details in next lecture …

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 24

Page 25: Computer Programming - CSE, IIT Bombaycs101/2014.2/lecture-slides/... · 2014-08-09 · •Iteration idioms in programming •Necessary in general •Convenient to write intuitive

IIT Bombay

Summary

• Iteration idioms in programming• Necessary in general

• Convenient to write intuitive code

• Enables code reuse, avoids pitfalls of repetition

• Glimpse of iteration constructs in C++

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay 25