ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing...

27
Esc101, Programming ESC101: Introduction to Computing Loops Aug-16 1

Transcript of ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing...

Page 1: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

ESC101: Introduction to Computing

Loops

Aug-16 1

Page 2: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Printing Multiplication Table5 X 1 = 55 X 2 = 105 X 3 = 155 X 4 = 205 X 5 = 255 X 6 = 305 X 7 = 355 X 8 = 405 X 9 = 455 X 10 = 50

Aug-15 2

Page 3: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Program…

Aug-15 3

int n;scanf(“%d”, &n);printf(“%d X %d = %d”, n, 1, n*1);printf(“%d X %d = %d”, n, 2, n*2);printf(“%d X %d = %d”, n, 3, n*3);printf(“%d X %d = %d”, n, 4, n*4);….

Too much repetition! Can I avoid it?

Page 4: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Print n x i = ni i = i+1

Input n i = 1

i <=10TRUE FALSE

Printing Multiplication Table

Aug-15 4

Stop

Loop

Loop Entry

Loop Exit

Page 5: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Printing Multiplication Table

Aug-15 5

scanf(“%d”, &n);int i = 1;

while (i <= 10) { printf(“%d X %d = %d”, n, i, n*i); i = i + 1;}

// loop exited!

Print n x i = ni i = i+1

Input n i = 1

TRUE FALSEi <=10

Stop

Page 6: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

While Statement

As long as expression is TRUE execute statement1. When expression becomes FALSE execute

statement 2.

Aug-15 6

while (expression) statement1; statement2;

FALSE

TRUE

statement1

expression

statement2

Page 7: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

While Statement

1. Evaluate expression2. If TRUE then

a) execute statement1b) goto step 1.

3. If FALSE then execute statement2.

Aug-15 7

while (expression) statement1; statement2;

FALSE

TRUE

statement1

expression

statement2

Page 8: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Example 11. Read a sequence of integers from the terminal until

-1 is read.2. Output sum of numbers read, not including the

-1..First, let us write the loop to read the integers, then add code for sum.

Aug-15 8

int a;scanf(“%d”, &a); /* read into a */while ( a != -1) {

scanf(“%d”, &a); /* read into a inside loop*/}

Page 9: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Tracing the loop

Aug-15 9

int a;scanf(“%d”, &a); /* read into a */while ( a != -1) {

scanf(“%d”, &a); /*read into a inside loop*/}

INPUT4 15-5-1

??415-5-1 Trace of memorylocation a

• One scanf is executed every time body of the loop is executed.

• Every scanf execution reads one integer.

Page 10: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Add numbers until -1Keep an integer variable s. s is the sum of the numbers seen so far (except the -1).

Aug-15 10

int a;int s; s = 0; // not seen any a yetscanf(“%d”, &a); // read into awhile (a != -1) { s = s + a; // last a is not -1 scanf(“%d”, &a); // read into a inside loop} // one could print s here etc.

Page 11: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Terminology Iteration: Each run of the loop is called an iteration.■ In example, the loop runs for 3 iterations, corresponding to

inputs 4, 15 and -5. ■ For input -1, the loop is exited, so there is no iteration for input

-1. 3 components of a while loop■ Initialization

⬥ first reading of a in example■ Condition (evaluates to a Boolean value)

⬥ a != -1■ Update

⬥ another reading of a

Aug-15 11

scanf(“%d”, &a); /* read into a */

while (a != -1) { s = s + a; scanf(“%d”, &a); /*read into a inside loop*/} // INPUTS: 4 15 -5 -1

Page 12: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Common MistakesInitialization is not done■ Incorrect results. Might give error.Update step is skipped■ Infinite loop: The loop goes on forever. Never

terminates.■ Our IDE will exit with “TLE” error (Time Limit

Exceeded)■ The update step must take the program

towards the condition evaluating to false.Incorrect termination condition■ Early or Late exit (even infinite loop).

Aug-15 12

Page 13: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Practice ProblemGiven a positive integer n, print all the integers less than or equal to n that are divisible by 3 or divisible by 5Two conditions will be used:■ x <= n■ (x%3 == 0) || (x%5 == 0)

