Chapter 3: Control Flow: if-else, relational operators, boolean operators¶
Background¶
At this point in the course, the programs we have written have a very linear flow. There is a set of instructions we give the program for it to make it from point a to point b, and it does not veer off or go in different directions.
But in many cases, we nee d to control what the program does based on user input, or the state of a variable. We want to control the flow of our program as it runs to give us multiple options for routes it can take.
The if Statement¶
- The 
ifstatement is used to implement a decision in the program. It is made up of a condition and a body.- The condition of an 
ifstatement is made up of an expression that evaluates to TRUE or FALSE. It typically compares values using relational operators. - The body of an 
ifstatement is made up of either one statement or multiple statements. These statements will run ONLY if the condition evaluates to TRUE. 
 - The condition of an 
 
C++ Syntax for if statements¶
if(condition)
    single statement body
if(condition) {
//multiple statements body
}
- If there is more than one statement in the body, you MUST use curly braces.
 
if.cpp
//Program Description: Example program for a simple if statement
#include <iostream>  
using namespace std;  
int main()  
{
    //initialize variables
    int num = 0;
    //prompt user for a value
    cout << "Please enter a number greater than zero:";
    cin >> num;//store user input into variable
    cout << "You entered: " << num << "\n";
    //this if statement will check if the number
    //entered is less than or equal to zero
    //if, and only if, it is true, the body of the if statement will run
    if(num <= 0)
    cout << "You did not listen to my instructions!\n";
    return 0;
}
Relational Operators¶
The condition of if statements typically compares values with one another.
To do this comparison, we use relational operators.
|Operator Name|Operator|Example Expression|
|-|:-:|:-:|
|Equal To|==|a == b|
|Not Equal To|!=|a != b|
|Less Than|<|a < b|
|Greater Than|>|a > b|
|Less Than or Equal To|<=|a <= b|
|Greater Than or Equal To|>=|a >= b|
These operators are used to compare the values between two expressions. The expression demonstrated can be
either TRUE or FALSE.
Example¶
int a = 10, b = 12, c = 5;
|Expression|True or False?|
|-|-|
|a == b|False|
|a+5 > b|True|
|c % 2 == 0|False|
|b+2<=14|True|
The if-else statement¶
- You can also pair an 
ifwith anelse.- If the condition following the 
ifis TRUE, the body of theifwill execute.- If the condition following the 
ifis FALSE, the body of the else will execute. 
 - If the condition following the 
 - Only ONE body will run.
 - C++ Syntax for if-else statements
 
 - If the condition following the 
 
if(condition)
    //single statement body
else
    //single statement body
    ```
```c++
if(condition) {
    //multiple statements body
}
else{
    //multiple statement body
}```
- Note: an `else` does not have a condition associated with it. Its performance is based on  
whether the previous condition(s) evaluates to TRUE or FALSE
###### Example
```mermaid
graph TD;
    A([Start]):::Red-->B;
    B[Take user Input]:::Green-->C;
    C{{Is input greater than 0?}}:::Yellow--No-->D;
    C--Yes-->E;
    E{{Is Input divisible by 2}}:::Yellow--No-->F;
        E--Yes-->G;
    F[Output 'Odd..']:::Green-->H([End]):::Red;
    D[Output 'You did not listen...']:::Green-->H;
    G[Output 'Even..']:::Green-->H;
    classDef Red fill:#d05e56;
    classDef Yellow fill:#d8a027, color:#000;
    classDef Green fill:#448d7a;
    linkStyle default stroke-width:2px,fill:none, stroke:white
if_else.cpp
//Program Description: Example program for a simple if-else statement
#include <iostream>
using namespace std;
int main()
{
    //initialize variables
    int num = 0;
    cout << "Please enter a number greater than zero:";
    cin >> num;
    cout << "You entered: " << num << "\n";
    //this if statement will check if the number
    //entered is less than or equal to zero.
    if(num <= 0)
        cout << "You did not listed to my instructions!\n";
    //this else will only run if the above if evaluates to false
    else{
        //if the number is greater than zero, the following
        //if statement will check if it is divisible by 2
        if(num % 2 == 0) // check if num is even
            cout << num << " is even.\n";
        else
            cout << num << " is odd.\n";
    }
    //regardless of whether the if or the else above runs, the program will always end
    return 0;
}
The if(),else if()...else statement¶
- When writing a program that has more
than 2 possible outcomes, we can use a
sequence of if/else if/else if/else
statements. - When your program encounters an if-else
branch like this, the conditions will be
tested from top to bottom. - As soon as one condition is true, it runs
the statements within that if, and does not
check any other conditions. - If none of the conditions are true, it will
run the body of the else. 
Example¶
if(condition 1){
    //Body
}
else if(condition 2){
    //Body
}
else if(condition 3){
    //Body
}
...
else if(condition n){
    //Body
}
else{
    //Body will run if all else false
}
Example¶
if_else_if.cpp
//Program Description: Example program for a simple if-else statement
//that prints whether a number is negative, zero, or positive
#include <iostream>
using namespace std;
int main()
{
    //initialize variables
    int num = 0;
    //prompt the user for an integer
    cout << "Enter an integer:";
    cin >> num;
    //the program will check the following conditions from top to bottom
    //Once one evaluates to true, it will execute its body and ignore the remaining
    //ones. If none are true, the final else will run
    if (num == 0)
        cout << "You entered zero.\n";
    else if(num > 0)
        cout << "You entered a positive integer.\n";
    else 
        cout << "You entered a negative integer.\n";
    return 0;
}
Boolean/Logical Operators¶
- There may be times in our programs when running certain code is dependent on multiple conditions.
- Sometimes all conditions need to be true.
 - Sometimes only one needs to be true.
 
 - We can use Boolean operators to combine our conditions!
 - Boolean operators combine conditions where the overall expression will result in either TRUE or FALSE.  
