Programs use selection statements to choose among alternative courses of action. For example, suppose the passing grade on an exam is 60. The pseudocode statement
If student's grade is greater than or equal to 60 Print "Passed"
determines whether the condition "student's grade is greater than or equal to 60" is true or false. If the condition is true, then "Passed" is printed and the next pseudocode statement in order is "performed" (remember that pseudocode is not a real programming language). If the condition is false, the print statement is ignored and the next pseudocode statement in order is performed. Note that the second line of this selection statement is indented. Such indentation is optional, but it is recommended because it emphasizes the inherent structure of structured programs. When you convert your pseudocode into C++ code, the C++ compiler ignores white-space characters (like blanks, tabs and newlines) used for indentation and vertical spacing.
Good Programming Practice 4.1
Consistently applying reasonable indentation conventions throughout your programs greatly improves program readability. We suggest three blanks per indent. Some people prefer using tabs but these can vary across editors, causing a program written on one editor to align differently when used with another.
The preceding pseudocode If statement can be written in C++ as
if ( grade >= 60 ) cout << "Passed";
Notice that the C++ code corresponds closely to the pseudocode. This is one of the properties of pseudocode that makes it such a useful program development tool.
Figure 4.4 illustrates the single-selection if statement. It contains what is perhaps the most important symbol in an activity diagramthe diamond or decision symbol, which indicates that a decision is to be made. A decision symbol indicates that the workflow will continue along a path determined by the symbol's associated guard conditions, which can be true or false. Each transition arrow emerging from a decision symbol has a guard condition (specified in square brackets above or next to the transition arrow). If a particular guard condition is true, the workflow enters the action state to which that transition arrow points. In Fig. 4.4, if the grade is greater than or equal to 60, the program prints "Passed" to the screen, then transitions to the final state of this activity. If the grade is less than 60, the program immediately transitions to the final state without displaying a message.
Figure 4.4. if single-selection statement activity diagram.
We learned in Chapter 1 that decisions can be based on conditions containing relational or equality operators. Actually, in C++, a decision can be based on any expressionif the expression evaluates to zero, it is treated as false; if the expression evaluates to nonzero, it is treated as true. C++ provides the data type bool for variables that can hold only the values true and falseeach of these is a C++ keyword.
Portability Tip 4.1
For compatibility with earlier versions of C, which used integers for Boolean values, the bool value true also can be represented by any nonzero value (compilers typically use 1) and the bool value false also can be represented as the value zero.
Note that the if statement is a single-entry/single-exit statement. We will see that the activity diagrams for the remaining control statements also contain initial states, transition arrows, action states that indicate actions to perform, decision symbols (with associated guard conditions) that indicate decisions to be made and final states. This is consistent with the action/decision model of programming we have been emphasizing.
We can envision seven bins, each containing only empty UML activity diagrams of one of the seven types of control statements. The programmer's task, then, is assembling a program from the activity diagrams of as many of each type of control statement as the algorithm demands, combining the activity diagrams in only two possible ways (stacking or nesting), then filling in the action states and decisions with action expressions and guard conditions in a manner appropriate to form a structured implementation for the algorithm. We will discuss the variety of ways in which actions and decisions may be written.