control-flow statements - github pages · logical expressions • a logical expression is an...

Post on 13-Jul-2020

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introduction to Programming

Control-flow Statements

Sergey Shershakov

#4/22 Jan 2019

Test 3 (5 pts)

2 https://goo.gl/forms/9YFM7kohneZGp3Gk2

TODO

MORE ON STREAMS AND STRINGS

3

Class std::stringstream • Allows one to operate on strings using the general stream approach

• Uses a string buffer that can be read and written

• Thinks of it as StringBuilder in Java and C#

#include <sstream>

std::stringstream ss;

ss << "Abc" << 23; // allows mixing different types together

std::string s = ss.str(); // "Abc23"

std::stringstream ss2;

ss2 << "123";

int n;

ss2 >> n; // acts as cin here

4 http://www.cplusplus.com/reference/sstream/stringstream/

LOGICAL EXPRESSIONS

5

Logical Expressions

• A logical expression is an expression evaluated as the boolean type – contains logical operators;

– types other than boolean are implicitly converted to bool:

• numbers: 0 → false, otherwise true

• pointers: nullptr → false, otherwise true

• …

• Predicates: – (in)equality: ==, !=

– comparison <, <=, >, >=

• Logical Operators: – || is for logical OR

– && is for logical AND

– ! is for logical NOT

6

Do not use modern and, or and not

%:include <iostream> int main(int argc, char *argv<::>) <% if (argc > 1 and argv<:1:> not_eq '\0') <% std::cout << "Hello " << argv<:1:> << '\n'; %> %>

The Comparison Operators: == , != , < , <= , > , >=

bool l1 = (2 == 2);

bool l2 = (2. == 2);

bool l3 = ("2" == 2); //

bool l4 = (2. != 22);

bool l5 = (18 < 42);

bool l6 = ("Abc" < "abc"); //

string s1("Abc"), s2("abc");

bool l7 = s1 < s2; // strings are compared lexicographically

7

Logical Functions (some examples)

bool l10 = isdigit('A');

bool l11 = isdigit('1');

bool l12 = isalpha('A');

bool l13 = isalpha('1');

string s1("Abc");

bool l14 = s1.empty();

8

The Logical Operators: && , || , !

x y x && y

0 0

0 1

1 0

1 1

9

x y x || y

0 0

0 1

1 0

1 1

x !x

0

0

1

1

The Logical Operators: && , || , !

• The Logical OR Operator: ||

4 == 4 || 4 == 11

4 > 3 || 4 > 10

4 > 9 || 4 < 10

4 < 9 || 4 > 2

4 > 9 || 4 < 2

• Combination of operators: x > 3 && x < 5 || y > 10

(x > 5 || y > 3) && z > 10

x != 0 && 1.0 / x > 100.0

10

TODO

• The Logical AND Operator: &&

6 == 6 && 3 == 3

6 == 2 && 3 == 3

6 > 2 && 6 > 10

6 > 8 && 6 < 10

6 < 8 && 6 > 2

6 > 8 && 6 < 2

• The Logical NOT Operator: ! !(x > 6) (x <= 6)

!(x > 5) !x > 5

• De Morgan's law:

Setting Up Ranges with Logical Operators

char ch = …

if(ch < 32) …

if(ch >= '0' && ch <= '9')…

if(ch >= 'A' && ch <= 'Z'

||

ch >= 'a' && ch <= 'z') …

if(!(ch >= '!' && ch <= '/'))

11

BRANCHING Control-flow Statements

12

The if Statement

statement1;

if (test_expr)

statement2;

statement3;

• Example:

int i;

cout << "Input a number: ";

cin >> i;

if(i < 0)

i = -i;

cout << "The module of the number is: " << i << endl;

13

C++ Primer Plus (6th ed.) by Stephen Prata, 2012.

The if..else Statement

14

C++ Primer Plus (6th ed.) by Stephen Prata, 2012.

statement1; if (test_expr) statement2; else statement3; statement4;

• Example:

int i; cout << "Input a number: "; cin >> i; string message; if(i % 2) message = "odd"; else message = "even"; cout << "The number is " << message << endl;

Notes on Using else Clause

Good

if(x1 == x2 || y1 == y2)

{

cout << "YES";

}

else if(abs(x) == abs(y))

{

cout << "YES";

}

else

{

cout << "NO";

}

return 0;

Better!

if(x1 == x2 || y1 == y2)

{

cout << "YES";

return 0;

}

if(abs(x) == abs(y))

{

cout << "YES";

return 0;

}

cout << "NO";

return 0;

15

Try to omit using else clause whenever possible!

Notes on Using else Clause

Bad

if(x > 0)

