Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 –...
Transcript of Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 –...
![Page 1: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/1.jpg)
Informatik I für D-MAVT (FS 2013)
Exercise 4 – Logical Operators &
Branching
Christian Schumacher
![Page 2: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/2.jpg)
Agenda
2
Branching
relational operators
logical expressions: and, or, not
if, else if, else
switch
“? : “ operator
Arrays
introduction
argc and argv[] in main()
![Page 3: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/3.jpg)
Relational operators
Used to compare two values
The whole term is called an expression (Ausdruck)
The result of the comparison is either TRUE (1) or FALSE (0)
Relational operators are evaluated after other arithmetic
operations
e.g., (1+2 < 1+3) is TRUE.
3
int a=3, b=5;
bool res;
res = a < b; //less
res = a <= b; //less or equal
res = a > b; //greater
res = a >= b; //greater or equal
res = a == b; //equal
res = a != b; //not equal
![Page 4: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/4.jpg)
Difference between „=“ and „==“
= is the assignment operator
Changes the value of the variable on the left to the value on the right
The result (meaning the value of the expression) is equal to the
assignment value
== is the equality operator
Evaluates whether the 2 values on the left and the right are equal
The result can be either TRUE or FALSE
Example:
4
int a=3, b=5;
bool res;
res = (a == b); //“res“ is FALSE, because 3!=5
res = (a = b); //“res“ is TRUE, even though 3!=5.
//Also, a is set to 5!
![Page 5: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/5.jpg)
Boolean Algebra: AND, OR, NOT
x AND y is TRUE if and only if both x and y are
TRUE.
x OR y is FALSE if and only if both x and y are
FALSE.
(x OR y is TRUE if either x, y or both are TRUE.)
NOT x is TRUE if x is FALSE, and vice versa.
5
AND 0 1
0 0 0
1 0 1
OR 0 1
0 0 1
1 1 1
NOT
0 1
1 0
![Page 6: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/6.jpg)
Logical Operators in C++: &&, ||, !
Works on Boolean values (bool type)
6
bool a = true;
bool b = false;
logical AND a && b == false
a && a == true
logical OR a || b == true
b || b == false
logical NOT !a == false
!b == true
![Page 7: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/7.jpg)
„if“ statement
If condition is TRUE, the instruction(s) inside the
code block { } are executed.
Otherwise, if condition is FALSE, the block is
jumped over.
7
if (condition) { DoSomething();
}
if (a==5) { cout << "a is equal to 5!\n“;
}
![Page 8: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/8.jpg)
„else if“ statement
The „else if“-condition is only checked if the
preceding condition(s) are FALSE. It states an
alternative which is evaluated when the other
conditions are not met.
Otherwise, it behaves the same as an „if“ statement.
Many „if – else if – else if – else if...“ statements can
be chained to form a complex program flow.
8
if(firstCondition) { DoSomething(); } else if(secondCondition) { DoSomethingElse(); }
if(a==5) { cout << "a is equal to 5!\n"; } else if(a==10) { cout << "a is equal to 10!\n"; }
![Page 9: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/9.jpg)
„else“ statement
The „else“ code block is executed if all other conditions are
FALSE.
Remember:
The program runs from top to bottom, line after line.
After one if/else if/else block { } is executed, the program jumps to
the bottom of the whole „if – else if – else“ statement.
9
if(firstCondition) { DoSomething(); } else if(secondCondition) { DoSomethingElse(); } else { IfEverythingElseFails(); }
![Page 10: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/10.jpg)
switch statement
Switch statement replaces long chains of „if – else if – ...“ with
equality comparisons
Program jumps to the case corresponding to value of the
variable
The program jumps to default if the variable doesn‘t match
any cases
The default case is optional 10
switch (variable) {
case 0:
cout<<”variable is 0!\n";
break;
case 7:
cout<<”variable is 7!\n";
break;
default:
cout<<”variable is ???\n";
}
![Page 11: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/11.jpg)
switch statement 2
In contrary to if/else if statements, the program does not jump to the
bottom after a case has been handled. This is why we need the
„break;“ command after every case that we want to treat individually.
Without break, everything that follows in the same „switch“ statement
is executed until we reach another break.
We don‘t need a break for the default case because it is placed at the
bottom anyway.
11
switch (variable) {
case 1:
case 3: //var. is either 1 or 3
DoSomething();
break;
default:
DefaultCase();
}
![Page 12: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/12.jpg)
Comparison: if/else and switch
12
if (x == 1) {
cout << “x is 1” << endl;
}
else if (x == 2) {
cout << “x is 2” << endl;
}
else {
cout << “x is something else”
<< endl;
}
switch (x) {
case 1:
cout << “x is 1” << endl;
break;
case 2:
cout << “x is 2” << endl;
break;
default:
cout << “x is something else”
<< endl;
}
if/else statement switch statement
![Page 13: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/13.jpg)
„? : “ operator
The „? : “ operator returns the first value if the
condition is TRUE, and the second value if the
condition is FALSE.
It can be used with any types of values.
13
value = condition ? valTrue : valFalse;
int bearDmg = isStrong ? 100 : 45;
string name = firstName ? "Hansulrich" : "Hubschmid";
any type (int, float, …) type bool same type as “value”
![Page 14: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/14.jpg)
Introduction to arrays
This topic will be covered in more detail the next
week!
This week: Explanation for the „argv“ variable used
in the main() function.
14
![Page 15: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/15.jpg)
Introduction to arrays 2
An array is a variable that holds many values of the same type
Number of elements defined in square brackets [ ]
The individual elements can be accessed using square
brackets [ ]:
15
float vectorA[3];
vectorA[0] = 3.1f; float f = vectorA[1];
Arrays are zero-based: Their indices go from 0 to size-1!
First element of vectorA is vectorA[0]
Last element of vectorA is vectorA[2]
![Page 16: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/16.jpg)
argc and argv in main()
argc: argument count
argv: argument vector
argv is an array of „char *“ (C strings, meaning „text“), as
indicated by the brackets [ ]
Each element of argv (argv[0], argv[1], ..., argv[argc-1]) holds
one program argument in text form
Often converted using atof() or similar functions (see ex. 2)
More on C strings next week!
16
int main(int argc, char *argv[]) { //... }
![Page 17: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/17.jpg)
argc and argv in main() 2
When running a program from the terminal, arguments can be
passed to it like shown in the example command above.
In Eclipse, use Run -> Run Configurations -> Arguments
argv[0] (first element) always contains the program path and
name and has no further meaning.
17
./MyProgram 47 11 Cologne
index argv
0 ./MyProgram
1 47
2 11
3 Cologne
argc = 4;
![Page 18: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/18.jpg)
On the „char“ variable type
A char variable usually uses 1 Byte of memory
Only 256 different values (i.e., characters) can be stored
Char variables are stored as numbers internally.
Implications:
Chars can be cast to and from other numeric data types
(such as ints or floats)
Integer operations and comparisons (+, -, <, >, etc.) can
be used with chars
char a = 'a', b = 'b';
bool res = a < b; //TRUE
![Page 19: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/19.jpg)
On the „char“ variable type
Value of a char variable represents a character
Corresponding character given by ASCII table
Easily found with Google
Use ' ' to assign characters
char a = 'G'; is identical to char a = 71;
… … …
![Page 20: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/20.jpg)
Exercise hints
Task 1: Keep operator priority in mind
&& evaluated before ||
Task 1/5: Take a look at an ASCII table
Characters 'a' to 'z' and 'A' to 'Z' form two
separate intervals within the ASCII values
20
![Page 21: Exercise 4 Logical Operators & Branching - CGL @ …chschuma/info1_13/exercise4...Exercise 4 – Logical Operators & Branching Christian Schumacher chschuma@inf.ethz.ch Agenda 2 Branching](https://reader034.fdocuments.us/reader034/viewer/2022051509/5af0969b7f8b9abc788d5ee9/html5/thumbnails/21.jpg)
Exercise 2 recap
Variable type affects what you read with cin vs.
Decimal places may get lost if you use int
Keep integer division in mind
9/5 is not the same as 9.0/5.0 (in C++)
21
int a;
cin >> a;
float b;
cin >> b;