## Lecture Goals

• To be able to implement decisions and loops using if and while statements
• To understand statement blocks
• To learn how to compare integers, floating-point numbers, and strings
• To develop strategies for processing input and handling input errors
• To understand the Boolean data type

## The if Statement

• The if statement is used to implement a decision.
• It has two parts: a test and a body. If the test succeeds, the body of the statement is executed.
• Example:
• `if (area < 0)   cout << "Error: Negative area.\n";`
• [Flowchart]
Syntax 4.1: if Statement
`if (condition) statement`
 Example: `if (x >= 0) y = sqrt(x);` Purpose: Execute the statement if the condition is true.
• Multiple statements can be grouped together in a block statement by enclosing them in braces { }:
• `if (area < 0){  cout << "Error: Negative area.\n";   return 1;}`
Syntax 4.2: Block Statement
`{ statement1  statement2  ...  statement}`
 Example: `{ double length = sqrt(area);  cout << area << "\n";}` Purpose: Group several statements into a block that can be controlled by another statement.

## The if/else Statement

• The if/else consists of a condition of two alternatives.
• The first alternative is performed if the condition is true.
• The second alternative is performed if the condition is false.
`if (area >= 0)   cout << "The side length is " << sqrt(area) << "\n";else   cout << "Error: Negative area.\n";`
• [Flowchart]
• The if/else statement is a better choice than a pair of if statements with complementary conditions.
• `if (area >= 0) /* complementary conditions */   cout << "The side length is " << sqrt(area) << "\n";if (area < 0)  /* complementary conditions */   cout << "Error: Negative area.\n";`
Syntax 4.3: if Statement
`if (condition) statement1 else statement2`
 Example: `if (x >= 0) y = sqrt(x); else cout << "Bad input\n";` Purpose: Execute the first statement if the condition is true, the second statement if the condition is false.

## The selection operator

C++ has a selection operator of the form:

test ? value
1 : value2

The value of this expression is either value1 if the test passes or value2 if it fails.

```   y = x >= 0 ? x : -x;
```
is equivalent to
`   if (x >= 0) y = x;   else y = -x;`

 Expression Statement ` x >= 0 ? x : -x` `if (x >= 0) y = x;else y = -x;` ` y = x` `y = x;` ` -b + sqrt(d)` `-b + sqrt(d);`

## Relational Operators

• C++ has six relational operators to implement conditions:

•  C++ Description Example Notes > greater than a > 5 >= greater than or equal to x >= 5 Be careful to not write => Remember that the symbols appear in the order you say them < less than x < 10 <= less than or equal to x <= 11 Be careful to not write =< Remember that the symbols appear in the order you say them == equal to a == 5 Don't confuse with =  which is assignment != not equal a != 5 The ! is supposed to be the line that "crosses through" the equal sign

## Relational Operators (comparing strings)

• The relational operators listed above can also be used to compare strings using lexicographic comparison (dictionary ordering).
• "Dick"  <  "Tom",  "Main"  <  "main" are true.
• When comparing strings, corresponding letters are compared until one of the strings ends or the first difference is encountered.
• "car" is less than "truck", i.e. the condition "car" < "truck" is true.
•  c a r
 t r u c k
• "car" is less than "cargo", i.e. the condition "car" < "cargo" is true.
•  c a r
 c a r g o
• "cargo" is less than "cathode", i.e. the condition "cargo" < "cathode" is true.
•  c a r g o
 c a t h o d e

## ASCII Table

(American Standard Code for Information Interchange)

0-31 are control codes, for example "/n" (newline) has ASCII code 10.

