From Selection to Repetition

Slides:



Advertisements
Similar presentations
Week 5: Loops 1.  Repetition is the ability to do something over and over again  With repetition in the mix, we can solve practically any problem that.
Advertisements

Introduction to Computing Science and Programming I
Dr. Yang, Qingxiong (with slides borrowed from Dr. Yuen, Joe) LT4: Control Flow - Loop CS2311 Computer Programming.
CSE 1301 Lecture 6B More Repetition Figures from Lewis, “C# Software Solutions”, Addison Wesley Briana B. Morrison.
Computer Science 1620 Loops.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 5 Looping.
Computer Science 1620 Variables and Memory. Review Examples: write a program that calculates and displays the average of the numbers 45, 69, and 106.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 5: Looping by Tony.
C Lecture Notes 1 Program Control (Cont...). C Lecture Notes 2 4.8The do / while Repetition Structure The do / while repetition structure –Similar to.
Iteration This week we will learn how to use iteration in C++ Iteration is the repetition of a statement or block of statements in a program. C++ has three.
Chapter 5: Loops and Files.
Loops – While, Do, For Repetition Statements Introduction to Arrays
Computer Science 1620 Programming & Problem Solving.
© 2004 Pearson Addison-Wesley. All rights reserved5-1 Iterations/ Loops The while Statement Other Repetition Statements.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 6 Repetition Statements.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 6 Repetition Statements.
C++ Functions. 2 Agenda What is a function? What is a function? Types of C++ functions: Types of C++ functions: Standard functions Standard functions.
While Loops and Do Loops. Suppose you wanted to repeat the same code over and over again? System.out.println(“text”); System.out.println(“text”); System.out.println(“text”);
Chapter 5: Control Structures II (Repetition)
Outlines Chapter 3 –Chapter 3 – Loops & Revision –Loops while do … while – revision 1.
CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM.
EGR 2261 Unit 5 Control Structures II: Repetition  Read Malik, Chapter 5.  Homework #5 and Lab #5 due next week.  Quiz next week.
A Computer Science Tapestry 1 Recursion (Tapestry 10.1, 10.3) l Recursion is an indispensable technique in a programming language ä Allows many complex.
General Programming Introduction to Computing Science and Programming I.
CHAPTER 07 Arrays and Vectors (part I). OBJECTIVES 2 In this part you will learn:  To use the array data structure to represent a set of related data.
C++ for Everyone by Cay Horstmann Copyright © 2012 by John Wiley & Sons. All rights reserved For Loops October 16, 2013 Slides by Evan Gallagher.
Project 1 Due Date: September 25 th Quiz 4 is due September 28 th Quiz 5 is due October2th 1.
If-else, switch, while, for, do-while Control Statements.
Copyright © Nancy Acemian 2004 For Loops-Break-Continue COMP For loop is a counter controlled loop. For loop is a pretest loop. Used when number.
 Wednesday, 9/18/02, Slide #1 CS106 Introduction to CS1 Wednesday, 9/18/02  QUESTIONS?? HW #1 due today at 5!!  Today: Loops, and two new data types.
Chapter 5: Control Structures II (Repetition). Objectives In this chapter, you will: – Learn about repetition (looping) control structures – Learn how.
# ACS 168 Structured Programming Using the Computer Chapter 2 Spring 2002 Prepared by Shirley White.
Lecture 4 Looping. Building on the foundation Now that we know a little about  cout  cin  math operators  boolean operators  making decisions using.
6/3/2016 CSI Chapter 02 1 Introduction of Flow of Control There are times when you need to vary the way your program executes based on given input.
Week 3 - Wednesday.  What did we talk about last time?  Other C features  sizeof, const  ASCII table  printf() format strings  Bitwise operations.
 2003 Prentice Hall, Inc. All rights reserved. 1 Arrays Outline Introduction Arrays Declaring Arrays Examples Using Arrays.
