For loops nested loops and scopes Jordi Cortadella

  • Slides: 26
Download presentation
For loops, nested loops and scopes Jordi Cortadella Department of Computer Science

For loops, nested loops and scopes Jordi Cortadella Department of Computer Science

Outline • For loops • Scopes • Nested loops Introduction to Programming © Dept.

Outline • For loops • Scopes • Nested loops Introduction to Programming © Dept. CS, UPC 2

Calculate xy Algorithm: repeated multiplication x x x x y times y 4 4

Calculate xy Algorithm: repeated multiplication x x x x y times y 4 4 4 Introduction to Programming x 3 3 3 i 0 1 2 3 4 © Dept. CS, UPC p=xi 1 3 9 27 81 3

Calculate xy // Pre: y 0 // Returns xy int power(int x, int y)

Calculate xy // Pre: y 0 // Returns xy int power(int x, int y) { int p = 1; int i = 0; while (i < y) { // Repeat y times p = p x; i = i + 1; // p = xi } return p; } Introduction to Programming © Dept. CS, UPC 4

Calculate xy // Pre: y 0 // Returns xy int power(int x, int y)

Calculate xy // Pre: y 0 // Returns xy int power(int x, int y) { int p = 1; for (int i = 0; i < y; i = i + 1) { p = p x; } return p; } int i = 0; while (i < y) { p = p x; i = i + 1; } Introduction to Programming © Dept. CS, UPC 5

Calculate xy // Pre: y 0 // Returns xy int power(int x, int y)

Calculate xy // Pre: y 0 // Returns xy int power(int x, int y) { int p = 1; i = i + 1 for (int i = 0; i < y; ++i) p = p x; return p; } Introduction to Programming int i while p = i = } © Dept. CS, UPC = 0; (i < y) { p x; i + 1; 6

Factorial // Pre: n 0 // Returns n! int factorial(int n) { int f

Factorial // Pre: n 0 // Returns n! int factorial(int n) { int f = 1; for (int i = 1; i <= n; ++i) f = f i; return f; } int factorial(int n) { int f = 1; for (int i = n; i > 0; --i) f = f i; return f; } Introduction to Programming © Dept. CS, UPC 7

Up-down sequence • Write a program that reads a positive integer n and prints

Up-down sequence • Write a program that reads a positive integer n and prints and up-down sequence (one number per line) • Example (n=6): 1 2 3 4 5 6 5 4 3 2 1 Introduction to Programming © Dept. CS, UPC 8

Up-down sequence // // This program reads a positive integer (n) and prints and

Up-down sequence // // This program reads a positive integer (n) and prints and up-down sequence (one number per line). Example: 1 2 3 … n-1 n n-1 … 3 2 1 int main() { int n; cin >> n; Same name, different variables // up sequence: 1 2 3 … n-2 n-1 n for (int i = 1; i <= n; ++i) cout << i << endl; // down sequence: n-1 n-2 … 3 2 1 for (int i = n - 1; i > 0; --i) cout << i << endl; } Introduction to Programming © Dept. CS, UPC 9

Summary • A for loop is a special type of repetitive statement with a

Summary • A for loop is a special type of repetitive statement with a loop counter. • It is naturally used when the number of iterations is known before entering the loop. • Recommendations: – Declare the loop counter locally (when possible). – Update the loop counter by a constant (++i, --i). – Do not modify the loop counter inside the for loop. Introduction to Programming © Dept. CS, UPC 10

Sort three numbers // This program reads three numbers and // prints the same

Sort three numbers // This program reads three numbers and // prints the same numbers in ascending order. Different variables int main() { int x, y, z; cin >> x >> y >> if (x > y) { // int t = x; x = y; y = t; } // if (y > z) { // int t = y; y = z; z = t; } // if (x > y) { // int t = x; x = y; y = t; } // cout << x << " " } Introduction to Programming z; Swap x y 9 5 2 We know that x y Swap y z 5 9 2 5 2 9 We know that z is the largest number Swap x y 2 We know that x y z << y << " " << z << endl; © Dept. CS, UPC 5 9 11

Print min and max // This program reads two numbers and prints // the

Print min and max // This program reads two numbers and prints // the minimum and the maximum (in this order). int main() { int x, y; cin >> x >> y; ! g n o r W if (x > y) { int min = int max = } else { int min = int max = } } y; x; x; y; min and max are not visible cout << min << " " << max << endl; Introduction to Programming © Dept. CS, UPC 12

Print min and max // This program reads two numbers and prints // the

Print min and max // This program reads two numbers and prints // the minimum and the maximum (in this order). int main() { int x, y; cin >> x >> y; int min, max; if (x > y) { min = y; max = x; } else { min = x; max = y; } } Scope for min and max cout << min << " " << max << endl; Introduction to Programming © Dept. CS, UPC 13