32:   33:!  34:"  35:#  36:\$  37:%  38:&  39:'  40:(  41:)
42:*  43:+  44:,  45:-  46:.  47:/  48:0  49:1  50:2  51:3
52:4  53:5  54:6  55:7  56:8  57:9  58::  59:;  60:<  61:=
62:>  63:?  64:@  65:A  66:B  67:C  68:D  69:E  70:F  71:G
72:H  73:I  74:J  75:K  76:L  77:M  78:N  79:O  80:P  81:Q
82:R  83:S  84:T  85:U  86:V  87:W  88:X  89:Y  90:Z  91:[
92:\  93:]  94:^  95:_  96:`  97:a  98:b  99:c 100:d 101:e
102:f 103:g 104:h 105:i 106:j 107:k 108:l 109:m 110:n 111:o
112:p 113:q 114:r 115:s 116:t 117:u 118:v 119:w 120:x 121:y
122:z 123:{ 124:| 125:} 126:~ 127:  128:Ђ 129:Ѓ 130:‚ 131:ѓ
132:„ 133:… 134:† 135:‡ 136:€ 137:‰ 138:Љ 139:‹ 140:Њ 141:Ќ
142:Ћ 143:Џ 144:ђ 145:‘ 146:’ 147:“ 148:” 149:• 150:– 151:—
152:� 153:™ 154:љ 155:› 156:њ 157:ќ 158:ћ 159:џ 160:  161:Ў
162:ў 163:Ј 164:¤ 165:Ґ 166:¦ 167:§ 168:Ё 169:© 170:Є 171:«
172:¬ 173:­  174:® 175:Ї 176:° 177:± 178:І 179:і 180:ґ 181:µ
182:¶ 183:· 184:ё 185:№ 186:є 187:» 188:ј 189:Ѕ 190:ѕ 191:ї
192:А 193:Б 194:В 195:Г 196:Д 197:Е 198:Ж 199:З 200:И 201:Й
202:К 203:Л 204:М 205:Н 206:О 207:П 208:Р 209:С 210:Т 211:У
212:Ф 213:Х 214:Ц 215:Ч 216:Ш 217:Щ 218:Ъ 219:Ы 220:Ь 221:Э
222:Ю 223:Я 224:а 225:б 226:в 227:г 228:д 229:е 230:ж 231:з
232:и 233:й 234:к 235:л 236:м 237:н 238:о 239:п 240:р 241:с
242:т 243:у 244:ф 245:х 246:ц 247:ч 248:ш 249:щ 250:ъ 251:ы

252:ь 253:э 254:ю 255:

This is Windows-1251 encoding table.

## Input Validation

• Input validation is an application of the if statement that verifies the user has given reasonable input.
• Example:
`double area;cin >> area;`
• The user types "five" and hits return! Causing cin to fail, variable area is not set.
• After every input a good program will test the state of cin object (invoking fail() member-function of istream class):
• `if (cin.fail()) ...`
• The actual input should also be validated, even if the type is correct.
• `if (area < 0) ...`

## Input Validation (area3.cpp)

• Other strategies
• A stream variable can be the condition of an if statement:
`if (cin)   /* the stream did not fail */else   /* the stream failed */`
• The expression cin >> x has a value, namely cin. It follows that we can chain the >> operators:
`cin >> x >> y    /* which means (cin >> x) >> y */`
We can use the stream expression as the condition of an if operator:
`if (cin >> x) ...`
means "read x, and if that didn't make cin fail, then continue".

## Simple Loops

• Recall the investment problem from Chapter 1.
 You put \$10,000 into a bank account that earns 5% interest per year. How many years does it take for the account balance to be double the original?
(int year = 0; double balance = 10000;)

 After Year Balance 0 \$10,000
• Step 2: Repeat steps 2a-2c while balance < \$20,000
(balance < 20000)
• Step 2a. Add a new row to the table
• Step 2b. In column 1 of the new row, put one more than the preceding year's value
(year++;)
• Step 2c. In column 2, place the value of the preceding balance value, multiplied by 1.05
(balance = balance*1.05;)
• Step 3: Report the last number in the year column as the number of years required to double the investment
• A loop is a block of code that can be performed repeatedly.
• A loop is controlled by a condition that is checked each time through the loop. The block of code executes while the condition remains true.
• The while statement makes a check before each execution of the code.
• `/* how long does it take an investment to double? */while (balance < 2 * initial_balance){  balance = balance * ( 1 + rate / 100);   year++;}`
Syntax 4.4: while Statement
`while (condition) statement`
 Example: `while (x >= 10) x = sqrt(x);` Purpose: Execute the statement while the condition remains true.
• [Flowchart]

## Processing a Sequence of Inputs (Sentinels)

• Whenever you read a sequence of input values, you need to have some method of terminating the input.
• A number used to signal termination is called a sentinel.
• Sentinels only work if there is some restriction on the input.
• Common sentinel values are 0 or -1.

## Processing a Sequence of Inputs (Causing the Stream to Fail)

• When reading input from the console, you can close the input stream manually.
• Ctrl + Z in Windows
• Ctrl + D in UNIX
• Reading from a closed stream causes the stream to enter the failed state.

## Using Boolean Variables

• The bool type can hold exactly two values, denoted false and true.
• Boolean variables are named after George Boole (1815-1864), a pioneer in the study of logic.
• Example:
• `bool more = true;while (more){  cin >> next;   if (cin.fail()) more = false;   else   {       // process next   }}`
`while(more == false) /* don't */while(more != true)  /* don't */`
`while(more)`