Aug-15 13

Page 14: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, ProgrammingAug-15 14

int n; int x;scanf(“%d”, &n); // input n

x = 1; // [while] initializationwhile ( x <= n) { // [while] cond

if ((x%3 == 0) || (x%5 == 0)) { // [if] cond printf(“%d\n”, x); }

x = x+1; // [while] update}

Page 15: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Practice ProblemGiven a positive integer n write a program to reverse the integer

Aug-15 15

Page 16: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n; scanf("%d",&n); //assuming n >0 while(_____) { printf(“%d”,_____); n = _____; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number

16/8/2016 16

Page 17: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n; scanf("%d",&n); //assuming n >0 while(_____) { printf(“%d”,n%10); n = _____; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number

16/8/2016 17

Page 18: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n; scanf("%d",&n); //assuming n >0 while(_____) { printf(“%d”,n%10); n = n/10; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number

16/8/2016 18

Page 19: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n; scanf("%d",&n); //assuming n >0 while(n!=0) { printf("%d",n%10); n = n/10; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number: Try1

16/8/2016 19Input: 456 Output: 654

Page 20: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n; scanf("%d",&n); //assuming n >0 while(n!=0) { printf("%d",n%10); n = n/10; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number: Try 1

16/8/2016 20Input: 450 Output: 054

Page 21: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n, tmp; int flag=0; scanf("%d",&n); //assuming n >0 while(n!=0) { tmp = n%10; if( flag == 0 ) { flag = 1; if( tmp != 0 ) printf("%d",tmp); } else printf("%d",tmp); n = n/10; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number and avoids initial zeros: Try 2

16/8/2016 21Input: 450 Output: 54

Page 22: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n, tmp; int flag=0; scanf("%d",&n); //assuming n >0 while(n!=0) { tmp = n%10; if( flag == 0 ) { flag = 1; if( tmp != 0 ) printf("%d",tmp); } else printf("%d",tmp); n = n/10; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number and avoids initial zeros: Try 2

16/8/2016 22Input: 4500 Output: 054

Page 23: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

#include <stdio.h> int main() { int n, tmp; int flag=0; scanf("%d",&n); //assuming n >0 while(n!=0) { tmp = n%10; if( flag == 0 )

{ if( tmp != 0 ) { flag = 1; printf("%d",tmp); } } else printf("%d",tmp); n = n/10; } printf("\n"); return 0; }

Esc101, Programming

Write a program that reverses a number and avoids initial zeros: Try 3

16/8/2016 23Input: 4500 Output: 54

Page 24: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

do-while loops

do-while statement is a variant of while.

General form:Execution: 1. First execute statement.2. Then evaluate expr.3. If expr is TRUE then go to step 1.4. If expr is FALSE then break from loop

Continuation of loop is tested after the statement.

do statement while (expr);

statement

FALSE

TRUEexpr

Page 25: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Esc101, Programming

Comparing while and do-while

In a while loop the body of the loop may not get executed even once, whereas, in a do-while loop the body of the loop gets executed at least once.In the do-while loop structure, there is a semicolon after the condition of the loop.Rest is similar to a while loop.

Aug-15 25

Page 26: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Comparative ExampleProblem: Read integers and output each integer until -1 is seen (include -1 in output).The program fragments using while and do-while.

int a; /*current int*/

do { scanf(“%d”, &a); printf(“%d\n”, a); } while (a != -1);

Using do-while int a;/*current int*/

scanf(“%d”,&a); while (a != -1) { printf(“%d\n”, a); scanf(“%d”, &a); } printf(“%d\n”, a);

Using while

Page 27: ESC101: Introduction to Computing · Computing Loops Aug-16 1. Esc101, Programming Printing Multiplication Table 5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5

Comparative ExampleThe while construct and do-while are equally expressive ■ whatever one does, the other can too.■ but one may be more readable than other.

int a; /*current int*/

do { scanf(“%d”, &a); printf(“%d\n”, a); } while (a != -1);

Using do-while int a;/*current int*/

scanf(“%d”,&a); while (a != -1) { printf(“%d\n”, a); scanf(“%d”, &a); } printf(“%d\n”, a);

Using while