{

cout << "Lorem ipsum dolor sit"

"amet, consectetur adipiscing"

"elit, sed do eiusmod tempor"

"incididunt ut labore et dolore"

"magna aliqua. Ut enim ad minim"

"veniam, quis nostrud exercitation"

"ullamco laboris nisi ut aliquip"

"ex ea commodo consequat. Duis"

"in culpa qui officia deserunt"

"mollit anim id est laborum.";

else

{

cout << "Hello World";

}

Better!

if(x <= 0) // !(x > 0)

{

cout << "Hello World";

else

{

cout << "Lorem ipsum dolor sit"

"amet, consectetur adipiscing"

"elit, sed do eiusmod tempor"

"incididunt ut labore et dolore"

"magna aliqua. Ut enim ad minim"

"veniam, quis nostrud exercitation"

"ullamco laboris nisi ut aliquip"

"ex ea commodo consequat. Duis"

"in culpa qui officia deserunt"

"mollit anim id est laborum.";

}

16

Use inversion of logic to keep the conditions of both branches close to each other.

The ?: Operator

• Serves as a substitution for if..else statement when the only need is to have a different expression in one place – expression1 ? expression2 : expression3

• Is this valid? —

cout << " 100 / x = " << (x != 0 ? 100 / x : "x can't be 0!");

17

int x; cout << "Input x = "; cin >> x; cout << "Abs(x) is " << (x > 0 ? x : -x);

The if..else if..else Construction

• C++ doesn't have a dedicated elseif clause but it can be implemented by using secondary if..else statement as a statement of else branch of the first if..else statement:

18

if(symb >= '0' && symb <= '9') cout << "Digit\n"; else if(symb >= 'A' && symb <= 'Z') cout << "Capital Latin Letter\n"; else if(symb >= 'a' && symb <= 'z') cout << "Small Latin Letter\n"; else cout << "Something else\n";

The switch Statement • The switch statement acts as a routing

device switching between different conditions.

• Deals only with integral integer labels; – most often, labels are simple char or

int constants, or enumerators;

– the default section (optional) is executed when no other labels don’t match the expression;

• Labels can be disjunctively combined:

cout << "Press Q to quit: ";

cin >> ch;

switch(ch) {

case 'q':

case 'Q':

return;

break;

case …

}

19

unsigned short day; cout << "Input day num (1..7): "; cin >> day; cout << "Day is "; switch(day) { case 1: cout << "Monday"; break; case 2: cout << "Tuesday"; break; // ... case 7: cout << "Sunday"; break; default: cout << "Wrong day number"; }

How to choose between the switch statement and the if.. else if.. else construction

20

unsigned short day; cout << "Input day num (1..7): "; cin >> day; cout << "Day is "; switch(day) { case 1: cout << "Monday"; break; case 2: cout << "Tuesday"; break; // ... case 7: cout << "Sunday"; break; case 8: case 9: case 10: cout << "Additional Day of a Week :)"; break; default: cout << "Wrong day number"; }

if(symb >= '0' && symb <= '9') cout << "Digit\n"; else if(symb >= 'A' && symb <= 'Z') cout << "Capital Latin Letter\n"; else if(symb >= 'a' && symb <= 'z') cout << "Small Latin Letter\n"; else cout << "Something else\n";

LOOPS Control-flow Statements

21

The while Loop

statement1;

while (test_expr)

statement2;

statement3;

22 C++ Primer Plus (6th ed.) by Stephen Prata, 2012.

char cstr[] = "Lorem ipsum dolor sit amet..."; int i = 0; char cur; while( (cur = cstr[i]) != '\0' ) { cout << '\'' << cur << "', "; ++i; }

The for Loop

statement1;

for (init_expr; test_expr; update_expr)

statement2;

statement3;

23 C++ Primer Plus (6th ed.) by Stephen Prata, 2012.

char cstr[] = "Lorem ipsum dolor sit amet..."; for(int j = 0; j < strlen(cstr); ++j) cout << '\'' << cstr[j] << "', ";

The for Loop and the while loop statement1; for (init_expr; test_expr; update_expr) statement2; statement3;

statement1; init_expr; while (test_expr) { statement2; update_expr; } statement3;

24

char cstr[] = "Lorem ipsum dolor..."; for(int j = 0; j < strlen(cstr); ++j) cout << '\'' << cstr[j] << "', "; int i = 0; while(i < strlen(cstr)) { cout << '\'' << cstr[i] << "', "; ++i; }

The break and continue Statements

• continue

while( cin.get(ch) )

{

statement1;

if (ch == '\n')

continue;

statement2;

}

statement3;

continue skips the rest of the loop body and starts a new iteration

• break

while( cin.get(ch) )

{

statement1;

if (ch == '\n')

break;

statement2;

}

statement3;

break skips the rest of the loop and goes to the following statement

25

The Range-Based for Loop

• Iterates over a collection of elements from the first to the last.

• Can modify a collection by using reference type (will get back to this feature later)

26

double koefs[] = {1.12, 2.13, 3.14, 4.15, 5.16}; for (double x : koefs) cout << x << std::endl; for (int x : {1, 1, 2, 3, 5}) cout << x << " ";

The do .. while Loop (with pre-condition)

statement1;

do

{

statement2;

} while (test_expr);

statement3;

27 C++ Primer Plus (6th ed.) by Stephen Prata, 2012.

// must define outside the loop char repeatAnswer; do { // main program // ... cout << "Press 'Y' to repeat, any other key for exit: "; cin >> repeatAnswer; } while (repeatAnswer == 'y' || repeatAnswer == 'Y');

top related