CS161 Topic #16 1 Today in CS161 Lecture #16 Prepare for the Final Reviewing all Topics this term Variables If Statements Loops (do while, while, for)
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Edition Chapter 5 Looping.
+ Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Chapter 5: Looping.
Announcements Homework 3 is due this Wednesday, November 11 th Superman robot moves into the phone booth. Homework 4 will be assigned this week and will.
Functions Overview Functions are sequence of statements with its own local variables supports modularity, reduces code duplication Data transfer between.
Introduction to Loops Iteration Repetition Counting Loops Also known as.
Control of flow We learned that default flow of instructions is sequential. Then, we learned how to control the flow using "if" and "switch." Now, we will.
Before we get started…. First, a few things… Weighted Grading System Programming Style Submitting your assignments… The char and string variable types.
REPETITION STATEMENTS - Part2 Structuring Input Loops Counter-Controlled Repetition Structure Sentinel-Controlled Repetition Structure eof()-Controlled.
Loops and Files. 5.1 The Increment and Decrement Operators.
1 Standard Version of Starting Out with C++, 4th Brief Edition Chapter 5 Looping.
Copyright © 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 5: Looping.
Alternate Version of STARTING OUT WITH C++ 4 th Edition Chapter 5 Looping.
Chapter Looping 5. The Increment and Decrement Operators 5.1.
Chapter 05 (Part II) Control Statements: Part II.
Copyright 2006 Addison-Wesley Brief Version of Starting Out with C++ Chapter 5 Looping.
Chapter Looping 5. The Increment and Decrement Operators 5.1.
Lecture 7 – Repetition (Loop) FTMK, UTeM – Sem /2014.
Announcements First Midterm March 16 th on Monday next week at 19:40 (100 minutes) Exam classes: if (LastName
Chapter 4 Repetition Statements Program Development and Design Using C++, Third Edition.
FUNCTIONS (C) KHAERONI, M.SI. OBJECTIVE After this topic, students will be able to understand basic concept of user defined function in C++ to declare.
Announcements First Midterm March 14 th on Monday next week at 19:40 (100 minutes) Exam classes: if (LastName
Introduction to Loop. Introduction to Loops: The while Loop Loop: part of program that may execute > 1 time (i.e., it repeats) while loop format: while.
Announcements Midterm
REPETITION CONTROL STRUCTURE
if-else, switch, while, for, do-while
Announcements First Midterm
Chapter 5: Looping Starting Out with C++ Early Objects Seventh Edition
Lecture 07 More Repetition Richard Gesick.
Lecture 4B More Repetition Richard Gesick
Announcements Final Exam on August 17th Wednesday at 16:00.
Computing Fundamentals
Announcements First Midterm
Module 4 Loops and Repetition 9/19/2019 CSE 1321 Module 4.
Presentation transcript:

From Selection to Repetition The if statement and if/else statement allow a block of statements to be executed selectively: based on a condition cout << "Please enter a non-negative number" << endl; cin >> inputnumber; if (inputnumber < 0) { cout << inputnumber << " is negative. Wrong Input" << endl; } This piece of code does not ask another input number if the number is negative. ------------------------------------------------------------------------------------------------------ The while statement repeatedly executes a block of statements while the condition is true cout << " Please enter a non-negative number" << endl; while (inputnumber < 0) cout << inputnumber << " is negative! Try again" << endl;

Semantics of while loop if (test) while (test) { { statement list; statement list; } } test Statement list Next statement true false test Statement list Next statement true false

while loop syntax <initialization> while (<test>) { <statement1>; ... <statementN>; <update> } The while loop consists of these parts: 1- initialization: to initialize variables to be used in the loop 2- condition: test condition is a boolean expression and determines whether to continue the loop or not. 3- statement1…statementn: the body of the loop, the statements to execute if the condition is true 4- update: which is part of the body, is a statement to change the value of the condition How it works: The loop condition is first evaluated: if it is true the statements and update are executed. The loop condition is then evaluated again. As long as it is true, the statements are executed.

while loop sum example Sum of numbers from 1..10 int sum = 0; int i = 1; while (i <= 10) { sum = sum + i; i = i + 1; } cout << sum; initialization test body statements update

for loop syntax compared with while <initialization> while (<test>) { <statement1>; ... <statementN>; <update> } for (<initialization>; <test>; <update> ) { <statement1>; ...    <statementN>; } Let’s compare for loop with the while loop. for loop merges the 3 pieces (initialization, condition and update) of a while loop into one line. This makes loops easier to write and read in one line.

for loop example Rewrite the same loop: sum of numbers from 1..10 int sum = 0; int i = 1; while (i <= 10) { sum = sum + i; i = i + 1; } int sum = 0; for (int i=1; i <= 10; i=i+1) { sum = sum + i; } They look very similar and they achieve the exact same result. So you can use any of them.

Example: Print a string backwards (revstring.cpp) Determine the index of the last character of the string, and then access each character backwards How many times should the loop iterate ? string s; int k; cout << "enter string: "; cin >> s; cout << s << " reversed is "; k = s.length() - 1; // index of last character in s while (k >= 0) { cout << s.substr(k,1); k -= 1; } cout << endl; What could we use instead of s.substr(k,1) ? s.at(k)

Reverse String as a function First step, what is the prototype? string revstring(string s) // pre: s = c0c1c2…cn-1 // post: return cn-1…c2c1c0 Second step, how do we build a new string? Start with an empty string, "" Add one character at each iteration using concatenation, + rev = rev + s.substr(k,1); Use revstring to determine if a string is a palindrome

See palindrome.cpp for full program string revstring(string s) // post: returns reverse of s, that is "stab" for "bats“ { int k = s.length() – 1; string rev = ""; // start with empty string while (k >= 0) rev = rev + s.substr(k,1); k -= 1; } return rev; bool IsPalindrome(string word) // post: returns true if and only word is a palindrome return (word == revstring(word));

Bad loops for (int i = 10; i < 5; i++) { cout << "How many times do I print?"; } for (int i = 10; i >= 1; i++) int i = 1; while (i < 20)

Bad loops Never executes Never stops (infinite loops) Example: consider the following modified code from sum10nums What’s the problem in the loop below? What is missing? sum = 0; count = 1; while (count <= 10) { cin >> num; sum += num; } count never reaches 10, because count is not updated in the loop

Infinite loops Infinite loop is something that must be avoided happens when the loop condition is always true same loop body iterates forever sometimes you see an output, sometimes you don’t press Ctrl-C to stop could be because of a wrong or missing update statement could be because of a wrong condition; could be another reason

Infinite loops What is the problem with the code below? How to fix? cannot say infinite loop, depends on input number for example, if num is an odd number, then the loop is infinite cin >> num; int start = 0; while (start != num) { start += 2; cout << start << endl; } How to fix? You can check whether num is even before starting the loop. if (num % 2 == 0) { while (start != num) { start += 2;

Other Common Problems Easy to iterate one more or one less times Test each loop with the inputs that cause: zero iterations of the loop body one iteration of the loop body maximum number of iterations one less than the maximum number of iterations Use the debugger and watch the variables.

Developing Loops Some loops are easy to develop, others are not Sometimes the proper loop test and body are hard to design Practice helps, but remember: Good design comes from experience, experience comes from bad design

Number Crunching Number crunching is a CS term that means a computing operation that requires several (and sometimes complex) arithmetic operations It was the job of early computers Numeric Analysis classical sub-discipline of computer science Today implicitly or explicitly, all operations are numeric Now we will see some mathematical applications factorial calculation prime number testing

Factorial n! = 1x2x…xn is “n factorial”; used in math, statistics long factorial(long n) // pre: 0 <= n // post: returns n! (1 x 2 x … x n) Similar to sum, but this time we will calculate a product within the loop. At the end we will return the final product. The loop will iterate n times, multiplying by 1, 2, …, n Suppose we use a variable called product to hold the result, then product is n! when the loop terminates. Then we will return it at the end.

Factorial Issues Let’s see fact.cpp long Factorial(int num) // precondition: num >= 0 // postcondition returns num! (1 x 2 x … x num) { long product = 1; int count = 0; while (count < num) count += 1; product *= count; } return product; Issues Why did we use long? What happens if we use int instead? What happens if we initialize count to 1? Let’s see fact.cpp

Factorial (Cont’d) – Using BigInt class What is the problem of the previous program? integer overflow even long is not sufficient (actually there is no difference between long and int for 32-bit computers like ours) 12! is 479,001,600 so what happens with 13! ? The type BigInt, accessible via #include "bigint.h" can be used like an int, but gets as big as you want it to be Really arbitrarily large? No, limited to computer memory, but computers most likely run out of time before running out of memory Disadvantages of using BigInt compared to int? processing speed is lower uses up more memory Use BigInt if you really need it Do not forget to add bigint.cpp to your project, BigInt is a Tapestry class Download wincode.zip file from http://cs.duke.edu/csed/tapestry

Factorial using BigInt class See bigfact.cpp

Determining if a number is prime Prime number is a natural number which has only two divisors: 1 and itself Some Cryptographic algorithms depend on prime numbers Determining if a number is prime must be “easy” Actually factoring a number must be “hard” “hard” in the sense that it must be computationally infeasible to factorize in a reasonable amount of time RSA Cryptosystem Rivest, Shamir, Adleman based on the factorization problem of large numbers has been utilized by several security products and services PGP (Pretty Good Privacy) – e-mail security WWW security using SSL protocol Sophisticated mathematics used for fast prime-testing, we’ll do basic prime testing Since our algorithm is based on factorization, it will be really slow for large numbers

Determining Primeness (continued) 1 is NOT prime, 2 is prime, 3 is prime, 5 is prime, 17 is prime, … 137, 193? We do not need to check even numbers other than 2 (2 is a special case) To check 193, divide it by 3, 5, 7, 9, 11, 13 Note that 14x14 = 196, so 13 largest potential factor? We will use modulus operator to check divisibility We’ll check odd numbers as potential divisors Watch out for 2, it is a special case How far should we go to check potential divisors? up to and including sqrt(number) + 1 If there was a bigger factor, a smaller factor would exist. And this smaller one must have been checked before. So we do not need to go beyond this limit. +1 is there to make sure that there will be no problems with precision See primes.cpp for code

Primeness Check – Details Special even number check is added before the loop to eliminate even numbers to be checked in the loop In order to make the code more efficient int limit = int(sqrt(n) + 1); To assign a double value to an int, a typecast is used, to tell the compiler that the loss of precision is intentional Make typecasts explicit to tell the compiler you know what you are doing Compiler warnings are avoided We will see typecast in more detail later

for loop compared with while <initialization> while (<test>) { <statement1>; ... <statementN>; <update> } for (<initialization>; <test>; <update> ) { <statement1>; ...    <statementN>; } Let’s compare for loop with the while loop. for loop merges the 3 pieces (initialization, condition and update) of a while loop into one line. This makes loops easier to write and read in one line.

Example Rewrite the while loop of main of primes.cpp using for k = low; while (k <= high) { if (IsPrime(k)) { cout << k << endl; numPrimes += 1; } k += 1; } for (k = low; k <= high; k += 1) { if (IsPrime(k)) { cout << k << endl; numPrimes += 1; } }

Shorthand for increment/decrement Lots of code requires incrementing a variable by one Three methods, using = and +, using +=, and using ++ effectively they are same num = num + 1; num += 1; num++; // post increment It is also possible to write ++num; pre-increment These differ on when the increment is performed, but this difference doesn’t matter when used as an abbreviation for the statement n += 1; in a single statement Similarly there are post-decrement (and pre-decrement) num = num - 1; num -= 1; num--;

The do-while loop Similar to while loop, but the test is after the execution of the loop body The while loop may never execute, do-while loop executes at least once <initialization> do { <statement1>;    ...   <statementN>; <update> } while (<condition>); Example: Prompt for a number between 0 and 100, loop until such a number is entered (user should enter at least one number) cout << "enter number in range [0..100] "; cin >> num; } while (num < 0 || num > 100 ); Don’t forget

Priming Priming: reading an initial value before the loop do not get confused with prime numbers; this is something else Problem: enter numbers, add them up, stop when -1 entered int sum = 0; int num; cin >> num; // prime the loop while (num != -1) { sum += num; cin >> num; } cout << "total = " << sum << end; Code duplication exists here: input (and perhaps prompt) code is repeated before the loop and in the loop

Pseudo infinite solution using break To avoid repeating code, include it in the body of the loop only, use a test to break out of the loop break statement exits (inner-most) loop I don’t prefer this kind of loops (I’d prefer code duplication) Because the loop condition is not clear, hence prevents readability Try not to use break in this course Save it for later when you develop really complicated loops int sum = 0; int num; while (true) // seemingly infinite loop { cin >> num; if (num == -1) { break; // get out of loop } sum += num; cout << "total = " << sum << end;

Fence Post Problem The problem that occurs when one or more operations of the loop body are executed one less then the others. Example: Display integers between 1 and 10 separated by comma 1,2,3,4,5,6,7,8,9,10 no comma after 10; no comma before 1. for (n=1; n <= 10; n++) { cout << n << ","; } Problem: comma after 10 for (n=1; n < 10; n++) } cout << n; No problem, but code duplicates Think of other solutions! (see page 175 of Tapestry)

Downward-counting loop Calculate n to the power of m: nm=nxnx…xn Example: 25=2x2x2x2x2=32 int power = 1; int n, m; cin >> n >> m; for (int i = m; i >= 1; i--) { power = power * n; }

Nested loops Sometimes one loop occurs in another Generating 2-dimensional tabular data multiplication table Sorting vectors (which will be studied much later) Display some geometric figures using character * (or any other character) display rectangles, triangles Although other loops can be nested as well, most of the time, for loops are used in nested manner

Nested loops - Example Write a function to display a rectangle of stars (height and width are parameters) e.g. if height is 4 and width is 7, the output should look like ******* for (i=1; i<= height; i++) { for (j=1; j<=width; j++) // inner loop prints 1 line of stars cout << "*"; } cout << endl; // end of line is put to the end of each line See drawfigures.cpp for the complete function and its use in main

Nested loops - Example Write a function to display a perpendicular isosceles triangle of stars (perpendicular side length is parameter) e.g. if side length is 6 , the output should look like * ** *** **** ***** ****** for (i=1; i <= side; i++) { for (j=1; j<=i; j++) // inner loop prints 1 line of stars cout << "*"; } cout << endl; // end of line is put to the end of each line See drawfigures.cpp for the complete function and its use in main

Same loop: downward-counting for (i=1; i <= side; i++) { for (j=1; j<=i; j++) cout << "*"; } cout << endl; for (i=1; i <= side; i++) { for (j=i; j>=1; j--) cout << "*"; } cout << endl;

Drawfigures – Other Considerations What about having a function to display a line of stars (number of stars is a parameter) useful for both rectangle and triangle void PrintLine (int numstars) // pre: numstars > 0 // post: displays numstars stars in one line { int i; for (i=1; i<= numstars; i++) { cout << "*"; } cout << endl; // end of line is put to the end of the line in rectangle function, inner loop is replaced by a function call for (i=1; i<=height ; i++) PrintLine(width); use of PrintLine in triangle function is similar

Example – Multiplication Table On ith line print, i*1, i*2, i*3, ... , i*i Total number of lines is an input. Display lines starting with 1. See multiply.cpp #include <iostream> #include <iomanip> // for setw using namespace std; int main() { int i,k,numlines; const int WIDTH = 4; cin >> numlines; for (i=1; i <= numlines; i++) for (k=1; k <= i; k++) cout << setw(WIDTH) << i*k; } cout << endl; return 0;

Constants Sometimes very useful provides self documentation re-use the same value across the program avoid accidental value changes like variables, but their value is assigned at declaration and can never change afterwards declared by using const before the type name (any type is OK) const double PI = 3.14159; const string thisclass = "CS201" const int WIDTH = 4; later you can use their value cout << (PI * 4 * 4); but cannot change their value PI = 3.14; causes a syntax error

Formatting Output We use stream manipulator setw to specify the total number of spaces that the next output will use setw(field length) written in cout and affects only the next output value not the whole cout line output is displayed using field length spaces in right justified manner (any empty space is on the left) defined in header file <iomanip>, so you have to have #include <iomanip> Example cout << setw(9) << "cs201"; output shown is four blanks and cs201