&&- AND operator||- OR operator
 
&& - AND Operator: ALL must be TRUE¶
- Combines two or more conditions where the overall result is true if and only if ALL conditions are true.
 - You can combine as many conditions as you want.
 - C++ Syntax for using the AND operator  
- Can user either 
&&orand 
 - Can user either 
 
if(condition 1 && condition 2 &&...)
    ...
if(condition 1 and condition 2 and...)
    ...
}```
###### Logic Table for AND
|A|B|A && B|
|-|-|:-:|
|True|True|True && True = True|
|True|False|True && False = False|
|False|True|False && True = False|
|False|False|False && False = False|
# `||` - OR Operator: Just ONE needs to be TRUE
- Combines two or more conditions where the overall results is TRUE if AT LEAST ONE condition is true.
- You can combine as many conditions as you want.  
- C++ Syntax for using the OR operator  
    - Can user either `||` or `or`
```c++
if(condition 1 || condition 2 ||...)
    ...
if(condition 1 or condition 2 or...)
    ...
}```
###### Logic Table for AND
|A|B|A && B|
|-|-|:-:|
|True|True|True && True = True|
|True|False|True && False = True|
|False|True|False && True = True|
|False|False|False && False = False|
# Representing ranges with Boolean Operators
- You can use a combination of Boolean operators and conditions to make sure a value is within a range.
- Consider the following number line. Where the red arrow show the values that we want to represent. An enclosed box includes the value, and open box excludes the value.
###### Number Line 1:
```mermaid
flowchart LR  
    C[... -4]:::Yes---D
    D[-3]:::Yes---E
    E[-2]:::Yes---F
    F[-1]:::Num---G
    G[0]:::Num---H
    H[1]:::Yes---I
    I[2]:::Yes---J
    J[3]:::Yes---K
    K[4 ...]:::Yes
    classDef Num fill:#fff,color:#000,stroke-width:0px;
    classDef Yes fill:#f00,stroke-width:0px;
    classDef No fill:#0000,stroke-width:2px,stroke:#f00;
    linkStyle 0 stroke-width:37px,fill:none,stroke:red;
    linkStyle 1 stroke-width:37px,fill:none,stroke:red;
    linkStyle 5 stroke-width:37px,fill:none,stroke:red;
    linkStyle 6 stroke-width:37px,fill:none,stroke:red;
    linkStyle 7 stroke-width:37px,fill:none,stroke:red;
    linkStyle default stroke-width:37px,fill:none,stroke:white;
- Condition 1: 
if(x <= -2 || x >= 1) 
Number Line 2:¶
- Condition 2: 
if(x < -2 || x >= 1) 
Number Line 3:¶
- Condition 3: 
if(x > -2 || x <= 1) 
Combination of Boolean Operators¶
You can use any combination of && and || in a condition¶
- The 
&&operator takes precedence over||- 
Examples:¶
if( TRUE || TRUE ) = TRUEif (TRUE || FALSE && TRUE) = FALSEif((TRUE || FALSE) && TRUE) = TRUE
 
 - 
 
Shipping Program Example¶
Write a program that calculates a shipping rate for a company based on the destination and weight of the package.
    - If the package is sent outside the U.S, shipping is $70.00.
    - If the package is sent within the U.S and the weight is more than 10lbs, shipping is $25.00
    - If the package is sent within the U.S and the weight is between 1-10lbs, shipping is $7.50
    - If the package is sent within the U.S and the weight is less than 1 lb, shipping = $2.50.
    - If the package is sent within the U.S to Alaska (AK) or Hawaii (HI), the shipping rate is $40.00, regardless of weight.
/*
* Name: James Wibowo
* File Name: Shipping.cpp
* Program: This program will calculate shipping rates based on destination and weight.
* Date: 09/07/22
*/
#include <iostream>
#include <string>
using namespace std;
int main()
{
    //init
    double packWeig;
    string packDest,packDestState;
    AllDest = 
    //input weight and destination
    cout << "Package Weight?\nLbs: ";
    cin >> packWeig;
    cout << "Package Country Destination? (Enter Two Letter Code): ";
    cin >> packDest;
    if (packDest == "US")
    {
        cout << "Package State Destination? (Enter Two Letter Code): ";
        cin >> packDestState;
        if (packDestState == "AK")
        {
            cout << "\n\nShipping Cost: $40.00";
            return 0
        }
        else if (packDestState == "HI")
        {
            cout << "\n\nShipping Cost: $40.00";
            return 0
        }
        else
        {
            if (packWeig < 1)
            {
                cout << "\n\nShipping Cost: $2.50";
                return 0;
            }
            else if (packWeig <= 10)
            {
                cout << "\n\nShipping Cost: $7.50";
                return 0
            }
            else
            {
                cout << "\n\nShipping Cost: $25.00";
                return 0
            }
        }
    }
    else
    {
        cout << "\n\nShipping Cost: $70.00";
        return 0
    }
    return 0;
}