Scopes and visibility { // a and b are not visible int a =

Scopes and visibility { // a and b are not visible int a = 1, b = 20; // a and b are visible cout << a << endl; // prints 1 { // c is not visible, a and b are visible cout << a + b << endl; // prints 21 int b = 5, c = 4; // a, c and the inner b are visible, // but the outer b is not visible cout << a + b << endl; // prints 6 cout << c << endl; // prints 4 } // c is not visible cout << b << endl; // prints 20 } Introduction to Programming © Dept. CS, UPC 14

Summary • Variables are only visible within their scope. • Recommendations: – Declare and

Summary • Variables are only visible within their scope. • Recommendations: – Declare and use variables as locally as possible. – When possible, initialize variables with their declaration. – Use meaningful names (e. g. , min, count, avg, …) • Do not try to reuse variables: fewer variables does not imply less memory. Introduction to Programming © Dept. CS, UPC 15

Drawing a rectangle • Write a program that reads the dimensions of a rectangle

Drawing a rectangle • Write a program that reads the dimensions of a rectangle (x, y) and prints x columns and y rows of asterisks. • Example (x=8, y=5): Introduction to Programming © Dept. CS, UPC 16

Drawing a rectangle // Reads the dimensions (x, y) of a rectangle // and

Drawing a rectangle // Reads the dimensions (x, y) of a rectangle // and prints x columns and y rows of asterisks. int main() { int x, y; cin >> x >> y; draw. Rectangle(x, y); } Introduction to Programming © Dept. CS, UPC 17

Drawing a rectangle // Prints a rectangle with <ncols> columns and // <nrows> rows

Drawing a rectangle // Prints a rectangle with <ncols> columns and // <nrows> rows of asterisks. void draw. Rectangle(int ncols, int nrows) { for (int i = 0; i < nrows; ++i) { print. Row(ncols); } } // Prints a row of n asterisks. void print. Row(int n) { for (int i = 0; i < n; ++i) cout << " "; cout << endl; } Introduction to Programming © Dept. CS, UPC 18

Ordered declaration of functions void print. Row(int n) {. . . } void draw.

Ordered declaration of functions void print. Row(int n) {. . . } void draw. Rectangle(int ncols, int nrows) {. . . // uses print. Row } int main() {. . . // uses draw. Rectangle } Introduction to Programming © Dept. CS, UPC 19

Drawing a rectangle: nested loops // Reads the dimensions (x, y) of a rectangle

Drawing a rectangle: nested loops // Reads the dimensions (x, y) of a rectangle // and prints x columns and y rows of asterisks. int main() { int x, y; cin >> x >> y; for (int r = 0; r < y; ++r) { for (int c = 0; c < x; ++c) cout << " "; Print<<row with x asterisks cout endl; } } Introduction to Programming © Dept. CS, UPC 20

Drawing a right equilateral triangle • Write a program that reads an integer n

Drawing a right equilateral triangle • Write a program that reads an integer n and prints a right equilateral triangle with the length of the cathetus being n. • Example (n=7): Introduction to Programming © Dept. CS, UPC 21

Drawing a right equilateral triangle Observation: row r has r asterisks row r Introduction

Drawing a right equilateral triangle Observation: row r has r asterisks row r Introduction to Programming © Dept. CS, UPC 22

Drawing a right equilateral triangle // Reads an integer n and prints a right

Drawing a right equilateral triangle // Reads an integer n and prints a right // equilateral triangle with the length // of the cathetus being n. int main() { int n; cin >> n; for (int r = 1; r <= n; ++r) { for (int c = 0; c < ? ; ++c) cout << " "; Print row r with r asterisks cout << endl; } } Introduction to Programming © Dept. CS, UPC 23

Drawing a right equilateral triangle // Reads an integer n and prints a right

Drawing a right equilateral triangle // Reads an integer n and prints a right // equilateral triangle with the length // of the cathetus being n. int main() { int n; cin >> n; for (int r = 1; r <= n; ++r) { for (int c = 0; c < r; ++c) cout << " "; cout << endl; } } Introduction to Programming © Dept. CS, UPC 24

Exercises Draw the following shapes (for any n): o o o o o o

Exercises Draw the following shapes (for any n): o o o o o o o o Chess board Introduction to Programming © Dept. CS, UPC 25

Summary • Nested loops are useful when treating multidimensional data, e. g. , rows/columns,

Summary • Nested loops are useful when treating multidimensional data, e. g. , rows/columns, height/width, matrices, etc. • Recommendations: – Use for loops if the number of iterations is known before entering the loop. – Use a different local counter for each loop. Introduction to Programming © Dept. CS, UPC 26