SlideShare a Scribd company logo
Programming Fundamentals - A Modular
Structured Approach using C++
By:
Kenneth Leroy Busbee
Programming
Programming Fundamentals - A Modular
Structured Approach using C++
By:
Kenneth Leroy Busbee
Online:
<http://cnx.org/content/col10621/1.17/ >
C O N N E X I O N S
Rice University, Houston, Texas
©2008 Kenneth Leroy Busbee
This selection and arrangement of content is licensed under the Creative Commons Attribution License:
http://creativecommons.org/licenses/by/2.0/
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Author Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Orientation and Syllabus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1 1. Introduction to Programming
1.1 Systems Development Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 11
1.2 Bloodshed Dev-C++ 5 Compiler/IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3 Modularization and C++ Program Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Practice 1: Introduction to Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 2. Program Planning & Design
2.1 Program Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Pseudocode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3 Test Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4 Practice 2: Program Planning & Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3 3. Data & Operators
3.1 Data Types in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 Identier Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Constants and Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.5 Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 39
3.7 Data Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.8 Practice 3: Data  Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4 4. Often Used Data Types
4.1 Integer Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 47
4.2 Floating-Point Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3 String Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4 Arithmetic Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.5 Lvalue and Rvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 51
4.6 Integer Division and Modulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.7 Practice 4: Often Used Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5 5. Integrated Development Environment
5.1 Integrated Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 59
5.2 Standard Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3 Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4 Practice 5: Integrated Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6 6. Program Control Functions
6.1 Pseudocode Examples for Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.2 Hierarchy or Structure Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.3 Program Control Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.4 Void Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
iv
6.5 Documentation and Making Source Code Readable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.6 Practice 6: Program Control Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7 7. Specic Task Functions
7.1 Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.2 Global vs Local Data Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 90
7.3 Using a Header File for User Dened Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.4 Practice 7: Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8 8. Standard Libraries
8.1 Standard Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.2 Practice 8: Standard Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9 9. Character Data, Sizeof, Typedef, Sequence
9.1 Character Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 103
9.2 Sizeof Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.3 Typedef - An Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.4 Sequence Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.5 Practice 9: Character Data, Sizeof, Typedef, Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
10 10. Introduction to Structured Programming
10.1 Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
10.2 Pseudocode Examples for Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
10.3 Flowcharting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.4 Practice 10: Introduction to Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
11 11. Two Way Selection
11.1 If Then Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
11.2 Boolean Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
11.3 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
11.4 Compound Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
11.5 Practice 11: Two Way Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
12 12. Multiway Selection
12.1 Nested If Then Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
12.2 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
12.3 Case Control Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 148
12.4 Branching Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
12.5 Practice 12: Multiway Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
13 13. Test After Loops
13.1 Do While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
13.2 Flag Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
13.3 Assignment vs Equality within C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
13.4 Repeat Until Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
13.5 Practice 13: Test After Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
14 14. Test Before Loops
v
14.1 Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
14.2 While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
14.3 Practice 14: Test Before Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
15 15. Counting Loops
15.1 For Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 183
15.2 Circular Nature of the Integer Data Type Family . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 187
15.3 Formatting Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 189
15.4 Nested For Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
15.5 Practice 15: Counting Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
16 16. String Class, Unary Positive and Negative
16.1 String Class within C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 199
16.2 Unary Positive and Negative Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
16.3 Practice 16: String Class, Unary Postitive and Negative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
17 17. Conditional Operator and Recursion
17.1 Conditional Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
17.2 Recursion vs Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 208
17.3 Practice 17: Conditional Operator and Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 209
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
18 18. Introduction to Arrays
18.1 Array Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
18.2 Array Index Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
18.3 Displaying Array Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
18.4 Practice 18: Introduction to Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
19 19. File I/O and Array Functions
19.1 File Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
19.2 Arrays and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
19.3 Loading an Array from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
19.4 Math Statistics with Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
19.5 Practice 19: File I/O and Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
20 20. More Array Functions
20.1 Finding a Specic Member of an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 229
20.2 Sorting an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.3 Practice 20: More Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
21 21. More on Typedef
21.1 Versatile Code with Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
21.2 Practice 21: More on Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
22 22. Pointers
22.1 Address Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
22.2 Parameter Passing by Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 240
22.3 Pointer Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
vi
22.4 Indirection Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
22.5 Practice 22: Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
23 23. More Arrays  Compiler Directives
23.1 Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
23.2 Conditional Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
23.3 Practice 23: More Arrays  Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
24 24. OOP  HPC
24.1 Object Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
24.2 Understanding High Performance Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 254
24.3 Practice 24: OOP  HPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 260
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
25 Review Materials
25.1 Review: Foundation Topics Group: 1-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
25.2 Review: Modular Programming Group: 6-9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
25.3 Review: Structured Programming Group: 10-16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
25.4 Review: Intermediate Topics Group: 17-21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
25.5 Review: Advanced Topics Group: 22-24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ??
26 Appendix
26.1 Abbreviated Precedence Chart for C++ Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
26.2 C++ Reserved Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
26.3 ASCII Character Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
26.4 Show Hide File Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
26.5 Academic or Scholastic Dishonesty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
26.6 Successful Learning Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
26.7 Study Habits that Build the Brain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ??
Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Attributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291
Preface1
About this Textbook/Collection
Programming Fundamentals  A Modular Structured Approach using C++
Programming Fundamentals - A Modular Structured Approach using C++ is written by Kenneth Leroy
Busbee, a faculty member at Houston Community College in Houston, Texas. The materials used in this
textbook/collection were developed by the author and others as independent modules for publication within
the Connexions environment. Programming fundamentals are often divided into three college courses: Mod-
ular/Structured, Object Oriented and Data Structures. This textbook/collection covers the rst of those
three courses.
Connexions Learning Modules
The learning modules of this textbook/collection were written as standalone modules. Students using a
collection of modules as a textbook will usually view it contents by reading the modules sequentially as
presented by the author of the collection.
However, the majority of readers of these modules will nd them as a result of an Internet search. The
Connexions Project allows the author of a module to create web links to other Connexions modules and
Internet locations. These links are shown when viewing materials on-line and are categorized into three
types: Example, Prerequisite and Supplemental. The importance of each link is numbered from 1 to 3 by
the author. When viewing the module each links shows a three part box with yellow or white rectangles.
All three yellow means it is a strongly related link. As the yellow decreases the importance decreases.
Students using this collection for a college course should note that all of the Prerequisite links within
the modules will be modules that student should have already read and most of the Supplemental links
will be modules that the student will read shortly. Thus, students should use Prerequisite links for review
as needed and not be overly concerned about viewing all of the Supplemental links at the rst reading of
this textbook/collection.
Conceptual Approach
The learning modules of this textbook/collection were, for the most part, written without consideration of
a specic programming language. In many cases the C++ language is discussed as part of the explanation
of the concept. Often the examples used for C++ are exactly the same for the Java programming language.
However, some modules were written specically for the C++ programming language. This could not be
avoided as the C++ language is used in conjunction with this textbook/collection by the author in teaching
college courses.
1This content is available online at http://cnx.org/content/m19049/1.14/.
1
2
Bloodshed Dev-C++ 5 Compiler/IDE
This open source compiler/IDE (Integrated Development Environment) was used to develop the demon-
stration source code les provided within the modules of this textbook/collection. The compiler/IDE is
presented to the student in the second module of Chapter 1, with instructions for downloading, installing
and using the compiler/IDE. A more complete explanation of the IDE along with demonstration source code
listings with errors is presented in rst module of Chapter 5. All of the source code les provided in this
textbook/collection contain only ANSI standard C++ code and should work on any standard C++ compiler
like Microsoft Visual Studio (which includes C++), Microsoft Visual C++ Express or Borland C++ Builder.
About Connexions
Connexions Modular Content
The Connexions Project http://cnx.org
2 is part of the Open Educational Resources (OER) movement
dedicated to providing high quality learning materials free online, free in printable PDF format, and at
low cost in bound volumes through print-on-demand publishing. This textbook is one of many collections
available to Connexions users. Each collection is composed of a number of re-usable learning modules
written in the Connexions XML markup language. Each module may also be re-used (or 're-purposed') as
part of other collections and may be used outside of Connexions.
Re-use and Customization
The Creative Commons (CC) Attribution license
3 applies to all Connexions modules. Under this license,
any Connexions module may be used or modied for any purpose as long as proper attribution to the
original author(s) is maintained. Connexions' authoring tools make re-use (or re-purposing) easy. There-
fore, instructors anywhere are permitted to create customized versions of this textbook by editing modules,
deleting unneeded modules, and adding their own supplementary modules. Connexions' authoring tools
keep track of these changes and maintain the CC license's required attribution to the original authors. This
process creates a new collection that can be viewed online, downloaded as a single PDF le, or ordered in
any quantity by instructors and students as a low-cost printed textbook.
Read the book online, print the PDF, or buy a copy of the book.
To browse this textbook online, visit the collection home page. You will then have three options.
1. You may view the collection modules on-line by clicking on the Start  link, which takes you to
the rst module in the collection. You can then navigate to the next module using NEXT  and
through the subsequent modules by using the  PREVIOUS | NEXT  button that is towards
the upper right to move forward and backward in the collection. You can jump to any module in the
collection by clicking on that module's title in the TABLE OF CONTENTS box on the left side of
the window. If these contents are hidden, make them visible by clicking on the small triangle to the
right of the TABLE OF CONTENTS. Chapters also have a small triangle to show or hide contents.
2. You may obtain a PDF of the entire textbook to print or view oine by clicking on the Download
PDF link in the Content Actions box.
3. You may order a bound copy of the collection (for a reasonable printing and shipping fee) by clicking
on the Order printed copy button.
2http://cnx.org/
3http://creativecommons.org/licenses/by/2.0/
3
Connexions PDF Conversion Problems
Buying a copy of the textbook/collection is basically sending the PDF le to a printing service that has
a contract with the Connexions project. There are several known printing problems and the Connexions
Project is aware of them and seeking a solution. In the mean time, be aware that quirks exist for printed
PDF materials. A description of the known problems are:
1. When it converts an Example the PDF displays the rst line of an example properly but indents
the remaining lines of the example. This problem occurs for the printing of a book (because it prints
a PDF) and downloading either a module or a textbook/collection as a PDF.
2. Chapter numbering has been added to the on-line Table of Contents. This will make it easier for
students to quickly get to the chapter reading materials. However this creates a double chapter
numbering within the textbook/collection's PDF and custom printing formats.
3. Within C++ there are three operators that do not convert properly to PDF format.
decrement  which is two minus signs
insertion which is two less than signs
extraction which is two greater than signs
Table 1
4
Author Acknowledgements4
I wish to acknowledge the many people who have helped me and have encouraged me in this project.
1. Mr. Abass Alamnehe, who is a fellow faculty member at Houston Community College. He has encour-
aged the use of Connexions as an open source publishing concept. His comments on several modules
have led directly to the improvement of the materials in this textbook/collection.
2. The hundreds (most likely a thousand plus) students that I have taken programming courses that I
have taught since 1984. The languages include: COBOL, main frame IBM assembly, Intel assembly,
Pascal, C and C++. They have often suggested that I write my own book because they thought
that I was explaining the subject matter better than the author of the textbook that we were using.
Little did my students understand that directly or indirectly they aided in the improvement of the
materials from which I taught as well as improving me as a teacher.
3. To my future students and all those that will use this textbook/collection. They will provide suggestions
for improvement as well as being the thousand eyes identifying the hard to nd typos, etc.
4. My wife, Carol, who supports me in all that I do. She has tolerated the many hours that I have spent
in concentration on developing the modules that comprise this work. Without her support, this work
would not have happened.
4This content is available online at http://cnx.org/content/m19055/1.4/.
5
6
Orientation and Syllabus5
Orientation
Textbook/Collection Layout
The approach of this course will be to take the student through a progression of materials that will allow
the student to develop the skills of programming. The basic unit of study is a Connexions module. Several
modules are collected into a chapter. The chapters are divided into ve groups.
Group Title Chapters Modules
Pre-Chapter Items N/A 3
Foundation Topics 1-5 27
Modular Programming 6-9 17
Structured Programming 10-16 30
Intermediate Topics 17-21 17
Advanced Topics 22-24 11
Review Materials N/A 5
Appendix N/A 7
Total Modules N/A 117
Table 1
Some professors using this textbook/collection might decide to eliminate certain modules or chapters.
Some may eliminate the entire Advanced Topics group. Other professors may choose to add additional study
materials. The advantage of this textbook/collection is that it may be adapted by professors to suit the
needs of their students.
Chapter Layout
Each chapter will usually ow from:
1. One or more Connexions modules built for independent delivery.
2. A Connexions Practice module built specically for this textbook/collection.
As you proceed with the Connexions modules that comprise a chapter, you should:
• Complete any tasks/demos that require downloading items.
5This content is available online at http://cnx.org/content/m19684/1.8/.
7
8
• Do any exercises.
• Create 3x5 study cards for all denitions. When this material is used as a textbook for a course the
denitions are to be memorized. Conrm this with your professor.
As you start the Practice module you will usually encounter:
• Learning Objectives
• Memory Building Activities aka MBAs Link  These could consist of any of the following types of
interactive computer activities: ash card, crossword puzzle, seek a word, drag n drop, labeling,
ordering or sorting. When the materials are used as a textbook for a course, it is imperative that
students do a variety of repetitive activities in order to memorize basic course material. Besides, have
fun learning.
• Exercises  In addition to any exercises within the study modules that you completed before the
practice module, there will be at least one exercise for students to complete.
• Miscellaneous Items  These will exist for some of the chapters.
• Lab Assignment  Usually, completed on one's own eorts. Review the instructions/restrictions from
your professor/teacher if using this for a high school or college credit course.
• Problems  The intent of this activity is for students to formulate their own answers. Thus, solutions
to the problems will not be provided. When the materials are used as a textbook for a course, the
professor/teacher may assign students to a Study Group or let students form study groups to discuss
their solutions with each other. If you are using this for a high school or college credit course, verify that
you may work as team at solving the problems. This type of approved activity is called authorized
collusion and is not a violation of Academic or Scholastic Dishonesty rules.
A professor using this textbook/collection/course will most likely have additional lab assignments, quizzes
and exams that would be used in calculating your grade.
Connexions Module Reading List
The modules in this textbook/collection have had content reviewed and are believed to be sucient, thus no
additional textbook is required. However, some students desire additional references or reading. The
author has used several textbooks over the years for teaching COSC1436  Programming Fundamentals I
course at Houston Community College. A reading reference list has been prepared and includes references
for the following textbooks:
1. Starting Out with C++ Early Objects, by: Tony Gaddis et. al., 6
th Edition, ISBN: 0-321-51238-3
2. Starting Out with C++ Early Objects, by: Tony Gaddis et. al., 5
th Edition, ISBN: 0-321-38348-6
3. Computer Science  A structured Approach using C++, by: Behrouz A. Forouzan et. al., 2
nd Edition,
ISBN: 0-534-37480-8
These textbooks are typically available in the used textbook market at a reasonable price. You may use
any one of the three books. If you acquire one of the above optional traditional textbooks, you may want
to download and store the following le to your storage device (disk drive or ash drive) in an appropriate
folder.
Download from Connexions: Connexions_Module_Reading_List_col10621.pdf
6
Syllabus
The syllabus for a course that is for credit will be provided by your specic course professor. If you are using
this textbook/collection for non-credit as self-study, we have some suggestions:
6See the le at http://cnx.org/content/m19684/latest/Connexions_Module_Reading_List_col10621.pdf
9
1. Plan regular study periods
2. Review the three (3) Pre-Chapter Items modules
3. Review the last four (4) modules in the Appendix
4. Proceed with Chapter 1 going through all 24 chapters
5. Do all of the demo programs as you encounter them
6. Memorize all of the terms and denitions
7. Do all lab assignments
8. Prepare answers to all of the problems in the Practice modules
9. At the end of every section, do the Review module
These is no magic way to learn about computer programming other than to immerse yourself into regular
study and study includes more than casual reading. To help you keep track of your study, we have
included a check o list for the textbook/collection.
Check Description # Modules
Pre-Chapter Items 3
Last four Appendix Items 4
Chapters 1 to 5 27
Review Materials for 1 to 5 1
Chapters 6 to 9 17
Review Materials for 6 to 9 1
Chapters 10 to 16 30
Review Materials for 10 to 16 1
Chapters 17 to 21 17
Review Materials for 17 to 21 1
Chapters 22 to 24 11
Review Materials for 22 to 24 1
First three Appendix Items 3
N/A Total Modules 117
Table 2
10
Chapter 1
1. Introduction to Programming
1.1 Systems Development Life Cycle1
1.1.1 Discussion
The Systems Development Life Cycle is the big picture of creating an information system that handles
a major task (referred to as an application). The applications usually consist of many programs. An
example would be the Department of Defense supply system, the customer system used at your local bank,
the repair parts inventory system used by car dealerships. There are thousands of applications that use an
information system created just to help solve a business problem.
Another example of an information system would be the 101 Computer Games software you might buy
at any of several retail stores. This is an entertainment application, that is we are applying the computer
to do a task (entertain you). The software actually consists of many dierent programs (checkers, chess, tic
tac toe, etc.) that were most likely written by several dierent programmers.
Computer professionals that are in charge of creating applications often have the job title of System
Analyst. The major steps in creating an application include the following and start at Planning step.
1This content is available online at http://cnx.org/content/m18684/1.5/.
11
12 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
Figure 1.1: Systems Development Life Cycle
During the Design phase the System Analyst will document the inputs, processing and outputs of each
program within the application. During the Implementation phase programmers would be assigned to
write the specic programs using a programming language decided by the System Analyst. Once the system
of programs is tested the new application is installed for people to use. As time goes by, things change and a
specic part or program might need repair. During the Maintenance phase, it goes through a mini planning,
analysis, design and implementation. The programs that need modication are identied and programmers
change or repair those programs. After several years of use, the system usually becomes obsolete. At this
point a major revision of the application is done. Thus the cycle repeats itself.
1.1.2 Denitions
Denition 1.1: system analyst
Computer professional in charge of creating applications.
Denition 1.2: applications
An information system or collection of programs that handles a major task.
Denition 1.3: life cycle
Systems Development Life Cycle: Planning - Analysis - Design - Implementation - Maintenance
13
Denition 1.4: implementation
The phase of a Systems Development Life Cycle where the programmers would be assigned to write
specic programs.
1.2 Bloodshed Dev-C++ 5 Compiler/IDE2
1.2.1 Introduction
Microsoft and Borland are the two reputable names within the programming world for compilers. They sell
compiler software for many programming languages. For the C++ programming language, the Microsoft
Visual Studio which includes C++ and Borland C++ Builder are excellent compilers. Often with textbooks
or free via the internet; you can get Microsoft's Visual C++ Express or Borland's Personal Edition version
of a compiler. However, installing either of these compliers can be complex. Microsoft's Visual Studio
compiler often creates a variety of installation problems (such as making sure the operating system and .net
components are current) thus making it dicult for students to install at home. These compliers require
you to build a project to encompass every program. Using a commercially sold compiler that professional
programmers would consider using for project development is ne for professionals but often confusing to
beginners. Eventually, if you are going to become a professional programmer, you will need to become
familiar with the commercially sold compilers.
We suggest that beginning students consider one of the easier to install compiler software packages for use
in a programming fundamentals course. The best option we have found is an open source compiler/IDE
(Integrated Development Environment) named: Bloodshed Dev-C++ 5 compiler/IDE.
Denition 1.5: open source
Group development of source code for software that is made available to the public at no cost.
1.2.2 Bloodshed Dev-C++ 5 compiler/IDE
Advantages: Can be installed on Windows 95/98/NT/2000/XP operating systems. I have it installed on
Windows Vista operating system, thus it can work with slower processors and almost any Windows operating
system. It only requires about 80 MB of storage space (usually enough for the compiler with all of its les
and storage room for several of your programs). It is very easy to install and easy to use. Does not require
the use of a project; thus individual source code les can be easily compiled.
Disadvantages: Would not normally be used by professional programmers, but is sucient for a beginning
computer programming course and is a full-featured compiler/IDE.
Unique Advantage: Can be installed and run on a ash drive, thus giving the student the ability to
work on their lab assignments on any computer that has a USB port. This can give the student portability,
being able to do lab assignments at home, work, library, open lab, classroom, friend's house, etc.
Denition 1.6: portability
The ability to transport software on a ash drive and thus use it on various machines.
1.2.3 Preparation before Installation
1.2.3.1 Creating the Needed Folders and Sub-Folders
You need to get the software and a C++ source code program that has been tested and is error free.
You will need about 80MB of storage space. We suggest that you create two folders on your hard drive or
ash drive depending on which installation you choose. If on a ash drive create them at the root level of
the drive. If on your home machine, you can use the folder area set up by the operating system for you as a
user. Name them:
2This content is available online at http://cnx.org/content/m18785/1.14/.
14 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
• Cpp_Software_Download
• Cpp_Source_Code_Files
Within the Cpp_Source_Code_Files folder, create a sub-folder named:
• Compiler_Test
To help you keep les organized, you will want to create other sub-folders for storing source code les. We
suggest you create at least two other sub-folder to be used with Connexions' related modules. Within the
Cpp_Source_Code_Files, create sub-folders named:
• Demo_Programs
• Monitor_Header
Denition 1.7: folder
A named area for storage of documents or other les on a disk drive or ash drive.
Denition 1.8: source code
Any collection of statements or declarations written in some human-readable computer program-
ming language.
1.2.3.2 Getting the Software
The full version of the software is named: Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC
3.4.2 You can either download it from Bloodshed or download the version as of 12/8/2008 that is stored
on the Connexions web site. Store it in the Cpp_Software_Download folder you created. The software is
approximately 9.1 MB and will take several minutes to download if you are using a dial-up modem connection.
tip: The software has not signicantly changed since 2007 and the Connexions version will be
sucient for most users. The Bloodshed link requires some additional navigation to get to the
software download. Thus, because it is signicantly easier, we recommend that you download the
software from the Connections web site.
Link to Bloodshed: http://www.bloodshed.net/dev/devcpp.html
3
Download from Connexions: devcpp-4.9.9.2_setup.exe
4
1.2.3.3 Getting a C++ Source Code File
Listed below is a C++ source code le titled: Compiler_Test.cpp It has been prepared for Connexions web
delivery. Download and store it in the Compiler_Test sub-folder you created. You may need to right click
on the link and select Save Target As in order to download the le.
Download from Connexions: Compiler_Test.cpp
5
1.2.4 Installation Instructions for Bloodshed Dev-C++ 5 compiler/IDE
The Version 5 which is well tested (don't let the beta release scare you) and should work on a variety of
machines and various Microsoft Operating systems including Windows 98, Windows 2000, Windows XP and
Windows Vista. Below are installation instructions for installing it on a machine or installing it on a ash
drive. We don't suggest trying to switch between the machine drive and ash drive. If it is installed on
the machine drive and you try installing it on a ash drive, it creates problems and will not work perperly.
Either install it on the ash drive to gain your portability or install it on your machine.
3http://www.bloodshed.net/dev/devcpp.html
4See the le at http://cnx.org/content/m18785/latest/devcpp-4.9.9.2_setup.exe
5See the le at http://cnx.org/content/m18785/latest/Compiler_Test.cpp
15
1.2.4.1 Computer Installation Instructions
1. Navigate to the Cpp_Software_Download folder and run the devcpp-4.9.9.2_setup.exe software
by double cliking on the lename.
2. Use common sense and answer the installation prompts. NOTE THE FOLLOWING TWO ITEMS:
3. When it gets to the Choose Install Location use the default software location of: C:Dev-Cpp (or
select the location you want to store the installed program but use the default unless you are familiar
with installing software).
4. When it asks: Do you want to install Dev C++ for all users on this computer? answer Yes.
5. After it installs, it will ask some rst time conguration questions. Again, use common sense and
answer the questions. NOTE THE FOLLOWING ITEM:
6. Answer No to the retrieve information from header les.
7. It will start your compiler/IDE with a Tip of the day. We suggest you check the box in the lower
left and select Close.
8. Close your compiler/IDE by using the normal red X box. We want to show you how to start your
compiller normally.
9. You start your compiler software similar to starting any software loaded on your machine (Start then
All Programs then Bloodshed Dev-C++ then Dev-C++).
10. On the menus at the top  Select File then Open project or le then navigate to where your source
code le (Compiler_Test.cpp) is stored on your hard drive. See the suggested folder name above.
Select the source code le and open it.
11. You should see the source code listing. Press F9 key or select the Execute then Compile  Run
from the menus at the top. A black screen box should appear and you answer questions appropriately
to run the program. When you are done running your program the black screen box goes away.
1.2.4.2 Flash Drive Installation Instructions
1. Navigate to the Cpp_Software_Download folder and run the devcpp-4.9.9.2_setup.exe software
by double cliking on the lename.
2. Use common sense and answer the installation prompts. NOTE THE FOLLOWING TWO ITEMS:
3. When it gets to the Choose Install Location you can see that the default software location of:
C:Dev-Cpp however, it needs to be changed. Change the Destination Directory by selecting
changing the default software location from: C:Dev-Cpp to DriveLetter:Dev-Cpp (where the
DriveLetter is the drive that represents your ash drive).
4. When it asks: Do you want to install Dev C++ for all users on this computer? answer No.
5. After it installs, it will ask some rst time conguration questions. Again, use common sense and
answer the questions. NOTE THE FOLLOWING ITEM:
6. Answer No to the retrieve information from header les.
7. It will start your compiler/IDE with a Tip of the day. We suggest you check the box in the lower
left and select Close.
8. Close your compiler/IDE by using the normal red X box. We want to show you how to start your
compiller normally.
9. To start your compiler software you navigate to the Dev-Cpp folder on your ash drive and select the
devcpp.exe application. NOTE: When using the ash drive you should not try starting the compiler
by double clicking on a C++ source code le. This method works on a machine installation but does
not work on a ash drive installation.
10. On the menus at the top  Select File then Open project or le then navigate to where your source
code le (Compiler_Test.cpp) is stored on your ash drive. See the suggested folder name above.
Select the source code le and open it.
11. You should see the source code listing. Press F9 key or select the Execute then Compile  Run
from the menus at the top. A black screen box should appear and you answer questions appropriately
to run the program. When you are done running your program the black screen box goes away.
16 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
1.3 Modularization and C++ Program Layout6
1.3.1 Concept of Modularization
One of the most important concepts of programming is the ability to group some lines of code into a unit
that can be included in our program. The original wording for this was a sub-program. Other names include:
macro, sub-routine, procedure, module and function. We are going to use the term function for that is
what they are called in the two predominant programming languages of today: C++ and Java. Functions
are important because they allow us to take large complicated programs and to divide them into smaller
manageable pieces. Because the function is a smaller piece of the overall program, we can concentrate on
what we want it to do and test it to make sure it works properly. Generally functions fall into two categories:
1. Program Control - Functions used to simply sub divide and control the program. These functions are
unique to the program being written. Other programs may use similar functions maybe even functions
with the same name, but the content of the functions are almost always very dierent.
2. Specic Task - Functions designed to be used with several programs. These functions perform a
specic task and thus are useable in many dierent programs because the other programs also need
to do the specic task. Specic task functions are sometimes referred to as building blocks. Because
they are already coded and tested, we can use them with condence to more eciently write a large
program.
The main program must establish the existence of functions used in that program. Depending on the
programming language, there is a formal way to:
1. dene a function (it's denition or the code it will execute)
2. call a function
3. declare a function (a prototype is a declaration to a complier)
Program Control functions normally to do not communicate information to each other but use a common
area for variable storage. Specic Task functions are constructed so that data can be communicated between
the calling program piece (which is usually another function) and the function being called. This ability to
communicate data is what allows us to build a specic task function that may be used in many programs.
The rules for how the data is communicated in and out of a function vary greatly by programming language,
but the concept is the same. The data items passed (or communicated) are called parameters. Thus the
wording: parameter passing. The four data communication options include:
1. no communication in with no communication out
2. some communication in with no communication out
3. some communication in with some communication out
4. no communication in with some communication out
1.3.2 Introduction of Functions within C++
We are going to consider a simple program that might be used for testing a compiler to make sure that it is
installed correctly.
Example 1.1: Compiler_Test.cpp source code
//******************************************************
// Filename: Compiler_Test.cpp
6This content is available online at http://cnx.org/content/m18861/1.11/.
17
// Purpose: Average the ages of two people
// Author: Ken Busbee; © Kenneth Leroy Busbee
// Date: Jan 5, 2009
// Comment: Main idea is to be able to
// debug and run a program on your compiler.
//******************************************************
// Headers and Other Technical Items
#include iostream
using namespace std;
// Function Prototypes
void pause(void);
// Variables
int age1;
int age2;
double answer;
//******************************************************
// main
//******************************************************
int main(void)
{
// Input
cout nEnter the age of the first person ---: ;
cin age1;
cout nEnter the age of the second person --: ;
cin age2;
// Process
answer = (age1 + age2) / 2.0;
// Output
cout nThe average of their ages is --------: ;
cout answer;
pause();
return 0;
}
//******************************************************
// pause
//******************************************************
void pause(void)
{
18 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
cout nn;
system(PAUSE);
cout nn;
return;
}
//******************************************************
// End of Program
//******************************************************
This program has two functions, one from each of our categories. The technical layout of functions are the
same, it is our distinction that creates the two categories based on how a function is being implemented.
1.3.2.1 Program Control Function
The main program piece in C++ program is a special function with the identier name of main. The
special or uniqueness of main as a function is that this is where the program starts executing code and this is
where it usually stops executing code. It is usually the rst function dened in a program and appears after
the area used for includes, other technical items, declaration of prototypes, the listing of global constants
and variables and any other items generally needed by the program. The code to dene the function main
is provided; however, it is not prototyped or usually called like other functions within a program. In this
simple example, there are no other program control functions.
1.3.2.2 Specic Task Function
We often have the need to perform a specic task that might be used in many programs. In the Com-
pile_Test.cpp source code above we have such a task that is used to stop the execution of the code until the
user hits the enter key. The functions name is: pause. This function is not communicating any information
between the calling function and itself, thus the use of the data type void.
Example 1.2: general layout of a function
return value data type function identifier name(data type identifier name for input value)
{
lines of code;
return value;
}
There is no semi-colon after the rst line. Semi-colons are used at the end of a statement in C++, but not
on the rst line when dening a function. Functions have a set of braces {} used for identifying a group or
block of statements or lines of code. There are normally several lines of code within a function. Lines of code
containing the instructions end in a semi-colon. Can you identify the denition of the pause function in the
above program example? The pause function denition is after the function main. Though not technically
required, most programs list all functions (program control or specic task) after the function main.
Let's identify the location where the function pause is called. The calling function is the function main
and it towards the end of the function. The line looks like:
pause();
When you call a function you use its identier name and a set of parentheses. You place any data items
you are passing inside the parentheses, and in our example there are none. A semi-colon ends the statement
19
or line of code. After our program is compiled and running, the lines of code in the function main are
executed and when it gets to the calling of the pause function, the control of the program moves to the pause
function and starts executing the lines of code in the pause function. When it's done with the lines of code,
it will return to the place in the program that called it (in our example the function main) and continue
with the code in that function.
Once we know how to dene a function and how to call a function, we usually will need to know how to
declare a function to the compiler (called a prototype). Because of normal computer programming industry
standards, programmers usually list the function main rst with other functions dened after it. Then
somewhere in the function main, we will call a function. When we convert our source code program to an
executable version for running on our computer, the rst step of the process is compiling. The compiler
program demands to know what the communication will be between two functions when a function is called.
It will know the communication (what going in and out as parameters) if the function being called has been
dened. But, we have not dened that function yet; it is dened after the function main. To solve this
problem, we show the compiler a prototype of what the function will look like (at least the communication
features of the function) when we dene it.
void pause(void);
This line of code looks exactly like the rst line in our function denition with one important addition
of a semi-colon. Prototypes (or declarations to the compiler of the communications of a function not yet
dened) are placed near the top of the program before the function main. Summary concept: If you call
a function before it is dened you must prototype it before it is called. Looking at our list of the
three things you do in conjunction with a function in the order that they normally appear in a program,
there is a formal way to:
1. declare a function (a prototype is a communications declaration to a complier)
2. call a function
3. dene a function
1.3.3 C++ Program Layout
From the above example, you can see that 2/3 of the program is the two functions. Most C++ programs
have several items before the function main. As in the example, they often are:
1. Documentation  Most programs have a comment area at the start of the program with a variety
of comments pertinent to the program. Any line starting with two slashes // is a comment and the
compiler software disregards everything from the // to the end of the line.
2. #includeiostream  This line of code inserts a le into the source code. The le contains necessary
code to be able to do simple input and output.
3. using namespace std  The C++ compiler has an area where it keeps the identier names used in a
program organized and it is called a namespace. There is a namespace created in conjunction with the
iostream le called: std. This line informs the compiler to use the namespace std where the identier
names in the iostream are established.
4. Function prototypes have already been explained.
5. We need some variables (storage areas) for this program to work. They are dened next.
1.3.4 Denitions
Denition 1.9: modularization
The ability to group some lines of code into a unit that can be included in our program.
Denition 1.10: function
What modules are called in the two predominant programming languages of today: C++ and Java.
20 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
Denition 1.11: program control
Functions used to simply sub divide and control the program.
Denition 1.12: specic task
Functions designed to be used with several programs.
Denition 1.13: parameter passing
How the data is communicated in to and out of a function.
Denition 1.14: identier name
The name given by the programmer to identify a function or other program items such as variables.
Denition 1.15: function prototype
A function's communications declaration to a complier.
Denition 1.16: function call
A function's using or invoking of another function.
Denition 1.17: function denition
The code that denes what a function does.
Denition 1.18: braces
Used to identify a block of code in C++.
1.4 Practice 1: Introduction to Programming7
1.4.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Install the Bloodshed Dev-C++ 5 compiler
3. Make minor modications to an existing program
1.4.2 Memory Building Activities
Link to: MBA 01
8
1.4.3 Exercises
Exercise 1.1 (Solution on p. 23.)
Answer the following statements as either true or false:
1. Beginning programmers participate in all phases of the Systems Development Life Cycle.
2. The Bloodshed Dev-C++ 5 compiler/IDE is the preferred compiler for this text-
book/collection, however any C++ compiler will work.
3. Most compilers can be installed on a ash drive.
4. In addition to function as the name of a sub-program, the computer industry also uses macro,
procedure and module.
5. Generally functions fall into two categories: Program Control and Specic Task.
7This content is available online at http://cnx.org/content/m22450/1.2/.
8See the le at http://cnx.org/content/m22450/latest/index.html
21
1.4.4 Miscellaneous Items
None at this time.
1.4.5 Lab Assignment
1.4.5.1 Creating a Folder or Sub-Folder for Chapter 01 Files
Within the Chapter 1 Connexions modules you were given directions on how to install the Bloodshed
Dev-C++ 5 compiler/IDE and to test your installation with the Compiler_Test.cpp source code le. If
you have not done this, return to the Connexions materials and complete this task.
In the compiler installation directions you were asked to make a folder named: Cpp_Source_Code_Files.
All of your lab assignments in this course assume you have that folder on the same drive as your compiler
(either drive C: your hard disk drive, or on a ash drive). If you don't have that folder, go create it now.
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_01 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
1.4.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Compiler_Test.cpp
9
1.4.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Navigate to your sub-folder: Chapter_01 and rename the Compiler_Test.cpp source code le to:
Lab_01.cpp
• If you are having problems seeing the le extensions, visit the Show Hide File Extensions instructions
within the Appendix.
• Start your compiler and open the source code le. Carefully make the following modications:
• Change the comments at the top, specically:
• The lename should be: Lab_01.cpp
• Purpose should be: Average the weight of three people
• Author: put your name and erase my name and copyright
• Date: Put today's date
• Remove the next 2 lines of comments (don't erase the asterisk line)
• NOTE: During the rest of the course you will often use a source code le provided by the instructor
as your starting point for a new lab assignment. Sometimes you will use a source code le that you
have created as your starting point for a new lab assignment. Either way, you should modify the
comments as appropriate to include at a minimum the four lines of information as established in this
lab assignment.
9See the le at http://cnx.org/content/m22450/latest/Compiler_Test.cpp
22 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
• We are now going to make simple modications to this program so that it is able to
average the weight of three people. Do the following:
• Within the variables area, change the variable names for age1 and age2 to weight1 and weight2. Add
another variable of integer data type with the identier name of weight3.
• The input area has two prompts and requests for data from the user. They are paired up  a prompt
and getting data from the keyboard. We need to modify the prompt to ask for weight instead of age.
We need to change the variable name from age1 to weight1. Do this for the second pair that prompts
and gets the second data item. Create a third pair that prompts and gets the third data item.
• The process area has only one line of code and we need to make changes that add the weight3 and
divides by 3.0 instead of 2.0. The code should look like this:
• answer = (weight1 + weight2 + weight3) / 3.0;
• The output area needs the text modied from ages to weights.
• Build (compile and run) your program. You have successfully written this program if when it run and
you put in the three weights; it tells you the correct average.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
1.4.6 Problems
1.4.6.1 Problem 01a  Instructions
List the steps of the Systems Development Life Cycle and indicate which step you are likely to work in as a
new computer professional.
23
Solutions to Exercises in Chapter 1
Solution to Exercise 1.1 (p. 20)
Answers:
1. false
2. true
3. false
4. true
5. true
24 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
Chapter 2
2. Program Planning  Design
2.1 Program Design1
2.1.1 Topic Introduction
Program Design consists of the steps a programmer should do before they start coding the program in a
specic language. These steps when properly documented will make the completed program easier for other
programmers to maintain in the future. There are three broad areas of activity:
• Understanding the Program
• Using Design Tools to Create a Model
• Develop Test Data
2.1.2 Understanding the Program
If you are working on a project as a one of many programmers, the system analyst may have created a variety
of documentation items that will help you understand what the program is to do. These could include screen
layouts, narrative descriptions, documentation showing the processing steps, etc. If you are not on a project
and you are creating a simple program you might be given only a simple description of the purpose of the
program. Understanding the purpose of a program usually involves understanding it's:
• Inputs
• Processing
• Outputs
This IPO approach works very well for beginning programmers. Sometimes, it might help to visualize the
programming running on the computer. You can imagine what the monitor will look like, what the user
must enter on the keyboard and what processing or manipulations will be done.
2.1.3 Using Design Tools to Create a Model
At rst you will not need a hierarchy chart because your rst programs will not be complex. But as they
grow and become more complex, you will divide your program into several modules (or functions).
The rst modeling tool you will usually learn is pseudocode. You will document the logic or algorithm
of each function in your program. At rst, you will have only one function, and thus your pseudocode will
follow closely the IPO approach above.
1This content is available online at http://cnx.org/content/m18686/1.4/.
25
26 CHAPTER 2. 2. PROGRAM PLANNING  DESIGN
There are several methods or tools for planning the logic of a program. They include: owcharting,
hierarchy or structure charts, pseudocode, HIPO, Nassi-Schneiderman charts, Warnier-Orr diagrams, etc.
Programmers are expected to be able to understand and do owcharting and pseudocode. These methods of
developing the model of a program are usually taught in most computer courses. Several standards exist for
owcharting and pseudocode and most are very similar to each other. However, most companies have their
own documentation standards and styles. Programmers are expected to be able to quickly adapt to any
owcharting or pseudocode standards for the company at which they work. The others methods that are
less universal require some training which is generally provided by the employer that chooses to use them.
Later in your programming career, you will learn about using applications software that helps create an
information system and/or programs. This type of software is called Computer-aided Software Engineering.
Understanding the logic and planning the algorithm on paper before you start to code is very important
concept. Many students develop poor habits and skipping this step is one of them.
2.1.4 Develop Test Data
Test data consists of the user providing some input values and predicting the outputs. This can be quite
easy for a simple program and the test data can be used to check the model to see if it produces the correct
results.
2.1.5 Denitions
Denition 2.1: IPO
Inputs - Processing - Outputs
Denition 2.2: pseudocode
English-like statements used to convey the steps of an algorithm or function.
Denition 2.3: test data
Providing input values and predicting the outputs.
2.2 Pseudocode2
2.2.1 Overview
Pseudocode is one method of designing or planning a program. Pseudo means false, thus pseudocode means
false code. A better translation would be the word fake or imitation. Pseudocode is fake (not the real thing).
It looks like (imitates) real code but it is NOT real code. It uses English statements to describe what a
program is to accomplish. It is fake because no complier exists that will translate the pseudocode to any
machine language. Pseudocode is used for documenting the program or module design (also known as the
algorithm).
The following outline of a simple program illustrates pseudocode. We want to be able to enter the ages
of two people and have the computer calculate their average age and display the answer.
Example 2.1: Outline using Pseudocode
Input
display a message asking the user to enter the first age
get the first age from the keyboard
display a message asking the user to enter the second age
get the second age from the keyboard
2This content is available online at http://cnx.org/content/m18648/1.9/.
27
Processing
calculate the answer by adding the two ages together and dividing by two
Output
display the answer on the screen
pause so the user can see the answer
After developing the program design, we use the pseudocode to write code in a language (like Pascal, COBOL,
FORTRAN, C,  C++, etc.) where you must follow the rules of the language (syntax) in order to code the
logic or algorithm presented in the pseudocode. Pseudocode usually does not include other items produced
during programming design such as identier lists for variables or test data.
There are other methods for planning and documenting the logic for a program. One method is HIPO. It
stands for Hierarchy plus Input Process Output and was developed by IBM in the 1960s. It involved using a
hierarchy (or structure) chart to show the relationship of the sub-routines (or functions) in a program. Each
sub-routine had an IPO piece. Since the above problem/task was simple, we did not need to use multiple
sub-routines, thus we did not produce a hierarchy chart. We did incorporate the IPO part of the concept
for the pseudocode outline.
2.2.2 Denitions
Denition 2.4: pseudo
Means false and includes the concepts of fake or imitation.
2.3 Test Data3
2.3.1 Overview
Test data consists of the user providing some input values and predicting the outputs. This can be quite
easy for a simple program and the test data can be used twice.
1. to check the model to see if it produces the correct results (model checking)
2. to check the coded program to see if it produces the correct results (code checking)
Test data is developed by using the algorithm of the program. This algorithm is usually documented during
the program design with either owcharting or pseudocode. Here is the pseudocode in outline form describing
the inputs, processing and outputs for a program used for painting rectangular buildings.
Example 2.2: Pseudocode using an IPO Outline for Painting a Rectangular Building
Input
display a message asking user for the length of the building
get the length from the keyboard
display a message asking user for the width of the building
get the width from the keyboard
display a message asking user for the height of the building
get the height from the keyboard
display a message asking user for the price per gallon of paint
get the price per gallon of paint from the keyboard
display a message asking user for the sq ft coverage of a gallon of paint
get the sq ft coverage of a gallon of paint from the keyboard
3This content is available online at http://cnx.org/content/m18781/1.3/.
28 CHAPTER 2. 2. PROGRAM PLANNING  DESIGN
Processing
calculate the total area of the building by:
multiplying the length by height by 2
then multiply the width by height by 2
then add the two results together
calculate the number of gallons of paint needed by:
dividing the total area by the coverage per gallon
then round up to the next whole gallon
calculate the total cost of the paint by:
multiplying the total gallons needed by the price of one gallon of paint
Output
display the number of gallons needed on the monitor
display the total cost of the paint on the monitor
pause so the user can see the answer
2.3.2 Creating Test Data and Model Checking
Test data is used to verify that the inputs, processing and outputs are working correctly. As test data is
initially developed it can verify that the documented algorithm (pseudocode in the example we are doing)
is correct. It helps us understand and even visualize the inputs, processing and outputs of the program.
Inputs: My building is 100 feet long by 40 feet wide and 10 feet in height and I selected paint costing $28.49
per gallon that will cover 250 square feet per gallon. We should verify that the pseudocode is prompting the
user for this data.
Processing: Using my solar powered hand held calculator, I can calculate (or predict) the total area
would be: (100 x 10 x 2 plus 40 x 10 x 2) or 2,800 sq ft. The total gallons of paint would be: (2800 / 250)
or 11.2 gallons. But rounded up, I would need twelve (12) gallons of paint. The total cost would be: (28.49
times 12) or $341.88. We should verify that the pseudocode is performing the correct calculations.
Output: Only the signicant information (number of gallons to buy and the total cost) are displayed for
the user to see. We should verify that the appropriate information is being displayed.
2.3.3 Testing the Coded Program  Code Checking
The test data can be developed and used to test the algorithm that is documented (in our case our pseu-
docode) during the program design phase. Once the program is code with compiler and linker errors resolved,
the programmer gets to play user and should test the program using the test data developed. When you
run your program, how will you know that it is working properly? Did you properly plan your logic to
accomplish your purpose? Even if your plan was correct, did it get converted correctly (coded) into the
chosen programming language (in our case C++)? The answer (or solution) to all of these questions is our
test data.
By developing test data we are predicting what the results should be, thus we can verify that our
program is working properly. When we run the program we would enter the input values used in our test
data. Hopefully the program will output the predicted values. If not then our problem could be any of the
following:
1. The plan (IPO outline or other item) could be wrong
2. The conversion of the plan to code might be wrong
3. The test data results were calculated wrong
Resolving problems of this nature can be the most dicult problems a programmer encounters. You must
review each of the above to determine where the error is lies. Fix the error and re-test your program.
29
2.3.4 Denitions
Denition 2.5: model checking
Using test data to check the design model (usually done in pseudocode).
Denition 2.6: code checking
Using test data to check the coded program in a specic language (like C++).
2.4 Practice 2: Program Planning  Design4
2.4.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Create a pseudocode document for a programming problem
3. Create a test data document for a programming problem
2.4.2 Memory Building Activities
Link to: MBA 02
5
2.4.3 Exercises
Exercise 2.1 (Solution on p. 32.)
Answer the following statements as either true or false:
1. Coding the program in a language like C++ is the rst task of planning. You plan as you
code.
2. Pseudocode is the only commonly used planning tool.
3. Test data is developed for testing the program once it is code into a language like C++.
4. The word pseudo means false and includes the concepts of fake or imitation.
5. Many programmers pick up the bad habit of not completing the planning step before starting
to code the program.
2.4.4 Miscellaneous Items
None at this time.
2.4.5 Lab Assignment
2.4.5.1 Creating a Folder or Sub-Folder for Chapter 02 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_02 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
4This content is available online at http://cnx.org/content/m22453/1.2/.
5See the le at http://cnx.org/content/m22453/latest/index.html
30 CHAPTER 2. 2. PROGRAM PLANNING  DESIGN
2.4.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Solution_Lab_01_Pseudocode.txt
6
Download from Connexions: Solution_Lab_01_Test_Data.txt
7
2.4.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Navigate to your sub-folder: Chapter_02 and print the: Solution_Lab_01_Pseudocode.txt and the:
Solution_Lab_01_Test_Data.txt les. Review the printouts in conjunction with your Lab 01 source
code le. Note: In Lab 01 we gave you step by step directions for modifying the Compiler_Test.cpp
source code le into the Lab_01.cpp source code le. I could have given you the pseudocode and
test data les, but you had not received any instructions about them. Now, after having studied the
Chapter 2 materials, these les should make sense.
• Make copies of the: Solution_Lab_01_Pseudocode.txt and Solution_Lab_01_Test_Data.txt and
rename them: Lab_02_Pseudocode.txt and Lab_02_Test_Data.txt
• Here is the problem. Your local bank has many customers who save their change and periodically bring
it in for deposit. The customers have sorted the coins (pennies, nickels, dimes and quarters  forget
half dollars and dollar coins) and know how many (an integer data type) of each value they have but
have evolved (or their environment has made them lazy). They have lost their ability to do simple
arithmetic. They can't seem to determine the total value of all of the coins without a calculator (or
computer). Write a program to interact with the customers and to determine and report the total
value of their coins.
• No! No! No! We are not going to write a program (create source code) using the C++ programming
language. We are going to design a plan for a program using pseudocode as our model. Additionally,
we need to develop some test data for use in testing our model.
• Start your text editor (Microsoft Notepad. Set the font on Notepad to: Courier 12 font because Courier
uses the same amount of space horizontally for each letter. It will make the information in the les
show as it should be seen. Open your Lab 02 pseudocode text le. Change all items as needed to
be able to solve the above problem. NOTE: You may use any application software that will let you
open, modify and save ASCII text les. You may even use the Bloodshed Dev-C++ 5 compiler/IDE
software to view, modify and save ASCII text les; after all, our source code les are ASCII text les
with a special extension of .cpp
• Open your Lab 02 test data text le. Modify the text le as appropriate. Use your test data and step
through your pseudocode. Does everything seem to work? Have you missed something?
• When you are satised that you have your program plan and test data completed, close your text les.
That's right, I said, Save and close your text les. Files should be properly closed before being used
by other software and this includes the Operating System software that moves, copies and renames
les.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
2.4.6 Problems
2.4.6.1 Problem 02a  Instructions
Create simple IPO pseudocode to solve the following:
6See the le at http://cnx.org/content/m22453/latest/Solution_Lab_01_Pseudocode.txt
7See the le at http://cnx.org/content/m22453/latest/Solution_Lab_01_Test_Data.txt
31
Problem: I have a friend who is visiting from Europe and he does not understand exactly how much gas
he is buying for his car. We need to write a program that allows him to enter the gallons of gas and convert
it to liters (metric system). NOTE: One US gallon equals 3.7854 liters.
2.4.6.2 Problem 02b  Instructions
Create test data for the following:
Problem: A major restaurant sends a chef to purchase fruits and vegetables every day. Upon returning
to the store the chef must enter two pieces of data for each item he purchased. The quantity (Example: 2
cases) and the price he paid (Example: $4.67). The program has a list of 20 items and after the chef enters
the information, the program provides a total for the purchases for that day. You need to prepare test data
for ve (5) items: apples, oranges, bananas, lettuce and tomatoes.
32 CHAPTER 2. 2. PROGRAM PLANNING  DESIGN
Solutions to Exercises in Chapter 2
Solution to Exercise 2.1 (p. 29)
Answers:
1. false
2. false
3. false
4. true
5. true
Chapter 3
3. Data  Operators
3.1 Data Types in C++1
3.1.1 General Discussion
Our interactions (inputs and outputs) of a program are treated in many languages as a stream of bytes.
These bytes represent data that can be interpreted as representing values that we understand. Additionally,
within a program we process this data in various ways such as adding them up or sorting them. This data
comes in dierent forms. Examples include: yourname which is a string of characters; your age which is
usually an integer; or the amount of money in your pocket which is usually a value measured in dollars and
cents (something with a fractional part). A major part of understanding how to design and code programs in
centered in understanding the types of data that we want to manipulate and how to manipulate that data.
A type denes a set of values and a set of operations that can be applied on those values. The set of
values for each type is known as the domain for that type.
2 The four major families of data include:
• Nothing
• Integer
• Floating-point
• Complex
The C++ programming language identies ve data types as standard data types:
• Void
• Boolean
• Character
• Integer
• Floating-point
The standard data types and the complex data types within C++ have a series of attributes, which include:
• C++ Reserved or Key Word
• Domain  the allowed values
• Signage  do they allow negative numbers or only positive numbers
• Meaning  i.e. What do they represent
• Rules of Denition  What special characters indicate the data type
• Size  in terms of the number of bytes of storage used in the memory
1This content is available online at http://cnx.org/content/m18653/1.11/.
2Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United
States of America: Thompson  Brooks/Cole, 2004) 33.
33
34 CHAPTER 3. 3. DATA  OPERATORS
• Operations Allowed  i.e. Which operators can I use on the data type
Placing some of the above into a summary table, we get:
Family Data Type Reserved Word Represents Standard Type
Nothing Null or nothing void No data Yes
Integer Boolean bool Logical true and
false
Yes
Integer Character char Single characters Yes
Integer Integer int Whole numbers Yes
Floating Point Floating Point oat Fractional num-
bers
Yes
Complex String string A sequence (sting
them along) of
characters
No
Complex Array N/A A collection of ele-
ments of the same
data type
No
Complex Pointer N/A A value that
points to a loca-
tion (an address)
within the data
area
No
Table 3.1
The ve standard data types usually exist in most programming languages and act or behave similarly
from language to language. Most courses of study for a programming course or language will explain the
standard data types rst. After they are learned, the complex data types are introduced.
The Boolean, character and integer data types are identied as belonging to the Integer Family. These
data types are all represented by integer numbers and thus act or behave similarly.
3.1.2 Denitions
Denition 3.1: data type
Denes a set of values and a set of operations that can be applied on those values.
Denition 3.2: date type families
1) Nothing 2) Integer 3) Floating-Point 4) Complex
Denition 3.3: domain
The set of allowed values for a data type.
Denition 3.4: integer
A data type representing whole numbers.
Denition 3.5: oating point
A data type representing numbers with fractional parts.
35
3.2 Identier Names3
3.2.1 Overview
Within programming a variety of items are given descriptive names to make the code more meaningful to
us as humans. These names are called Identier Names. Constants, variables, type denitions, functions,
etc. when declared or dened are identied by a name. These names follow a set of rules that are imposed
by:
1. the language's technical limitations
2. good programming practices
3. common industry standards for the language
3.2.2 Technical to Language
• Use only allowable characters (for C++ the rst character alphabetic or underscore, can continue with
alphanumeric or underscore)
• Can't use reserved words
• Length limit
These attributes vary from one programming language to another. The allowable characters and reserved
words will be dierent. The length limit refers to how many characters are allowed in an identier name
and often is compiler dependent and may vary from compiler to compiler for the same language. However,
all programming languages have these three technical rules.
3.2.3 Good Programming Techniques
• Meaningful
• Be case consistent
Meaningful identier names make your code easier for another to understand. After all what does p mean?
Is it pi, price, pennies, etc. Thus do not use cryptic (look it up in the dictionary) identier names.
Some programming languages treat upper and lower case letters used in identier names as the same.
Thus: pig and Pig are treated as the same identier name. Unknown to you the programmer, the compiler
usually forces all identier names to upper case. Thus: pig and Pig both get changed to PIG. However
not all programming languages act this way. Some will treat upper and lower case letters as being dierent
things. Thus: pig and Pig are two dierent identier names. If you declare it as pig and then reference it in
your code later as Pig  you get a compiler error. To avoid the problem altogether, we teach students to be
case consistent. Use an identier name only once and spell it (upper and lower case) the same way within
your program.
3.2.4 Industry Rules
ˆ Do not start with underscore (used for technical programming)
ˆ variables in all lower case
ˆ CONSTANTS IN ALL UPPER CASE
These rules are decided by the industry (those who are using the programming language). The above rules
were commonly used within the C programming language and have to large degree carried over to C++.
3This content is available online at http://cnx.org/content/m18692/1.4/.
36 CHAPTER 3. 3. DATA  OPERATORS
3.2.5 Denitions
Denition 3.6: reserved word
Words that cannot be used by the programmer as identier names because they already have a
specic meaning within the programming language.
3.3 Constants and Variables4
3.3.1 Understanding Constants
Various textbooks describe constants using dierent terminology. Added to the complexity are the explana-
tions from various industry professionals will vary greatly. Let's see if we can clear it up.
A constant is a data item whose value cannot change during the program's execution. Thus, as its name
implies  their value is constant.
A variable is a data item whose value can change during the program's execution. Thus, as its name
implies  their value can vary.
Constants are used in three ways within C++. They are:
1. literal constant
2. dened constant
3. memory constant
A literal constant is a value you type into your program wherever it is needed. Examples include the
constants used for initializing a variable and constants used in lines of code:
Example 3.1: Literal Constants
int age = 21;
char grade = 'A';
float money = 12.34;
bool rich = false;
cout nStudents love computers;
age = 57;
Additionally, we have learned how to recognize the data types of literal constants. Single quotes for char,
double quotes for string, number without a decimal point for integer, number with a decimal point belongs
to the oating-point family, and Boolean can use the reserved words of true or false.
In addition to literal constants, most text books refer to either symbolic constants or named constants
but these two refer to the same concept. A symbolic constant is represented by a name similar to how we
name variables. Let's say it backwards; the identier name is the symbol that represents the data item.
Within C++ identier names have some rules. One of the rules says those names should be meaningful.
Another rule about using ALL CAPS FOR CONSTANTS is an industry rule. There are two ways to create
symbolic or named constants:
#define PI 3.14159
Called a dened constant because it uses a textual substitution method controlled by the compiler
pre-processor command word dene.
const double PI = 3.14159;
4This content is available online at http://cnx.org/content/m18719/1.7/.
37
The second one is called sometimes called constant variable but that name is contradictory all by
itself. How can it be constant and vary at the same time? The better name for the second one is a memory
constant because they have a specic storage location in memory.
3.3.2 Dening Constants and Variables
In the above examples we see how to dene both variables and constants along with giving them an initial
value. Memory constants must be assigned a value when they are dened. But variables do not have to be
assigned initial values.
int height;
float value_coins;
Variables once dened may be assigned a value within the instructions of the program.
height = 72;
value_coins = 2 * 0.25 + 3 * 0.05;
3.3.3 Denitions
Denition 3.7: constant
A data item whose value cannot change during the program's execution.
Denition 3.8: variable
A data item whose value can change during the program's execution.
3.4 Data Manipulation5
3.4.1 Introduction
Single values by themselves are important; however we need a method of manipulating values (processing
data). Scientists wanted an accurate machine for manipulating values. They wanted a machine to process
numbers or calculate answers (that is compute the answer). Prior to 1950, dictionaries listed the denition of
computers as  humans that do computations. Thus, all of the terminology for describing data manipulation
is math oriented. Additionally, the two fundamental data type families (the integer family and oating-point
family) consist entirely of number values.
3.4.2 Denitions
Denition 3.9: expression
A valid sequence of operand(s) and operator(s) that reduces (or evaluates) to a single value.
Denition 3.10: operator
A language-specic syntactical token (usually a symbol) that causes an action to be taken on one
or more operands.
Denition 3.11: operand
A value that receives the operator's action.
Denition 3.12: precedence
Determines the order in which the operators are allowed to manipulate the operands.
Denition 3.13: associativity
Determines the order in which the operators of the same precedence are allowed to manipulate the
operands.
5This content is available online at http://cnx.org/content/m18705/1.5/.
38 CHAPTER 3. 3. DATA  OPERATORS
Denition 3.14: evaluation
The process of applying the operators to the operands and resulting in a single value.
Denition 3.15: parentheses
Change the order of evaluation in an expression. You do what's in the parentheses rst.
3.4.3 An Expression Example with Evaluation
Let's look at an example: 2 + 3 * 4 + 5 is our expression but what does it equal?
1. the symbols of + meaning addition and * meaning multiplication are our operators
2. the values 2, 3, 4 and 5 are our operands
3. precedence says that multiplication is higher than addition
4. thus, we evaluate the 3 * 4 to get 12
5. now we have: 2 + 12 + 5
6. the associativity rules say that addition goes left to right, thus we evaluate the 2 +12 to get 14
7. now we have: 14 + 5
8. nally, we evaluate the 14 + 5 to get 19; which is the value of the expression
Parentheses would change the outcome. (2 + 3) * (4 + 5) evaluates to 45.
Parentheses would change the outcome. (2 + 3) * 4 + 5 evaluates to 25.
3.4.4 Precedence of Operators Chart
Each computer language has some rules that dene precedence and associativity. They often follow rules
we may have already learned. Multiplication and division come before addition and subtraction is a rule we
learned in grade school. This rule still works. The precedence rules vary from one programming language
to another. You should refer to the reference sheet that summarizes the rules for the language that you are
using. It is often called a Precedence of Operators Chart. You should review this chart as needed when
evaluating expressions.
A valid expression consists of operand(s) and operator(s) that are put together properly. Why the (s)?
Some operators are:
1. Unary  that is only have one operand
2. Binary  that is have two operands, one on each side of the operator
3. Trinary  which has two operator symbols that separate three operands
Most operators are binary, that is they require two operands. Within C++ there is only one trinary operator,
the conditional. All of the unary operators are on the left side of the operand, except postx increment and
postx decrement. Some precedence charts indicate of which operators are unary and trinary and thus all
others are binary.
3.5 Assignment Operator6
3.5.1 Discussion
The assignment operator allows us to change the value of a modiable data object (for beginning programmers
this typically means a variable). It is associated with the concept of moving a value into the storage location
(again usually a variable). Within C++ programming language the symbol used is the equal symbol. But
bite your tongue, when you see the = symbol you need to start thinking: assignment. The assignment
operator has two operands. The one to the left of the operator is usually an identier name for a variable.
The one to the right of the operator is a value.
6This content is available online at http://cnx.org/content/m18725/1.2/.
39
Example 3.2: Simple Assignment
int age; // variable set up
then later in the program
age = 21;
The value 21 is moved to the memory location for the variable named: age. Another way to say it: age is
assigned the value 21.
Example 3.3: Assignment with an Expression
int total_cousins; // variable set up
then later in the program
cousins = 4 + 3 + 5 + 2;
The item to the right of the assignment operator is an expression. The expression will be evaluated and the
answer is 14. The value 14 would assigned to the variable named: total_cousins.
Example 3.4: Assignment with Identier Names in the Expression
int students_period_1 = 25; // variable set up with initialization
int students_period_2 = 19;
int total_students;
then later in the program
total_students = students_period_1 + students_period_2;
The expression to the right of the assignment operator contains some identier names. The program would
fetch the values stored in those variables; add them together and get a value of 44; then assign the 44 to the
total_students variable.
3.5.2 Denitions
Denition 3.16: assignment
An operator that changes the value of a modiable data object.
3.6 Arithmetic Operators7
3.6.1 General Discussion
An operator performs an action on one or more operands. The common arithmetic operators are:
7This content is available online at http://cnx.org/content/m18706/1.3/.
40 CHAPTER 3. 3. DATA  OPERATORS
Action C ++ operator symbol
Addition +
Subtraction -
Multiplication *
Division /
Modulus (associated with integers) %
Table 3.2
These arithmetic operators are binary that is they have two operands. The operands may be either
constants or variables.
age + 1
This expression consists of one operator (addition) which has two operands. The rst is represented by
a variable named age and the second is a literal constant. If age had a value of 14 then the expression would
evaluate (or be equal to) 15.
These operators work as you have learned them throughout your life with the exception of division and
modulus. We normally think of division as resulting in an answer that might have a fractional part (a
oating-point data type). However, division when both operands are of the integer data type act dierently.
Please refer to the supplemental materials on Integer Division and Modulus.
3.7 Data Type Conversions8
3.7.1 Overview
Changing a data type of a value is referred to as type conversion. There are two ways to do this:
1. Implicit  the change is implied
2. Explicit  the change is explicitly done with the cast operator
The value being changed may be:
1. Promotion  going from a smaller domain to a larger domain
2. Demotion  going from a larger domain to a smaller domain
3.7.2 Implicit Type Conversion
Automatic conversion of a value from one data type to another by a programming language, without the
programmer specically doing so, is called implicit type conversion. It happens when ever a binary operator
has two operands of dierent data types. Depending on the operator, one of the operands is going to be
converted to the data type of the other. It could be promoted or demoted depending on the operator.
Example 3.5: Implicit Promotion
55 + 1.75
8This content is available online at http://cnx.org/content/m18744/1.6/.
41
In this example the integer value 55 is converted to a oating-point value (most likely double) of 55.0. It
was promoted.
Example 3.6: Implicit Demotion
int money; // variable set up
then later in the program
money = 23.16;
In this example the variable money is an integer. We are trying to move a oating-point value 23.16 into an
integer storage location. This is demotion and the oating-point value usually gets truncated to 23.
3.7.3 Promotion
Promotion is never a problem because the lower data type (smaller range of allowable values) is sub set of
the higher data type (larger range of allowable values). Promotion often occurs with three of the standard
data types: character, integer and oating-point. The allowable values (or domains) progress from one type
to another. That is the character data type values are a sub set of integer values and integer values are a sub
set of oating-point values; and within the oating-point values: oat values are a sub set of double. Even
though character data represent the alphabetic letters, numeral digits (0 to 9) and other symbols (a period,
$, comma, etc.) their bit pattern also represent integer values from 0 to 255. This progression allows us to
promote them up the chain from character to integer to oat to double.
3.7.4 Demotion
Demotion represents a potential problem with truncation or unpredictable results often occurring. How do
you t an integer value of 456 into a character value? How do you t the oating-point value of 45656.453
into an integer value? Most compilers give a warning if it detects demotion happening. A compiler warning
does not stop the compilation process. It does warn the programmer to check to see if the demotion is
reasonable.
If I calculate the number of cans of soup to buy based on the number of people I am serving (say 8) and
the servings per can (say 2.3), I would need 18.4 cans. I might want to demote the 18.4 into an integer. It
would truncate the 18.4 into 18 and because the value 18 is within the domain of an integer data type, it
should demote with the truncation side eect.
If I tried demoting a double that contained the number of stars in the Milky Way galaxy into an integer,
I might have a get an unpredictable result (assuming the number of stars is larger than allowable values
within the integer domain).
3.7.5 Explicit Type Conversion
Most languages have a method for the programmer to change or cast a value from one data type to another;
called explicit type conversion. Within C++ the cast operator is a unary operator; it only has one
operand and the operand is to the right of the operator. The operator is a set of parentheses surrounding
the new data type.
Example 3.7: Explicit Demotion with Truncation
(int) 4.234
This expression would evaluate to: 4.
42 CHAPTER 3. 3. DATA  OPERATORS
3.7.6 Demonstration Program in C++
3.7.6.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
3.7.6.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Data_Type_Conversions.cpp
9
3.7.7 Denitions
Denition 3.17: implicit
A value that has its data type changed automatically.
Denition 3.18: explicit
Changing a value's data type with the cast operator.
Denition 3.19: promotion
Going from a smaller domain to a larger domain.
Denition 3.20: demotion
Going from a larger domain to a smaller domain.
Denition 3.21: truncation
The fractional part of a oating-point data type that is dropped when converted to an integer.
3.8 Practice 3: Data  Operators10
3.8.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Understand basic data types and how operators manipulate data.
3. Given pseudocode and test data documents, write the C++ code for a program
3.8.2 Memory Building Activities
Link to: MBA 03
11
9See the le at http://cnx.org/content/m18744/latest/Demo_Data_Type_Conversions.cpp
10This content is available online at http://cnx.org/content/m22455/1.1/.
11See the le at http://cnx.org/content/m22455/latest/index.html
43
3.8.3 Exercises
Exercise 3.1 (Solution on p. 45.)
Answer the following statements as either true or false:
1. A data type denes a set of values and the set of operations that can be applied on those
values.
2. Reserved or key words can be used as identier names.
3. The concept of precedence says that some operators (like multiplication and division) are to
be executed before other operators (like addition and subtraction).
4. An operator that needs two operands, will promote one of the operands as needed to make
both operands be of the same data type.
5. Parentheses change the precedence of operators.
3.8.4 Miscellaneous Items
Link to: Manipulation of Data Part 1
12
3.8.5 Lab Assignment
3.8.5.1 Creating a Folder or Sub-Folder for Chapter 03 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_03 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
3.8.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Solution_Lab_03_Pseudocode.txt
13
Download from Connexions: Solution_Lab_03_Test_Data.txt
14
3.8.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Navigate to your sub-folder: Chapter_03 and open and study the two les.
• We have learned that a fundamental concept of interaction with computers is to divide the problem/task
into three parts  input, processing and output. This problem is simple and we will use the IPO
(input  processing  output) approach again. However this time we are going to think about
it backwards.
• What output do I want displayed?
12See the le at http://cnx.org/content/m22455/latest/Manipulation_Data_Part_1.pdf
13See the le at http://cnx.org/content/m22455/latest/Solution_Lab_03_Pseudocode.txt
14See the le at http://cnx.org/content/m22455/latest/Solution_Lab_03_Test_Data.txt
44 CHAPTER 3. 3. DATA  OPERATORS
• Number of gallons of paint
• Total cost of the paint
• Thus, what calculations do I need to make?
• Total cost of the paint is the Number of gallons needed times price per gallon
• Number of gallons needed is the Total area to be covered (let's use square feet) divided by the coverage
per gallon of paint (Note: you must round up to the next full gallon of paint.)
• Total area to be covered is the Length times height times 2 added to the width times height times 2
• Which leads us to, what data do I need as input?
• Price of a gallon of paint
• Number of square feet that a gallon will cover
• Length of the house
• Width of the house
• Height of the house
• You can see that by working the logic backwards, we can start to completely see what the program
must do. We need to enter some data (input), do some calculations (process) and display the results
(output).
• Copy into your sub-folder: Chapter_03 one of the source code listings that we have used (we suggest
the Lab 01 source code) and rename the copy to: Lab_03.cpp
• Modify the code to follow the Solution_Lab_03_Pseudocode.txt le.
• I am just going to give you the line of code for rounding up to the next whole gallon of paint (See the
Data Type Conversions module within Chapter 3 of the Connexions materials. Do you understand
why it works?).
• total_gal_paint = total_area / coverage_gal_paint + 0.9999;
• Build (compile and run) your program. You have successfully written this program when it runs with
your test data and gives the predicted results.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
3.8.6 Problems
3.8.6.1 Problem 03a  Instructions
Write the C++ code to do the following pseudocode example.
Example 3.8: pseudocode
Prompt the user for his monthly income.
Get the users monthly income.
Multiply the monthly income by 12.
Display the annual income.
Pause the program so the user can see the answer. (HINT: You may call a function.)
45
Solutions to Exercises in Chapter 3
Solution to Exercise 3.1 (p. 43)
Answers:
1. true
2. false
3. true
4. true
5. false  Parentheses change the order of evaluation in an expression.
46 CHAPTER 3. 3. DATA  OPERATORS
Chapter 4
4. Often Used Data Types
4.1 Integer Data Type1
4.1.1 General Discussion
The integer data type has two meanings:
• The integer data type with its various modiers that create dierent domains
• The integer family which also includes the Boolean and character data types
The integer data type basically represents whole numbers (no fractional parts). The integer values jump
from one value to another. There is nothing between 6 and 7. It could be asked why not make all your
numbers oating point which allow for fractional parts. The reason is twofold. First, some things in the real
world are not fractional. A dog, even with only 3 legs, is still one (1) dog not ¾ of a dog. Second, integer
data type is often used to control program ow by counting, thus the need for a data type that jumps from
one value to another.
The integer data type has the same attributes and acts or behaves similarly in all programming languages.
The most often used integer data type in C++ is the simple integer.
C++ Reserved Word int
Represent Whole numbers (no fractional parts)
Size Usually 4 bytes
Normal Signage Signed (negative and positive values)
Domain (Values Allowed) -2,147,483,648 to 2, 147,483,647
C++ syntax rule Do not start with a 0 (zero)
C++ syntax rule No decimal point
Table 4.1
Within C++ there are various reserved words that can be used to modify the size or signage of an integer.
They include: long, short, signed and unsigned. Signed is rarely used because integers are signed by default
 you must specify unsigned if you want integers that are only positive. Possible combinations are:
1This content is available online at http://cnx.org/content/m18654/1.5/.
47
48 CHAPTER 4. 4. OFTEN USED DATA TYPES
C++ Reserved Word Combination Signage
short int signed
unsigned short int unsigned
int signed
unsigned int unsigned
long int singed
unsigned long int unsigned
Table 4.2
The domain of each of the above data type options varies with the complier being used and the computer.
The domains vary because the byte size allocated to the data varies with the compiler and computer. This
eect is known as being machine dependent. Additionally, there have been some size changes with
upgrades to the language. In C the int data type was allocated 2 bytes of memory storage on an Intel
compatible central processing unit (cpu) machine. In C++ an int is allocated 4 bytes.
These variations of the integer data type are an annoyance in C++ for a beginning programmer. For a
beginning programmer it is more important to understand the general attributes of the integer data type
that apply to most programming languages.
4.1.2 Denitions
Denition 4.1: machine dependent
An attribute of a programming language that changes depending on the computer's CPU.
4.2 Floating-Point Data Type2
4.2.1 General Discussion
The oating-point data type is a family of data types that act alike and dier only in the size of their domains
(the allowable values). The oating-point family of data types represent number values with fractional parts.
They are technically stored as two integer values: a mantissa and an exponent. The oating-point family
has the same attributes and acts or behaves similarly in all programming languages. They can always store
negative or positive values thus they always are signed; unlike the integer data type that could be unsigned.
The domain for oating-point data types varies because they could represent very large numbers or very
small numbers. Rather than talk about the actual values, we mention the precision. The more bytes of
storage the larger the mantissa and exponent, thus more precision.
The most often used oating-point family data type used in C++ is the double. By default, most
compilers convert oating-point constants into the double data type for use in calculations. The double data
type will store just about any number most beginning programmers will ever encounter.
2This content is available online at http://cnx.org/content/m18657/1.5/.
49
C++ Reserved Word double
Represent Numbers with fractional parts
Size Usually 8 bytes
Storage two parts (always treated together)a mantissa and an exponent
Normal Signage Signed (negative and positive values)
Domain (Values Allowed) ±1.7E-308 to ±1.7E308
C++ syntax rule the presence of a decimal point means it's oating-point data
Table 4.3
Within C++ there are various reserved words that can be used to establish the size in bytes of a oating-
point data item. More bytes mean more precision:
C++ Reserved Word Size
oat 4 bytes
double 8 bytes
long double 10 to 12 bytes (varies by machine)
Table 4.4
The domain of each of the above data type options varies with the complier being used and the computer.
The domains vary because the byte size allocated to the data varies with the compiler and computer. This
eect is known as being machine dependent.
These variations of the oating-point family of data types are an annoyance in C++ for a beginning
programmer. For a beginning programmer it is more important to understand the general attributes of the
oating-point family that apply to most programming languages.
4.2.2 Denitions
Denition 4.2: double
The most often used oating-point family data type used in C++.
Denition 4.3: precision
The eect on the domain of oating-point values given a larger or smaller storage area in bytes.
Denition 4.4: mantissa exponent
The two integer parts of a oating-point value.
4.3 String Data Type3
4.3.1 General Discussion
Technically, there is no string data type in the C++ programming language. However, the concept of a
string data type makes it easy to handle stings of character data. A single character has some limitations.
Many data items are not integers or oating-point values. The message Hi Mom! is a good example of a
string. Thus, the need to handle a series of characters as a single piece of data (in English correctly called a
datum).
3This content is available online at http://cnx.org/content/m18656/1.5/.
50 CHAPTER 4. 4. OFTEN USED DATA TYPES
In the C programming language all string were handled as an array of characters that end in an ASCII
null character (the value 0 or the rst character in the ASCII character code set). Associated with object
oriented programming the string class has been added to C++ as a standard part of the programming
language. This changed with the implementation with strings being stored as a length controlled item with
a maximum length of 255 characters. Included in the C++ string class is the reserved word of string as if
it were a data type. Some basics about strings include:
C++ Reserved Word string
Represent Series of characters (technically an array)
Size Varies in length
Normal Signage N/A
Domain (Values Allowed) Extended ASCII Character Code Set
C++ syntax rule Double quote marks for constants
Table 4.5
For now, we will address only the use of strings as constants. Most modern compliers that are part of an
Integrated Development Environment (IDE) will color the source code to help the programmer see dierent
features more readily. Beginning programmers will use string constants to send messages to the monitor. A
typical line of C++ code:
cout Hi Mom!;
would have the Hi Mom colored (usually red) to emphasize that the item is a string.
4.3.2 Denitions
Denition 4.5: string
A series or array of characters as a single piece of data.
4.4 Arithmetic Assignment Operators4
4.4.1 Overview of Arithmetic Assignment
The ve arithmetic assignment operators are a form of short hand. Various textbooks call them com-
pound assignment operators or combined assignment operators. Their usage can be explaned in terms
of the assignment operator and the arithmetic operators. In the table we will use the variable age and you
can assume that it is of integer data type.
Arithmetic assignment examples: Equivalent code:
age += 14; age = age + 14;
age -= 14; age = age - 14;
continued on next page
4This content is available online at http://cnx.org/content/m18743/1.6/.
51
age *= 14; age = age * 14;
age /= 14; age = age / 14;
age %= 14; age = age % 14;
Table 4.6
4.4.2 Demonstration Program in C++
4.4.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
4.4.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Arithmetic_Assignment.cpp
5
4.5 Lvalue and Rvalue6
4.5.1 Discussion
They refer to on the left and right side of the assignment operator. The Lvalue (pronounced: L value)
concept refers to the requirement that the operand on the left side of the assignment operator is modiable,
usually a variable. Rvalue concept pulls or fetches the value of the expression or operand on the right side
of the assignment operator. Some examples:
Example 4.1
int age; // variable set up
then later in the program
age = 39;
The value 39 is pulled or fetched (Rvalue) and stored into the variable named age (Lvalue); destroying the
value previously stored in that variable.
Example 4.2
5See the le at http://cnx.org/content/m18743/latest/Demo_Arithmetic_Assignment.cpp
6This content is available online at http://cnx.org/content/m18058/1.11/.
52 CHAPTER 4. 4. OFTEN USED DATA TYPES
int age; // variable set up
int voting_age = 18; // variable set up with initialization
then later in the program
age = voting_age;
If the expression has a variable or named constant on the right side of the assignment operator, it would
pull or fetch the value stored in the variable or constant. The value 18 is pulled or fetched from the variable
named voting_age and stored into the variable named age.
Example 4.3
age  17;
If the expression is a test expression or Boolean expression, the concept is still an Rvalue one. The
value in the identier named age is pulled or fetched and used in the relational comparison of less than.
Example 4.4
const int JACK_BENNYS_AGE = 39; // constant set up
then later in the program
JACK_BENNYS_AGE = 65;
This is illegal because the identier JACK_BENNYS_AGE does not have Lvalue properties. It is not a
modiable data object, because it is a constant.
Some uses of the Lvalue and Rvalue can be confusing.
Example 4.5
int oldest = 55; // variable set up with initialization
then later in the program
age = oldest++;
Postx increment says to use my existing value then when you are done with the other operators; increment
me. Thus, the rst use of the oldest variable is an Rvalue context where the existing value of 55 is pulled
or fetched and then assigned to the variable age; an Lvalue context. The second use of the oldest variable is
an Lvalue context where in the value of oldest is incremented from 55 to 56.
4.5.2 Denitions
Denition 4.6: Lvalue
The requirement that the operand on the left side of the assignment operator is modiable, usually
a variable.
Denition 4.7: Rvalue
Pulls or fetches the value stored in a variable or constant.
53
4.6 Integer Division and Modulus7
4.6.1 Overview of Integer Division and Modulus
By the time we reach adulthood, we normally think of division as resulting in an answer that might have
a fractional part (a oating-point data type). This type of division is known as oating-point division.
However, division when both operands are of the integer data type acts dierently on most computers and
is called: integer division. Within the C++ programming language the following expression does not give
the answer of 2.75 or 2 ¾.
Example 4.6
11 / 4
Because both operands are of the integer data type the evaluation of the expression (or answer) would be 2
with no fractional part (it gets thrown away). Again, this type of division is call integer division and it is
what you learned in grade school the rst time you learned about division.
Denition 4.8: integer division
Division with no fractional parts.
Figure 4.1: Integer division as learned in grade school.
In the real world of data manipulation there are some things that are always handled in whole units or
numbers (integer data type). Fractions just don't exist. To illustrate our example: I have 11 dollar
coins to distribute equally to my 4 children. How many do they each get? Answer is 2 with me still having
3 left over (or with 3 still remaining in my hand). The answer is not 2 ¾ each or 2.75 for each child. The
dollar coins are not divisible into fractional pieces. Don't try thinking out of the box and pretend you're a
pirate. Using an axe and chopping the 3 remaining coins into pieces of eight. Then, giving each child 2 coins
and 6 pieces of eight or 2 6/8 or 2 ¾ or 2.75. If you do think this way, I will change my example to cans of
tomato soup. I dare you to try and chop up three cans of soup and give each kid ¾ of a can. Better yet,
7This content is available online at http://cnx.org/content/m18717/1.12/.
54 CHAPTER 4. 4. OFTEN USED DATA TYPES
living things like puppy dogs. After you divide them up with an axe, most children will not want the ¾ of a
dog.
What is modulus? It's the other part of the answer for integer division. It's the remainder. Remember
in grade school you would say, Eleven divided by four is two remainder three. In C++ programming
language the symbol for the modulus operator is the percent sign (%).
Example 4.7
11 % 4
Thus, the answer or value of this expression is 3 or the remainder part of integer division.
Denition 4.9: modulus
The remainder part of integer division.
Many compilers require that you have integer operands on both sides of the modulus operator or you will
get a compiler error. In other words, it does not make sense to use the modulus operator with oating-point
operands.
Don't let the following items confuse you.
Example 4.8
6 / 24 which is different from 6 % 24
How many times can you divide 24 into 6? Six divied by 24 is zero. This is dierent from: What is the
remainder of 6 divided by 24? Six, the remainder part given by modulus.
Exercise 4.1 (Solution on p. 57.)
Evaluate the following division expressions:
1. 14 / 4
2. 5 / 13
3. 7 / 2.0
Exercise 4.2 (Solution on p. 57.)
Evaluate the following modulus expressions:
1. 14 % 4
2. 5 % 13
3. 7 % 2.0
4.6.2 Demonstration Program in C++
4.6.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
55
4.6.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le. Following the methods
of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction with
other learning materials.
Download from Connexions: Demo_Integer_Division_and_Modulus.cpp
8
4.7 Practice 4: Often Used Data Types9
4.7.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Design a program, to include: understanding the problem, completing Internet research as appropriate,
create a pseudocode document and create a test data document.
3. Write the C++ code for a program using appropriate planning documentation that you or another has
designed.
4.7.2 Memory Building Activities
Link to: MBA 04
10
4.7.3 Exercises
Exercise 4.3 (Solution on p. 57.)
Answer the following statements as either true or false:
1. Integer data types are stored with a mantissa and an exponent.
2. Strings are identied by single quote marks.
3. An operand is a value that receives the operator's action.
4. Arithmetic assignment is a shorter way to write some expressions.
5. Integer division is rarely used in computer programming.
4.7.4 Miscellaneous Items
None at this time.
4.7.5 Lab Assignment
4.7.5.1 Creating a Folder or Sub-Folder for Chapter 04 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
8See the le at http://cnx.org/content/m18717/latest/Demo_Integer_Division_and_Modulus.cpp
9This content is available online at http://cnx.org/content/m22456/1.1/.
10See the le at http://cnx.org/content/m22456/latest/index.html
56 CHAPTER 4. 4. OFTEN USED DATA TYPES
• Chapter_04 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
4.7.5.2 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• The Problem/Task  I have a friend who is visiting from Europe and he does not understand Fahrenheit
temperatures. We need to write a program that allows him to enter the temperature in Fahrenheit (as
announced on TV or radio) and convert it to Celsius. Clue 1: Fahrenheit water freezes at 32 degrees
and boils at 212 degrees. Celsius water freezes a zero (0) degrees and boils at 100 degrees. Google
the internet (how to convert Fahrenheit to Celsius) if you need more help. Clue 2: You can also use
Internet sites to do a conversion and thus create your test data.
• You only need two variables in this program: Fahrenheit and Celsius both of which should be the
integer data type. When you convert the Fahrenheit to Celsius you will need to use a oating-point
expression doing oating-point calculations for precision. Additionally we want to round up or down
the Celsius answer by adding 0.5 to the calculation expression.
• Within your sub-folder: Chapter_04 you will need to create three les: Lab_04_Pseudocode.txt
and Lab_04_Test_Data.txt and Lab_04.cpp NOTE: It will be easier to copy some previous les
from another assignment and use those copies by renaming them and modifying them as appropriate.
The professor is expecting the items you create to have a similar format to those we have been using
in the course.
• Create your pseudocode, test data and source code les.
• Build (compile and run) your program. You have successfully written this program when it runs with
your test data and gives the predicted results.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
4.7.6 Problems
4.7.6.1 Problem 04a  Instructions
Decide on the data type and identier names for the following:
Problem: A men's clothing store that caters to the very rich wants to create a data base for its customers
that records clothing measurements. They need to record information for shoes, socks, pants, dress shirts
and casual shirts. HINT: You may need more than 5 data items.
57
Solutions to Exercises in Chapter 4
Solution to Exercise 4.1 (p. 54)
Answers:
1. 3
2. 0
3. 3.5 because one of the operands is a oating-point value, it is not integer division
Solution to Exercise 4.2 (p. 54)
Answers:
1. 2
2. 5
3. error because most compilers require both operands to be of the integer data type
Solution to Exercise 4.3 (p. 55)
Answers:
1. false
2. false
3. true
4. true
5. false
58 CHAPTER 4. 4. OFTEN USED DATA TYPES
Chapter 5
5. Integrated Development Environment
5.1 Integrated Development Environment1
5.1.1 IDE Overview
High-level language programs are usually written (coded) as ASCII text into a source code le. A unique le
extension (Examples: .asm .cob .for .pas .c .cpp) is used to identify it as a source code le. As you can guess
for our examples  Assembly, COBOL, FORTRAN, Pascal, C and C++ however, they are just ASCII
text les (other text les usually use the extension of .txt). The source code produced by the programmer
must be converted to an executable machine code le specically for the computer's CPU (usually an Intel
or Intel compatible CPU within today's world of micro computers). There are several steps in getting a
program from its source code stage to running the program on your computer. Historically, we had to use
several software programs (a text editor, a compiler, a linker and operating system commands) to make the
conversion and run our program. However, today all those software programs with their associated tasks
have been integrated into one program usually called a compiler. However, this one compiler program is
really many software items that create an environment used by programmers to develop software. Thus
the name: Integrated Development Environment or IDE.
The following gure shows the progression of activity in an IDE as a programmer enters the source code
and then directs the IDE to compile and run the program.
1This content is available online at http://cnx.org/content/m18920/1.8/.
59
60 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
Figure 5.1: Integrated Development Environment or IDE
Upon starting the IDE software the programmer usually indicates he wants to open a le for editing as
source code. As they make changes they might either do a save as or save. When they have nished
entering the source code, they usually direct the IDE to compile  run the program. The IDE does the
following steps:
1. If there are any unsaved changes to the source code le it has the test editor save the changes.
2. The compiler opens the source code le and does its rst step which is executing the pre-processor
compiler directives and other steps needed to get the le ready for the second step. The #include will
insert header les into the code at this point. If it encounters an error, it stops the process and returns
the user to the source code le within the text editor with an error message. If no problems encountered
it saves the source code to a temporary le called a translation unit.
3. The compiler opens the translation unit le and does its second step which is converting the
programming language code to machine instructions for the CPU, a data area and a list of items to
be resolved by the linker. Any problems encounted (usually a syntax or violation of the programming
language rules) stops the process and returns the user to the source code le within the text editor
with an error message. If no problems encountered it saves the machine instructions, data area and
linker resolution list as an object le.
61
4. The linker opens the program object le and links it with the library object les as needed. Unless all
linker items are resolved, the process stops and returns the user to the source code le within the text
editor with an error message. If no problems encountered it saves the linked objects as an executable
le.
5. The IDE directs the operating system's program called the loader to load the executable le into the
computer's memory and have the Central Processing Unit (CPU) start processing the instructions. As
the user interacts with the program, entering his test data, he might discover that the outputs are not
correct. These types of errors are called logic errors and would require him to return to the source
code to change the algorithm.
5.1.2 Resolving Errors
Despite our best eorts at becoming perfect programmers, we will create errors. Solving these errors is
known as debugging your program. The three types of errors in the order that they occur are:
1. Compiler
2. Linker
3. Logic
There are two types of compiler errors; pre-processor (1st step) and conversion (2nd step). A review of
Figure 1 above shows the four arrows returning to the source code so that the programmer can correct the
mistake.
During the conversion (2nd step) the complier might give a warning message which in some cases may
not be a problem to worry about. For example: Data type demotion may be exactly what you want your
program to do, but most compilers give a warning message. Warnings don't stop the compiling process but
as their name implies, they should be reviewed.
The next three gures show IDE monitor interaction for the Bloodshed Dev-C++ 5 compiler/IDE.
62 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
Figure 5.2: Compiler Error (the red line is where the complier stopped)
63
Figure 5.3: Linker Error (no red line with an error message describing linking problem)
64 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
Figure 5.4: Logic Error (from the output within the Black Box area)
5.1.3 Demonstration Program in C++
5.1.3.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
5.1.3.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Pre_Processor_Compiler_Errors.cpp
2
Download from Connexions: Demo Compiler_Conversion_Errors.cpp
3
2See the le at http://cnx.org/content/m18920/latest/Demo_Pre_Processor_Compiler_Errors.cpp
3See the le at http://cnx.org/content/m18920/latest/Demo_Compiler_Conversion_Errors.cpp
65
Download from Connexions: Demo_Linker_Errors.cpp
4
Download from Connexions: Demo_Logic_Errors.cpp
5
5.1.4 Denitions
Denition 5.1: text editor
A software program for creating and editing ASCII text les.
Denition 5.2: compiler
Converts source code to object code.
Denition 5.3: pre-processor
The rst step the complier does in converting source code to object code.
Denition 5.4: linker
Connects or links object les into an executable le.
Denition 5.5: loader
Part of the operating system that loads executable les into memory and direct the CPU to start
running the program.
Denition 5.6: debugging
The process of removing errors from a program. 1) compiler 2) linker 3) logic
Denition 5.7: warning
A compiler alert that there might be a problem.
5.2 Standard Input and Output6
5.2.1 General Discussion
Every task we have the computer do happens inside the central processing unit (CPU) and the associated
memory. Once our program is loaded into memory and the operating system directs the CPU to start
executing our programming statements the computer looks like this:
4See the le at http://cnx.org/content/m18920/latest/Demo_Linker_Errors.cpp
5See the le at http://cnx.org/content/m18920/latest/Demo_Logic_Errors.cpp
6This content is available online at http://cnx.org/content/m18835/1.3/.
66 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
Figure 5.5: CPU  Memory  Input/Output Devices
Our program now located in the memory has basically two areas:
• Machine instructions  our instructions for what we want done
• Data storage  our variables that we using in our program
Often our program contains instructions to interact with the input/output devices. We need to move data
into (read) and/or out of (write) the memory data area. A device is a piece of equipment that is electronically
connected to the memory so that data can be transferred between the memory and the device. Historically
this was done with punched cards and printouts. Tape drives were used for electronic storage. With time
we migrated to using disk drives for storage with keyboards and monitors (with monitor output called soft
copy) replacing punch cards and printouts (called hard copy).
Most computer operating systems and by extension programming languages have identied the keyboard
as the standard input device and the monitor as the standard output device. Often the keyboard and
monitor are treated as the default device when no other specic device is indicated.
67
5.2.2 Standard I/O within C++
The developers of the C++ programming language decided to provide some of the more technical code needed
to interact with the operating system and the I/O devices. In the following example the include directive
inserts a le that contains code from the Input-Output Stream library. This le contains necessary code
to use cout and cin for sending data to the monitor or getting data from the keyboard.
#include iostream
You should think of cout and cin as being locations that you can send to or receive data from; similar in
concept to any other variable storage location within the data area of our program. The C++ programming
language has two operators to use in conjunction with I/O devices.
Action C ++ operator symbol Used with
insertion operator (write) (a pair of less than symbols) cout
extraction operator (read) (a pair of greater than symbols) cin
Table 5.1
Consider the following code:
Example 5.1: Insertion and Extraction
int age1; // variable set up
then later on in our program
cout nEnter the age of the first person ---: ;
cin age1;
Using the cout the programmer displays (or inserts) a prompting message on the monitor for the user to
see. Using the cin the user types an integer value and hits the enter key and the computer extracts the value
from the keyboard and stores it into the variable named age1. Within the computer all data are stored as
numbers and thus part of the technical code provided by the developers of the C++ programming language
that is within the Input-Output Stream library converts data from numbers to those symbols we are used
to seeing as humans and vice versa. Example: If the user entered the numeral digits 57 and hit the enter
key  the extraction operator would convert the 57 into a binary number and move the binary number into
the integer storage place named age1.
The cout which uses the standard output device does not format the output into a Graphical User
Interface (GUI) where you have a mouse to use. A modern operating system using GUI normally opens a
black screen output box that would be similar to how the monitor was used when rst developed in the
1960's. That is the default of how cout is normally implemented by most compilers.
The output message has a unique item worth mentioning. At the very front of the message is a backslash
followed by the letter n. They do not get printed on the monitor. It is a special code (called a printer escape
code) telling the printer to go to a new line. Printer! I thought we were using a monitor? We are but the
code is a left over from the early days of printer output. The backslash tells the printer or monitor that the
next letter is a command. The letter n is used for telling the printer or monitor to go to the front of a new
line.
5.2.3 Denitions
Denition 5.8: device
A piece of equipment that is electronically connected to the memory so that data can be transferred
between the memory and the device.
68 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
Denition 5.9: standard input
The keyboard.
Denition 5.10: standard output
The monitor.
Denition 5.11: insertion
Aka writing or sending data to an output device.
Denition 5.12: extraction
Aka reading or getting data from an input device.
Denition 5.13: escape code
An code directing an output device to do something.
5.3 Compiler Directives7
5.3.1 General Discussion
A compiler directive is an instruction to the compiler to complete a task before formally starting to compile
the program, thus they are sometimes called pre-processor directives. Among other items, during the pre-
processor step the compiler is looking for compiler directives and processes them as they are encountered.
After completing the tasks as directed, the compiler proceeds to its second step where it checks for syntax
errors (violations of the rules of the language) and converts the source code into an object code that contains
machine language instructions, a data area, and a list of items to be resolved when he object le is linked to
other object les.
Within C++ the pound symbol or # as the rst character of a line indicates that the next word is a
directive (or command word) to be evaluated. The two most common compiler directives are:
1. include  with the item following include being the name of a le that is to be inserted at that place
in the le. The les are often called Header Files because the include directive is normally inserted
toward the top of the le (at the head) as one of the rst items.
2. dene  with the item followed by an identier name and a value. This identier name and value is
stored by the compiler and when it encounters the identier name in the program it substitutes the
value for the identier name.
In the following example the include directive is inserting a le that contains code from the Input-Output
Stream library. This le contains necessary code to use cout and cin for sending data to the monitor or
getting data from the keyboard.
#include iostream
In the next example the dene directive is being used to handle a constant (called a dened constant).
Example 5.2: Subtituting PI
#define PI 3.14159
....Later on in the program when it encounters PI
....it will replace or substitute PI with the value 3.14159
....For example:
area_circle = radius * radius * PI;
would become:
area_circle = radius * radius * 3.14159;
7This content is available online at http://cnx.org/content/m18787/1.6/.
69
Of note, compiler directives in C++ do not have a semi-colon after them. Within C++ programming
instructions or statements end with a semi-colon, but not compiler directives.
5.3.2 Denitions
Denition 5.14: compiler directive
An instruction to the compiler to complete a task before formally starting to compile the program.
Denition 5.15: include
A compiler directive to insert the contents of a le into the program.
5.4 Practice 5: Integrated Development Environment8
5.4.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Be able to list the categories and give examples of errors encountered when using an Integrated Devel-
opment Environment (IDE).
3. Write the C++ code for a program using appropriate planning documentation that you or another has
designed.
5.4.2 Memory Building Activities
Link to: MBA 05
9
5.4.3 Exercises
Exercise 5.1 (Solution on p. 72.)
Answer the following statements as either true or false:
1. IDE means Integer Division Expression.
2. Most modern compilers are really an IDE type of software, not just a compiler.
3. cin and cout are used for the standard input and output in C++.
4. Programming errors are extremely easy to understand and x.
5. All C++ programs will have at least one include type of compiler directive.
5.4.4 Miscellaneous Items
None at this time.
8This content is available online at http://cnx.org/content/m22457/1.1/.
9See the le at http://cnx.org/content/m22457/latest/index.html
70 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
5.4.5 Lab Assignment
5.4.5.1 Creating a Folder or Sub-Folder for Chapter 05 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_05 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
5.4.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Solution_Lab_02_Pseudocode.txt
10
Download from Connexions: Solution_Lab_02_Test_Data.txt
11
5.4.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Copy into your sub-folder: Chapter_05 one of the source code listings that we have used. We suggest
the Lab 01 source code and rename the copy: Lab_05.cpp
• Modify the code to follow the Solution_Lab_02_Pseudocode.txt le.
• Build (compile and run) your program. You have successfully written this program if when it runs and
you use the test data [use the test data as supplied as the solution for Lab 02] it gives the predicted
results.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
5.4.6 Problems
5.4.6.1 Problem 05a  Instructions
List and describe what might cause the four (4) types of errors encountered in a program using an Integrated
Development Environment software product.
5.4.6.2 Problem 05b  Instructions
Identify four (4) problems with this code listing (HINT: The four (4) types of errors encountered in a program
using an Integrated Development Environment software product).
Example 5.3: C++ Source Code Listing
//******************************************************
// Filename: Compiler_Test.cpp
// Purpose: Average the ages of two people
10See the le at http://cnx.org/content/m22457/latest/Solution_Lab_02_Pseudocode.txt
11See the le at http://cnx.org/content/m22457/latest/Solution_Lab_02_Test_Data.txt
71
// Author: Ken Busbee; © Kenneth Leroy Busbee
// Date: Jan 5, 2009
// Comment: Main idea is to be able to
// debug and run a program on your compiler.
//******************************************************
// Headers and Other Technical Items
#include iostrern
using namespace std;
// Function Prototypes
void pause(void);
// Variables
int age1;
int age2;
double answear;
//******************************************************
// main
//******************************************************
int main(void)
{
// Input
cout nEnter the age of the first person ---: ;
cin age1;
cout nEnter the age of the second person --: ;
cin age2;
// Process
answer = (age1 + age2) / 3.0;
// Output
cout nThe average of their ages is --------: ;
cout answer;
pause();
return 0;
}
//******************************************************
// End of Program
//******************************************************
72 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT
Solutions to Exercises in Chapter 5
Solution to Exercise 5.1 (p. 69)
Answers:
1. false
2. true
3. true
4. false
5. true
Chapter 6
6. Program Control Functions
6.1 Pseudocode Examples for Functions1
6.1.1 Concept
No standard for pseudocode syntax exists. However, there are some commonly followed conventions to help
make pseudocode written by one programmer easily understood by another programmer. The following
describes a method for using pseudocode for functions that would be understood by programmers. Five
concepts are:
• Use a beginning phrase word to start the function
• Use a communication phrase word to identify the items being passed into the function
• Use indentation to show the action part of the function
• Use a communication phrase word to identify the items being passed out of the function
• Use an ending phrase word to end the function
• Use a calling phrase word to direct your program to use a fucntion
The following is a suggested outline of function phrase words:
Item/Purpose Starting Phrase Word Ending Phrase Word
Beginning Function N/A
Communication In Pass In: none
Action N/A N/A
Communication Out Pass Out: none
Ending N/A Endfunction
Calling a Function Call: none
Table 6.1
6.1.2 Examples
Here are some examples showing functions dened in pseudocode using our conventions as described above.
Example 6.1: pseudocode: Function with no parameter passing
1This content is available online at http://cnx.org/content/m19136/1.6/.
73
74 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
Function clear monitor
Pass In: nothing
Direct the operating system to clear the monitor
Pass Out: nothing
Endfunction
Example 6.2: pseudocode: Function with parameter passing
Function delay program so you can see the monitor
Pass In: integer representing tenths of a second
Using the operating system delay the program
Pass Out: nothing
Endfunction
Example 6.3: pseudocode: Function main calling the clear monitor function
Function main
Pass In: nothing
Doing some lines of code
Call: clear monitor
Doing some lines of code
Pass Out: value zero to the operating system
Endfunction
6.1.3 Denitions
Denition 6.1: phrase word
Words used to make pseudocode logic clear to any reader.
6.2 Hierarchy or Structure Chart2
6.2.1 Overview
The hierarchy chart (also known as a structure chart) shows the relationship of various units. Its
name comes from its general use in showing the organization (or structure) of a business. The President
at the top, then vice presidents on the next level, etc. Within the context of a computer program it shows
the relationship between modules (or functions). Detail logic of the program is not presented. It does
represent the organization of the functions used within the program showing which functions are calling on
a subordinate function. Those above are calling those on the next level down.
Hierarchy charts are created by the programmer to help document a program. They convey the big
picture of the modules (or functions) used in a program.
2This content is available online at http://cnx.org/content/m18682/1.3/.
75
Figure 6.1: Hierarchy or Structure chart for a program that has ve functions.
6.2.2 Denitions
Denition 6.2: hierarchy chart
Convey the relationship or big picture of the various functions in a program.
Denition 6.3: structure chart
Another name for a hierarchy chart.
6.3 Program Control Functions3
6.3.1 Prerequisite Material
Critical to this module is the review of several Connexions modules:
1. m_18861  Titled: Modularization and C++ Program Layout
3This content is available online at http://cnx.org/content/m19145/1.8/.
76 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
2. m_19136  Titled: Pseudocode Examples for Functions
3. m_18682  Titled: Hierarchy or Structure Chart
You should review these materials before proceeding. If you are viewing this module on-line, links to these
items are in the Links box to your right.
6.3.2 Concept of Modularization
The concept is everywhere present in the real world about us. Simply put it is to take a large compli-
cated problem and to divide it into smaller manageable pieces. The hierarchy chart of any large
organization (government unit, company, university, hospital, etc.) will show levels of people with job titles
that indicate a dierent area of responsibility. Each person is a small piece of the overall workings of the
organization. Each person can concentrate on their unique talent or task to make sure it works properly.
Collectively they accomplish the goals of the organization.
Additionally, the concept has been around for a long time. A village of 300 years ago had farmers, tailors,
butchers, blacksmiths, etc. Manufacturing is a prime example of not just work being modularized but the
product itself is viewed in terms of modules or systems (Example of a automobile: engine, steering, brakes,
etc.).
The world of computers, both hardware (equipment) and software (computer programs), also uses this
modular concept. Thus, the concept migrates to a single computer program; allowing us to modularize the
program into manageable tasks called functions.
6.3.3 Program Control Functions
Program Control functions normally to do not communicate information to each other but use a common
area for variable storage. The rules for how data is communicated in and out of a function vary greatly by
programming language, but the concept is the same. The data items passed (or communicated) are called
parameters. Thus the wording: parameter passing. However, with program control functions we use
the data communication option of no communication in  with no communication out. Our data
variables and constants are placed in a common area available to all functions (called global scope).
The identier names for program control functions usually imply a task to be accomplished, such as
get-data, process-data or show-results. As you learn to write more complicated programs the number of
lines of code will increase. Prudence dictates that it would be benecial to divide the program into functions
that perform unique tasks. The larger the program the more need for modularization or creating of program
control functions.
Depending on the programming language, there is a formal way to:
1. dene a function (it's denition or the code it will execute))
2. call a function
3. declare a function (a prototype is a declaration to a complier)
One of the easier ways to understand program control function is to view an example. Even if you don't
know the C++ programming language, you can study the materials to help understand the modularization
process.
6.3.4 Demonstration Program in C++
6.3.4.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
77
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
6.3.4.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on some of the links and select Save Target As in order to download some of the les.
Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s)
in conjunction with other learning materials.
Download from Connexions: Demo_Program_Control_Functions_before_Compiler_Test.cpp
4
Download from Connexions: Demo_Program_Control_Functions_Pseudocode.txt
5
Download from Connexions: Demo_Program_Control_Functions_Hierarchy_Chart.jpg
6
Download from Connexions: Demo_Program_Control_Functions.cpp
7
6.3.4.3 Study the Materials Collectively to Understand Modularization
The four items represent a progression from no modularization to modularization:
1. Program code before it is modularized
2. Modularized pseudocode and a hierarchy chart for the program
3. Program code that has been modularized
The simplicity of the program should not be considered during this review. It is obvious that the program
does not need modularization. The example is to show or demonstrate how to modularize a program for
program control.
6.3.5 Denitions
Denition 6.4: common area
An area of the program where variables and constants are dened so that they are available to all
functions.
6.4 Void Data Type8
6.4.1 General Discussion
The void data type has no values and no operations. It's a data type that represents the lack of a data
type.
C++ Reserved Word void
Represent Nothing
Size N/A or None
Normal Signage N/A
Domain (Values Allowed) None
Table 6.2
4See the le at
http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions_before_Compiler_Test.cpp
5See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions_Pseudocode.txt
6See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions_Hierarchy_Chart.jpg
7See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions.cpp
8This content is available online at http://cnx.org/content/m18655/1.3/.
78 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
This data type was added in the transition from C to C++. In C by default a function returned an
integer data type. Some functions don't return a value of any kind. Thus, the need to have a data type that
indicates nothing is being returned. The void data type is mainly used in the denition and prototyping of
functions to indicate that either nothing is being passed in and/or nothing is being passed out.
6.4.2 Denitions
Denition 6.5: void data type
A data type that has no values or operators and is used to represent nothing.
6.5 Documentation and Making Source Code Readable9
6.5.1 General Discussion
We are going to consider a simple program that might be used for testing a compiler to make sure that it is
installed correctly.
Example 6.4: Compiler_Test.cpp source code
//******************************************************
// Filename: Compiler_Test.cpp
// Purpose: Average the ages of two people
// Author: Ken Busbee; © Kenneth Leroy Busbee
// Date: Jan 5, 2009
// Comment: Main idea is to be able to
// debug and run a program on your compiler.
//******************************************************
// Headers and Other Technical Items
#include iostream
using namespace std;
// Function Prototypes
void pause(void);
// Variables
int age1;
int age2;
double answer;
//******************************************************
// main
//******************************************************
int main(void)
9This content is available online at http://cnx.org/content/m18912/1.3/.
79
{
// Input
cout nEnter the age of the first person ---: ;
cin age1;
cout nEnter the age of the second person --: ;
cin age2;
// Process
answer = (age1 + age2) / 2.0;
// Output
cout nThe average of their ages is --------: ;
cout answer;
pause();
return 0;
}
//******************************************************
// pause
//******************************************************
void pause(void)
{
cout nn;
system(PAUSE);
cout nn;
return;
}
//******************************************************
// End of Program
//******************************************************
Within the programming industry there is a desire to make software programs easy to maintain. The desire
centers in money. Simply put, it costs less money to maintain a well written program. One important aspect
of program maintenance is making source code listings clear and as easy to read as possible. To that end we
will consider the following:
1. Documentation
2. Vertical Alignment
3. Appropriate use of Comments
4. Banners for Functions
5. Block Markers on Lines by Themselves
6. Indent Block Markers
7. Meaningful Identier Names Consistently Typed
8. Appropriate use of Typedef
Let's cover each item in more detail.
80 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
6.5.1.1 Documentation
Documentation is usually placed at the top of the program using several comment lines. The amount of
information would vary based on the requirements or standards of the company who is paying its employees
or independent contractors to write the code. Notice the indication of revision dates.
6.5.1.2 Vertical Alignment
You see this within the documentation area. All of the items are aligned up within the same column. This
vertical alignment occurs again when the variables are dened. When declaring variable or constants many
textbooks put several items on one line; like this:
Example 6.5: Common Textbook Dening of Variables
float length, width, height, price_gal_paint, total_area, total_cost;
int coverage_gal_paint, total_gal_paint;
However common this is in textbooks, it would generally not be acceptable to standards used in most
companies. You should declare each item on its own line; like this:
Example 6.6: Proper Dening of Variables with Vertical Alignment
float length;
float width;
float height;
float price_gal_paint;
int coverage_gal_paint;
float total_area;
int total_gal_paint;
float total_cost;
This method of using one item per line is more readable by humans. It is quicker to nd an identier name,
because you can read the list vertically faster than searching horizontally. Some programmers list them in
alphabetic order, especially when the number of variables exceeds about twenty.
The lines of code inside either function are also aligned vertically and indented two spaces from the left.
The indentation helps set the block o visually.
6.5.1.3 Appropriate use of Comments
You can see through the source code short little comments that describe an area or section. Note the use of
input, processing and output which are part of the IPO concept within the program design.
6.5.1.4 Banners for Functions
Note the use of comments in the form of a banner before each function.
Example 6.7: Comments as a Banner
81
//******************************************************
// main
//******************************************************
The function name is placed with two lines of asterisks. It makes it extremely easy to nd each function
denition because you don't have to read the functions to see where the one ends and the next one begins.
You can quickly read the function names within the banners.
6.5.1.5 Block Markers on Lines by Themselves
Within many languages there is a method to identify a group of programming statements as a unit. With
C++ the functions use a set of symbols, the braces {}, to identify a block of code, sometimes referred to
as a compound statement. Braces are used in other aspects of programs, but for now we will look at this
simple example. These braces have a tendency to cause problems, especially when they don't have a proper
opening brace associated with a proper closing brace. To solve that problem many programmers simply put
a brace on a line by itself and make sure the opening brace and closing brace are in the same vertical column.
6.5.1.6 Indent Block Markers
A block of code associated with a function or with a control structure is indented two or three spaces. When
blocks of code are nested each nesting is indented two or three spaces. In our example above the blocks of
code for the function denitions are indented two spaces.
6.5.1.7 Meaningful Identier Names Consistently Typed
As the name implies identier names should clearly identify who (or what) you are talking about. Calling
you spouse Snooky may be meaningful to only you. Others might need to see her full name (Jane
Mary Smith) to appropriately identify who you are talking about. The same concept in programming is
true. Variables, constants, functions, typedefs and other items should use meaningful identier names.
Additionally, those names should be typed consistently in terms of upper and lower case as they are used in
the program. Don't dene a variable as: Pig and then type it later on in your program as: pig.
6.5.1.8 Appropriate use of Typedef
Many programming languages have a command that allows for the creation of an identier name that
represents a data type. The new identier name is described or connected to a real data type. This feature
is not demonstrated in the code above and is often a confusing concept. It is a powerful way to help document
a program so that it is meaningful, but is often used by more experienced programmers.
6.5.2 Denitions
Denition 6.6: documentation
A method of preserving information useful to others in understanding an information system or
part thereof.
Denition 6.7: vertical alignment
A method of listing items vertically so that they are easier to read quickly.
Denition 6.8: comments
Information inserted into a source code le for documentation of the program.
Denition 6.9: banners
A set of comment lines used to help separate the functions and other sections of a program.
82 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
Denition 6.10: braces
Used to identify a block of code in C++.
Denition 6.11: indention
A method used to make sections of source code more visible.
Denition 6.12: meaningful
A rule that says identier names must be easily understood by another reading the source code.
Denition 6.13: consistent
A rule that says to type identier names in upper and lower case consistently throughout your
source code.
6.6 Practice 6: Program Control Functions10
6.6.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Given pseudocode, test data and source code of an existing program, modify the pseudocode and source
code to create program control functions.
6.6.2 Memory Building Activities
Link to: MBA 06
11
6.6.3 Exercises
Exercise 6.1 (Solution on p. 87.)
Answer the following statements as either true or false:
1. Pseudocode has a strict set of rules and is the same everywhere in the computer programming
industry.
2. Hierarchy Charts and Structure Charts are basically the same thing.
3. Program Control functions are used to simply sub divide and control the program.
4. The void data type is rarely used in C++.
5. Making source code readable is only used by beginning programmers.
6.6.4 Miscellaneous Items
None at this time.
10This content is available online at http://cnx.org/content/m22458/1.2/.
11See the le at http://cnx.org/content/m22458/latest/index.html
83
6.6.5 Lab Assignment
6.6.5.1 Creating a Folder or Sub-Folder for Chapter 06 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_06 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
6.6.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Solution_Lab_01.cpp
12
Download from Connexions: Solution_Lab_01_Pseudocode.txt
13
Download from Connexions: Solution_Lab_01_Test_Data.txt
14
Download from Connexions: Solution_Lab_01m_with_Program_Control.cpp
15
Download from Connexions: Solution_Lab_01m_Pseudocode_with_Program_Control.txt
16
Download from Connexions: Solution_Lab_01m_Hierarchy_Chart.jpg
17
Download from Connexions: Solution_Lab_03.cpp
18
Download from Connexions: Solution_Lab_03_Pseudocode.txt
19
Download from Connexions: Solution_Lab_03_Test_Data.txt
20
6.6.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Navigate to your sub-folder: Chapter_06. Review the original Lab 01 materials. Compile and run the
Lab 01 source code. Then review and compare the original Lab 01 materials to modularized Lab 01
materials taking note of the conversion to program control functions. Compile and run the Lab 01m
source code. Review as needed the course materials. Email your professor if you have any questions.
• We have supplied the solution to the Lab 03 assignment. Review the Lab 03 assignment by compiling
and running the Lab 03 source code.
• You need to copy the Lab 03 source code le and pseudocode le to make the following new les:
Lab_06.cpp and Lab_06_Pseudocode.txt
• Modify the Lab 06 pseudocode le to implement program control functions as shown in the demon-
stration materials.
• Modify the Lab 06 source code le to implement program control functions as shown in the demon-
stration materials.
• Build (compile and run) your program. You have successfully written this program if when it runs and
you use the test data [use the same test data as used in Lab 03] it gives the same results as Lab 03.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
12See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01.cpp
13See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01_Pseudocode.txt
14See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01_Test_Data.txt
15See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01m_with_Program_Control.cpp
16See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01m_Pseudocode_with_Program_Control.txt
17See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01m_Hierarchy_Chart.jpg
18See the le at http://cnx.org/content/m22458/latest/Solution_Lab_03.cpp
19See the le at http://cnx.org/content/m22458/latest/Solution_Lab_03_Pseudocode.txt
20See the le at http://cnx.org/content/m22458/latest/Solution_Lab_03_Test_Data.txt
84 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
6.6.6 Problems
6.6.6.1 Problem 06a  Instructions
Create a hierarchy chart for the following pseudocode example.
Example 6.8: pseudocode
******************************************************
Filename: Average_IQ.txt
Purpose: Average the IQs of two people
Author: Ken Busbee; © Kenneth Leroy Busbee
Date: Jan 17, 2009
******************************************************
Function main
Pass In: nothing
Call: get_iqs
Call: process_iqs
Call: show_average
Pass Out: zero to the OS
Endfunction
********************
Function get_iqs
Pass In: nothing
display a message asking user for the IQ of the first person
get the IQ of the first person from the keyboard
display a message asking user for the IQ of the second person
get the IQ of the second person from the keyboard
Pass Out: nothing
Endfunction
********************
Function process_iqs
Pass In: nothing
calculate the answer by adding the two IQs and
dividing by 2.0
Pass Out: nothing
Endfunction
********************
Function show_average
Pass In: nothing
display the answer with an appropriate message
Call: pause
Pass Out: nothing
Endfunction
85
********************
Function pause
Pass In: nothing
direct the operating system to pause the program
Pass Out: nothing
Endfunction
******************************************************
Potential Variables
Data Type Identifier Name
********* ***************
integer iq1
integer iq2
double answer
******************************************************
End of file
6.6.6.2 Problem 06b  Instructions
Identify some problems that make this code undocumented, unreadable or wrong in some other way.
Example 6.9: C++ source code
//******************************************************
// Author: Ken Busbee; © 2009 Kenneth Leroy Busbee
// Date: Jan 17, 2009
//******************************************************
#include iostream
using namespace std;
void pause(void);
int age1, age2;
double xx;
//******************************************************
// main
//******************************************************
int main(void)
{
// Input
86 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
cout nEnter the age of the first person ---: ;
cin %gt; age1;
cout nEnter the age of the second person --: ;
cin %gt; age2;
// Process
xx = (age1 + age2) / 2.0;
// Output
cout nThe average of their ages is --------: ;
cout xx;
pause();
return 0;
}
void pause(void)
{ cout nn;
system(PAUSE);
cout nn;
return; }
//******************************************************
// End of Program
//******************************************************
87
Solutions to Exercises in Chapter 6
Solution to Exercise 6.1 (p. 82)
Answers:
1. false
2. true
3. true
4. false
5. false
88 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
Chapter 7
7. Specic Task Functions
7.1 Specic Task Functions1
7.1.1 Prerequisite Material
Critical to this module is the review of two Connexions modules:
1. m_18861  Titled: Modularization and C++ Program Layout
2. m_19145  Titled: Program Control Functions
You should review these materials before proceeding. If you are viewing this module on-line, links to these
items are in the Links box to your right.
7.1.2 General Concept
Program Control functions which might have similar identier names usually perform slightly dierent tasks
in one program to another. Looking at the organizational chart or hierarchy chart for two companies, both
might have a vice president of production, but producing automobiles is dierent than producing ice cream.
Similar but dierent. As you go down deeper into an organization you might nd the job title of security
guard. Notice that the security guard at the automobile plant and the security guard at the ice cream plant
have exactly the same job. In fact, they are most likely interchangeable. Within programming when a task
gets specic it might be useable in several programs. The calculation of leap year is a good example. Needed
for the verication of dates, is there or is there not a 29
th of February for this year. Needed in thousands of
programs.
7.1.3 Specic Task Functions
To create good Specic Task functions you need to do all communication needed via parameter passing. Thus
all programs that will use the function will communicate in precisely the same way. In our leap year example,
you would communicate into the function the year and the function would return the communication of true
or false; meaning it is a leap year and there is a 29
th of February (true) or it is not a leap year (false).
The ability to modularize our program into specic task functions means that we can write the specic
task function once making sure it works correctly, then reuse it over and over in many programs. As you
can guess there is a balance. Most programs will have some program control functions and some specic
task functions. The key to deciding if the function should be a specic task function is usually rooted in the
uniqueness of the task so that it can be used in many programs. Specic task functions once created are
usually placed into a user dened library then shared with others for use in many programs.
1This content is available online at http://cnx.org/content/m19146/1.3/.
89
90 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS
7.1.4 Denitions
Denition 7.1: user dened library
A le containing specic task functions created by individuals to be used in many programs.
7.2 Global vs Local Data Storage2
7.2.1 General Discussion
The concept of global and local data storage is usually tied to the concept of scope. Scope is the area of the
program where an item (be it variable, constant, function, etc.) that has an identier name is recognized. In
our discussion we will use a variable and the place within a program where the variable is dened determines
its scope.
Global scope (and by extension global data storage) occurs when a variable is dened outside of a
function. When compiling the program it creates the storage area for the variable within the program's
data area as part of the object code. The object code has a machine code piece, a data area and linker
resolution instructions. Because the variable has global scope it is available to all of the functions within
your source code. It can even be made available to functions in other object modules that will be linked
to your code; however we will forgo that explanation now. A key wording change should be learned at this
point. Although the variable has global scope, technically it is available only from the point of denition
to the end of the program source code. That is why most variable with global scope are placed near
the top of the source code before any functions. This way they are available to all of the functions.
Local scope (and by extension local data storage) occurs when a variable is dened inside of a function.
When compiling, the compiler creates machine instructions that will direct the creation of storage locations
on an area known as the stack which is part of the computer's memory. These memory locations
exist until the function completes its task and returns to its calling function. In assembly language we talk
about items being pushed onto the stack and popped o the stack when the function terminates. Thus
the, stack is a reusable area of memory being used by all functions and released as functions terminate.
Although the variable has local scope, technically it is available only from the point of denition to the
end of the function. The parameter passing of data items into a function establishes them as local
variables. Additionally, any other variables or constants needed by the function usually occur near the top
of the function denition so that they are available during the entire execution of the function's code.
Scope is an important concept to modularization. Program Control functions usually use global scope
for variables and constants placing them near the top of the program before any functions. Specic Task
functions use only local scope variables by passing data as needed into the function with parameter passing
and creating local variables and constants as needed. Any information that needs to be communicated back
to the calling function is again done via parameter passing. This closed communications model that
passes all data into and out of a function creates an important predecessor concept for encapsulation which
is used in object oriented programming.
7.2.2 Denitions
Denition 7.2: global scope
Data storage dened outside of a function.
Denition 7.3: local scope
Data storage dened inside of a function.
Denition 7.4: data area
A part of an object code le used for storage of data.
2This content is available online at http://cnx.org/content/m19147/1.4/.
91
Denition 7.5: stack
A part of the computer's memory used for storage of data.
Denition 7.6: scope
The area of a source code le where an identier name is recognized.
7.3 Using a Header File for User Dened Specic Task Functions3
7.3.1 Concept: User Dened Specic Task Functions
Most companies have certain tasks that are unique to their company. Collectively the programming sta may
decide to build several functions and organize them into one or more user libraries. Specic task functions
are often built using a testing shell program. The sole purpose of the testing shell program is to create
the specic task functions and to test them to insure that they are working properly. Think of a clam, its
shell surrounds the important part, the pearl. A testing shell program surrounds the specic task function
(the important part). Usually the testing shell program will be used to create several functions that will be
placed into a user dened library. The process ows as follows:
1. The testing shell program with the specic task functions is built and thoroughly tested.
2. A copy of the source code is saved as the header le that will be placed in the user library. You
delete the main part of the program leaving a comments area, any needed include le references and
the specic task functions.
3. A copy of the header le is saved as the prototypes le. This is a text le that strips out the function
code, adds a semi colon to create the prototypes. The functions should be using meaningful identier
names, thus the prototypes should provide adequate information to others on how to call the function
with appropriate parameter passing.
4. Another copy of the source code is saved as a verify header program. You delete the functions and
provide an include that points to the header le. This program is compiled and run to make sure the
header le is working properly.
A good way to understand the concept is to review the four les described above that have been created by
a programmer. We will be using the C++ programming language, however the code is easy to understand
and will serve our needs well at explaining the concepts; even if you are not familiar with C++.
7.3.2 Demonstration Using C++
7.3.2.1 Creating a Folder or Sub-Folder for the Four Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Monitor_Header
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
7.3.2.2 Download the Four Files
Download and store the following les to your storage device in the appropriate folder. You may need to
right click on some of the links and select Save Target As in order to download some of the les.
Download from Connexions: Monitor_Testing_Shell.cpp
4
3This content is available online at http://cnx.org/content/m19346/1.4/.
4See the le at http://cnx.org/content/m19346/latest/Monitor_Testing_Shell.cpp
92 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS
Download from Connexions: udst_monitor.h
5
Download from Connexions: udst_monitor_prototypes.txt
6
Download from Connexions: Monitor_Verify_Header.cpp
7
7.3.2.3 Study the Files Collectively to Understand the Concepts
Take a few moments to review the les in conjunction with the concept discussion above. You should compile
and run the Monitor_Testing_Shell.cpp program.
7.3.2.4 Creating a Folder or Sub-Folder for your User Library
Depending on your compiler/IDE, you should decide where to create a folder that will hold the header
les you create. We suggest that you create the folder in conjunction with the compiler/IDE software. If
you were using the Bloodshed Dev-C++ 5 compiler/IDE you most likely installed the compiler/IDE
software at: C:Dev-Cpp if you installed it on your machine or at: DriveLetter:Dev-Cpp (where the
DriveLetter is the drive that represents your ash drive) if you installed it on a ash drive. We suggest
that you create a sub-folder at that location named:
• user_library
The path of: C:Dev-Cppuser_library would be created as the location for your user library if using
your machine installation. You can literally place it anywhere and name the library any name, but once you
decide on a place and name; you do not want to move or rename the folders.
7.3.2.5 Placing the Header File into the User Library
You need to copy the udst_monitor.h le placing it into the user_library folder just created. As you can
guess the udst stands for user dened specic task. The functions within this header le would be used
to control the interaction a user has with the monitor. The .h is a convention of the C++ programming
language and indicates a header le. Thus the identier name for the header le is very meaningful and
descriptive.
7.3.2.6 Verify that the Header File Works Properly
Review the Monitor_Verify_Header.cpp source code le and note the two include commands are dif-
ferent.
1. The Standard Library uses a less than and a greater than to bracket the Standard Library name of:
iostream
2. The user library uses quote marks to bracket the location of the header le. This identies to the
complier that we are specifying the exact le we want. We provide a complete le specication (drive,
path information, lename and extension).
3. Because this item is technically a string within C++, we must use two back slashes between the drive,
path(s) and lename. This is because the rst back slash assumes that the next character is an escape
code and if we really don't want an escape code but a back slash, the second back slash says no I
wanted a back slash.This string: C:Dev-Cppuser_libraryudst_monitor.h will be interpreted
to mean: C:Dev-Cppuser_libraryudst_monitor.h
Depending on what drive you are using, what path folder structure you are using and what you called your
folder; you may need to correct the include reference within the source code so that it properly references
the header le.
5See the le at http://cnx.org/content/m19346/latest/udst_monitor.h
6See the le at http://cnx.org/content/m19346/latest/udst_monitor_prototypes.txt
7See the le at http://cnx.org/content/m19346/latest/Monitor_Verify_Header.cpp
93
Compile and run the Monitor_Verify_Header.cpp program. Note: It should work exactly as the Moni-
tor_Testing_Shell.cpp program.
7.3.3 Denitions
Denition 7.7: udst
User Dened Specic Task
Denition 7.8: testing shell
A program used to create specic task functions.
Denition 7.9: header le
A le that contains items we want to have included toward the top of our source code.
7.4 Practice 7: Specic Task Functions8
7.4.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Given a testing shell program already coded and tested, create a user dened specic task header le,
a user dened specic task prototypes document and a source code program to verify that the header
le works properly.
7.4.2 Memory Building Activities
Link to: MBA 07
9
7.4.3 Exercises
Exercise 7.1 (Solution on p. 95.)
Answer the following statements as either true or false:
1. Scope refers to a brand of mouth wash.
2. User dened specic task functions are usually placed into a user dened library.
3. Local and global data storage is associated with the concept of scope.
4. Creating a header le for user dened specic task functions is a dicult task.
5. The stack is part of the computer's memory used for storage of data.
7.4.4 Miscellaneous Items
None at this time.
8This content is available online at http://cnx.org/content/m22459/1.1/.
9See the le at http://cnx.org/content/m22459/latest/index.html
94 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS
7.4.5 Lab Assignment
7.4.5.1 Creating a Folder or Sub-Folder for Chapter 07 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_07 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
7.4.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_07_Testing_Shell.cpp
10
7.4.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Navigate to your sub-folder: Chapter_07. Compile and run the Lab 07 Testing Shell source code. Note:
This program uses an include le that points to the udst_monitor.h le as explained in Connexions
Chapter 7 materials.
• Following same process as shown in the Connexions module Using a Header File for
User Dened Specic Task Functions that is within the Chapter 7 materials; make
the following les: udst_us_to_metric.h and udst_us_to_metric_prototypes.txt and
Lab_07_Verify_Header.cpp
• Copy the header le to your user library, then build (compile and run) your verify header program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
7.4.6 Problems
7.4.6.1 Problem 07a  Instructions
Create the pseudocode to solve the following specic task function:
Problem: An interior designer always needs to calculate the area of a room to determine the amount
of oor covering needed (usually carpet). The rooms are rectangular with the dimensions measured in feet
(with decimal fractions). The function however needs to return square yards. Hint: There are 3 lineal feet
to a yard.
7.4.6.2 Problem 07b  Instructions
Create test data the following specic task function:
Problem: An interior designer always needs to calculate the area of a room to determine the amount
of oor covering needed (usually carpet). The rooms are rectangular with the dimensions measured in feet
(with decimal fractions). The function however needs to return square yards. Hint: There are 3 lineal feet
to a yard.
10See the le at http://cnx.org/content/m22459/latest/Lab_07_Testing_Shell.cpp
95
Solutions to Exercises in Chapter 7
Solution to Exercise 7.1 (p. 93)
Answers:
1. false  Although Scope is a brand of mouth wash; we are looking for the computer related denition.
2. true
3. true
4. false  It may seem dicult at rst, but with a little practice it is really quite easy.
5. true
96 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS
Chapter 8
8. Standard Libraries
8.1 Standard Libraries1
8.1.1 Overview of Standard Libraries
Many common or standard functions, whose denitions have been written, are ready to be used in any
program. They are organized into a group of functions (think of them as several books) and are collectively
called a Standard Library There are many function organized into several libraries For example, within
C++ many math functions exist and have been coded (and placed into libraries). These functions were
written by programmers and tested to insure that they work properly. In most cases the functions were
reviewed by several people to double and triple check to insure that they did what was expected. We have
the advantage of using these functions with condence that they will work properly in our programs, thus
saving us time and money.
A main program must establish the existence of functions used in that program. Depending on the
programming language, there is a formal way to:
1. dene a function
2. declare a function (a prototype is a declaration to a compiler)
3. call a function
When we create functions in our program, we usually see them in the following order in our source code
listing:
1. declare the function (prototype)
2. call the function
3. dene the function
When we use functions created by others that have been organized into library, we include a header le in
our program which contains the prototypes for the functions. Just like functions that we create, we see them
in the following order in our source code listing:
1. declaring the function (prototype provided in the include le)
2. call the function (with parameter passing of values)
3. dene the function (it is either dened in the header le or the linker program provides the actual
object code from a Standard Library object area)
1This content is available online at http://cnx.org/content/m19202/1.4/.
97
98 CHAPTER 8. 8. STANDARD LIBRARIES
In most cases, the user can look at the prototype and understand exactly how the communications (parameter
passing) into and out of the function will occur when the function is called. Let's look at the math example
of absolute value. The prototype is:
int abs(int number);
Not wanting to have a long function name the designers named it: abs instead of absolute. This might
seem to violate the identier naming rule of using meaningful names, however when identier names are
established for standard libraries they are often shortened to a name that is easily understood by all who
would be using them. The function is of data type int, meaning that the function will return an integer
value. It is obvious that the integer value returned is the answer to the question, What is the absolute
value of the integer that is being passed into the function. This function is passed only one value; an int
number. If I had two integer variables named apple and banana; and I wanted to store the absolute value of
banana into apple; then a line of code to call this function would be:
apple = abs(banana);
Let's say it in English, pass the function absolute the value stored in variable banana and assign the
returning value from the function to the variable apple. Thus, if you know the prototype you can usually
properly call the function and use its returning value (if it has one) without ever seeing the denition of the
code (i.e. the source code that tells the function how to get the answer; that is written by someone else;
and either included in the header le or compiled and placed into an object library; and linked during the
linking step of the Integrated Development Environment (IDE).
8.1.2 Demonstration Program in C++
8.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
8.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to
right click on some of the links and select Save Target As in order to download some of the les. Following
the methods of your compiler/IDE, compile and run the program(s). Study the source code and/or other
le(s) in conjunction with other learning materials.
Download from Connexions: Demo_Standard_Libraries.cpp
2
Download from Connexions: Demo_Standard_Libraries_Listing.txt
3
8.1.3 Denitions
Denition 8.1: Standard Library
A set of specic task functions that have been added to the programming language for universal
use.
Denition 8.2: condence
The reliance that Standard Library functions work properly.
Denition 8.3: abs
A function within the cmath standard library in C++ which stands for absolute.
2See the le at http://cnx.org/content/m19202/latest/Demo_Standard_Libraries.cpp
3See the le at http://cnx.org/content/m19202/latest/Demo_Standard_Libraries_Listing.txt
99
8.2 Practice 8: Standard Libraries4
8.2.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Given a testing shell program already coded and tested, add another specic task function, and test
it, then create a user dened specic task header le, a user dened specic task prototypes document
and a source code program to verify that the header le works properly.
8.2.2 Memory Building Activities
Link to: MBA 08
5
8.2.3 Exercises
Exercise 8.1 (Solution on p. 101.)
Answer the following statements as either true or false:
1. The standard library is a set of specic task functions that have been added to the program-
ming language for universal use.
2. Programmers should not have condence that standard library functions work properly.
3. It would be easier to write programs without using specic task functions.
8.2.4 Miscellaneous Items
None at this time.
8.2.5 Lab Assignment
8.2.5.1 Creating a Folder or Sub-Folder for Chapter 08 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_08 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
8.2.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_08_Testing_Shell.cpp
6
4This content is available online at http://cnx.org/content/m22460/1.2/.
5See the le at http://cnx.org/content/m22460/latest/index.html
6See the le at http://cnx.org/content/m22460/latest/Lab_08_Testing_Shell.cpp
100 CHAPTER 8. 8. STANDARD LIBRARIES
8.2.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Navigate to your sub-folder: Chapter_08. Compile and run the Lab 08 Testing Shell source code. Note:
This program uses an include le that points to the udst_monitor.h le as explained in Connexions
Chapter 7 materials.
• You need to add another function to this testing shell titled: area_triangle that is to calculate the area
of a triangle. Dene the function, prototype it, and within the function main add an area for calling
the function (similar to the existing functions with test data). Be condent that it is working properly.
• Following same process as shown in the Connexions module Using a Header File for User De-
ned Specic Task Functions that is within the Chapter 7 materials; make the following les:
udst_geo_area.h and udst_geo_area_prototypes.txt and Lab_08_Verify_Header.cpp
• Copy the header le to your user library, then build (compile and run) your verify header program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
8.2.6 Problems
8.2.6.1 Problem 08a  Instructions
Write the C++ code to do the following specic task function.
Example 8.1: pseudocode
Function area_regular_hexagon
Pass In: side
Calculate: side times side times 3 times the square root of 0.75
Pass Out: the calculation
Endfunction
101
Solutions to Exercises in Chapter 8
Solution to Exercise 8.1 (p. 99)
Answers:
1. true
2. false
3. false
102 CHAPTER 8. 8. STANDARD LIBRARIES
Chapter 9
9. Character Data, Sizeof, Typedef,
Sequence
9.1 Character Data Type1
9.1.1 Overview of the Character Data Type
The character data type basically represents individual or single characters. Characters comprise a variety
of symbols such as the alphabet (both upper and lower case) the numeral digits (0 to 9), punctuation, etc.
All computers store character data in a one byte eld as an integer value. Because a byte consists of 8 bits,
this one byte eld has 28 or 256 possibilities using the positive values of 0 to 255.
Most microcomputers use the ASCII (stands for American Standard Code for Information Interchange
and is pronounced ask-key) Character Set which has established values for 0 to 127. For the values of 128
to 255 they usually use the Extended ASCII Character Set. When we hit the capital A on the keyboard, the
keyboard sends a byte with the bit pattern equal to an integer 65. When the byte is sent from the memory
to the monitor, the monitor converts the integer value of 65 to into the symbol of the capital A to display
on the monitor.
The character data type attributes include:
C++ Reserved Word char
Represent Single characters
Size 1 byte
Normal Signage Unsigned (positive values only)
Domain (Values Allowed) Values from 0 to 127 as shown in the standard
ASCII Character Set, plus values 128 to 255 from
the Extended ASCII Character Set
continued on next page
1This content is available online at http://cnx.org/content/m18669/1.5/.
103
104 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE
C++ syntax rule Single quote marks  Example: 'A'
Table 9.1
9.1.2 Demonstration Program in C++
9.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
9.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Character_Data_Type.cpp
2
9.1.3 Denitions
Denition 9.1: character
A data type representing single text characters like the alphabet, numeral digits, punctuation, etc.
Denition 9.2: ASCII
American Standard Code for Information Interchange
Denition 9.3: single quote marks
Used to create character type data within the C++ programming language.
9.2 Sizeof Operator3
9.2.1 Overview
Every data item, constants and variables, not only have a data type, but the data type determines how many
bytes the item will use in the memory of the computer. The size of each data type varies with the complier
being used and the computer. This eect is known as being machine dependent. Additionally, there have
been some size changes with upgrades to the language. In C the int data type was allocated 2 bytes of
memory storage on an Intel compatible central processing unit (cpu) machine. In C++ an int is allocated
4 bytes.
There is an operator named sizeof (. . . ) that is a unary operator, that is it has only one operand. The
operand is to the right of the operator and is placed within the parentheses if it is a data type. The operand
may be any data type (including those created by typedef). If an identier name it does not need to go
inside of the parentheses. It works for both variable and memory constant identier names. This operator
is unique in that it does its calculation at compile time for global scoped items and at run time for local
scoped items. Examples:
2See the le at http://cnx.org/content/m18669/latest/Demo_Character_Data_Type.cpp
3This content is available online at http://cnx.org/content/m18736/1.7/.
105
cout The size of an integer is:  sizeof (int);
The compiler would determine the byte size of an integer on the specic machine and in essence replaces
the sizeof operator with a value. Integers are usually 4 bytes long, thus the line of code would be changed
to:
cout The size of an integer is:  4;
If you place an identier name that represents a data storage area (variable or memory constant), it looks
at the denition for the identier name. NOTE: the parentheses are not needed and often not included for
an identier name.
Example 9.1: sizeof with a Variable
double money; // variable set up with initialization
then later on in the program
cout The size of money is:  sizeof money;
The compiler would determine the byte size of money by looking at the denition where it indicates that
the data type is double. The double data type on the specic machine (usually 8 bytes) would replace the
code and it would become:
cout The size of money is:  8;
9.2.2 Denitions
Denition 9.4: sizeof
An operator that tells you how many bytes a data type occupies in storage.
9.3 Typedef - An Alias4
9.3.1 General Discussion
The typedef statement allows the programmer to create an alias, or synonym, for an existing data type.
This can be useful in documenting a program. The C++ programming language syntax is:
typedef the real data type the alias identifier name;
Let's say a programmer is using a double data type to store the amount of money that is being used for
various purposes in a program. He might dene the variables as follows:
Example 9.2: Regular Denition of Variables
double income;
double rent;
double vacation;
However, he might use the typedef statement and dene the variables as follows:
Example 9.3: Using typedef when Dening Variables
4This content is available online at http://cnx.org/content/m18741/1.4/.
106 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE
typedef double cash;
the typedef must be defined before its use
cash income;
cash rent;
cash vacation;
The typedef statement is not used very often by beginning programmers. It usually creates more confusion
than needed, thus stick to using the normal data types at rst.
9.3.2 Denitions
Denition 9.5: typedef
Allows the programmer to create an alias, or synonym, for an existing data type.
9.4 Sequence Operator5
9.4.1 General Discussion
The sequence (or comma) operator is used to separate items. It has several uses, four of which are listed
then demonstrated:
1. To separate identier names when declaring variables or constants
2. To separate several parameters being passed into a function
3. To separate several initialization items or update items in a for loop
4. Separate values during the inititalization of an array
This rst example is often seen in textbooks, but this method of declaring variables is not preferred. It is
dicult to quickly read the identier names.
int pig, dog, cat, rat;
The following vertical method of declaring variables or constants is preferred.
Example 9.4: Preferred Vertical Method of Dening Variables
int pig;
int dog;
int cat;
int rat;
The data types and identier names (known as parameters) are separated from each other. This example is
a function prototype.
double area_trapezoid(double base, double height, double top);
In the syntax of a for loop you have three parts each separated by a semi-colon. The rst is the initial-
ization area which could have more than one initialization. The last is the update area which could have
more than one update. Mutiple initializations or updates use the comma to separate them. This example is
only the rst line of a for loop.
for(x = 1, y = 5; x  15; x++, y++)
The variable ages is an array of integers. Initial values are assigned using block markers with the values
separated from each other using a comma.
int ages[] = {2,4,6,29,32};
5This content is available online at http://cnx.org/content/m18690/1.7/.
107
9.4.2 Denitions
Denition 9.6: sequence
An operator used to separate multiple occurrences of an item.
9.5 Practice 9: Character Data, Sizeof, Typedef, Sequence6
9.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Given appropriate documents produced by a System Analyst, create planning documents (pseudocode
and test data), then a source code program that accomplishes the goals of the program.
9.5.2 Memory Building Activities
Link to: MBA 09
7
9.5.3 Exercises
Exercise 9.1 (Solution on p. 109.)
Answer the following statements as either true or false:
1. The character data type in C++ uses the double quote marks, like: char grade = A;
2. Sizeof is an operator that tells you how many bytes a data type occupies in storage.
3. Typedef helps people who can't hear and is one of the standard accommodation features of a
programming language for people with a learning disability.
4. The sequence operator should be used when dening variables in order to save space.
5. Programming can be both enjoyable and frustrating.
9.5.4 Miscellaneous Items
None at this time.
9.5.5 Lab Assignment
9.5.5.1 Creating a Folder or Sub-Folder for Chapter 09 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_09 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
6This content is available online at http://cnx.org/content/m22461/1.2/.
7See the le at http://cnx.org/content/m22461/latest/index.html
108 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE
9.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_09_Narrative_Description.txt
8
Download from Connexions: Lab_09_Aerial_View_Center_Pivot_Irrigation.jpg
9
Download from Connexions: Lab_09_Hierarchy_Chart.jpg
10
9.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Review the Connexions module Systems Development Life Cycle within the Chapter 1 materials.
Think of yourself as a programmer assigned to a project during the Implementation phase with your
professor as the System Analyst.
• Navigate to your sub-folder: Chapter_09. Review the rst two items provided by the system analyst
which he produced during the Design phase of the Systems Development Life Cycle. These two
documents historically would have been printed and be placed into a program documentation folder.
The items you produce in creating the program would be added to the folder. However, shifting to our
paperless view of the world, today these items might be created and stored electronically in electronic
folders (which is basically what we are doing by using our sub-folder titled: Chapter_09. The third
item, the hierarchy chart, would normally be produced by the programmer. However, given your
inexperience, the system analyst has created it for you. Make sure you understand what the program
is to do. Any questions ask the system analyst (aka your professor).
• Design the program and create your test data by building a Lab_09_Pseudocode.txt le and a
Lab_09_Test_Data.txt le. WARNING: Don't touch the compiler/IDE. Don't start by creating
the source code le. Creating the source code then producing the planning documentation afterwards
is a bad habit that beginning programmers often acquire. NOTE: In your pseudocode document
you do not need to create any pseudocode for the Standard Library or User Library functions. Just
indicate that you call them from the Program Control functions. If needed, review the Connexions
module Pseudocode Examples for Functions within the Chapter 6 materials. HINT: Copying the
pseudocode and test data les from the Chapter 06 folder might be a good way to start building these
items.
• After you have successfully planned the document and created your test data; create the source code
le naming it: Lab_09.cpp HINTS: Using a previous source code le as your starting le makes
sense. The le in the Chapter 06 folder might be a good start. You might want to copy some of the
include information from the Verify Header code in Chapter 08 into your Lab 09 source code le.
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
9.5.6 Problems
9.5.6.1 Problem 09a  Instructions
The sequence operator can be used when declaring multiple identier names for variables or constants of the
same data type. Is this a good or bad programming habit and why?
8See the le at http://cnx.org/content/m22461/latest/Lab_09_Narrative_Description.txt
9See the le at http://cnx.org/content/m22461/latest/Lab_09_Aerial_View_Center_Pivot_Irrigation.jpg
10See the le at http://cnx.org/content/m22461/latest/Lab_09_Hierarchy_Chart.jpg
109
Solutions to Exercises in Chapter 9
Solution to Exercise 9.1 (p. 107)
Answers:
1. false
2. true
3. false
4. false
5. true
110 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE
Chapter 10
10. Introduction to Structured
Programming
10.1 Structured Programming1
10.1.1 Introduction
One of the most important concepts of programming is the ability to control a program so that dierent
lines of code are executed or that some lines of code are executed many times. The mechanisms that allow
us to control the ow of execution are called control structures. Flowcharting is a method of documenting
(charting) the ow (or paths) that a program would execute. There are four main categories of control
structures:
• Sequence  Very boring. Simply do one instruction then the next and the next. Just do them in a
given sequence or in order listed. Most lines of code are this.
• Selection  This is where you select or choose between two or more ows. The choice is decided by
asking some sort of question. The answer determines the path (or which lines of code) will be executed.
• Iteration  Also known as repetition, it allows some code (one too many lines) to be executed (or
repeated) several times. The code might not be executed at all (repeat it zero times), executed a xed
number of times or executed indenitely until some condition has been met. Also known as looping
because the owcharting shows the ow looping back to repeat the task.
• Branching  A control structure that allows the ow of execution to jump to a dierent part of the
program. This category is rarely used in modular structured programming.
All high-level programming languages have control structures. All languages have the rst three categories of
control structures (sequence, selection, and iteration). Most have the if then else structure (which belongs
to the selection category) and the while structure (which belongs to the iteration category). After these
two basic structures there are usually language variations.
The concept of structured programming started in the late 1960's with an article by Edsger Dijkstra.
He proposed a go to less method of planning programming logic that eliminated the need for the branching
category of control structures. The topic was debated for about 20 years. But ultimately  By the end
of the 20th century nearly all computer scientists were convinced that it is useful to learn and apply the
concepts of structured programming. 
2
1This content is available online at http://cnx.org/content/m19628/1.6/.
2Structured programming from Wikipedia
111
112 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
10.1.1.1 Introduction to Selection Control Structures
The basic attribute of a selection control structure is to be able to select between two of more alternate
paths. This is described as either two-way selection or multiway selection. A question using Boolean
concepts usually controls which path is selected. All of the paths from a selection control structure join back
up at the end of the control structure, before moving on to the next lines of code in a program.
We have mentioned that the if then else control structure belongs to the selection category and is a
two-way selection.
Example 10.1: if then else control structure
if (age  17)
{
out You can vote.;
}
else
{
cout You can't vote.;
}
10.1.1.2 Introduction to Iteration Control Structures
The basic attribute of an iteration control structure is to be able to repeat some lines of code. The visual
display of iteration creates a circular loop pattern when owcharted, thus the word loop is associated with
iteration control structures. Iteration can be accomplished with test before loops, counting loops, and
test after loops. A question using Boolean concepts usually controls how long the loop will execute.
We have mentioned that the while control structure belongs to the iteration category and is a test before
loop.
Example 10.2: while control structure
counter = 0;
while (counter  5)
{
cout nI love computers!;
counter ++;
}
10.1.2 Denitions
Denition 10.1: control structures
Mechanisms that allow us to control the ow of execution within a program.
Denition 10.2: sequence
A control structure where you do the items in the sequence listed.
113
Denition 10.3: selection
A control structure where you select between two or more choices.
Denition 10.4: iteration
A control structure that allows some lines of code to be executed many times.
Denition 10.5: branching
A control structure that allows the ow of execution to jump to a dierent part of the program.
Denition 10.6: structured programming
A method of planning programs that avoids the branching category of control structures.
10.2 Pseudocode Examples for Control Structures3
10.2.1 Overview
No standard for pseudocode syntax exists. However, there are some commonly followed conventions to help
make pseudocode written by one programmer easily understood by another programmer. Most of these
conventions follow two concepts:
• Use indentation to show the action part of a control structure
• Use an ending phrase word to end a control structure
The sequence control structure simply lists the lines of pseudocode. The concern is not with the sequence
category but with selection and two of the iteration control structures. The following are commonly used
ending phrase-words:
Control Structure Ending Phrase Word
If then Else Endif
Case Endcase
While Endwhile
For Endfor
Table 10.1
The Do While and Repeat Until iteration control structures don't need an ending phrase-word. We
simply use the rst word, then the action part, followed by the second word with the test expression. Here
are some examples:
10.2.2 Selection Control Structures
Example 10.3: pseudocode: If then Else
If age  17
Display a message indicating you can vote.
Else
Display a message indicating you can't vote.
Endif
3This content is available online at http://cnx.org/content/m18649/1.12/.
114 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Example 10.4: pseudocode: Case
Case of age
0 to 17 Display You can't vote.
18 to 64 Display Your in your working years.
65 + Display You should be retired.
Endcase
10.2.3 Iteration (Repetition) Control Structures
Example 10.5: pseudocode: While
count assigned zero
While count  5
Display I love computers!
Increment count
Endwhile
Example 10.6: pseudocode: For
For x starts at 0, x  5, increment x
Display Are we having fun?
Endfor
Example 10.7: pseudocode: Do While
count assigned five
Do
Display Blast off is soon!
Decrement count
While count  zero
Example 10.8: pseudocode: Repeat Until
count assigned five
Repeat
Display Blast off is soon!
Decrement count
Until count  one
115
10.3 Flowcharting4
10.3.1 Flowcharting Symbols
10.3.1.1 Terminal
The rounded rectangles, or terminal points, indicate the owchart's starting and ending points.
Figure 10.1
10.3.1.2 Process
The rectangle depicts a process such as a mathematical computation, or a variable assignment.
Note: the C++ language equivalent is the statement.
4This content is available online at http://cnx.org/content/m19623/1.5/.
116 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Figure 10.2
10.3.1.3 Input/Output
The parallelograms designate input or output operations.
Note: the C++ language equivalent is cin or cout.
Figure 10.3
10.3.1.4 Connectors
Sometimes a owchart is broken into two or more smaller owcharts. This is usually done when a owchart
does not t on a single page, or must be divided into sections. A connector symbol, which is a small circle
117
with a letter or number inside it, allows you to connect two owcharts on the same page. A connector symbol
that looks like a pocket on a shirt, allows you to connect to a owchart on a dierent page.
On-Page Connector
Figure 10.4
O-Page Connector
Figure 10.5
10.3.1.5 Decision
The diamond is used to represent the true/false statement being tested in a decision symbol.
118 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Figure 10.6
10.3.1.6 Module Call
A program module is represented in a owchart by rectangle with some lines to distinguish it from process
symbol. Often programmers will make a distinction between program control and specic task modules as
shown below.
Note: C++ equivalent is the function.
Local module: usually a program control function.
Figure 10.7
Library module: usually a specic task function.
119
Figure 10.8
10.3.1.7 Flow Lines
Note: The default ow is left to right and top to bottom (the same way you read English). To save time
arrowheads are often only drawn when the ow lines go contrary the normal.
Figure 10.9
10.3.2 Examples
We will demonstrate various owcharting items by showing the owchart for some pseudocode.
120 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
10.3.2.1 Functions
Example 10.9: pseudocode: Function with no parameter passing
Function clear monitor
Pass In: nothing
Direct the operating system to clear the monitor
Pass Out: nothing
Endfunction
Figure 10.10: Function clear monitor
Example 10.10: pseudocode: Function main calling the clear monitor function
Function main
Pass In: nothing
Doing some lines of code
Call: clear monitor
Doing some lines of code
Pass Out: value zero to the operating system
Endfunction
121
Figure 10.11: Function main
10.3.2.2 Sequence Control Structures
The next item is pseudocode for a simple temperature conversion program. This demonstrates the use of
both the on-page and o-page connectors. It also illustrates the sequence control structure where nothing
unusually happens. Just do one instruction after another in the sequence listed.
Example 10.11: pseudocode: Sequence control structure
Filename: Solution_Lab_04_Pseudocode.txt
Purpose: Convert Temperature from Fahrenheit to Celsius
Author: Ken Busbee; © 2008 Kenneth Leroy Busbee
Date: Dec 24, 2008
Pseudocode = IPO Outline
input
display a message asking user for the temperature in Fahrenheit
get the temperature from the keyboard
processing
calculate the Celsius by adding subtracting 32 from the Fahrenheit
temperature then multiply the result by 5 then
divide the result by 9. Round up or down to the whole number.
HINT: Use 32.0 when subtracting to ensure floating-point accuracy.
output
display the celsius with an appropriate message
122 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
pause so the user can see the answer
Figure 10.12: Sequence control structure
123
Figure 10.13: Sequence control structured continued
10.3.2.3 Selection Control Structures
Example 10.12: pseudocode: If then Else
If age  17
Display a message indicating you can vote.
Else
Display a message indicating you can't vote.
Endif
124 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Figure 10.14: If then Else control structure
Example 10.13: pseudocode: Case
Case of age
0 to 17 Display You can't vote.
18 to 64 Display Your in your working years.
65 + Display You should be retired.
Endcase
125
Figure 10.15: Case control structure
10.3.2.4 Iteration (Repetition) Control Structures
Example 10.14: pseudocode: While
count assigned zero
While count  5
Display I love computers!
Increment count
Endwhile
126 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Figure 10.16: While control structure
Example 10.15: pseudocode: For
For x starts at 0, x  5, increment x
Display Are we having fun?
Endfor
The for loop does not have a standard owcharting method and you will nd it done in dierent ways. The
for loop as a counting loop can be owcharted similar to the while loop as a counting loop.
127
Figure 10.17: For control structure
Example 10.16: pseudocode: Do While
count assigned five
Do
Display Blast off is soon!
Decrement count
While count  zero
128 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Figure 10.18: Do While control structure
Example 10.17: pseudocode: Repeat Until
count assigned five
Repeat
Display Blast off is soon!
Decrement count
Until count  one
129
Figure 10.19: Repeat Until control structure
10.3.3 Denitions
Denition 10.7: owcharting
A programming design tool that uses graphical elements to visually depict the ow of logic within
a function.
Denition 10.8: process symbol
A rectangle used in owcharting for normal processes such as assignment.
Denition 10.9: input/output symbol
A parallelogram used in owcharting for input/output interactions.
Denition 10.10: decision symbol
A diamond used in owcharting for asking a question and making a decision.
Denition 10.11: ow lines
Lines (sometimes with arrows) that connect the various owcharting symbols.
10.4 Practice 10: Introduction to Structured Programming5
10.4.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Given pseudocode, write the C++ code for a program that uses if then else and while control structures.
5This content is available online at http://cnx.org/content/m19692/1.13/.
130 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
10.4.2 Memory Building Activities
Link to: MBA 10
6
10.4.3 Exercises
Exercise 10.1 (Solution on p. 131.)
Answer the following statements as either true or false:
1. There are only two categories of control structures.
2. Branching control structures are rarely used in good structured programming.
3. If then else is a multiway selection control structure.
4. The while control structure is part of the branching category.
5. Pseudocode is better than owcharting.
10.4.4 Miscellaneous Items
None at this time.
10.4.5 Lab Assignment
10.4.5.1 Creating a Folder or Sub-Folder for Chapter 10 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_10 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
10.4.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_10_Pseudocode.txt
7
10.4.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le from the Lab_10_Pseudocode.txt le. Name it: Lab_10.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
10.4.6 Problems
10.4.6.1 Problem 10a  Instructions
List the four categories of control structures and provide a brief description of each category.
6See the le at http://cnx.org/content/m19692/latest/index.html
7See the le at http://cnx.org/content/m19692/latest/Lab_10_Pseudocode.txt
131
Solutions to Exercises in Chapter 10
Solution to Exercise 10.1 (p. 130)
Answers:
1. false
2. true
3. false
4. false
5. false
132 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
Chapter 11
11. Two Way Selection
11.1 If Then Else1
11.1.1 Introduction to Two Way Selection
11.1.1.1 Traditional Two Way Selection
We are going to introduce the control structure from the selection category that is available in every high
level language. It is called the if then else structure. Asking a question that has a true or false answer
controls the if then else structure. It looks like this:
if the answer to the question is true
then do this
else because it's false
do this
In most languages the question (called a test expression) is a Boolean expression. The Boolean data
type has two values  true and false. Let's rewrite the structure to consider this:
if expression is true
then do this
else because it's fales
do this
Some languages use reserved words of: if, then and else. Many eliminate the then. Additionally
the do this can be tied to true and false. You might see it as:
if expression is true
action true
else
action false
And most languages infer the is true you might see it as:
1This content is available online at http://cnx.org/content/m19679/1.3/.
133
134 CHAPTER 11. 11. TWO WAY SELECTION
if expression
action true
else
action false
The above four forms of the control structure are saying the same thing. The else word is often not used
in our English speaking today. However, consider the following conversation between a mother and her child.
Child asks, Mommy, may I go out side and play?
Mother answers, If your room is clean then you may go outside and play or else you may go sit on a
chair for ve minutes as punishment for asking me the question when you knew your room was dirty.
Let's note that all of the elements are present to determine the action (or ow) that the child will be
doing. Because the question (your room is clean) has only two possible answers (true or false) the actions
are mutually exclusive. Either the child 1) goes outside and plays or 2) sits on a chair for ve minutes.
One of the actions is executed; never both of the actions.
11.1.1.2 One Choice  Implied Two Way Selection
Often the programmer will want to do something only if the expression is true, that is with no false action.
The lack of a false action is also referred to as a null else and would be written as:
if expression
action true
else
do nothing
Because the else do nothing is implied, it is usually written in short form like:
if expression
action true
11.1.2 Two Way Selection within C++
The syntax for the if then else control structure within the C++ programming language is:
if (expression)
statement;
else
statement;
Note: The test expression is within the parentheses, but this is not a function call. The parentheses
are part of the control structure. Additionally, there is no semicolon after the parenthesis following the
expression.
11.1.3 Denitions
Denition 11.1: if then else
A two way selection control structure.
Denition 11.2: mutually exclusive
Items that do not overlap. Example: true and false.
135
11.2 Boolean Data Type2
11.2.1 Discussion
The Boolean data type is also known as the logical data type and represents the concepts of true and false.
The name Boolean comes from the mathematician George Boole; who in 1854 published: An Investigation
of the Laws of Thought. Boolean algebra is the area of mathematics that deals with the logical representation
of true and false using the numbers 0 and 1. The importance of the Boolean data type within programming is
that it is used to control programming structures (if then else, while loops, etc.) that allow us to implement
choice into our algorithms.
The Boolean data type has the same attributes and acts or behaves similarly in all programming lan-
guages. The rules within the C++ programming language are:
C++ Reserved Word bool
Represent Logical concepts of true and false
Size Usually 1 byte
Normal Signage Unsigned
Domain (Values Allowed) 0 meaning false, and 1 meaning true
C++ syntax rule true and false are reserved words that can be used
as values in expressions
C++ concept/rule Any value from any data type can be demoted into
a Boolean data type with zero representing false
and all non-zero values representing true.
Table 11.1
Most control structures use a test expression that executes either selection (as in the: if then else) or
iteration (as in the while; do while; or for loops) based on the truthfulness or falseness of the expression. Thus,
we often talk about the Boolean expression that is controlling the structure. Within many programming
languages, this expression must be a Boolean expression and is governed by a tight set of rules. However, in
C++ every data type can be used as a Boolean expression because the value of any data type within C++
can be demoted into a Boolean value.
Within most languages, expressions that yield Boolean data type values are divided into two groups.
One group uses the relational operators within their expressions and the other group uses logical operators
within their expressions.
Within the C++ programming language the Boolean data type is one of the standard or basic data types
and is a member of the integer family.
11.2.2 Denitions
Denition 11.3: Boolean
A data type representing the concepts of true and false.
Denition 11.4: test expression
An expression used to control programming structures.
2This content is available online at http://cnx.org/content/m19544/1.4/.
136 CHAPTER 11. 11. TWO WAY SELECTION
11.3 Relational Operators3
11.3.1 Overview of the Relational Operators
The relational operators are often used to create a test expression that controls program ow. This type
of expression is also known as a Boolean expression because they create a Boolean answer or value when
evaluated. There are six common relational operators that give a Boolean value by comparing (showing the
relationship) between two operands. If the operands are of dierent data types, implicit promotion occurs
to convert the operands to the same data type.
Denition 11.5: relational operator
An operator that gives a Boolean value by evaluating the relationship between two operands.
Operator symbols and/or names vary with dierent programming languages. The C++ programming
language operators with their meanings are:
C++ Operator Meaning
 less than
 greater than
= less than or equal to
= greater than or equal to
== equality (equal to)
!= inequality (not equal to)
Table 11.2
Exercise 11.1 (Solution on p. 141.)
Evaluate the following Boolean expressions:
1. 9  25
2. 9  3
3. 9  14
4. 9 = 17
5. 9 = 25
6. 9 == 13
7. 9 != 13
8. 9 ! 25
The answers to Boolean expressions within the C++ programming language are a value of either 1 for true
or 0 for false.
Be careful. In math you are familiar with using this symbol = to mean equal and = to mean not
equal. In the C++ programming language the = is not used and the = symbol means assignment.
11.3.2 Demonstration Program in C++
11.3.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
3This content is available online at http://cnx.org/content/m19549/1.10/.
137
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
11.3.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le. Following the methods
of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with
other learning materials.
Download from Connexions: Demo_Relational_Operators.cpp
4
11.4 Compound Statement5
11.4.1 The Need for a Compound Statement
For illustration we will use the syntax for the if then else control structure within the C++ programming
language. However this problem generally exits for all control structures within any language that requires
the use of compound statements. The syntax is:
if (expression)
statement;
else
statement;
Within the C++ programming language there can be only one statement listed as the action part
of a control structure. Often, we will want to do more than one statement. This problem is overcome
by creating a compound statement. The brace symbols  the opening { and the closing } - are used to
create a compound statement. For example:
if(expression)
{
statement;
statement;
}
else
{
statement;
statement;
}
Because programmers often forget that they can have only one statement listed as the action part
of a control structure; the C++ programming industry encourages the use of indentation (to see the
action parts clearly) and the use of compound statements (braces), even if there is only one action. Thus:
if(expression)
{
4See the le at http://cnx.org/content/m19549/latest/Demo_Relational_Operators.cpp
5This content is available online at http://cnx.org/content/m19683/1.2/.
138 CHAPTER 11. 11. TWO WAY SELECTION
statement;
}
else
{
statement;
}
By writing code in this manner, if the programmer modies the code by adding more statements to either
the action true or the action false; they will not introduce either compiler or logic errors. Using indentation
and braces should become standard practice for C++ programmers and programmers in any other language
that require the use of compound statements with the control strucutes.
11.4.2 Other Uses of a Compound Statement
A compound statement is a unit of code consisting of zero or more statements. It is also known as a block.
The compound statement allows a group of statements to become one single entry. You used a compound
statement in your rst program when you formed the body of the function main. All C++ functions contain
a compound statement known as the function body.
A compound statement consist of an opening brace, optional declarations, denitions, and statements,
followed by a closing brace. Although all three are optional, one should be present.
6
11.4.3 Denitions
Denition 11.6: compound statement
A unit of code consisting of zero or more statements.
Denition 11.7: block
Another name for a compound statement.
11.5 Practice 11: Two Way Selection7
11.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Given pseudocode, write the C++ code for a program that uses the if then else control structure.
11.5.2 Memory Building Activities
Link to: MBA 11
8
6Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United
States of America: Thompson  Brooks/Cole, 2004) 100.
7This content is available online at http://cnx.org/content/m19764/1.14/.
8See the le at http://cnx.org/content/m19764/latest/index.html
139
11.5.3 Exercises
Exercise 11.2 (Solution on p. 141.)
Evaluate the following Boolean expressions:
1. 25  7
2. 3  7
3. 14  7
4. 17 = 7
5. 25 = 7
6. 13 == 7
7. 9 != 7
8. 5 ! 7
11.5.4 Miscellaneous Items
Link to: Animated gif showing if then else
9
Link to: Manipulation of Data Part 2
10
11.5.5 Lab Assignment
11.5.5.1 Creating a Folder or Sub-Folder for Chapter 11 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_11 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
11.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_11_Pseudocode.txt
11
11.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le from the Lab_11_Pseudocode.txt le. Name it: Lab_11.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
9See the le at http://cnx.org/content/m19764/latest/if_then_else_ow.gif
10See the le at http://cnx.org/content/m19764/latest/Manipulation_Data_Part_2.pdf
11See the le at http://cnx.org/content/m19764/latest/Lab_11_Pseudocode.txt
140 CHAPTER 11. 11. TWO WAY SELECTION
11.5.6 Problems
11.5.6.1 Problem 11a  Instructions
Create a table with the six relational operators and their meanings.
11.5.6.2 Problem 11b  Instructions
Explain why we are using the if then else to manipulate the input data in the example below.
Example 11.1: C++ source code
cout nEnter one side of the rectangle ---------:  ;
cin side1;
cout nEnter the other side of the rectangle ---:  ;
cin side2;
if (side1  side2)
{
length = side1;
width = side2;
}
else
{
length = side2;
width = side1;
}
141
Solutions to Exercises in Chapter 11
Solution to Exercise 11.1 (p. 136)
Answers:
1. 1
2. 0
3. 0
4. 1
5. 0
6. 0
7. 1
8. Error, the not less than is not a valid operator.
Solution to Exercise 11.2 (p. 139)
Answers:
1. 0
2. 1
3. 1
4. 0
5. 1
6. 0
7. 1
8. Error, the not greater than is not a valid operator.
142 CHAPTER 11. 11. TWO WAY SELECTION
Chapter 12
12. Multiway Selection
12.1 Nested If Then Else1
12.1.1 Introduction to Mulitway Selection
12.1.1.1 Nested Control Structures
We are going to rst introduce the concept of nested control structures. Nesting is a concept that places one
item inside of another. Consider:
if expression
true action
else
false action
This is the basic form of the if then else control structure. Now consider:
if age is less than 18
you can't vote
if age is less than 16
you can't drive
else
you can drive
else
you can vote
if age is less than 21
you can't drink
else
you can drink
As you can see we simply included as part of the true action a statement and another if then else
control structure. We did the same (nested another if then else) for the false action. In our example we
nested if then else control structures. Nesting could have an if then else within a while loop. Thus, the
concept of nesting allows the mixing of the dierent categories of control structures.
1This content is available online at http://cnx.org/content/m19951/1.5/.
143
144 CHAPTER 12. 12. MULTIWAY SELECTION
12.1.1.2 Multiway Selection
One of the drawbacks of two way selection is that we can only consider two choices. But what do you do if
you have more than two choices. Consider the following which has four choices:
if age equal to 18
you can now vote
else
if age equal to 39
you are middle aged
else
if age equal to 65
you can consider retirement
else
your age is unimportant
You get an appropriate message depending on the value of age. The last item is referred to as the default.
If the age is not equal to 18, 39 or 65 you get the default message. In some situations there is no default
action. Consider:
if age equal to 18
you can now vote
else
if age equal to 39
you are middle aged
else
if age equal to 65
you can consider retirement
The last if then else control structure has no else. It's implied else do nothing. Without the default
the multiway selection could be written as a series of if then without the else structures. Consider:
if age equal to 18
you can now vote
if age equal to 39
you are middle aged
if age equal to 65
you can consider retirement
We have shown two ways to accomplish multiway selection. The choice of using nested it then else control
structures or a series of if then control structures is decided on the existence of a default action (you must
use nested if then else) or programmer preference if there is not a default action (you may use nested if then
else or a series of if then control structures).
12.1.2 if then else Syntax within C++
The syntax for the if then else control structure within the C++ programming language is:
Example 12.1: C++ source code: Layout of an if then else
145
if (expression)
{
statement;
}
else
{
statement;
}
note: The test expression is within the parentheses, but this is not a function call. The parentheses
are part of the control structure. Additionally, there is no semicolon after the parenthesis following
the expression.
12.1.3 C++ Example
Multiway selection is often needed to cover all possibilities. Assume that the user has been prompted for
the ages of two people with the answers stored in variables named age1 and age2. Consider:
Example 12.2: C++ source code
if(age1  age2)
{
cout nnThe first person is older.;
}
else
{
cout nnThe second person is older.;
}
What if the two persons are the same age? The program incorrectly says the second person is older. To
solve this we must handle all three possibilities. Consider this mulitway selection example:
Example 12.3: C++ source code
if(age1 == age2)
{
cout nnThey are the same age.;
}
else
{
if(age1  age2)
{
cout nnThe first person is older.;
}
else
146 CHAPTER 12. 12. MULTIWAY SELECTION
{
cout nnThe second person is older.;
}
}
12.1.4 Denitions
Denition 12.1: nested control structures
Placing one control structure inside of another.
Denition 12.2: multiway selection
Using control structures to be able to select from more than two choices.
12.2 Logical Operators2
12.2.1 Overview of the Logical Operators
Within most languages, expressions that yield Boolean data type values are divided into two groups. One
group uses the relational operators within their expressions and the other group uses logical operators within
their expressions.
The logical operators are often used to help create a test expression that controls program ow. This
type of expression is also known as a Boolean expression because they create a Boolean answer or value
when evaluated. The answers to Boolean expressions within the C++ programming language are a value
of either 1 for true or 0 for false. There are three common logical operators that give a Boolean value by
manipulating other Boolean operand(s). Operator symbols and/or names vary with dierent programming
languages. The C++ programming language operators with their meanings are:
C++ Operator Meaning Comment Typing
 Logical and two ampersands
|| Logical or two vertical dashes or piping symbols
! Logical not unary the exclamation point
Table 12.1
In most languages there are strict rules for forming proper logical expressions. An example is:
6  4  2 = 14
This expression has two relational operators and one logical operator. Using the precedence of operator
rules the two relational comparisons will be done before the logical and operation. Thus:
1  1
or
true  true
The nal evaluation of the expression is: 1 meaning true.
We can say this in English as: It is true that six is greater than four and that two is less than or equal
to fourteen.
When forming logical expressions programmers often use parentheses (even when not technically needed)
to make the logic of the expression very clear. Consider the above complex Boolean expression rewritten:
(6  4)  (2 = 14)
2This content is available online at http://cnx.org/content/m19847/1.6/.
147
12.2.2 Truth Tables
A common way to show logical relationships is in truth tables.
Logical and ()
x y x  y
false false false
false true false
true false false
true true true
Table 12.2
Logical or (||)
x y x ||y
false false false
false true true
true false true
true true true
Table 12.3
Logical not (!)
x !x
false true
true false
Table 12.4
12.2.3 Examples
I call this example of why I hate and and love or.
Everyday as I came home from school on Monday through Thursday; I would ask my mother, May I go
outside and play? She would answer, If your room is clean and your homework is done then you may go
outside and play. I learned to hate the word and. I could manage to get one of the tasks done and have
some time to play before dinner, but both of them. . . well, I hated and.
On Friday my mother took a more relaxed view point and when asked if I could go outside and play she
responded, If your room is clean or your homework is done then you may go outside and play. I learned
to clean my room quickly on Friday afternoon. Well needless to say, I loved or.
For the next example, just imagine a teenager talking to their mother. During the conversation mom
says, After all, your Dad is reasonable! The teenager says, Reasonable. (short pause) Not.
Maybe college professors will think that all their students studied for the exam. Ha ha! Not. Well, I
hope you get the point.
Exercise 12.1 (Solution on p. 159.)
Evaluate the following Logical Boolean expressions:
148 CHAPTER 12. 12. MULTIWAY SELECTION
1. 25  7 || 15  36
2. 15  36 || 3  7
3. 14  7  5 = 5
4. 4  3  17 = 7
5. ! false
6. ! (13 != 7)
7. 9 != 7  ! 0
8. 5   7
12.2.4 Demonstration Program in C++
12.2.4.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
12.2.4.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le. Following the methods
of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with
other learning materials.
Download from Connexions: Demo_Logical_Operators.cpp
3
12.2.5 Denitions
Denition 12.3: logical operator
An operator used to create complex Boolean expressions.
Denition 12.4: truth tables
A common way to show logical relationships.
12.3 Case Control Structure4
12.3.1 Traditional Case Control Structure
12.3.1.1 Multiway Selection using the Case Structure
One of the drawbacks of two way selection is that we can only consider two choices. But what do you do if
you have more than two choices. Consider the following which has four choices:
if age equal to 18
you can vote
else
3See the le at http://cnx.org/content/m19847/latest/Demo_Logical_Operators.cpp
4This content is available online at http://cnx.org/content/m19963/1.2/.
149
if age equal to 39
you're middle aged
else
if age equal to 65
consider retirement
else
age is un-important
You get an appropriate message depending on the value of age. The last item is referred to as the default.
If the age is not equal to 18, 39 or 65 you get the default message. In some situations there is no default
action. Consider this owchart example:
Figure 12.1
This owchart is of the case control structure and is used for multiway selection. The decision box holds
the variable age. The logic of the case is one of equality where in the value in the variable age is compared
to the listed values in order from left to right. Thus, the value stored in age is compared to 18 or is age
equal to 18. If it is true, the logic ows down through the action and drops out at the bottom of the case
structure. If the value of the test expression is false, it moves to the next listed value to the right and makes
another comparison. It works exactly the same as our nested if then else structure.
150 CHAPTER 12. 12. MULTIWAY SELECTION
12.3.1.2 C++ Code to Accomplish Multiway Selection
Using the same example as above, here is the C++ code to accomplish the case control structure.
Example 12.4: C++ source code
switch (age)
{
case 18: cout nYou can vote.;
break;
case 39: cout nYou're middle aged.;
break;
case 65: cout nConsider retirement.;
break;
default: cout nAge is un-important.;
}
The rst thing you should note is that the C++ programming language does not formally have a case control
structure. It does have a switch control structure but it acts dierently than the traditional case control
structure. We use a break (which is a branching control structure) with the switch to make it act like the
traditional case structure. This is one of the few allowable ways to use the switch with break within the
C++ programming language to simulate the traditional case structure. All other uses of the switch or break
are to be avoided if you are to stay within the bounds of good structured programming techniques.
The value in the variable age is compared to the rst case (Note: It is one of the C++ reserved words.)
which is the value 18 using an equality comparison or is age equal to 18. If it is true, the cout is executed
which displays You can vote. and the next line of code (the break) is done (which jumps us to the end of
the control structure). If it is false, it moves on to the next case for comparison.
12.3.2 Limitations of the Case Control Structure
Most programming languages including C++ require the listed values for the case control structure be of
the integer family of data types. This basically means either an integer or character data type. Additionally,
ranges of values are not allowed. Consider this owcharting example that used ranges:
151
Figure 12.2
Consider also the following pseudocode for the same logic:
Case of age
0 to 17 Display You can't vote.
18 to 64 Display You're in your working years.
65 + Display You should be retired.
Endcase
Using the case control structure when using non integer family or ranges of values is allowed when design-
ing a program and documenting that design with pseudocode or owcharting. However, the implementation
in most languages would follow a nested if then else approach with complex Boolean expressions. The
logic of the above examples would look like this:
if age  0 and age = to 17
display You can't vote.
else
if age is = 18 and age = 64
152 CHAPTER 12. 12. MULTIWAY SELECTION
display You're in your working years.
else
display You should be retired.
12.3.3 Good Structured Programming Methods
Most text book authors conrm that good structured programming techniques and habits are more important
than concentrating on the technical possibilities and capabilities of the language that you are using to learn
programming skills. Remember, this module is concentrating on programming fundamentals and concepts
and it uses the C++ programming language to build our initial programming skills. It is not a created with
the intent to cover the C++ programming language in detail, despite the fact that at times we have to cover
C++ language mechanics.
12.3.4 Denitions
Denition 12.5: case
A control structure that does mulitway selection.
Denition 12.6: switch
A C++ control structure that can be made to act like a case control structure.
12.4 Branching Control Structures5
12.4.1 Discussion
The branching control structures allow the ow of execution to jump to a dierent part of the program. The
three common branching control structures are: break, continue and goto. These are rarely used in modular
structured programming with one exception. That exception is in relation to creating the case within the
selection category of control structures. There is one other branching control structure that is often not
viewed as branching control structure. It is: return. Additionally, we will add to our list of branching items
a pre-dened function commonly used in the C++ programming language of: exit that is part of the C
standard library (cstdlib). Some denitions:
12.4.1.1 Denitions
Denition 12.7: branching control structures
Allow the ow of execution to jump to a dierent part of the program.
Denition 12.8: break
A branching control structure that terminates the existing structure.
Denition 12.9: continue
A branching control structure that causes a loop to stop its current iteration and begin the next
one.
Denition 12.10: goto
A branching control structure that causes the logic to jump to a dierent place in the program.
Denition 12.11: return
A branching control structure that causes a function to jump back to the function that called it.
Denition 12.12: exit
A pre-dened function used to prematurely stop a program and jump to the operating system.
5This content is available online at http://cnx.org/content/m19947/1.2/.
153
We will discuss each item indicating which ones are allowed or not allowed within good structured
programming practices.
12.4.2 Examples
12.4.2.1 break
The break is used in one of two ways; with the switch (a C++ programming structure) to make it act like a
case structure (it's more common name within most programming languages) or as part of a looping process
to break out of the loop. The rst usage is allowed in good structured programming and the second is not
allowed in good structured programming.
Example 12.5: C++ source code
switch (age)
{
case 18: cout nYou can vote.;
break;
case 39: cout nYou are middle aged.;
break;
case 65: cout nYou are at retirement age.;
break;
default: cout nYour current age is not important.;
}
The following is an unauthorized use of break in a loop and it gives the appearance that the loop will execute
8 times, but the break statement causes it to stop during the fth iteration.
Example 12.6: C++ source code
counter = 0;
while(counter  8)
{
cout counter endl;
if (counter == 4)
{
break;
}
counter++;
}
12.4.2.2 continue
The continue structure is not allowed in good structured programming. The following gives the appearance
that the loop will print to the monitor 8 times, but the continue statement causes it not to print number 4.
Example 12.7: C++ source code
154 CHAPTER 12. 12. MULTIWAY SELECTION
for(counter = 0; counter  8; counter++)
{
if (counter == 4)
{
continue;
}
cout counter endl;
}
12.4.2.3 goto
The goto structure is not allowed in good structured programming. It is with a certain amount of hesitancy
that we even show it. Many textbooks do not cover the goto. Within the C++ programming language you
create a label with an identier name followed by a colon. You use the command word goto followed by the
label. A label can be used before it is declared.
Example 12.8: C++ source code
some lines of code;
goto mynewspot; //jumps to the label
some lines of code;
some lines of code;
some lines of code;
mynewspot: some statement; //Declared label
some lines of code;
12.4.2.4 return
The return is allowed in good structured programming, but only at the end of a function. A function should
not pre-maturely end by having the logic of the function have it terminate by jumping back to the function
that called it.
Example 12.9: C++ source code
//******************************************************
// get data
//******************************************************
void get_data(void)
{
// Input - Test Data - 5678.9, 5432.1
cout nEnter the length of the property in feet ---: ;
cin property_length;
cout nEnter the width of the property in feet ----: ;
155
cin property_width;
return;
}
12.4.2.5 exit
Although exit is technically a pre-dened function, it is covered here because of its common usage in pro-
gramming. A good example is the opening a le and then testing to see if the le was actually opened. If
not, we have an error that usually indicates that we want to pre-maturely stop the execution of the program.
Within the C++ programming language the exit function terminates the running of the program and in the
process returns an integer value back to the operating system. It ts the denition of branching which is to
jump to some other place in the program. In our example the value returned to the operating system is the
value of the constant named: EXIT_FAILURE.
Example 12.10: C++ source code
inData.open(filename); //Open input file
if (!inData) //Test to see if file was opened
{
cout nnError opening file:  filename nn;
pause(); //Pause - user reads message
exit(EXIT_FAILURE); //Allows a pre-mature jump to OS
}
12.5 Practice 12: Multiway Selection6
12.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Identify which selection control structures are two-way selection and which are multiway selection.
3. Understand, dene and/or explain case, switch and nested if then else.
4. Be able to write pseudo code or owcharting for the case control structure.
5. Be able to write C++ source code for a case structure using equality and listed values (switch with
break to act like a case structure).
6. Be able to write C++ source code for a case structure using ranges of values or oating-point values
(nested if then else to act like a case structure).
7. When feasible, be able to convert C++ source code from switch acting like a case to nested if then else
and vice versa.
6This content is available online at http://cnx.org/content/m19968/1.10/.
156 CHAPTER 12. 12. MULTIWAY SELECTION
12.5.2 Memory Building Activities
Link to: MBA 12
7
12.5.3 Exercises
Exercise 12.2 (Solution on p. 159.)
Evaluate the following Logical Boolean expressions:
1. 25  39 || 15  36
2. 19  26 || 13  17
3. 14  7  6 = 6
4. 4  3  17 = 7
5. ! true
6. ! (13 == 7)
7. 9 != 7  ! 1
8. 6   8
12.5.4 Miscellaneous Items
Link to: Manipulation of Data Part 3
8
12.5.5 Lab Assignment
12.5.5.1 Creating a Folder or Sub-Folder for Chapter 12 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_12 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
12.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_12a.cpp
9
12.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Compile and run the Lab_12a.cpp source code le. Understand how it works.
• Copy the source code le Lab_12a.cpp naming it: Lab_12b.cpp
• Convert the nested if then else to a switch with breaks.
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
7See the le at http://cnx.org/content/m19968/latest/index.html
8See the le at http://cnx.org/content/m19968/latest/Manipulation_Data_Part_3.pdf
9See the le at http://cnx.org/content/m19968/latest/Lab_12a.cpp
157
12.5.6 Problems
12.5.6.1 Problem 12a  Instructions
Flowchart the following pseudocode:
Example 12.11: pseudocode
Case of shoe_size
4 to 6 Display Small.
7 to 9 Display Medium.
10 + Display Large.
Endcase
12.5.6.2 Problem 12b  Instructions
The Flip-Flops is a unique shoe store that only sells ip-ops. Adult shoe sizes less than 4 are handled in
the children's department, thus we don't need to concern ourselves with sizes less than 4. Half shoe sizes are
to be rounded down, thus the prompt to the user that happens before this case structure will have addressed
that issue. The variable shoe_size will be an integer value between 4 and 1,000,000,000 (one billion).
Write C++ source code for the following pseudocode:
Example 12.12: pseudocode
Case of shoe_size
4 to 6 Display Small.
7 to 9 Display Medium.
10 + Display Large.
Endcase
12.5.6.3 Problem 12c  Instructions
Write C++ source code for the following pseudocode:
Example 12.13: pseudocode
If age equal to 24
Display a message You're the same age as Melinda.
Else
If age equal to 27
Display a message You're the same age as Ruth.
Else
If age equal to 34
Display a message You're the same age as Ben.
Else
158 CHAPTER 12. 12. MULTIWAY SELECTION
Display a message You're age is un-important.
Endif
Endif
Endif
159
Solutions to Exercises in Chapter 12
Solution to Exercise 12.1 (p. 147)
Answers:
1. 0
2. 1
3. 1
4. 0
5. 1
6. 0
7. 1
8. Error, there needs to be an operand between the operators  and .
Solution to Exercise 12.2 (p. 156)
Answers:
1. 0
2. 1
3. 0
4. 1
5. 0
6. 1
7. 0
8. Error, there needs to be an operand between the operators  and .
160 CHAPTER 12. 12. MULTIWAY SELECTION
Chapter 13
13. Test After Loops
13.1 Do While Loop1
13.1.1 Introduction to Test After Loops
There are two commonly used test after loops in the iteration (or repetition) category of control structures.
They are: do while and repeat until. This module covers the: do while.
13.1.1.1 Understanding Iteration in General  do while
The concept of iteration is connected to possibly wanting to repeat an action. Like all control structures we
ask a question to control the execution of the loop. The term loop comes from the circular looping motion
that occurs when using owcharting. The basic form of the do while loop is as follows:
do
some statements or action
some statements or action
some statements or action
update the flag
while the answer to the question is true
In every language that I know the question (called a test expression) is a Boolean expression. The
Boolean data type has two values  true and false. Let's rewrite the structure to consider this:
do
some statements or action
some statements or action
some statements or action
update the flag
while expression is true
Within the do while control structure there are three attributes of a properly working loop. They are:
• Action or actions
• Update of the ag
1This content is available online at http://cnx.org/content/m20596/1.4/.
161
162 CHAPTER 13. 13. TEST AFTER LOOPS
• Test expression
The English phrasing is, You do the action while the expression is true. This is looping on the true. When
the test expression is false, you stop the loop and go on with the next item in the program. Notice, because
this is a test after loop the action will always happen at least once. It is called a test after loop because
the test comes after the action. It is also sometimes called a post-test loop, meaning the test is post (or
Latin for after) the action and update.
13.1.2 The do while Structure within C++
13.1.2.1 Syntax
The syntax for the do while control structure within the C++ programming language is:
do
{
statement;
statement;
statement;
statement; // This statement updates the flag;
}
while (expression);
note: The test expression is within the parentheses, but this is not a function call. The parentheses
are part of the control structure. Additionally, there is a semicolon after the parenthesis following
the expression.
13.1.2.2 An Example
Example 13.1: C++ source code: do while loop
do
{
cout nWhat is your age? ;
cin age_user;
cout nWhat is your friend's age? ;
cin age_friend;
cout nTogether your ages add up to: ;
cout (age_user + age_friend);
cout nDo you want to do it again? y or n ;
cin loop_response;
}
while (loop_response == 'y');
The three attributes of a test after loop are present. The action part consists of the 6 lines that prompt
for data and then displays the total of the two ages. The update of the ag is the displaying the question
and getting the answer for the variable loop_response. The test is the equality relational comparison of the
value in the ag variable to the lower case character of y.
163
This type of loop control is called an event controlled loop. The ag updating is an event where someone
decides if they want the loop to execute again.
Using indentation with the alignment of the loop actions and ag update is normal industry practice
within the C++ community.
13.1.2.3 Innite Loops
At this point it's worth mentioning that good programming always provides for a method to insure that the
loop question will eventually be false so that the loop will stop executing and the program continues with
the next line of code. However, if this does not happen then the program is in an innite loop. Innite loops
are a bad thing. Consider the following code:
Example 13.2: C++ source code: innite loop
loop_response = 'y';
do
{
cout nWhat is your age? ;
cin age_user;
cout nWhat is your friend's age? ;
cin age_friend;
cout nTogether your ages add up to: ;
cout (age_user + age_friend);
}
while (loop_response == 'y');
The programmer assigned a value to the ag before the loop and forgot to update the ag. Every time
the test expression is asked it will always be true. Thus, an innite loop because the programmer did not
provide a way to exit the loop (he forgot to update the ag).
Consider the following code:
Example 13.3: C++ source code: innite loop
do
{
cout nWhat is your age? ;
cin age_user;
cout nWhat is your friend's age? ;
cin age_friend;
cout nTogether your ages add up to: ;
cout (age_user + age_friend);
cout nDo you want to do it again? y or n ;
cin loop_response;
}
while (loop_response = 'y');
No matter what the user replies during the ag update, the test expression does not do a relational comparison
but does an assignment. It assigns 'y' to the variable and asks if 'y' is true? Since all non-zero values are
treated as representing true within the Boolean concepts of the C++ programming language, the answer to
the text question is true. Viola, you have an innite loop.
164 CHAPTER 13. 13. TEST AFTER LOOPS
13.1.3 Denitions
Denition 13.1: do while
A test after iteration control structure available in C++.
Denition 13.2: action item
An attribute of iteration control structures.
Denition 13.3: update item
An attribute of iteration control structures.
Denition 13.4: test item
An attribute of iteration control structures.
Denition 13.5: at least once
Indicating that test after loops execute the action at least once.
Denition 13.6: innite loop
No method of exit, thus a bad thing.
13.2 Flag Concept2
13.2.1 Concept Discussion
For centuries ags have been used as a signal to let others know something about the group or individual
that is displaying, ying or waving the ag. There are country ags and state ags. Ships at sea ew the
ag of their country. Pirates ew the skull and cross bones. A yellow ag was used for quarantine, usually
the plague. Even pirates stayed away. Today, some people might recognize the ag used by scuba divers.
The Presidents of most countries have a ag. At a race car event they use the checkered ag to indicate the
race is over.
2This content is available online at http://cnx.org/content/m20404/1.5/.
165
Figure 13.1
Computer programming uses the concept of a ag in the same way that physical ags are used. A ag
is anything that signals some information to the person looking at it.
13.2.2 Computer Implementation
Any variable or constant that holds data can be used as a ag. You can think of the storage location as
a ag pole. The value stored within the variable conveys some meaning and you can think of it as being
the ag. An example might be a variable named: gender which is of the character data type. The two
values normally stored in the variable are: 'F' and 'M' meaning female and male. Then, somewhere within
a program we might look at the variable to make a decision:
Example 13.4: ag controling an if then control structure
if gender equals 'F'
display Are you pregnant?
get answer from user store in pregnant variable
166 CHAPTER 13. 13. TEST AFTER LOOPS
Looking at the ag implies comparing the value in the variable to another value (a constant or the value in
another variable) using a relational operator (in our above example: equality).
Control structures are controlled by using a test expression which is usually a Boolean expres-
sion. Thus, the ag concept of looking at the value in the variable and comparing it to another value is
fundamental to understanding how all control structures work.
13.2.3 Two Flags with the Same Meaning
Sometimes we will use an iteration control structure of do while to allow us to decide if we want to do the
loop action again. A variable might be named loop_response with the user prompted for their answer of
'y' for yes or 'n' for no. Once the answer is retrieved from the keyboard and stored in our ag variable of
loop_response the test expression to control the loop might be:
Example 13.5: simple ag comparison
loop_response equals 'y'
This is ne but what if the user accidentally has on the caps lock. Then his response of 'Y' would not
have the control structure loop and perform the action again. The solution lies in looking at the ag twice.
Consider:
Example 13.6: complex ag comparison
loop_response equals 'y' or loop_response equals 'Y'
We look to see if the ag is either a lower case y or an upper case Y by using a more complex Boolean
expression with both relational and logical operators.
13.2.4 Multiple Flags in One Byte
Within assembly language programming and in many technical programs that control special devices; the
use of a single byte to represent several ags is common. This is accomplished by having each one of the 8
bits that make up the byte represent a ag. Each bit has a value of either 1 or 0 and can represent true and
false, on or o, yes or no, etc.
13.2.5 Denitions
Denition 13.7: ag
A variable or constant used to store information that will normally be used to control the program.
13.3 Assignment vs Equality within C++3
13.3.1 General Discussion
Most control structures use a test expression that executes either selection (as in the: if then else) or
iteration (as in the while; do while; or for loops) based on the truthfulness or falseness of the expression. Thus,
3This content is available online at http://cnx.org/content/m19542/1.6/.
167
we often talk about the Boolean expression that is controlling the structure. Within many programming
languages, this expression must be a Boolean expression and is governed by a tight set of rules. However, in
C++ every data type can be used as a Boolean expression, because every data type can be demoted into a
Boolean value by using the rule/concept that zero represents false and all non-zero values represent true.
Within C++ we have the potential added confusion of the equals symbol as an operator that does not
represent the normal math meaning of equality that we have used for most of our life. The equals symbol
with C++ means: assignment. To get the equality concept of math within C++ we use two equal symbols
to represent the relational operator of equality. Let's consider:
if (pig = 'y')
{
cout nPigs are good;
}
else
{
cout nPigs are bad.;
}
The test expression of the control structure will always be true, because the expression is an assignment
(not the relational operator of ==). It assigns the 'y' to the variable pig, then looks at the value in pig and
determines that it is not zero; therefore the expression is true. And it will always be true and the else part
will never be executed. This is not what the programmer had intended. Let's consider:
do
{
cout nPigs are good;
cout nDo it again, answer y or n: ;
cin do_it_again
}
while (do_it_again = 'y');
The loop's test expression will always be true, because the expression is an assignment (not the relational
operator of ==). It assigns the 'y' to the variable do_it_again, then looks at the value in do_it_again and
determines that it is not zero; therefore the expression is true. And it will always be true and you have just
created an innite loop. As a reminder, innite loops are not a good thing.
These examples are to remind you that you must be careful in creating your test expressions so that they
are indeed a question usually involving the relational operators.
Don't get caught using assignment for equality.
13.4 Repeat Until Loop4
13.4.1 Introduction to Test After Loops
There are two commonly used test after loops in the iteration (or repetition) category of control structures.
They are: do while and repeat until. This module covers the: repeat until.
4This content is available online at http://cnx.org/content/m20597/1.2/.
168 CHAPTER 13. 13. TEST AFTER LOOPS
13.4.1.1 Understanding Iteration in General  repeat until
The concept of iteration is connected to possibly wanting to repeat an action. Like all control structures we
ask a question to control the execution of the loop. The term loop comes from the circular looping motion
that occurs when using owcharting. The basic form of the repeat until loop is as follows:
repeat
some statements or action
some statements or action
some statements or action
update the flag
until the answer to the question becomes true
In every language that I know the question (called a test expression) is a Boolean expression. The
Boolean data type has two values  true and false. Let's rewrite the structure to consider this:
repeat
some statements or action
some statements or action
some statements or action
update the flag
until expression becomes true
Within the repeat until control structure there are three attributes of a properly working loop. They are:
• Action or actions
• Update of the ag
• Test expression
The English phrasing is, You repeat the action until the expression becomes true. This is looping on the
false. When the test expression becomes true, you stop the loop and go on with the next item in the program.
Notice, because this is a test after loop the action will always happen at least once. It is called a test
after loop because the test comes after the action. It is also sometimes called a post-test loop, meaning the
test is post (or Latin for after) the action and update.
13.4.2 The repeat until Structure within C++
Well, it just does not exist. Most programming languages have either the do while or the repeat until control
structures, but not both.
13.4.3 Denitions
Denition 13.8: repeat until
A test after iteration control structure that is not available in C++.
13.5 Practice 13: Test After Loops5
13.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
5This content is available online at http://cnx.org/content/m20642/1.7/.
169
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Identify which selection control structures are test after iteration.
3. Be able to write pseudo code or owcharting for the do while control structure.
4. Be able to write C++ source code for a do while control structure.
13.5.2 Memory Building Activities
Link to: MBA 13
6
13.5.3 Exercises
Exercise 13.1 (Solution on p. 171.)
Answer the following statements as either true or false:
1. The do while and repeat until structure act exactly the same.
2. Students sometimes confuse assignment and equality.
3. The repeat until looping control structure is available in all programming languages.
4. Because ags are often used, they are usually a special data type.
5. The do while is a test before loop.
13.5.4 Miscellaneous Items
Link to: Animated gif showing a do while loop
7
13.5.5 Lab Assignment
13.5.5.1 Creating a Folder or Sub-Folder for Chapter 13 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_13 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
13.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_13_Pseudocode.txt
8
13.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le from the Lab_13_Pseudocode.txt le. Name it: Lab_13.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
6See the le at http://cnx.org/content/m20642/latest/index.html
7See the le at http://cnx.org/content/m20642/latest/do_while_ow.gif
8See the le at http://cnx.org/content/m20642/latest/Lab_13_Pseudocode.txt
170 CHAPTER 13. 13. TEST AFTER LOOPS
13.5.6 Problems
13.5.6.1 Problem 13a  Instructions
Flowchart the following pseudocode:
Example 13.7: pseudocode
Do
Display I like cheese cake!
Display Do it again? y or n --- 
Get answer from keyboard
While answer is 'y'
171
Solutions to Exercises in Chapter 13
Solution to Exercise 13.1 (p. 169)
Answers:
1. false
2. true
3. false
4. false
5. false
172 CHAPTER 13. 13. TEST AFTER LOOPS
Chapter 14
14. Test Before Loops
14.1 Increment and Decrement Operators1
14.1.1 General Discussion
The idea of increment or decrement is to either add or subtract 1 from a variable that is usually acting as a
ag. Using a variable named counter; in generic terms, for example:
increment the counter
The concept is:
counter is assigned counter + 1
That is you fetch the existing value of the counter and add one then store the answer back into the
variable counter. Many programming languages allow their increment and decrement operators to only be
used with the integer data type. Programmers will sometimes use inc and dec as abbreviations for increment
and decrement respectively.
Operator symbols and/or names vary with dierent programming languages. The C++ programming
language operators with their meanings are:
C++ Operator Meaning
++ increment, two plus signs
 decrement, two minus signs
Table 14.1
14.1.2 C++ Code Examples
14.1.2.1 Basic Concept
Within the C++ programming language the increment and decrement are often used in this simple generic
way. The operator of increment is represented by two plus signs in a row. Examples:
counter = counter + 1;
counter += 1;
counter++;
++counter;
As C++ statements, the four examples all do the same thing. They add 1 to the value of whatever
is stored in counter. The decrement opereator is represented by two minus signs in a row. They would
1This content is available online at http://cnx.org/content/m20499/1.3/.
173
174 CHAPTER 14. 14. TEST BEFORE LOOPS
subtract 1 from the value of whatever was in the variable being decremented. The precedence of increment
and decrement depends on if the operator is attached to the right of the operand (postx) or to the left of
the operand (prex). Within C++ postx and prex do not have the same precedence.
14.1.2.2 Postx Increment
Postx increment says to use my existing value then when you are done with the other operators; increment
me. An example:
int oldest = 44; // variable set up with initialization
then later on in the code
age = oldest++;
The rst use of the oldest variable is an Rvalue context where the existing value of 44 is pulled or fetched
and then assigned to the variable age; then the variable oldest is incremented with its value changing from 44
to 45. This seems to be a violation of precedence because increment is higher precedence than assignment.
But that is how postx increment works within the C++ programming language.
14.1.2.3 Prex Increment
Prex increment says to increment me now and use my new value in any calculation. An example:
int oldest = 44; // variable set up with initialization
then later on in the code
age = ++oldest;
The variable oldest is incremented with the new value changing it from 44 to 45; then the new value is
assigned to age.
In postx age is assigned 44 in prex age is assigned 45. One way to help remember the dierence is to
think of postx as being polite (use my existing value and return to increment me after the other operators
are done) where as prex has an ego (I am important so increment me rst and use my new value for the
rest of the evaluations).
14.1.2.4 Allowable Data Types
Within some programming languages, increment and decrement can be used only on the integer data type.
C++ however, expands this not only to all of the integer family but also to the oating-point family (oat
and double). Incrementing 3.87 will change the value to 4.87. Decrementing 'C' will change the value to 'B'.
Remember the ASCII character values are really one byte unsigned integers (domain from 0 to 255).
14.1.2.5 Exercises
Exercise 14.1 (Solution on p. 182.)
Evaluate the following items using increment or decrement:
1. True or false: x = x +1 and x+=1 and x++ all accomplish increment?
2. Given: int y = 19; and int z; what values will y and z have after: z = y;
3. Given: double x = 7.77; and int y; what values will x and y have after: y = ++x;
4. Is this ok? Why or why not? 6 * ++(age -3)
175
14.1.3 Denitions
Denition 14.1: increment
Adding one to the value of a variable.
Denition 14.2: decrement
Subtracting one from the value of a variable.
Denition 14.3: postx
Placing the increment or decrement operator to the right of the operand.
Denition 14.4: prex
Placing the increment or decrement operator to the left of the operand.
14.2 While Loop2
14.2.1 Introduction to Test Before Loops
There are two commonly used test before loops in the iteration (or repetition) category of control structures.
They are: while and for. This module covers the: while.
14.2.1.1 Understanding Iteration in General  while
The concept of iteration is connected to possibly wanting to repeat an action. Like all control structures we
ask a question to control the execution of the loop. The term loop comes from the circular looping motion
that occurs when using owcharting. The basic form of the while loop is as follows:
initialization of the flag
while the answer to the question is true then do
some statements or action
some statements or action
some statements or action
update the flag
In almost all languages the question (called a test expression) is a Boolean expression. The Boolean
data type has two values  true and false. Let's rewrite the structure to consider this:
initialization of the flag
while the expression is true then do
some statements or action
some statements or action
some statements or action
update the flag
Within the while control structure there are four attributes to a properly working loop. They are:
• Initializing the ag
• Text expression
• Action or actions
• Update of the ag
2This content is available online at http://cnx.org/content/m20598/1.6/.
176 CHAPTER 14. 14. TEST BEFORE LOOPS
The initialization of the ag is not technically part of the control structure, but a necessary item to occur
before the loop is started. The English phrasing is, While the expression is true, do the following actions.
This is looping on the true. When the test expression is false, you stop the loop and go on with the next
item in the program. Notice, because this is a test before loop the action might not happen. It is called
a test before loop because the test comes before the action. It is also sometimes called a pre-test loop,
meaning the test is pre (or Latin for before) the action and update.
14.2.1.2 Human Example of the while Loop
Consider the following one-way conversation from a mother to her child.
Child: The child says nothing, but mother knows the child had Cheerios for breakfast and history tells
us that the child most likely spilled some Cheerios on the oor.
Mother says: While it is true that you see (As long as you can see) a Cheerio on oor, pick it up and
put it in the garbage.
Note: All of the elements are present to determine the action (or ow) that the child will be doing (in
this case repeating). Because the question (can you see a Cheerios) has only two possible answers (true or
false) the action will continue while there are Cheerios on the oor. Either the child 1) never picks up a
Cheerio because they never spilled any or 2) picks up a Cheerio and keeps picking up Cheerios one at a time
while he can see a Cheerio on the oor (that is until they are all picked up).
14.2.2 The while Structure within C++
14.2.2.1 Syntax
The syntax for the do while control structure within the C++ programming language is:
statement; // This statement initializes the flag;
while (expression)
{
statement;
statement;
statement;
statement; // This statement updates the flag;
}
note: The test expression is within the parentheses, but this is not a function call. The parentheses
are part of the control structure. Additionally, there is not a semicolon after the parenthesis
following the expression.
14.2.2.2 An Example
Example 14.1: C++ source code: while
loop_response = 'y';
while (loop_response == 'y')
{
cout nWhat is your age? ;
cin age_user;
cout nWhat is your friend's age? ;
177
cin age_friend;
cout nTogether your ages add up to: ;
cout (age_user + age_friend);
cout nDo you want to do it again? y or n ;
cin loop_response;
}
The four attributes of a test before loop are present. The initialization of the ag. The test is the equality
relational comparison of the value in the ag variable to the lower case character of y. The action part
consists of the 6 lines that prompt for data and then displays the total of the two ages. The update of the
ag is the displaying the question and getting the answer for the variable loop_response.
This type of loop control is called an event controlled loop. The ag updating is an event where someone
decides if they want the loop to execute again.
Using indentation with the alignment of the loop actions and ag update is normal industry practice
within the C++ community.
14.2.2.3 Innite Loops
At this point it's worth mentioning that good programming always provides for a method to insure that the
loop question will eventually be false so that the loop will stop executing and the program continues with
the next line of code. However, if this does not happen then the program is in an innite loop. Innite
loops are a bad thing. Consider the following code:
Example 14.2: C++ source code: innite loop
loop_response = 'y';
while (loop_response == 'y')
{
cout nWhat is your age? ;
cin age_user;
cout nWhat is your friend's age? ;
cin age_friend;
cout nTogether your ages add up to: ;
cout (age_user + age_friend);
}
The programmer assigned a value to the ag before the loop which is correct. However, he forgot to update
the ag. Every time the test expression is asked it will always be true. Thus, an innite loop because the
programmer did not provide a way to exit the loop (he forgot to update the ag). Consider the following
code:
Example 14.3: C++ source code: innite loop
loop_response = 'y';
while (loop_response = 'y')
{
cout nWhat is your age? ;
cin age_user;
cout nWhat is your friend's age? ;
178 CHAPTER 14. 14. TEST BEFORE LOOPS
cin age_friend;
cout nTogether your ages add up to: ;
cout (age_user + age_friend);
cout nDo you want to do it again? y or n ;
cin loop_response;
}
No matter what the user replies during the ag update, the test expression does not do a relational comparison
but does an assignment. It assigns 'y' to the variable and asks if 'y' is true? Since all non-zero values are
treated as representing true within the Boolean concepts of the C++ programming language, the answer to
the text question is true. Viola, you have an innite loop.
14.2.3 Counting Loops
The examples above are for an event controlled loop. The ag updating is an event where someone decides
if they want the loop to execute again. Often the initialization sets the ag so that the loop will execute at
least once.
Another common usage of the while loop is as a counting loop. Consider:
Example 14.4: C++ source code: while loop that is counting
counter = 0;
while (counter  5)
{
cout nI love ice cream!;
counter++;
}
The variable counter is said to be controlling the loop. It is set to zero (called initialization) before entering
the while loop structure and as long as it is less than 5 (ve); the loop action will be executed. But part
of the loop action uses the increment operator to increase counter's value by one. After executing the loop
ve times (once for counter's values of: 0, 1, 2, 3 and 4) the expression will be false and the next line of
code in the program will execute. A counting loop is designed to execute the action (which could be more
than one statement) a set of given number of times. In our example, the message is displayed ve times on
the monitor. It is accomplished my making sure all four attributes of the while control structure are present
and working properly. The attributes are:
• Initializing the ag
• Text expression
• Action or actions
• Update of the ag
Missing an attribute might cause an innite loop or give undesired results (does not work properly).
14.2.3.1 Innite Loops
Consider:
Example 14.5: C++ source code: innite loop
179
counter = 0;
while (counter  5)
{
cout nI love ice cream!;
}
Missing the ag update usually causes an innite loop.
14.2.3.2 Variations on Counting
In the following example, the integer variable age is said to be controlling the loop (that is the ag). We can
assume that age has a value provided earlier in the program. Because the while structure is a test before
loop; it is possible that the person's age is 0 (zero) and the rst time we test the expression it will be false
and the action part of the loop would never be executed.
Example 14.6: C++ source code: while as a counting loop
while (0  age)
{
cout nI love candy!;
age--;
}
Consider the following variation assuming that age and counter are both integer data type and that age has
a value:
Example 14.7: C++ source code: while as a counting loop
counter = 0;
while (counter  age)
{
cout nI love corn chips!;
counter++;
}
This loop is a counting loop similar to our rst counting loop example. The only dierence is instead of
using a literal constant (in other words 5) in our expression, we used the variable age (and thus the value
stored in age) to determine how many times to execute the loop. However, unlike our rst counting loop
example which will always execute exactly 5 times; it is possible that the person's age is 0 (zero) and the
rst time we test the expression it will be false and the action part of the loop would never be executed.
14.2.4 Denitions
Denition 14.5: while
A test before iteration control structure available in C++.
Denition 14.6: loop attributes
Items associated with iteration or looping control structures.
180 CHAPTER 14. 14. TEST BEFORE LOOPS
Denition 14.7: initialize item
An attribute of iteration control structures.
Denition 14.8: might not happen
Indicating that test before loops might not execute the action.
Denition 14.9: event controlled
Using user input to control a loop.
Denition 14.10: counting controlled
Using a variable to count up or down to control a loop.
14.3 Practice 14: Test Before Loops3
14.3.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Identify which selection control structures are test before iteration.
3. Be able to write pseudo code or owcharting for the while control structure.
4. Be able to write C++ source code for the while control structure.
14.3.2 Memory Building Activities
Link to: MBA 14
4
14.3.3 Exercises
Exercise 14.2 (Solution on p. 182.)
Evaluate the following items using increment or decrement:
1. True or false: x = x - 1; and x -= 1; and x; and x; all accomplish decrement.
2. Given: int y = 26; and int z; what values will y and z have after: z = y++;
3. Given: double x = 4.44; and int y; what values will x and y have after: y = x;
4. As an expression: 10 / ++(money * 4) Is this ok? Why or why not?
14.3.4 Miscellaneous Items
Link to: Animated gif showing a while loop
5
3This content is available online at http://cnx.org/content/m20643/1.9/.
4See the le at http://cnx.org/content/m20643/latest/index.html
5See the le at http://cnx.org/content/m20643/latest/while_ow.gif
181
14.3.5 Lab Assignment
14.3.5.1 Creating a Folder or Sub-Folder for Chapter 14 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_14 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
14.3.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_14_Pseudocode.txt
6
14.3.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le from the Lab_14_Pseudocode.txt le. Name it: Lab_14.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
14.3.6 Problems
14.3.6.1 Problem 14a  Instructions
Flowchart the following pseudocode:
Example 14.8: pseudocode
Assign counter a value of zero
While counter is less than 5
Display I love cookies!
Increment counter
Endwhile
6See the le at http://cnx.org/content/m20643/latest/Lab_14_Pseudocode.txt
182 CHAPTER 14. 14. TEST BEFORE LOOPS
Solutions to Exercises in Chapter 14
Solution to Exercise 14.1 (p. 174)
Answers:
1. true
2. y is: 18 and z is: 19
3. x is: 8.77 and y is: 8 Note: truncation of 8.77 to 8 upon demotion.
4. Not ok. Error, the item incremented must have Lvalue attributes, usually a variable. It is an expression
not a variable.
Solution to Exercise 14.2 (p. 180)
Answers:
1. true
2. y is: 27 and z is: 26
3. x is: 3.44 and y is: 3 Note: truncation of 3.44 to 3 upon demotion to integer data type.
4. Not ok. Error, the item incremented must have Lvalue attributes, usually a variable. Because of the
parentheses, it is an expression not a variable.
Chapter 15
15. Counting Loops
15.1 For Loop1
15.1.1 Introduction to Test Before Loops
There are two commonly used test before loops in the iteration (or repetition) category of control structures.
They are: while and for. This module covers the: for.
15.1.1.1 Understanding Iteration in General  for
In most programming languages the for loop is used exclusively for counting; that is to repeat a loop action as
it either counts up or counts down. There is a starting value and a stopping value. The question that controls
the loop is a test expression that compares the starting value to the stopping value. This expression is
a Boolean expression and is usually using the relational operators of either less than (for counting up) or
greater than (for counting down). The term loop comes from the circular looping motion that occurs when
using owcharting. The basic form of the for loop (counting up) is as follows:
for
initialization of the starting value
starting value is less than the stopping value
some statements or action
some statements or action
some statements or action
increment the starting value
It might be best to understand the for loop by understanding a while loop acting like a counting loop.
Let's consider;
initialization of the starting value
while the starting value is less than the stopping value
some statements or action
some statements or action
some statements or action
increment the starting value
1This content is available online at http://cnx.org/content/m20600/1.2/.
183
184 CHAPTER 15. 15. COUNTING LOOPS
Within the for control structure there are four attributes to a properly working loop. They are:
• Initializing the ag  done once
• Text expression
• Action or actions
• Update of the ag
The initialization of the ag is not technically part of the while control structure, but it is usually part of the
for control structure. The English phrasing is, For x is 1; x less than 3; do the following actions; increment
x; loop back to the test expression. This is doing the action on the true. When the test expression is false,
you stop the loop and go on with the next item in the program. Notice, because this is a test before loop
the action might not happen. It is called a test before loop because the test comes before the action. It
is also sometimes called a pre-test loop, meaning the test is pre (or Latin for before) the action and update.
15.1.2 The for Structure within C++
15.1.2.1 Syntax
The syntax for the do while control structure within the C++ programming language is:
for (initializations; expression; updates)
{
statement;
statement;
statement;
}
note: The initializations, test expression and updates are within the parentheses (each separated
by a semi-colon), but this is not a function call. The parentheses are part of the control structure.
Additionally, there is not a semicolon after the parenthesis following the expression.
15.1.2.2 An Example
Example 15.1: C++ source code: for
for (counter = 0; counter  5; counter++)
{
cout nI love ice cream!;
}
The four attributes of a test before loop are present. The initialization of the ag. The test is the less than
relational comparison of the value in the ag variable to the constant value of 5. The action part consists of
the 1 line of output. The update of the ag is done with the increment operator.
Using indentation with the alignment of the loop actions is normal industry practice within the C++
community.
185
15.1.2.3 Innite Loops
At this point it's worth mentioning that good programming always provides for a method to insure that the
loop question will eventually be false so that the loop will stop executing and the program continues with
the next line of code. However, if this does not happen then the program is in an innite loop. Innite loops
are a bad thing. Consider the following code:
Example 15.2: C++ source code: innite loop
for (counter = 0; counter  5;)
{
cout nI love ice cream!;
}
The programmer assigned a value to the ag during the initialization step which is correct. However, he
forgot to update the ag (the update step is missing). Every time the test expression is asked it will always
be true. Thus, an innite loop because the programmer did not provide a way to exit the loop (he forgot to
update the ag).
15.1.2.4 Multiple Items in the Initialization and Update
The following shows the use of the sequence operator to separate the multiple initializations and multiple
updates. This is not available in most languages, thus is more unique to the C++ programming language.
Example 15.3: C++ source code: for with multiple initializations and updates
for (x = 0, y = 10; x  10; x++, y--)
{
cout x * y endl;
}
15.1.3 Counting Loop Conversion  a while into a for
Below is a color coded the conversion of a while loop that displays a message exactly three times (which is a
counting loop) into a for loop using C++ programming language syntax. The four loop attributes are color
highlighted as follows:
186 CHAPTER 15. 15. COUNTING LOOPS
Figure 15.1
15.1.4 Miscellaneous Information about the for Structure
Many languages (Pascal, FORTRAN, and other) have a for loop structure that is used exclusively for
counting. The for loop in the C++ programming language is much more versatile and can be used (and
generally is used) in place of the while loop structure. In reality a counting loop is just a particular use of a
while loop.
The name for comes from mathematics' method of writing an iteration (or repetition). In math we would
say: For the variable i starts at a given value and repeats an action increasing the value of i until i is
executed for the stopping value. Usually written in math as:
for i = 1 to 5 do some action
Note: here the = means equals not assignment. Another way to say it is that i varies from 1 to 5.
15.1.5 Denitions
Denition 15.1: for
A test before iteration control structure typically used for counting.
187
15.2 Circular Nature of the Integer Data Type Family2
15.2.1 General Discussion
There are times when character and integer data types are lumped together because they both act the same
(often called the integer family). Maybe we should say they act dierently than the oating-point data types.
The integer family values jump from one value to another. There is nothing between 6 and 7 nor between 'A'
and 'B'. It could be asked why not make all your numbers oating-point data types. The reason is twofold.
First, some things in the real world are not fractional. A dog, even with only 3 legs, is still one dog not three
fourths of a dog. Second, the integer data type is often used to control program ow by counting (counting
loops). The integer family has a circular wrap around feature. Using a two byte integer, the next number
bigger than 32767 is negative 32768 (character acts the same way going from 255 to 0. We could also reverse
that to be the next smaller number than negative 32768 is positive 32767. This can be shown by using a
normal math line, limiting the domain and then connecting the two ends to form a circle.
Figure 15.2
This circular nature of the integer family works for both integer and character data types. In theory, it
2This content is available online at http://cnx.org/content/m20743/1.3/.
188 CHAPTER 15. 15. COUNTING LOOPS
should work for the Boolean data type as well; but in most programming languages it does not for various
technical reasons.
In mathematics, modular arithmetic (sometimes called clock arithmetic) is a system of arithmetic for
integers where numbers wrap around after they reach a certain value  the modulus. . . .
A familiar use of modular arithmetic is its use in the 12 hour clock the arithmetic of time-keeping in
which the day is divided into two 12 hour periods. If the time is 7:00 now, then 8 hours later it will be
3:00. Usual addition would suggest that the later time should be 7 + 8 = 15, but this is not the answer
because clock time wraps around every 12 hours; there is no 15 o'clock. Likewise, if the clock starts at
12:00 (noon) and 21 hours elapse, then the time will be 9:00 the next day, rather than 33:00. Since the hour
number starts over when it reaches 12, this is arithmetic modulo 12.
Figure 15.3
Time-keeping on a clock gives an example of modular arithmetic. (Modular arithmetic from Wikipedia)
The use of the modulus operator in integer division is tied to the concepts used in modular arithmetic.
15.2.2 Implications When Executing Loops
If a programmer sets up a counting loop incorrectly, usually one of three things happen:
• Innite loop  usually caused by missing update attribute.
• Loop never executes  usually the text expression is wrong with the direction of the less than or greater
than relationship needing to be switched.
• Loop executes more times than desired  update not properly handled. Usually the direction of counting
(increment or decrement) need to be switched.
Let's give an example of the loop executing for what appears to be for innity (the third item on our list).
Example 15.4: C++ source code
for (int x = 0; x  10; x--)
{
cout x endl;
}
The above code accidently decrements and the value of x goes in a negative way towards -2147483648 (the
largest negative value in a normal four byte signed integer data type). It might take a while (thus it might
appear to be in an innite loop) for it to reach the negative 2 billion plus value, before nally decrementing
to positive 2147483647 which would, incidentally, stop the loop execution.
189
15.2.3 Demonstration Program in C++
15.2.3.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
15.2.3.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Circular_Nature_Integer.cpp
3
15.2.4 Denitions
Denition 15.2: circular nature
Connecting the negative and positive ends of the domain of an integer family data type.
Denition 15.3: loop control
Making sure the attributes of a loop are properly handled.
Denition 15.4: modular arithmetic
A system of arithmetic for integers where numbers wrap around.
15.3 Formatting Output4
15.3.1 General Discussion
Formatting of output is handled in dierent ways in the various languages used today. Many programming
languages have dierent formatting instructions for the standard output device which is usually the monitor
(going to a DOS black screen output box) versus using the monitor as a Graphical User Interface (GUI).
File storage output is often handled similarly to the standard output device. All of this makes formatting
of output very machine, output device and language dependent.
When teaching programming fundamentals, many professors prefer to use the standard output device.
For the C++ programming language this means going to the monitor using a DOS black screen output box.
15.3.2 C++ Considerations using Standard Output (cout)
15.3.2.1 Text Wrapping and Vertical Spacing
There are two items used to keep output from lling up a line and wrapping on to the next line. They are:
• Using the escape code sequence of n within your strings (text between as set of double quote marks).
• Using the item from the iostream named: endl; which is short for end line.
Thus the programmer is responsible for making text show reasonably on the screen. Both of the above also
allow for adequate vertical spacing when needed in your output.
3See the le at http://cnx.org/content/m20743/latest/Demo_Circular_Nature_Integer.cpp
4This content is available online at http://cnx.org/content/m20660/1.3/.
190 CHAPTER 15. 15. COUNTING LOOPS
15.3.2.2 Handling Floating-point Data Type
It is nice to have your output displayed so humans can read it (most humans are not use to scientic
notation). There are three lines often inserted near the start of your code (rst items in the function main)
that can be used to direct the formatting of oating-point data. They are:
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(n);
They do the following for the rest of your program:
• xed  Do not use scientic notation but show oating-point values like integer values (numeral digits
of 0 to 9  no exponent notation).
• showpoint  Always show a decimal point for oating-point values even if there is no fractional part.
• precision  Always show this number of digits (change n to a number like 2) to the right of the decimal
point.
15.3.2.3 Setting the Width for Numbers
Setting the width for integer family and oating-point family data types must be done for the output of each
value. Assume in the following example that age is an integer data type and money is a oating-point data
type.
cout setw(4) age endl;
cout setw(8) money endl;
Note that each value had to have its own setw(n) where n is an integer number telling it how many
positions to use for the output. The iomanip header le (immediately shown) will need to be included in
your program.
#includeiomanip // needed for the setw
15.3.3 Demonstration Program in C++
15.3.3.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
15.3.3.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Formatting_Output.cpp
5
15.3.4 Denitions
Denition 15.5: formatting
Modifying the way the output is displayed.
Denition 15.6: wrapping
When output is not vertically spaced properly.
5See the le at http://cnx.org/content/m20660/latest/Demo_Formatting_Output.cpp
191
15.4 Nested For Loops6
15.4.1 General Discussion
15.4.1.1 Nested Control Structures
We are going to rst introduce the concept of nested control structures. Nesting is a concept that places one
item inside of another. Consider:
if expression
true action
else
false action
This is the basic form of the if then else control structure. Now consider:
if age is less than 18
you can't vote
if age is less than 16
you can't drive
else
you can drive
else
you can vote
if age is less than 21
you can't drink
else
you can drink
As you can see we simply included as part of the true action a statement and another if then else
control structure. We did the same (nested another if then else) for the false action. In our example we
nested if then else control structures. Nesting could have an if then else within a while loop. Thus, the
concept of nesting allows the mixing of the dierent categories of control structures.
Many complex logic problems require using nested control structures. By nesting control structures (or
placing one inside another) we can accomplish almost any complex logic problem.
15.4.2 An Example  Nested for loops
Here is an example of a 12 by 12 multiplication table:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
-------------------------------------------------------------------------
1 ! 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
2 ! 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 | 24 |
3 ! 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 | 33 | 36 |
4 ! 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 |
5 ! 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 |
6 ! 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 | 66 | 72 |
7 ! 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 | 77 | 84 |
6This content is available online at http://cnx.org/content/m20653/1.5/.
192 CHAPTER 15. 15. COUNTING LOOPS
8 ! 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 | 88 | 96 |
9 ! 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 | 99 | 108 |
10 ! 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | 110 | 120 |
11 ! 11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99 | 110 | 121 | 132 |
12 ! 12 | 24 | 36 | 48 | 60 | 72 | 84 | 96 | 108 | 120 | 132 | 144 |
We might also see that the answers could be designed as a collection of cells (each cell being exactly six
spaces wide). The C++ source code to produce the above is:
Example 15.5: C++ source code: nested for loops - multiplication table
cout  ;
for(across=1; across 13; across++)
{
cout setw(4) across  |;
}
cout endl;
cout  ;
for(across=1; across 13; across++)
{
cout ------;
}
cout endl;
for(down=1; down 13; down++)
{
cout setw(4) down  !;
for(across=1; across 13; across++)
{
cout setw(4) down*across  |;
}
cout endl;
}
193
Figure 15.4: Colorized Code - multiplication table
194 CHAPTER 15. 15. COUNTING LOOPS
Figure 15.5: Colorized Output - multiplication table
15.4.3 Demonstration Program in C++
15.4.3.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
15.4.3.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Nested_For_Loops.cpp
7
7See the le at http://cnx.org/content/m20653/latest/Demo_Nested_For_Loops.cpp
195
15.4.4 Denitions
Denition 15.7: complex logic
Often solved with nested control structures.
15.5 Practice 15: Counting Loops8
15.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Identify which selection control structures are commonly used a counting loops.
3. Be able to write pseudo code or owcharting for the for control structure.
4. Be able to write C++ source code for a for control structure.
5. When feasible, be able to convert C++ source code from while loop acting like a counting loop to a
for loop and and vice versa.
15.5.2 Memory Building Activities
Link to: MBA 15
9
15.5.3 Exercises
Exercise 15.1 (Solution on p. 197.)
Answer the following statements as either true or false:
1. Only for loops can be counting loops.
2. The integer data type has modular arithmetic attributes.
3. The escape code of n is part of formatting output.
4. Nested for loops is not allowed in the C++ programming language.
5. Counting loops use all four of the loop attributes.
15.5.4 Miscellaneous Items
None at this time.
15.5.5 Lab Assignment
15.5.5.1 Creating a Folder or Sub-Folder for Chapter 15 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_15 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
8This content is available online at http://cnx.org/content/m20809/1.5/.
9See the le at http://cnx.org/content/m20809/latest/index.html
196 CHAPTER 15. 15. COUNTING LOOPS
15.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_15a.cpp
10
15.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Compile and run the Lab_15a.cpp source code le. Understand how it works.
• Copy the source code le Lab_15a.cpp naming it: Lab_15b.cpp
• Convert the code that is counting (all four attributes) to a for loop.
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
15.5.6 Problems
15.5.6.1 Problem 15a  Instructions
Using proper C++ syntax, convert the following for loop to a while loop.
Example 15.6: C++ source code
for (x = 0; x  10; x++)
{
cout Having fun!;
}
10See the le at http://cnx.org/content/m20809/latest/Lab_15a.cpp
197
Solutions to Exercises in Chapter 15
Solution to Exercise 15.1 (p. 195)
Answers:
1. false
2. true
3. true
4. false
5. true
198 CHAPTER 15. 15. COUNTING LOOPS
Chapter 16
16. String Class, Unary Positive and
Negative
16.1 String Class within C++1
16.1.1 General Discussion
In most programming languages a string is typically a string of characters (string them along in a series).
The rules for handling strings vary from language to language. Technically, there is no string data type in
the C++ programming language. However, the concept of a string data type makes it easy to handle stings
of character data. Associated with object oriented programming the string class has been added to C++ as
a standard part of the programming language.
Most data is more complex than just one character, integer, etc. Programming languages develop other
methods to represent and store data that are more complex. A complex data type of array is rst most
students encounter. An array is a sequenced collection of elements of the same data type with a single
identier name. This denition perfectly describes our string data type concept. The simplest array is
called a one-dimensional array; also know as a list because we usually list the members or elements verti-
cally. However, strings are viewed as a one-dimensional array that visualize as listed horizontally. Strings
are an array of character data.
In the C programming language all strings were handled as an array of characters that end in an ASCII
null character (the value 0 or the rst character in the ASCII character code set). This changed with the
implementation of the string class within C++ where strings are stored as a length controlled array with a
maximum length of 255 characters. This string class implementation also allowed programmers to use the
reserved word string as if it were a data type. Commonly used operators and some alternatives for the
string class are summarized in the following table:
C++ Operator Operator Name String Class Implementation
= assignment Same as for standard data types
, , =, =, ==, != six relational Same as for standard data types
continued on next page
1This content is available online at http://cnx.org/content/m20796/1.5/.
199
200 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE
+ addition Concatenation or Append
sizeof Usage how many bytes a data
type occupies
Implemented using a class mem-
ber function named length. For-
mat: identier_name.length()
NOTE: The period between the
identier name and the function
name is the class member opera-
tor.
. the period class member Used in conjunction with class
functions
Table 16.1
Most other operators are not allowed and basically do not make sense for a string data type. The above
items are demonstrated in the following program.
16.1.2 Demonstration Program in C++
16.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
16.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_String_Class.cpp
2
16.1.3 Denitions
Denition 16.1: array
A sequenced collection of elements of the same data type with a single identier name.
Denition 16.2: concatenation
Combining two strings into one string.
Denition 16.3: string class
A complex data item that uses object oriented programming.
Denition 16.4: class member
An operator used to invoke functions associated with a class.
2See the le at http://cnx.org/content/m20796/latest/Demo_String_Class.cpp
201
16.2 Unary Positive and Negative Operators3
16.2.1 General Discussion
Unary positive also known as plus and unary negative also known as minus are unique operators. The plus
and minus when used with a constant value represent the concept that the values are either positive or
negative. Let's consider:
+5 + -2
We have three operators in this order: unary positive, addition, and unary negative. The answer to
this expression is a positive 3. As you can see, one must dierentiate between when the plus sign means
unary positive and when it means addition. Unary negative and subtraction have the same problem. Let's
consider:
-2 - +5
The expression evaluates to negative 7. Let's consider:
7 - -2
First constants that do not have a unary minis in front of them are assumed (the default) to be positive.
When you subtract a negative number it is like adding, thus the expression evaluates to positive 9.
16.2.2 C++ Code Examples
The above examples work within the C++ programming language. What happens if we put a unary positive
or unary negative in front of a variable or a named constant?
16.2.2.1 Negation  Unary Negative
The concept of negation is to take a value and change its sign, that is: ip it. If it positive make it negative
and if it is negative make it positive. Mathematically, it is the following C++ code example, given that
money is an integer variable with a value of 6:
-money
money * -1
The above two expressions evaluate to the same value. In the rst line, the value in the variable money
is fetched and then it's negated to a negative 6. In the second line, the value in the variable money is fetched
and then it's multiplied by negative 1 making the answer a negative 6.
16.2.2.2 Unary Positive  Worthless
Simply to satisfy symmetry, the unary positive was added to the C++ programming language as on operator.
However, it is a totally worthless or useless operator and is rarely used. However don't be confused the
following expression is completely valid:
6 + +5
The second + sign is interpreted as unary positive. The rst + sign is interpreted as addition.
money
+money
money * +1
For all three lines, if the value stored in money is 6 the value of the expression is 6. Even if the value
in money was negative 77 the value of the expression would be negative 77. The operator does nothing,
because multiplying anything by 1 does not change its value.
3This content is available online at http://cnx.org/content/m20501/1.1/.
202 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE
16.2.2.3 Possible Confusion
Do not confuse the unary negative operator with decrement. Decrement changes the value in the variable
and thus is an Lvalue concept. Unary negative does not change the value of the variable, but uses it in an
Rvalue context. It fetches the value and then negates that value. The original value in the variable does not
change.
Because there is no changing of the value associated with the identier name, the identier name could
represent a variable or named constant.
16.2.2.4 Exercises
Exercise 16.1 (Solution on p. 205.)
Evaluate the following items involving unary positive and unary negative:
1. +10 - -2
2. -18 + 24
3. 4 - +3
4. +8 + - +5
5. +8 + / +5
16.2.3 Denitions
Denition 16.5: unary positive
A worthless operator almost never used.
Denition 16.6: unary negative
An operator that causes negation.
Denition 16.7: plus
Aka unary positive.
Denition 16.8: minus
Aka unary negative.
16.3 Practice 16: String Class, Unary Postitive and Negative4
16.3.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Identify which operators are allowed with the string class.
3. Understand the unary positive and unary negative operators.
16.3.2 Memory Building Activities
Link to: MBA 16
5
4This content is available online at http://cnx.org/content/m20810/1.4/.
5See the le at http://cnx.org/content/m20810/latest/index.html
203
16.3.3 Exercises
Exercise 16.2 (Solution on p. 205.)
Evaluate the following items involving unary positive and unary negative:
1. +13 - -2
2. -10 + 14
3. 4 + - 3
4. +8 - * +5
16.3.4 Miscellaneous Items
None at this time.
16.3.5 Lab Assignment
16.3.5.1 Creating a Folder or Sub-Folder for Chapter 16 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_16 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
16.3.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_16_Pseudocode.txt
6
16.3.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le from the Lab_16_Pseudocode.txt le. Name it: Lab_16.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
16.3.6 Problems
16.3.6.1 Problem 16a  Instructions
Describe the normal C++ operators allowed with the string data type.
16.3.6.2 Problem 16b  Instructions
Describe why unary positive is worthless.
6See the le at http://cnx.org/content/m20810/latest/Lab_16_Pseudocode.txt
204 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE
16.3.6.3 Problem 16c  Instructions
Describe how unary negative works.
205
Solutions to Exercises in Chapter 16
Solution to Exercise 16.1 (p. 202)
Answers:
1. 12
2. 6
3. 1
4. It's 3. Surprised, but it works. The middle plus sign is addition and the rest are unary positive or
unary negative.
5. Error, no operand between addition and division.
Solution to Exercise 16.2 (p. 203)
Answers:
1. 15
2. 4
3. 1
4. Error, no operand between subtraction and multiplication.
206 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE
Chapter 17
17. Conditional Operator and Recursion
17.1 Conditional Operator1
17.1.1 Overview
The conditional operator is unique in that it has three operands separated by two unconnected operator
symbols. All other C++ operators are either unary (one operator and one operand) or binary (one operator
and two operands). On the Abbreviated Precedence Chart for C++ Operators the conditional operator
has the word trinary in the comments column. This prex tri means three, thus three operands.
C++ Operator Meaning Comments
? : conditional trinary  three operands with two operators
Table 17.1
As an operator it produces a value for the expression. An easy way to explain the conditional operator
is to convert an if then else control structure to an expression using the conditional operator.
Example 17.1: if then else
if (age  17)
{
cout You can vote.;
}
else
{
cout You can't vote.;
}
Example 17.2: conditional = option 1
age  17 ? cout You can vote. : cout You can't vote.;
1This content is available online at http://cnx.org/content/m20811/1.6/.
207
208 CHAPTER 17. 17. CONDITIONAL OPERATOR AND RECURSION
Example 17.3: conditional = option 2
cout (age  17 ? You can vote. : You can't vote.);
note: The use of parenthesizes is needed because of the precedence of operators. The conditional
expression is of lower precedence than the insertion (writing) operator.
The rst operand is a test expression similar to those that control program ow in control structures.
This type of expression is also known as a Boolean expression because they create a Boolean answer of
true or false. If the test is true the second operand becomes the value of the expression. If false, the third
operand becomes the value of the expression. The operators of the question mark and colon separate the
three operands.
Example 17.4: general format
test expression ? expression true : expression false
17.1.2 Denitions
Denition 17.1: conditional
A trinary C++ operator that acts like an if then else control structure.
17.2 Recursion vs Iteration2
17.2.1 Repetitive Algorithms
In general, there are two approaches to writing repetitive algorithms. One uses loops; the other uses
recursion. Recursion is a repetitive process in which a function calls itself. Both approaches provide
repetition, and either can be converted to the other's approach.
3 Iteration is one of the categories of control
structures. It allows for the processing of some action zero to many times. Iteration is also known as
looping and repetition. The math term to iterate means to perform the statement parts of the loop. Many
problems/tasks require the use of repetitive algorithms. With most programming languages this can be
done with either:
1. looping control structures, specically the for loop (an iterative approach)
2. recursive calling of a function
Using repetitive algorithms as the solution method occurs in many mathematical oriented problems. These
in include factorial, Fibonacci numbers, and the Towers of Hanoi problem. Solutions to these problems
are often only presented in terms of using the recursive method. However, . . . you should understand the
two major limitations of recursion. First, recursive solutions may involve extensive overhead because they
use function calls. Second, each time you make a call you use up some of your memory allocation. If the
2This content is available online at http://cnx.org/content/m20814/1.2/.
3Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United
States of America: Thompson  Brooks/Cole, 2004) 265.
209
recursion is deep  that is, if there is a large number or recursive calls  then you may run out of memory.
Both the factorial and Fibonacci numbers solutions are better developed iteratively.
4
Understanding how recursion or the iterative approaches work will be left to others. They are usually
covered in detail as part of studying data structures. Our goal in covering them is to:
1. Provide you with a denition of recursion
2. Introduce the alternate solution approach of iteration
The following demonstration program shows both solutions for 8! (eight factorial).
17.2.2 Demonstration Program in C++
17.2.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
17.2.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Factorial.cpp
5
17.2.3 Denitions
Denition 17.2: recursion
A repetitive process in which a function calls itself.
Denition 17.3: factorial
A math problem that often is solved using recursion.
17.3 Practice 17: Conditional Operator and Recursion6
17.3.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Understand the conditional operator and how it works.
3. Understand recursion as a problem solving technique.
4. When feasible, be able to convert C++ source code from a conditional expression to an if then else
and vice versa.
4Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United
States of America: Thompson  Brooks/Cole, 2004) 272.
5See the le at http://cnx.org/content/m20814/latest/Demo_Factorial.cpp
6This content is available online at http://cnx.org/content/m20815/1.5/.
210 CHAPTER 17. 17. CONDITIONAL OPERATOR AND RECURSION
17.3.2 Memory Building Activities
Link to: MBA 17
7
17.3.3 Exercises
Exercise 17.1 (Solution on p. 212.)
Answer the following statements as either true or false:
1. The conditional expression acts like a case structure.
2. The conditional operator is a two part operator with three operands.
3. Recursion is one method of implementing a repetitive algorithm.
4. Recursion is always preferred over an iterative approach to a repetitive problem.
5. Factorial is usually demonstrated with an iterative approach.
17.3.4 Miscellaneous Items
None at this time.
17.3.5 Lab Assignment
17.3.5.1 Creating a Folder or Sub-Folder for Chapter 17 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_17 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
17.3.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_17a.cpp
8
17.3.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Compile and run the Lab_17a.cpp source code le. Understand how it works.
• Copy the source code le Lab_17a.cpp naming it: Lab_17b.cpp
• Convert the code that is using the if then else to a conditional expression.
• Convert the code that is using the conditional expression to an if then else.
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
7See the le at http://cnx.org/content/m20815/latest/index.html
8See the le at http://cnx.org/content/m20815/latest/Lab_17a.cpp
211
17.3.6 Problems
17.3.6.1 Problem 17a  Instructions
Using proper C++ syntax, convert the following if then else to a conditional expression.
Example 17.5: if then else
if (x == y)
{
z = 14;
}
else
{
z++;
}
17.3.6.2 Problem 17b  Instructions
Using proper C++ syntax, convert the following conditional expression to an if then else.
Example 17.6: conditional
answer = y  z ? 47 : 92;
212 CHAPTER 17. 17. CONDITIONAL OPERATOR AND RECURSION
Solutions to Exercises in Chapter 17
Solution to Exercise 17.1 (p. 210)
Answers:
1. false
2. true
3. true
4. false
5. false
Chapter 18
18. Introduction to Arrays
18.1 Array Data Type1
18.1.1 Overview
An array is a sequenced collection of elements of the same data type with a single identier name. As such,
the array data type belongs to the Complex category or family of data types. Arrays can have multiple
axes (more than one axis). Each axis is a dimension. Thus a single dimension array is also known as a list.
A two dimension array is commonly known as a table (a spreadsheet like Excel is a two dimension array).
In real life there are occasions to have data organized into multiple dimensioned arrays. Consider a theater
ticket with section, row and seat (three dimensions). This module will only cover the single dimension array.
Most single dimension arrays are visualized vertically and are often called a list.
Most programmers are familiar with a special type of array called a string. Strings are basically a
single dimension array of characters. Unlike other single dimension arrays, we usually envision a string
as a horizontal stream of characters and not vertically as a list. Within C++ the string data type is a
length-controlled array and is a pre-dened data class.
We refer to the individual values as members (or elements) of the array. Programming languages imple-
ment the details of arrays dierently. Because there is only one identier name assigned to the array, we have
operators that allow us to reference or access the individual members of an array. The operator commonly
associated with referencing array members is the index operator. It is important to learn how to dene an
array and initialize its members. Additionally, the sizeof operator is often used to calculate the number of
members in an array.
18.1.2 Dening an Array in C++
Example:
int ages[5] = {49,48,26,19,16};
This is the dening of storage space. The square brackets (left [ and right ]) are used here to create
the array with ve integer members and the identier name of ages. The assignment with braces (that is a
block) establishes the initial values assigned to the members of the array. Note the use of the sequence or
comma operator. We could have done it this way:
int ages[] = {49,48,26,19,16};
By leaving out the ve and having initial values assigned, the compiler will know to create the array with
ve storage spaces because there are ve values listed. This method is preferred because we can simply add
members to or remove members from the array by changing the items inside of the braces. We could have
also done this:
1This content is available online at http://cnx.org/content/m21315/1.2/.
213
214 CHAPTER 18. 18. INTRODUCTION TO ARRAYS
int ages[5];
This would have declared the storage space of ve integers with the identier name of ages but their
initial values would have been unknown values (actually there would be values there but we don't know
what they would be and thus think of the values as garbage). We could assign values later in our program
by doing this:
ages[0] = 49;
ages[1] = 48;
ages[2] = 26;
ages[3] = 19;
ages[4] = 16;
note: The members of the array go from 0 to 4; NOT 1 to 5. This is explained in more detail in
another Connexions module that covers accessing array members and is listed in the supplemental
links provided. See: Array Index Operator.
18.1.3 Denitions
Denition 18.1: dimension
An axis of an array.
Denition 18.2: list
A single dimension array.
Denition 18.3: table
A two dimension array.
18.2 Array Index Operator2
18.2.1 Array Index Operator in C++
Example:
int ages[5] = {49,48,26,19,16};
int my_age;
my_age = ages[2]
This second usage of the square brackets is as the array notation of dereference or more commonly
called the index operator. As an operator it either provides the value held by the member of the array
(Rvalue) or changes the value of member (Lvalue). In the above example the member that is two osets
from the front of the array (the value 26) is assigned to variable named my_age. The dereference operator
of [2] means to go the 2
nd oset from the front of the ages array and get the value stored there. In this case
the value would be 26. The array members (or elements) are referenced starting at zero. The more common
way for people to reference a list is by starting with one. Many programming languages reference array
members starting at one, however for some languages (and C++ is one of them) you will need to change
your thinking. Consider:
2This content is available online at http://cnx.org/content/m21316/1.2/.
215
Position C++ Miss America Other Contests
zero osets from the front ages [0] Winner 1
st Place
one osets from the front ages [1] 1
st Runner Up 2
nd Place
two osets from the front ages [2] 2
nd Runner Up 3
rd Place
three osets from the front ages [3] 3
rd Runner Up 4
th Place
four osets from the front ages [4] 4
th Runner Up 5
th Place
Table 18.1
Saying that my cousin is the 2
nd Runner Up in the Miss America contest sounds so much better than
saying that she was in 3
rd Place. We would be talking about the same position in the array of the ve
nalists.
ages[3] = 20;
This is an example of changing an array's value by assigning 20 to the 4
th member of the array and
replacing the value 19 with 20. This is an Lvalue context because the array is on the left side of the
assignment operator.
The C++ operator name is called the array index or simply the index operator and it uses the square
brackets as the operator symbols.
18.2.2 Denitions
Denition 18.4: array member
An element or value in an array.
Denition 18.5: index
An operator that allows us to reference a member of an array.
Denition 18.6: oset
The method of referencing array members by starting at zero.
18.3 Displaying Array Members3
18.3.1 Accessing Array Members in C++
Example 18.1: accessing the members of an array
int ages[] = {49,48,26,19,16};
int counter;
for (counter = 0, counter  5, counter++)
{
cout ages[counter] endl;
}
This second usage of the square brackets is as the array notation of dereference or more commonly called
the index operator. As an operator it provides the value held by the member of the array. For example,
3This content is available online at http://cnx.org/content/m21317/1.4/.
216 CHAPTER 18. 18. INTRODUCTION TO ARRAYS
during one of the iterations of the for loop the index (which is an integer data type) will have the value of
3. The expression ages[counter] would in essence be: ages[3]. The dereference operator of [3] means to go
the 3
rd oset from the front of the ages array and get the value stored there. In this case the value would
be 19. The array members (or elements) are referenced starting at zero. The more common way for people
to reference a list is by starting with one. Many programming languages reference array members starting
at one, however for some languages (and C++ is one of them) you will need to change your thinking.
Consider:
Position C++ Miss America Other Contests
zero osets from the front ages [0] Winner 1
st Place
one osets from the front ages [1] 1
st Runner Up 2
nd Place
two osets from the front ages [2] 2
nd Runner Up 3
rd Place
three osets from the front ages [3] 3
rd Runner Up 4
th Place
four osets from the front ages [4] 4
th Runner Up 5
th Place
Table 18.2
Saying that my cousin is the 2
nd Runner Up in the Miss America contest sounds so much better than
saying that she was in 3
rd Place. We would be talking about the same position in the array of the ve
nalists.
Rather than using the for loop to display the members of the array, we could have written ve lines of
code as follows:
cout ages[0] endl;
cout ages[1] endl;
cout ages[2] endl;
cout ages[3] endl;
cout ages[4] endl;
18.3.2 Using the Sizeof Operator with Arrays in C++
Example 18.2: using the sizeof operator
int ages[] = {49,48,26,19,16};
int counter;
for (counter = 0, counter  sizeof ages / sizeof ages[0], counter++)
{
cout ages[counter] endl;
}
Within the control of the for loop for the displaying of the grades, note that we calculated the number of
the members in the array by using the sizeof operator. The expression is:
sizeof ages / sizeof ages[0]
When you ask for the sizeof an array identier name the answer is how many total bytes long is the array
(or in other words  how many bytes of storage does this array need to store its values). This will depend
217
on the data type of the array and the number of elements. When you ask for the sizeof one of its members,
it tells you how many bytes one member needs. By dividing the total number of bytes by the size of one
member, we get the answer we want: the number of members in the array. This method allows for exible
coding. By writing the for loop in this fashion, we can change the declaration of the array by adding or
subtracting members and we don't need to change our for loop code.
18.3.3 Demonstration Program in C++
18.3.3.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
18.3.3.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Arrays.cpp
4
18.3.4 Denitions
Denition 18.7: exible coding
Using the sizeof operator to calculate the number of members in an array.
18.4 Practice 18: Introduction to Arrays5
18.4.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Within C++ source code be able to dene a single dimension array.
3. Within C++ source code be able to access array members using the index operator.
4. Within C++ source code be able to calculate the number of members in an array using the sizeof
operator.
18.4.2 Memory Building Activities
Link to: MBA 18
6
4See the le at http://cnx.org/content/m21317/latest/Demo_Arrays.cpp
5This content is available online at http://cnx.org/content/m21321/1.4/.
6See the le at http://cnx.org/content/m21321/latest/index.html
218 CHAPTER 18. 18. INTRODUCTION TO ARRAYS
18.4.3 Exercises
Exercise 18.1 (Solution on p. 219.)
Answer the following statements as either true or false:
1. The array data type is one of the standard data types in C++.
2. Arrays can have more than one dimension.
3. For loops are often used to display the members of an array.
4. When dening an array, it is preferable to specify how many members are in the array.
5. Arrays are rarely used to represent data.
18.4.4 Miscellaneous Items
None at this time.
18.4.5 Lab Assignment
18.4.5.1 Creating a Folder or Sub-Folder for Chapter 18 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_18 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
18.4.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_18_Narrative_Description.txt
7
18.4.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le following the directions in the Lab_18_Narrative_Description.txt le. Name
it: Lab_18.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
18.4.6 Problems
18.4.6.1 Problem 18a  Instructions
Briey explain what an array is and list the two common operators used with arrays.
7See the le at http://cnx.org/content/m21321/latest/Lab_18_Narrative_Description.txt
219
Solutions to Exercises in Chapter 18
Solution to Exercise 18.1 (p. 218)
Answers:
1. false
2. true
3. true
4. false
5. false
220 CHAPTER 18. 18. INTRODUCTION TO ARRAYS
Chapter 19
19. File I/O and Array Functions
19.1 File Input and Output1
19.1.1 Overview of File I/O in C++
We need to understand how to open, read, write and close text les. The following File Input/Output terms
are explained:
Text File  A le consisting of characters from the ASCII character code set. Text les (also know an
ASCII text les) contain character data. When we create a text le we usually think of it consisting of a
series of lines. On each line are several characters (including spaces, punctuation, etc.) and we generally end
the line with a return (this a character within the ASCII character code set). The return is also known as
the new line character. You are most likely already familiar with the escape code of n which is used within
C++ to indicate a return character when used with in a literal string with the cout.
A typical text le consisting of lines can be created by text editors (Notepad) or word processing programs
(Microsoft Word). When using a word processor you must usually specify the output le as text (.txt) when
saving it. Most source code les are ASCII text les with a unique le extension; such as C++ using
.cpp, Pascal using .pas, Cobol using .cob, etc. Thus, most compiler/Integrated Development Environment
software packages (such as the Bloodshed Dev-C++ 5 compiler/IDE) can be used to create ASCII text
les.
Filename  The name and its extension. Most operating systems have restrictions on which characters
can be used in lenames. Example for MS-DOS and Windows: Lab_05.txt
Because some operating systems do not allow spaces, we suggest that you use the underscore where
needed for spacing in a lename.
Filespec  The location of a le along with its lename. It is short for le specication. Most operating
systems have a set of rules on how to specify the drive and directory (or path through several directory
levels) along with the lename. Example for MS-DOS and Windows: C:mylescosc_1436Lab_05.txt
Because some operating systems do not allow spaces, we suggest that you use the underscore where
needed when creating folders or sub-directories.
Open  Your program requesting the operating system to let it have access to an existing le or to open
a new le. Within C++ this is accomplished by including the header le: fstream File Input/Output is
handled in C++ by using a pre-dened class of data objects, similar to the way string data type is handled.
This class of objects has both data type names and functions built to specically accomplish opening and
closing a le.
Within your program you create a local storage variable with the data type of fstream like this:
fstream inData;
1This content is available online at http://cnx.org/content/m21623/1.2/.
221
222 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS
This variable will be used to store the device token that the operating system assigns to the le being
opened. Thus, opening a le uses a class member function call like this:
inData.open(C:myfilescosc_1436Lab_05.txt, ios::in);
The two parameters passed to the function are the lespec and the method that you want to use the le
(in this example as input). The function provides a returning value of a device token from the operating
system and it is stored in the variable named inData.
It is considered good programming practice to determine if the le was opened properly. The device
token should be a non zero value. It the operating system gives you the value of zero it was not able to open
the le. The reason it usually can't open a le is because the lespec is wrong (misspelled or not typed case
consistent in some operating systems) or the le is not stored in the location specied. We often test the
device token by using an if then control structure with the action consisting of stopping the program if it is
true that you got the zero. The rst line of the if then control structure looks like this:
if (!inData)
Don't be misled by the not operator. This reads if it is true that the token stored in inData is zero. If
inData is zero, noting zero is 1 or true.
Read  Moving data from a device that has been opened into a memory location dened in your program.
When reading text les that have integer or oating-point constants, the operating systems converts the text
symbols to a binary number. The operator used is the extraction or read operator. An example of reading
is:
inData next_number
This expression is similar to reading from the standard input device (aka the keyboard):
cin next_number
The cin is a predened device token associated with the Standard Input and Output devices. For our
le reading example you might say, Go to the device identied by the token stored in the inData variable
and read in the next value storing it in the next_number variable within my program.
Write  Moving data from a memory location dened in your program to a device that has been opened.
When writing integer or oating-point data types, the operating system converts the binary number into the
proper text symbols. The operator used is the insertion or write operator. An example of writing is:
outData Total is:  total endl;
This expression is similar to writing to the standard output device (aka the monitor):
cout Total is:  total endl;
The cout is a predened device token associated with the Standard Input and Output devices. For our
le writing example you might say, Go to the device identied by the token stored in the outData variable
and write the items listed (the string constant then the value stored in my program variable named total
then the endl or new line or the return character).
Close  Your program requesting the operating system to release a le that was previously opened.
There are two reasons to close a le. First, it releases the le and frees up the associated operation system
resources. Second, if closing a le that was opened for output; it will clear the out the operating system's
buer and insure that all of the data is physically stored in the output le. Some examples of closing les:
inData.close();
outData.close();
You need to study this module in conjunction with the demo le provided.
19.1.2 Demonstration Program in C++
19.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
223
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
19.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_File_IO.cpp
2
Download from Connexions: Demo_File_IO_Input.txt
3
After you run the program use a text editor to examine the Demo_File_IO_Output.txt le created
by the program. You should see the output as: Total is: 33.3
19.1.3 Denitions
Denition 19.1: text le
A le consisting of characters from the ASCII character code set.
Denition 19.2: lename
The name and its extension.
Denition 19.3: lespec
The location of a le along with its lename.
Denition 19.4: open
Your program requesting the operating system to let it have access to an existing le or to open a
new le.
Denition 19.5: device token
A key value provided by the operating system to associate a device to your program.
Denition 19.6: read
Moving data from a device that has been opened into a memory location dened in your program.
Denition 19.7: write
Moving data from a memory location dened in your program to a device that has been opened.
Denition 19.8: close
Your program requesting the operating system to release a le that was previously opened.
19.2 Arrays and Functions4
19.2.1 Overview of Array Functions
Arrays are an important complex data type used in almost all programming. We continue to concentrate on
simple one dimension arrays also called a list. Most programmers develop a series of user dened specic
task functions that can be used with an array for normal processing. These functions are usually passed the
array along with the number of elements within the array. Some of functions also pass another piece of data
needed for that particular functions task.
This module covers the displaying the array members on the monitor via calling an array function
dedicated to that task. You need to study this module in conjunction with the demo le provided.
2See the le at http://cnx.org/content/m21623/latest/Demo_File_IO.cpp
3See the le at http://cnx.org/content/m21623/latest/Demo_File_IO_Input.txt
4This content is available online at http://cnx.org/content/m21624/1.1/.
224 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS
19.2.2 Demonstration Program in C++
19.2.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
19.2.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials.
Download from Connexions: Demo_Array_Display_Function.cpp
5
19.2.3 Denitions
Denition 19.9: array function
A user dened specic task function designed to process an array.
19.3 Loading an Array from a File6
19.3.1 Conceptual Overview
Loading an array from a le presents an interesting dilemma. The problem resolves around how many
elements you should plan for in the array. Let's say 100, but what if the le has fewer or more than 100
values. How can the program handle it correctly?
The solution involves some simple steps:
1. We can read the le once to get the element count. Thus, we will know exactly how many members
(elements) we will need.
2. We can then create an array using dynamic memory allocation by dening the array within a
function so that it has local scope. Local scope variables are created during the execution of the
program and use the stack as the storage location instead of the data area. If you dene the array
outside of a function (global scope also known as static memory allocation) it stores it in the data
area and must know how much storage space to allocate to the array when you write the source
code. Since we don't know how many elements will be on the input le when we write the source code
dening an array with global scope will not work. But, we can determine exactly how many members
we need for the array by having our program count them (step 1) so that we can then dene the array
with local scope to the precise size needed.
3. We can then load the array by reading the le a second time and storing the values read into the array
just created.
This method is demonstrated in the demo le provided, thus you need to study this material in conjunction
with the demo program.
5See the le at http://cnx.org/content/m21624/latest/Demo_Array_Display_Function.cpp
6This content is available online at http://cnx.org/content/m21625/1.1/.
225
19.3.2 Demonstration Program in C++
19.3.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
19.3.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Loading_Array_from_File.cpp
7
Download from Connexions: Demo_Farm_Acres_Input.txt
8
19.3.3 Denitions
Denition 19.10: dynamic memory
Aka stack created memory associated with local scope.
Denition 19.11: static memory
Aka data area memory associated with global scope.
19.4 Math Statistics with Arrays9
19.4.1 Overview
Arrays are an important complex data type used in almost all programming. We continue to concentrate on
simple one dimension arrays also called a list. Most programmers develop a series of user dened specic
task functions that can be used with an array for normal processing. These functions are usually passed the
array along with the number of elements within the array. Some of functions also pass another piece of data
needed for that particular functions task.
This module covers the totaling of the members of an integer array member. The Latin name for totaling
is summa sometimes shortened to the word sum. The array function is often called sum and it does
some parameter passing. It passes into the function the common two items of the array: its name along with
the number of elements; but it also returns a value representing sum or total of the values within the array.
You need to study this module in conjunction with the demo le provided.
Other mathematical functions often associated with statistics such as: average, count, minimum, maxi-
mum, standard deviation, etc. are often developed for processing arrays.
7See the le at http://cnx.org/content/m21625/latest/Demo_Loading_Array_from_File.cpp
8See the le at http://cnx.org/content/m21625/latest/Demo_Farm_Acres_Input.txt
9This content is available online at http://cnx.org/content/m21626/1.1/.
226 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS
19.4.2 Demonstration Program in C++
19.4.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
19.4.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Sum_ Array_Function.cpp
10
Download from Connexions: Demo_Farm_Acres_Input.txt
11
19.4.3 Denitions
Denition 19.12: sum
Latin for summa or a total.
19.5 Practice 19: File I/O and Array Functions12
19.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Within C++ source code be able to understand basic le input and le output.
3. Understand why we test to see if a le was opened properly.
4. Understand why we close a le when we are done with it.
5. Within C++ source code be able to understand functions for arrays, specically counting the number
of elements in a le so you can dene an array, load that array with those elements, display the array
and sum the array.
6. Within C++ source code be able to create functions for arrays, specically a function for averaging.
19.5.2 Memory Building Activities
Link to: MBA 19
13
10See the le at http://cnx.org/content/m21626/latest/Demo_Sum_Array_Function.cpp
11See the le at http://cnx.org/content/m21626/latest/Demo_Farm_Acres_Input.txt
12This content is available online at http://cnx.org/content/m21630/1.3/.
13See the le at http://cnx.org/content/m21630/latest/index.html
227
19.5.3 Exercises
Exercise 19.1 (Solution on p. 228.)
Answer the following statements as either true or false:
1. Text les are hard to create.
2. A lespec refers to a very small (like a spec dust) le.
3. A device token is a special non zero value the operating system gives your program and is
associated with the le that you requested to be opened.
4. Programmers should not worry about closing a le.
5. Where you dene an item, that is global or local scope, is rarely important.
19.5.4 Miscellaneous Items
None at this time.
19.5.5 Lab Assignment
19.5.5.1 Creating a Folder or Sub-Folder for Chapter 19 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_19 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
19.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_19_Narrative_Description.txt
14
19.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le following the directions in the Lab_19_Narrative_Description.txt le. Name
it: Lab_19.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
19.5.6 Problems
19.5.6.1 Problem 19a  Instructions
For what purpose do we use the sizeof operator with an array.
19.5.6.2 Problem 19b  Instructions
Why would we open a le and count its elements and then close the le.
14See the le at http://cnx.org/content/m21630/latest/Lab_19_Narrative_Description.txt
228 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS
Solutions to Exercises in Chapter 19
Solution to Exercise 19.1 (p. 227)
Answers:
1. false
2. false
3. true
4. false
5. false
Chapter 20
20. More Array Functions
20.1 Finding a Specic Member of an Array1
20.1.1 Overview
Finding a specic member of an array means searching the array until the member is found. It's possible
that the member does not exist and the programmer must handle that possibility within the logic of his
algorithm. Two specic searches can be made for the maximum (largest) values in the array or the minimum
(smallest) value in the array. Maximum and minimum are also know as max and min.
There are two basic ways of searching for a specic value:
1. Linear search
2. Binary search
The linear search is a very simple algorithm. Sometimes called a sequential search, it uses a loop to
sequentially step through an array, starting with the rst element. It compares each element with the value
being search for, and stops when either the value is found or the end of the array is encountered. If the value
being searched for is not in the array, the algorithm will search to the end of the array.
2
Binary search is not cover in this module. Linear search and searching for the maximum is demonstrated
in the demo le provided, thus you need to study this material in conjunction with the demo program.
20.1.2 Demonstration Program in C++
20.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
1This content is available online at http://cnx.org/content/m21627/1.1/.
2Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of
America: Pearson  Addison Wesley, 2008) 559.
229
230 CHAPTER 20. 20. MORE ARRAY FUNCTIONS
20.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Finding Array Member.cpp
3
Download from Connexions: Demo_Farm_Acres_Input.txt
4
20.1.3 Denitions
Denition 20.1: linear search
Using a loop to sequentially step through an array.
Denition 20.2: maximum
Aka max or the largest member of an array.
Denition 20.3: minimum
Aka min or the smallest member of an array.
20.2 Sorting an Array5
20.2.1 Overview
Sorting is the process through which data are arranged according to their values. There are several sorting
algorithms or methods that can be used to sort data. Some include:
1. Bubble
2. Selection
3. Insertion
We will not be covering the selection or insertion sort methods in this module.
The bubble sort is an easy way to arrange data in ascending or descending order. If an array is sorted
in ascending order, it means the values in the array are stored from lowest to highest. If values are sorted
in descending order, they are stored from highest to lowest. Bubble sort works by comparing each element
with its neighbor and swapping them it they are not in the desired order.
6
There are several dierent methods of bubble sorting and some methods are more ecient than others.
Most use a pair of nested loops or iteration control structures. One method sets a ag that indicates that
the array is sorted, then does a pass and if any elements are exchanged (switched); it sets the ag to indicate
that the array is not sorted. It is executed until it makes a pass and nothing is exchanged.
3See the le at http://cnx.org/content/m21627/latest/Demo_Finding_Array_Member.cpp
4See the le at http://cnx.org/content/m21627/latest/Demo_Farm_Acres_Input.txt
5This content is available online at http://cnx.org/content/m21628/1.1/.
6Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of
America: Pearson  Addison Wesley, 2008) 569.
231
Figure 20.1
The bubble sort gets its name from the lighter bubbles that move or bubble up to the top of a glass of
soda pop. We move the smaller elements of the array to the top as the larger elements move to the bottom
of the array. This can be viewed from a dierent perspective. Using an Italian salad dressing with oil, water
and herbs; once shaken you can either:
1. envision the lighter oil rising to the top; OR
2. envision the heaver water and herbs sinking to the bottom
Either way is correct and this version of the code simply demonstrates the sinking to the bottom the heaver
or larger elements of the array.
Bubble sorting is demonstrated in the demo le provided, thus you need to study this material in con-
junction with the demo program.
20.2.2 Demonstration Program in C++
20.2.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
232 CHAPTER 20. 20. MORE ARRAY FUNCTIONS
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
20.2.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Sort_Array_Function.cpp
7
Download from Connexions: Demo_Farm_Acres_Input.txt
8
20.2.3 Denitions
Denition 20.4: sorting
Arranging data according to their values.
Denition 20.5: bubble sort
A method of swapping array members until they are in the desired sequence.
20.3 Practice 20: More Array Functions9
20.3.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Within C++ source code be able to understand functions for arrays, specically searching a array's
values to see if a given value exists, nding the maximum value in an array and sorting an array.
3. Within C++ source code be able to create functions for arrays, specically a function for nding the
smallest value in an array.
4. Within C++ source code be able to modifying existing code to process dierent types of arrays.
20.3.2 Memory Building Activities
Link to: MBA 20
10
20.3.3 Exercises
Exercise 20.1 (Solution on p. 234.)
Answer the following statements as either true or false:
1. Linear searches require complex algorithms.
2. Functions are often created for searching for the max and min values in an array.
3. The bubble sort is an easy way to arrange data an array.
4. There is only one method of bubble sorting.
7See the le at http://cnx.org/content/m21628/latest/Demo_Sort_Array_Function.cpp
8See the le at http://cnx.org/content/m21628/latest/Demo_Farm_Acres_Input.txt
9This content is available online at http://cnx.org/content/m21631/1.3/.
10See the le at http://cnx.org/content/m21631/latest/index.html
233
5. Sorting an array is frequently done.
20.3.4 Miscellaneous Items
None at this time.
20.3.5 Lab Assignment
20.3.5.1 Creating a Folder or Sub-Folder for Chapter 20 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_20 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
20.3.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_20_Narrative_Description.txt
11
20.3.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le following the directions in the Lab_20_Narrative_Description.txt le. Name
it: Lab_20.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
20.3.6 Problems
20.3.6.1 Problem 20a  Instructions
Give a short explanation of bubble sorting.
11See the le at http://cnx.org/content/m21631/latest/Lab_20_Narrative_Description.txt
234 CHAPTER 20. 20. MORE ARRAY FUNCTIONS
Solutions to Exercises in Chapter 20
Solution to Exercise 20.1 (p. 232)
Answers:
1. false
2. true
3. true
4. false
5. true
Chapter 21
21. More on Typedef
21.1 Versatile Code with Typedef1
21.1.1 Overview
Everyone seeks of ways to be more ecient in what they do. A framer uses a tractor instead of a horse. A
construction worker uses an air powered nail gun instead of a hammer. Programmers are no dierent than
others, in that they are constantly improving their ability to produce correctly working programs. Some
aspect of this is the use of modular/structured programming, proper documentation and following industry
rules for a specic programming language. One example of ecient coding is letting the computer count the
number of elements in an array. If we dene an array:
int ages[] = {33,32,10,3};
We can use the following expression to calculate the number of members in the array:
sizeof ages / sizeof ages[0]
This type of exible coding allows us to change the members of the array by adding or subtracting a
values, like this:
int ages[] = {57,33,32,3,1};
Thus, we don't have to modify our code that uses the expression that calculates the number of member
in the array.
One use of the typedef is to allow us to write code that can be quickly changed to handle dierent data
types. There are several integer and oating-point data types that all store number values with dierent
domains. If we write our code using some typedef statement, then our code becomes versatile. By changing
only our typedef commands, our code can be used to process data of a dierent data type. This is demon-
strated within the demo le provided, thus you need to study this material in conjunction with the demo
program.
21.1.2 Demonstration Program in C++
21.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
1This content is available online at http://cnx.org/content/m21629/1.1/.
235
236 CHAPTER 21. 21. MORE ON TYPEDEF
21.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Versatile_Array_Functions.cpp
2
Download from Connexions: Demo_Farm_Acres_Input.txt
3
Download from Connexions: Demo_Deposit_Checks_Input.txt
4
21.1.3 Denitions
Denition 21.1: versatile
Easily modifying code to handle another data type.
Denition 21.2: exible coding
Using the sizeof operator to calculate the number of members in an array.
Denition 21.3: typedef
Allows the programmer to create an alias, or synonym, for an existing data type.
21.2 Practice 21: More on Typedef5
21.2.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Understand how typedef is used within C++ source code be able make the code versatile that is easy
to change for dierent data types.
21.2.2 Memory Building Activities
Link to: MBA 21
6
21.2.3 Exercises
Exercise 21.1 (Solution on p. 238.)
Answer the following statements as either true or false:
1. Most programmers rarely worry about eciency.
2. Modular/structured programming helps improve eciency.
3. Flexible coding helps improve eciency.
4. Who cares about indentation and alignment within source code. It's a waste of time.
5. Versatile code is a concept that is easy to understand.
2See the le at http://cnx.org/content/m21629/latest/Demo_Versatile_Array_Functions.cpp
3See the le at http://cnx.org/content/m21629/latest/Demo_Farm_Acres_Input.txt
4See the le at http://cnx.org/content/m21629/latest/Demo_Deposit_Checks_Input.txt
5This content is available online at http://cnx.org/content/m21632/1.3/.
6See the le at http://cnx.org/content/m21632/latest/index.html
237
21.2.4 Miscellaneous Items
None at this time.
21.2.5 Lab Assignment
21.2.5.1 Creating a Folder or Sub-Folder for Chapter 18 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_18 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
21.2.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_21_Narrative_Description.txt
7
Download from Connexions: Lab_21_Input.txt
8
21.2.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le following the directions in the Lab_21_Narrative_Description.txt le. Name
it: Lab_21.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
21.2.6 Problems
21.2.6.1 Problem 21a  Instructions
Explain the dierence between exible coding and versatile coding.
7See the le at http://cnx.org/content/m21632/latest/Lab_21_Narrative_Description.txt
8See the le at http://cnx.org/content/m21632/latest/Lab_21_Input.txt
238 CHAPTER 21. 21. MORE ON TYPEDEF
Solutions to Exercises in Chapter 21
Solution to Exercise 21.1 (p. 236)
Answers:
1. false  Eciency of code execution, no; eciency of code production and maintenance, yes.
2. true
3. true
4. false
5. maybe true and maybe false  It does require some eort to catch on to how it works.
Chapter 22
22. Pointers
22.1 Address Operator1
22.1.1 Address Operator in C++
Every variable is assigned a memory location whose address can be retrieved using the address operator .
The address of a memory location is called a pointer. Every variable in an executing program is allocated
a section of memory large enough to hold a value of that variable's type.
2 Thus, whether the variables are
global scope and use the data area for storage or local scope and use the stack for storage; you can ask
the question at what address in the memory does this variable exist. Given an integer variable named age:
int age = 47;
We can use the address operator [which is the ampersand or ] to determine where it exists (or its
address) in the memory by:
age
This expression is a pointer data type. The concept of an address and a pointer are one in the same.
A pointer points to the location in memory because the value of a pointer is the address were the data item
resides in the memory.
The address operator is commonly used in two ways:
1. To do parameter passing by reference
2. To establish the value of pointers
Both of these items are covered in the supplemental links to this module.
You can print out the value of the address with the following code:
cout age;
This will by default print the value in hexadecimal. Some people prefer an integer value and to print it
as an integer you will need to cast the address into a long data type:
cout long(age);
One additional tidbit, an array's name is by denition a pointer to the arrays rst element. Thus:
int iqs[] = {122, 105, 131, 97};
establishes iqs as a pointer to the array.
22.1.2 Denitions
Denition 22.1: address operator
The ampersand or .
1This content is available online at http://cnx.org/content/m22148/1.2/.
2Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of
America: Pearson  Addison Wesley, 2008) 597.
239
240 CHAPTER 22. 22. POINTERS
Denition 22.2: pointer
A variable that holds an address as its value.
22.2 Parameter Passing by Reference3
22.2.1 Overview
When we pass parameters to functions we usually pass by value; that is the calling function provides several
values to the called function as needed. The called function takes these values which have local scope and
stores them on the stack using them as needed for whatever processing the functions accomplishes. This
is the preferred method when calling user dened specic task functions. The called function passes back
a single value as the return item if needed. This has the advantage of a closed communications model
with everything being neatly passed in as values and any needed item returned back as a parameter.
By necessity there are two exceptions to this closed communications model:
1. When we need more than one item of information returned by the function
2. When a copy of an argument cannot reasonably or correctly be made (example: le stream objects).
These exceptions are handled by parameter passing by reference instead of passing a value. The item passed
is called a reference variable and it represents a concept of an alias for the variable. Any change made to
the reference variable is actually performed on the variable that it represents. The symbol of the ampersand
is used to designate the reference variable (and it is associated with the address operator).
Example 22.1: parameter passing by reference
// prototype
void process_values(int qty_dimes, int qty_quarters, double value_dimes, double value_quarters);
// variable definitions
int dimes = 45;
int quarters = 33;
double value_dimes;
double value_quarters;
// somewhere in the function main
process_values(dimes, quarters, value_dimes, value_quarters);
// definition of the function
void process_values(int qty_dimes, int qty_quarters, double value_dimes, double value_quarters);
{
value_dimes = dimes * 0.10;
value_quarters = quarters * 0.25;
}
note: The ampersand must appear in both the prototype and the function denition but it does
not appear in the function call.
The above example shows the basic mechanics of parameter passing by reference. You should study the
demonstration program in conjunction with this module.
3This content is available online at http://cnx.org/content/m22150/1.3/.
241
22.2.2 Demonstration Program in C++
22.2.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
22.2.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Parameter_Passing.cpp
4
22.2.3 Denitions
Denition 22.3: reference variable
Used with parameter passing by reference.
22.3 Pointer Data Type5
22.3.1 Pointer Data Type in C++
A pointer variable is a variable that holds the address of a memory location. Every variable is assigned
a memory location whose address can be retrieved using the address operator . The address of a memory
location is called a pointer.
6 The pointer data type allows us to designate a variable to hold an address
or a pointer. The concept of an address and a pointer are one in the same. A pointer points to the location
in memory because the value of a pointer is the address were the data item resides in the memory. Given
an integer variable named age:
int age = 47;
We can create a pointer variable and establish its value which would be the done using the address
operator [which is the ampersand or ] by:
int * int_pointer = age;
The asterisk is used to designate that the variable int_pointer is an integer pointer [int *]. This means
that whenever we use the variable int_pointer that the compiler will know that it is a pointer that points
to an integer.
In order to use pointers you will need to understand the indirection operator which is covered a
supplemental link.
22.3.2 Denitions
Denition 22.4: pointer
A variable that holds an address as its value.
4See the le at http://cnx.org/content/m22150/latest/Demo_Parameter_Passing.cpp
5This content is available online at http://cnx.org/content/m22151/1.2/.
6Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of
America: Pearson  Addison Wesley, 2008) 597.
242 CHAPTER 22. 22. POINTERS
22.4 Indirection Operator7
22.4.1 Indirection Operator in C++
When we pass parameters to functions we usually pass by value; that is the calling function provides several
values to the called function as needed. The called function takes these values which have local scope and
stores them on the stack using them as needed for whatever processing the functions accomplishes. This
is the preferred method when calling user dened specic task functions. The called function passes back
a single value as the return item if needed. This has the advantage of a closed communications model
with everything being neatly passed in as values and any needed item returned back as a parameter.
By necessity there are two exceptions to this closed communications model:
1. When we need more than one item of information returned by the function
2. When a copy of an argument cannot reasonably or correctly be made (example: le stream objects).
These exceptions could be handled by parameter passing by reference instead of passing a value. Although
dierent syntax than parameter passing when using a reference variable; using a pointer variable and
the indirection operator can accomplish the same eect. The indirection operator is the asterisk or the
character that we also use for multiplication. The concept of indirection is also known as dereferencing,
meaning that we are not interested in the pointer but want the item to which the address is referring or
referencing.
Example 22.2: parameter passing with pointers
// prototype
void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_value_quarte
// variable definitions
int dimes = 45;
int quarters = 33;
double value_dimes;
double value_quarters;
double * ptr_value_dimes = value_dimes;
double * ptr_value_quarters = value_quarters;
// somewhere in the function main
process_values(dimes, quarters, ptr_value_dimes, ptr_value_quarters);
// definition of the function
void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_quarters);
{
* ptr_value_dimes = dimes * 0.10;
* ptr_value_quarters = quarters * 0.25;
}
note: The asterisk and must appear in both the prototype and the function denition when
dening the pointer variables but it does not appear in the function call when the pointers are
passed into the function.
7This content is available online at http://cnx.org/content/m22152/1.1/.
243
The above example shows the basic mechanics of the indirection operator.
The use of pointers with indirection is often preferred for processing arrays. The array index operator
is also known as the array method of dereferencing. The following couts are equivalent:
int ages[] = {47, 45, 18, 11, 9};
cout ages[3];
cout *(ages + 3);
The both say, The name of an array is a pointer; take the pointer and calculate a new address that
points to the 3
rd oset by adding the correct number of bytes onto the pointer (integer data type is normally
4 bytes long  3 osets times 4 bytes is 12 bytes); then dereference that pointer (since this is an Rvalue
context  fetch me the value that you are pointing at) and send it to the standard output device.
You should study the demonstration programs in conjunction with this module.
22.4.2 Demonstration Program in C++
22.4.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
22.4.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Pointer_Passing.cpp
8
Download from Connexions: Demo_Array_ Pointer_Processing.cpp
9
22.4.3 Denitions
Denition 22.5: indirection operator
The asterisk used for dereferencing a pointer.
Denition 22.6: dereferencing
The concept of using the item to which a pointer or address is pointing at.
22.5 Practice 22: Pointers10
22.5.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
8See the le at http://cnx.org/content/m22152/latest/Demo_Pointer_Passing.cpp
9See the le at http://cnx.org/content/m22152/latest/Demo_Array_Pointer_Processing.cpp
10This content is available online at http://cnx.org/content/m22153/1.3/.
244 CHAPTER 22. 22. POINTERS
2. Acquire a general understanding of the pointer data type, the address and indirection operators, the
concept of dereferencing.
3. Given pseudocode, write the C++ code for a program that uses reference variables.
22.5.2 Memory Building Activities
Link to: MBA 22
11
22.5.3 Exercises
Exercise 22.1 (Solution on p. 246.)
Answer the following statements as either true or false:
1. The address operator is the @ symbol.
2. Passing by reference should be used when there is only one item to be modied.
3. Variables of pointer data type are dened using an asterisk.
4. Using pointers with the indirection operator can be used instead of passing variables by
reference.
5. There are two kinds of dereferencing  one with the indirection operator and the other with
the index operator.
22.5.4 Miscellaneous Items
None at this time.
22.5.5 Lab Assignment
22.5.5.1 Creating a Folder or Sub-Folder for Chapter 22 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_22 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
22.5.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_22_Pseudocode.txt
12
22.5.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le from the Lab_22_Pseudocode.txt le. Name it: Lab_22.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
11See the le at http://cnx.org/content/m22153/latest/index.html
12See the le at http://cnx.org/content/m22153/latest/Lab_22_Pseudocode.txt
245
22.5.6 Problems
22.5.6.1 Problem 22a  Instructions
Give a general explanation of the pointer data type and the use of addresses and dereferencing. Include both
the indirection operator and the index operator in your discussion.
246 CHAPTER 22. 22. POINTERS
Solutions to Exercises in Chapter 22
Solution to Exercise 22.1 (p. 244)
Answers:
1. false
2. false
3. true
4. true
5. true
Chapter 23
23. More Arrays  Compiler Directives
23.1 Multidimensional Arrays1
23.1.1 Overview
An array is a sequenced collection of elements of the same data type with a single identier name. As such,
the array data type belongs to the Complex category or family of data types. Arrays can have multiple
axes (more than one axis). Each axis is a dimension. Thus a single dimension array is also known as a list.
A two dimension array is commonly known as a table (a spreadsheet like Excel is a two dimension array).
In real life there are occasions to have data organized into multiple dimensioned arrays. Consider a theater
ticket with section, row and seat (three dimensions).
We refer to the individual values as members (or elements) of the array. Programming languages imple-
ment the details of arrays dierently. Because there is only one identier name assigned to the array, we
have operators that allow us to reference or access the individual members of an array.
The operator commonly associated with referencing an array member is the index operator. It is
important to learn how to dene an array and initialize its members. The index operator is a set of square
brackets with an integer value between the brackets that represents the oset from the front of the array.
Multidimensional arrays use one set of square brackets per dimension or axis of the array. For example
a table which has two dimensions would use two sets of square brackets to dene the array variable and two
sets of square brackets for the index operators to access the members of the array.
Because of the complexity for multidimensional arrays, the demonstration program shows a two dimension
array and you should study it in conjunction with this module.
23.1.2 Demonstration Program in C++
23.1.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
1This content is available online at http://cnx.org/content/m22203/1.2/.
247
248 CHAPTER 23. 23. MORE ARRAYS  COMPILER DIRECTIVES
23.1.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Multidimension_Arrays.cpp
2
23.1.3 Denitions
Denition 23.1: dimension
An axis of an array.
Denition 23.2: list
A single dimension array.
Denition 23.3: table
A two dimension array.
Denition 23.4: array member
An element or value in an array.
Denition 23.5: index
An operator that allows us to reference a member of an array.
Denition 23.6: oset
The method of referencing array members by starting at zero.
23.2 Conditional Compilation3
23.2.1 Overview
As you proceed in your programming career, the problems/tasks that need solving become more complex.
The documentation of the algorithm done in pseudo code (or some other method) will still need to be con-
verted into a programming solution. Inevitably, when writing that source code mistakes will be introduced.
When learning the syntax of a new programming language, programmers sometimes automatically think in
their old language syntax, and make mistakes that are sometimes hard to detect.
The concept of using a ag to either activate or have remain dormant certain lines of code designed
solely to help with the debugging of a program has existed since almost the beginning of modern computer
programming (1950's). One of the debugging tools available within C++ is conditional compilation. For
our ag, we would use a dened constant like:
#define DEBUG 1
Then using another compiler directive pair, the #if and #endif, we can have the compiler during the
pre-processor either include or not include one or more lines of code.
#if DEBUG
cout n***** DEBUG Code ** Hi mom!;
#endif
Of course saying Hi mom! is not very useful for debugging your code. However, you can use test data
with conditional compilation. A series of input data values and a series of output predictors can be placed
in the program. Then you can turn on the debug feature or turn them o with your debugging ag.
You should study the demonstration program in conjunction with this module.
2See the le at http://cnx.org/content/m22203/latest/Demo_Multidimension_Arrays.cpp
3This content is available online at http://cnx.org/content/m22204/1.3/.
249
23.2.2 Demonstration Program in C++
23.2.2.1 Creating a Folder or Sub-Folder for Source Code Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Demo_Programs
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
23.2.2.2 Download the Demo Program
Download and store the following le(s) to your storage device in the appropriate folder(s). Following the
methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction
with other learning materials. You may need to right click on the link and select Save Target As in order
to download the le.
Download from Connexions: Demo_Conditional_Compliation.cpp
4
23.2.3 Denitions
Denition 23.7: conditional compilation
A compiler directive that includes or excludes lines of code based on a Boolean expression.
23.3 Practice 23: More Arrays  Compiler Directives5
23.3.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Have an exposure to multidimensional arrays.
3. Understand conditional compilation as a testing technique.
4. When supplied with test data, add conditional compilation lines to an existing C++ source code.
23.3.2 Memory Building Activities
Link to: MBA 23
6
23.3.3 Exercises
Exercise 23.1 (Solution on p. 251.)
Answer the following statements as either true or false:
1. Very few arrays need more than one axis.
2. Multidimensional arrays use multiple square brackets, one set per axis.
3. Using a ag to activate debugging lines of code has been around since the 1950s.
4See the le at http://cnx.org/content/m22204/latest/Demo_Conditional_Compilation.cpp
5This content is available online at http://cnx.org/content/m22205/1.2/.
6See the le at http://cnx.org/content/m22205/latest/index.html
250 CHAPTER 23. 23. MORE ARRAYS  COMPILER DIRECTIVES
4. Within C++ we can use the conditional compilation compiler directives to implement debug-
ging line of code.
23.3.4 Miscellaneous Items
None at this time.
23.3.5 Lab Assignment
23.3.5.1 Creating a Folder or Sub-Folder for Chapter 23 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_23 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
23.3.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_23a.cpp
7
23.3.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Compile and run the Lab_23a.cpp source code le. Understand how it works.
• Copy the source code le Lab_23a.cpp naming it: Lab_23b.cpp
• Add conditional compilation statements similar to the demonstration program used in the Conditional
Compilation Connexions module. Specically use: 157 pennies, 92 nickels, 23 dimes and 31 quarters
as your test data.
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
23.3.6 Problems
23.3.6.1 Problem 23a  Instructions
Give three examples in the real world where data might be structured into a multidimensional array. One
example (and you can't count it) is a theatre ticket which might have a section, row and seat number on it.
7See the le at http://cnx.org/content/m22205/latest/Lab_23a.cpp
251
Solutions to Exercises in Chapter 23
Solution to Exercise 23.1 (p. 249)
Answers:
1. false
2. true
3. true
4. true
252 CHAPTER 23. 23. MORE ARRAYS  COMPILER DIRECTIVES
Chapter 24
24. OOP  HPC
24.1 Object Oriented Programming1
24.1.1 Discussion
In procedural programming, the programmer constructs procedures (or functions, as they are called in
C++). The procedures are collections of programming statements that perform a specic task. The pro-
cedures each contain their own variables and commonly share variables with other procedures. Procedural
programming is centered on the procedure or function.
2 For decades (1950s to through the 1980s) most
programming was taught as procedural programming. Coupled with the imposition of using standardized
control structures in the late 1960s, we have what is typically called modular structured programming.
Another, equally valid approach to programming is object-oriented programming or OOP. It was
introduced in the mid 1980s and was widely accepted as a programming approach by the early 1990s. The
rst languages to introduce OPP to the masses were C++ and Java. Shortly after their introduction, there
were American National Standards Institute (ANSI) standards established for those languages. Today, C++
and Java are widely used.
The primary dierences between the two approaches is their use of data. In a procedural program,
the design centers around the rules or procedures for processing the data. The procedures, implemented as
functions in C++, are the focus of the design. The data objects are passed to the functions as parameters.
The key question is how the functions will transform the data they receive for either storage or further
processing. Procedural programming has been the mainstay of computer science since its beginning and is
still heavily used today.
In an object-oriented program, abbreviated OPP, the design centers around objects that contain (encap-
sulate) the data and the necessary functions to process the data. In OOP, the objects own the functions
that process the data.
3
Object-oriented programming . . . is centered on the object. An object is a programming element that
contains data and the procedures that operate on the data. The objects contain, within themselves, both
the information and the ability to manipulate the information.
4
To help complicate the picture, the C++ programming language can be used (and is used) to write either
a procedural program (modular structured program) or an object-oriented program. Some items used by
those writing procedural programs in C++ are in fact objects. Examples include:
1This content is available online at http://cnx.org/content/m22188/1.2/.
2Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of
America: Pearson  Addison Wesley, 2008) 22.
3Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United
States of America: Thompson  Brooks/Cole, 2004) 156.
4Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of
America: Pearson  Addison Wesley, 2008) 22.
253
254 CHAPTER 24. 24. OOP  HPC
1. Standard input and output items of: cout and cin; example: cout.setf(ios::xed)
2. Strings; calculating the length with: identier_name.length()
3. File input/output; example: inData.open(lespec, ios::in)
Objects are implemented with a class data type; which is a complex or derived data type. Implementation
details will not be presented in the module.
24.1.2 Transition
Many students will learn modular structured programming before learning object-oriented programming.
The common way of teaching programming fundamentals is to cover them or divide them into three courses,
usually covered in this order:
1. Modular structured
2. Object-oriented
3. Data structures
The following items learned in modular structured programming ow into the learning of object-oriented
programming:
1. The standard and complex data types are the same
2. The operators are the same, thus data manipulation is the same
3. The control structures are the same
4. Concepts of documentation and making code readable are the same
5. The use of test data to verify logical thinking and program results is similar
24.1.3 Denitions
Denition 24.1: procedural programming
Aka modular structured programming.
Denition 24.2: object oriented
A programming approach that encapsulates data with functions.
24.2 Understanding High Performance Computing5
24.2.1 Preface  June 2, 2009
This module was created as an entry for the 2008-'09 Open Education Cup: High Performance
Computing competition. The competition was supervised by Dr. Jan Erik Odegard, Executive Director
of the Ken Kennedy Institute for Information Technology at Rice University. It was submitted to the
Parallel Algorithms and Applications category and specically designed as an introduction to the subject
targeting intermediate grade school students to collegiate undergraduates who have little knowledge of High
Performance Computing (HPC).
Those who reviewed the entries for the competition made some suggestions for improvement and most
have been incorporated into this revised edition of the module. As always; my thanks to them and all others
who make suggestions for improving educational materials.
Kenneth Leroy Busbee
5This content is available online at http://cnx.org/content/m19804/1.6/.
255
24.2.2 Introduction to High Performance Computing
Grouping multiple computers or multiple computer processors to accomplish a task quicker is referred to
as High Performance Computing (HPC). We want to explain how this is accomplished using parallel
programming algorithms or concepts.
24.2.2.1 The Shift from a Single Processor to Parallel
We are going to start our explanation by giving two simple examples.
Example 24.1
After eating all you can, you toss your chicken leg bone out of the car window (shame on you for
trashing up the highway), but in short order an ant nds your tossed chicken bone. One single ant
could bite o the left over on the bone and transport it to the colony, one bite at a time; but, it
might take him 1 whole day (24 hours) of work. But, what if he gets help? He signals some buddies
and being a small colony of ants they allocate a total of 10 ants to do the task. Ten times the
workers take one tenth the time. The ten ants do the task in 2 hours and 24 minutes.
I toss another bone out the window. An ant nds it and the colony allocates 50 ants to do the
task of picking the bone clean. In less than 30 minutes (28.8 to be exact) the 50 ants working in
parallel complete the task.
Example 24.2
One painter might take 8 hours to paint the exterior of an average sized house. But, if he can
put a crew of 10 painters working simultaneously (or in other words in parallel) it takes only 48
munities. What about a crew of 50 painters assuming that they can do work and not get in the
way of each other; well how about less than 10 minutes (9.6 to be exact).
Now let's make sure we understand that the same amount of work was done in the examples given. The work
was only completed in a shorter amount of time because we put more workers on the task. Not all tasks can
be divided up in this way, but when it can be divided between multiple workers, we can take advantage of
the workers doing their sub part of the task in parallel. Let's look at another example.
Example 24.3
I want to drive from Houston, Texas to Dallas, Texas; a distance of about 250 miles. For easy
calculations let's say I can travel 50 miles in one hour. It would take me 5 hours. Well, I could
divide the task between 5 cars and have each car travel 50 miles and arrive in Dallas in 1 hour.
Right?
Well, wrong. The task of driving from Houston to Dallas cannot be divided into tasks that can be done in
parallel. The task can only be done by one person driving in a line from Houston to Dallas in 5 hours. I used
the word line because it helps connect us to the word: linear. A linear task cannot be broken-up into
smaller tasks to be done in parallel by multiple workers. Within the computer world, the word associated
with linear concept is sequential processing. I must drive one mile at a time in sequence to get to Dallas.
Our natural tendency is to share the work that is to work in parallel whenever it is possible. As a group
we can accomplish many tasks that can be done in parallel in less time.
24.2.2.2 The Birth of Computers  A Parallel to Central Processing Unit (CPU) Story
ENIAC, short for Electronic Numerical Integrator And Computer, was the rst general-purpose electronic
computer (July 1946). It was the rst Turing-complete, digital computer capable of being reprogrammed to
solve a full range of computing problems. ENIAC had twenty ten-digit signed accumulators which used ten's
complement representation and could perform 5,000 simple addition or subtraction operations between any
of them and a source (e.g., another accumulator, or a constant transmitter) every second. It was possible
to connect several accumulators to run simultaneously, so the peak speed of operation was potentially much
higher due to parallel operation. (ENIAC from Wikipedia)
256 CHAPTER 24. 24. OOP  HPC
Often not understood by many today, the rst computer used base 10 arithmetic in the electronics and
was a parallel processing machine by using several accumulators to improve the speed. However, this did
not last for long. During its construction:
The First Draft of a Report (commonly shortened to First Draft) on the EDVAC  Electronic Discrete
Variable Automatic Computer was an incomplete 101 page document written by John von Neumann and
distributed on June 30, 1945 by Herman Goldstine, security ocer on the classied ENIAC project. It
contains the rst published description of the logical design of a computer using the stored-program concept,
which has come to be known as the von Neumann architecture. (First Draft of a Report on the EDVAC
from Wikipedia)
The von Neumann architecture is a design model for a stored-program digital computer that uses a
[central] processing [unit] and a single separate storage structure to hold both instructions and data. It is
named after the mathematician and early computer scientist John von Neumann. Such computers implement
a universal Turing machine and have a sequential architecture. (Von Neumann architecture from Wikipedia)
Von Neumann also proposed using a binary (base 2) numbering system for the electronics. One of
the characteristics of the von Neumann architecture was the trade o of multiple processors using base 10
electronics to a single central processor using base 2 (or digital) electronics. To compare to our ant example,
the idea was to use one real fast ant versus 10 slow ants. If one real fast ant can do 1,000 tasks in an hour;
it would be more powerful (be able to do more tasks) than 10 ants doing 10 tasks an hour or the equivalent
of 100 tasks per hour.
The rest is history  most commercially built computers for about the rst forty years (1951 to 1991)
followed the von Neumann architecture. The electronic engineers keep building more reliable and faster
electronics. From vacuum tube, to transistor, to integrated circuit to what we call today chip technology.
This transformation made computers break down less frequently (they were more reliable), physically smaller,
needing less electric power and faster. Personal computers were introduced in the late 1970's and within ten
years became more commonly available and used.
One short coming was that most programming eorts were towards improving the linear (or sequential)
way of thinking or solving a problem. After all, the computer electronic engineers would be making a faster
computer next year. Everyone understood that the computer had only one central processing unit (CPU).
Right?
24.2.2.3 The Need for Power
Well, wrong. Computer scientists and electronic engineers had been experimenting with multi-processor
computers with parallel programming since 1946. But it's not until the 1980's that we see the rst par-
allel processing computers (built by Cray and other computer companies) being sold as commercial built
computers. It's time for another example.
Example 24.4
The circus traveling by train from one city to the next has an elephant that dies. They decide to
toss the elephant o the train (shame on them for trashing up the country side), but in short order
a super ant (faster than most regular ants) nds the elephant. This project is much larger than
your tossed chicken bone. One single super ant could do the task (bite o a piece of the elephant
and transport it to the colony, one bite at a time); but, it might take one whole year. After all this
requires a lot more work than a chicken bone. But, what if he gets help? He signals some buddies
and being a large colony of super ants they allocate a total of 2,190 ants to do the task. Wow,
they devour the elephant in six hours.
This elephant example is exactly where the computer scientists had arrived. The electronic engineers were
going to continue to make improvements in the speed of a single central processing unit computer, but
not soon enough to satisfy the need for power to be able to solve tasks requiring immense computing
power. Some of the new tasks that would require immense computer power included the human genome
project, searching for oil and gas by creating 3 dimensional images of geological formations and the study
of gravitational forces in the universe; just to mention a few. The solution: parallel processing to the
257
rescue. Basically the only way to get this immense computer power was to implement parallel processing
techniques. During the late 1970's and early 1980's scientists saw the need to explore the parallel processing
paradigm more fully and thus the birth of High Performance Computing. Various national and international
conferences started during the 1980's to be able to further the cause of High Performance Computing. For
example in November of 2008 the SC08 supercomputing conference celebrated their 20
th anniversary.
The predicting of the weather is a good example for the need of High Performance Computing. Using the
fastest central processing unit computer it might take a year to predict tomorrow's weather. The information
would be correct but 365 days late. Using parallel processing techniques and a powerful high performance
computer, we might be able to predict tomorrow's weather in 6 hours. Not only correct, but in time to be
useful.
24.2.2.4 Measuring Computer Power
Most people are familiar with the giga hertz (billions of instructions per second) measure to describe how fast
a single CPU's processor is running. Most microcomputers of today are running around 3 GHz or 3 billion
instructions a second. Although 3 billion sounds fast, many of these instructions are simple operations.
Supercomputing uses a measurement involving oating point arithmetic calculations as the benchmark for
comparing computer power. In computing, FLOPS (or ops or op/s) is an acronym meaning FLoating
point Operations Per Second. and again On May 25, 2008, an American military supercomputer built by
IBM, named 'Roadrunner', reached the computing milestone of one petaop by processing more than 1.026
quadrillion calculations per second. (FLOPS from Wikipedia) For those of us not familiar:
Example 24.5: Getting a Sense of Power
3 billion or 3 GHz is: 3,000,000,000
1 quadrillion or 1 pedaflop is: 1,000,000,000,000,000
You also should realize that your personal computer is not doing 3 gigafolp worth of calculations, but
something slower when using the FLOPS measurement.
24.2.2.5 High Performance Computing Made Personal
It took several years (about 30) to get computers to a personal level (1951 to 1981). It took about twenty
years (late 1980's to present 2009) to get multi-processor computers to the personal level. Currently available
to the general public are computers with duo core and quad core processors. In the near future, micro
computers will have 8 to 16 core processors. People ask, Why would I need that much computer power?
There are dozens of applications, but I can think of a least one item that almost everyone wants: high quality
voice recognition. That's right! I want to talk to my computer. Toss your mouse, toss your keyboard, no
more touch pad  talk to it.
Again, one short coming is that most programming eorts have been towards teaching and learning
the sequential processing way of thinking or solving a problem. Educators will now need to teach and
programmers will now need to develop skills in programming using parallel concepts and algorithms.
24.2.2.6 Summary
We have bounced you back and forth between sequential and parallel concepts. We covered our natural
tendency to do work in parallel. But with the birth of computers the parallel concepts were set to the side
and the computer industry implemented a faster single processor approach (sequential). We explained the
limitations of sequential processing and the need for computing power. Thus, the birth of High Performance
Computing. Parallel processing computers are migrating into our homes. With that migration, there is a
great need to educate the existing generation and develop the next generation of scientists and programmers
to be able to take advantage of High Performance Computing.
258 CHAPTER 24. 24. OOP  HPC
24.2.3 Learner Appropriate Activities
High Performance Computing is impacting how we do everything. Learning, working, even our relaxation
and entertainment are impacted by HPC. To help more people understand HPC, I have listed appropriate
activities based on where a learner is in relation to their programming skills.
24.2.3.1 Computer Literacy but No Programming Skills
We have provided two computer programs that help students see the impact of parallel processing. The
rst is a Linear to Parallel Calculator where the student enters how long it would take one person to
complete a task, asks how many people will work as a group on the task, then calculates how long it will
take the group to complete the task. The second is a Parallel Speed Demonstration Program that simulates
parallel processing. It displays to the monitor the rst 60 factorial numbers in 60 seconds, then shows as if
10 processors are doing it in 6 seconds, then as if 100 processors are doing it in less than 1 second. Both are
compiled and ready for use on an Intel CPU machine (compiled for use on Windows OS).
Download the executable le from Connexions: Linear to Parallel Calculator
6
Download the executable le from Connexions: Parallel Speed Demonstration Program
7
An interesting activity would be to join a group that is using thousands of personal microcomputers
via Internet connections for parallel processing. Several distributed processing projects are listed in the
FLOPS article on Widipedia. One such group is the Great Internet Mersenne Prime Search - GIMPS.
A link to the GIMPS web site is: http://www.mersenne.org/
8
Another activity is to Google some keywords. Be careful - Googling can be confusing and often can
be dicult to focus on the precise subject that you want.
• high performance computing
• computational science
• supercomputing
• distributed processing
24.2.3.2 Learning Programming Fundamentals
Students learning to program that are currently taking courses in Modular/Structured programming and/or
Object Oriented programming might want to review the source code les for the demonstration programs
listed above. These programs do not do parallel programming, but the student could modify or improve
them to better explain parallel programming concepts.
You may need to right click on the link and select Save Target As in order to download these source
code les.
Download the source code le from Connexions: Linear to Parallel Calculator
9
Download the source code le from Connexions: Parallel Speed Demonstration Program
10
Another appropriate activity is to Google some of the key words listed above. With your fundamental
understanding of programming, you will understand more of the materials than those with no programming
experience. You should get a sense that parallel programming is becoming a more important part of a
computer professional's work and career.
Review the Top 500 Super Computers at: http://www.top500.org/
11
Look at the source code listings provided in the next section, but remember, you cannot compile or run
these on your normal computer.
6See the le at http://cnx.org/content/m19804/latest/Demo_Linear_to_Parallel.exe
7See the le at http://cnx.org/content/m19804/latest/Demo_Parallel_Speed.exe
8http://www.mersenne.org/
9See the le at http://cnx.org/content/m19804/latest/Demo_Linear_to_Parallel.cpp
10See the le at http://cnx.org/content/m19804/latest/Demo_Parallel_Speed.cpp
11http://www.top500.org/
259
24.2.3.3 Upper Division Under-Graduate College Students
The challenge is to try parallel computing, not just talk about it.
During the week of May 21st to May 26th in 2006, this author attended a workshop on Parallel and
Distributed Computing. The workshop was given by the National Computational Science Institute and
introduced parallel programming using multiple computers (a group of micro computers grouped or
clustered into a super-micro computer). The conference emphasized several important points related to the
computer industry:
1. During the past few years super-micro computers have become more powerful and more available.
2. Desk top computers are starting to be built with multiple processors (or cores) and we will have
multiple (10 to 30) core processors within a few years.
3. Use of super-micro computing power is wide spread and growing in all areas: scientic research,
engineering applications, 3D animation for computer games and education, etc.
4. There is a shortage of educators, scientic researchers, and computer professionals that know how to
manage and utilize this developing resource. Computer professionals needed include: Technicians that
know how to create and maintain a super-micro computer; and Programmers that know how to
create computer applications that use parallel programming concepts.
This last item was emphasized to those of you beginning a career in computer programming that as you
progress in your education, you should be aware of the changing nature of computer programming as a
profession. Within a few years all professional programmers will have to be familiar with parallel
programming.
During the conference this author wrote a program that sorts an array of 150,000 integers using two
dierent approaches. The rst way was without parallel processing. When it was compiled and executed
using a single machine, it took 120.324 seconds to run (2 minutes). The second way was to redesign the
program so parts of it could be run on several processors at the same time. When it was compiled and
executed using 11 machines within a cluster of micro-computers, it took 20.974 seconds to run. That's
approximately 6 times faster. Thus, parallel programming will become a necessity to be able to
utilize the multi-processor hardware of the near future.
A distributed computing environment was set up in a normal computer lab using a Linix operating
system stored on a CD. After booting several computers with the CD, the computers can communicate with
each other with the support of Message Passing Interface or MPI commands. This model known as the
Bootable Cluster CD (BCCD) is available from:
Bootable Cluster CD  University of Northern Iowa at: http://www.bccd.net/
12
The source code les used during the above workshop were modied to a version 8, thus an 8 is in the
lename. The non-parallel processing super code was named: nonps8.cpp with the parallel processing
super code named: ps8.cpp (Note: The parallel processing code contains some comments that describe
that part of the code being run by a machine identied as the SERVER_NODE with a part of the code
being run by the 10 other machines (the Clients). The client machines communicate critical information to
the server node using Message Passing Interface or MPI commands.)
You may need to right click on the link and select Save Target As in order to download these source
code les.
Download the source code le from Connexions: nonps8.cpp
13
Download the source code le from Connexions: ps8.cpp
14
Two notable resources with super computer information were provided by presenters during the workshop:
Oklahoma University  Supercomputing Center for Education  Research at:
http://www.oscer.ou.edu/education.php
15
12http://www.bccd.net/
13See the le at http://cnx.org/content/m19804/latest/nonps8.cpp
14See the le at http://cnx.org/content/m19804/latest/ps8.cpp
15http://www.oscer.ou.edu/education.php
260 CHAPTER 24. 24. OOP  HPC
Contra Costa College  High Performance Computing at: http://contracosta.edu/hpc/resources/presentations/
16
You can also Google the topic's key words and spend several days reading and experimenting with
High Performance Computing.
Consider reviewing the Educator Resources links provided in the next section.
24.2.4 Educator Resources
There are many sites that provide materials and assistance to those teaching the many aspects of High
Performance Computing. A few of them are:
Shodor  A National Resource for Computational Science Education at: http://www.shodor.org/home/
17
CSERD  Computational Science Education Reference Desk at: http://www.shodor.org/refdesk/
18
National Computational Science Institute at: http://www.computationalscience.org/
19
Association of Computing Machinery at: http://www.acm.org/
20
Super Computing  Education at: http://sc09.sc-education.org/about/index.php
21
24.2.5 Simple Denitions
Denition 24.3: high performance computing
Grouping multiple computers or multiple computer processors to accomplish a task in less time.
Denition 24.4: sequential processing
Using only one processor and completing the tasks in a sequential order.
Denition 24.5: parallel processing
Dividing a task into parts that can utilize more than one processor.
Denition 24.6: central processing unit
The electronic circuitry that actually executes computer instructions.
Denition 24.7: parallel programming
Involves developing programs that utilize parallel processing algorithms that take advantage of
multiple processors.
24.3 Practice 24: OOP  HPC22
24.3.1 Learning Objectives
With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed
quiz/exam; the student is expected to:
1. Dene the terms on the denitions as listed in the modules associated with this chapter.
2. Gain an exposure to object-oriented programming.
3. Gain an exposure to high performance computing.
4. G iven general instructions, write the C++ code for a program that includes a general review of the
textbook/collection/course.
16http://contracosta.edu/hpc/resources/presentations/
17http://www.shodor.org/home/
18http://www.shodor.org/refdesk/
19http://www.computationalscience.org/
20http://www.acm.org/
21http://sc09.sc-education.org/about/index.php
22This content is available online at http://cnx.org/content/m22194/1.4/.
261
24.3.2 Memory Building Activities
Link to: MBA 24
23
24.3.3 Exercises
Exercise 24.1 (Solution on p. 263.)
Answer the following statements as either true or false:
1. Procedural programming and object-oriented programming cannot be done with the same
compiler/IDE.
2. Object-oriented programming encapsulates data and functions.
3. High Performance Computing is a new topic on the computer scene.
4. The concepts and examples of High Performance Computer are dicult to explain.
5. All programmers will need to know about parallel programming in the near future.
24.3.4 Miscellaneous Items
None at this time.
24.3.5 Lab Assignment
24.3.5.1 Creating a Folder or Sub-Folder for Chapter 24 Files
Depending on your compiler/IDE, you should decide where to download and store source code les for
processing. Prudence dictates that you create these folders as needed prior to downloading source code les.
A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
• Chapter_24 within the folder named: Cpp_Source_Code_Files
If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
24.3.5.2 Download the Lab File(s)
Download and store the following le(s) to your storage device in the appropriate folder(s). You may need
to right click on the link and select Save Target As in order to download the le.
Download from Connexions: Lab_24_Narrative_Description.txt
24
24.3.5.3 Detailed Lab Instructions
Read and follow the directions below carefully, and perform the steps in the order listed.
• Create a source code le following the directions in the Lab_24_Narrative_Description.txt le. Name
it: Lab_24.cpp
• Build (compile and run) your program.
• After you have successfully written this program, if you are taking this course for college credit, follow
the instructions from your professor/instructor for submitting it for grading.
23See the le at http://cnx.org/content/m22194/latest/index.html
24See the le at http://cnx.org/content/m22194/latest/Lab_24_Narrative_Description.txt
262 CHAPTER 24. 24. OOP  HPC
24.3.6 Problems
24.3.6.1 Problem 24a  Instructions
Describe the fundamental dierences between procedural (modular structured) programming and object-
oriented programming.
24.3.6.2 Problem 24b  Instructions
Explain why High Performance Computing is needed to predict tomorrow's weather.
263
Solutions to Exercises in Chapter 24
Solution to Exercise 24.1 (p. 261)
Answers:
1. false
2. true
3. false
4. false
5. true
264 CHAPTER 24. 24. OOP  HPC
Chapter 25
Review Materials
25.1 Review: Foundation Topics Group: 1-51
25.1.1 Strategy Discussion
Exams vary depending on your instructor. Many will use the following:
1. Denitions
2. Self-grading questions including true/false, multiple choice, short answer, etc.
3. Problems
The materials in this textbook/collection have covered these items at the end of every chapter within the
Practice module for that chapter. We suggest the following test preparation strategies:
1. If your professor is testing the denitions and expecting you to have them memorized, you should
review the Using the Flash Card Activity within the Study Habits that Build the Brain module
within the Appendix materials. Practice writing your denitions using the Flash Card Activity in the
Memory Building Activities (MBAs) available within the Practice modules or in the Memory Building
Activities within this Review module.
2. Do a quick review of any exercises within the Connexions modules or the Practice modules. Also
review quizzes or exams that you have taken and pay special attention to making sure you understand
why you missed a question.
3. If your professor has indicated that they might include a few of the problems presented within the
Practice modules, make sure you have formulated a good answer for each problem. If authorized,
collaborate with other students to improve your answers to the problems. Spend a moderate amount
of time reviewing each problem with its answer before the exam.
25.1.2 Memory Building Activities
Link to: MBA Review: Foundation Topics Group: 1-5
2
25.1.3 Miscellaneous Items
Link to: Manipulation of Data Part 1
3
1This content is available online at http://cnx.org/content/m22418/1.2/.
2See the le at http://cnx.org/content/m22418/latest/index.html
3See the le at http://cnx.org/content/m22418/latest/Manipulation_Data_Part_1.pdf
265
266 CHAPTER 25. REVIEW MATERIALS
25.2 Review: Modular Programming Group: 6-94
25.2.1 Strategy Discussion
Exams vary depending on your instructor. Many will use the following:
1. Denitions
2. Self-grading questions including true/false, multiple choice, short answer, etc.
3. Problems
The materials in this textbook/collection have covered these items at the end of every chapter within the
Practice module for that chapter. We suggest the following test preparation strategies:
1. If your professor is testing the denitions and expecting you to have them memorized, you should
review the Using the Flash Card Activity within the Study Habits that Build the Brain module
within the Appendix materials. Practice writing your denitions using the Flash Card Activity in
conjunction with the Memory Building Activities (MBAs) available within the Practice modules or
in the Memory Building Activities within this Review module.
2. Do a quick review of any exercises within the Connexions modules or the Practice modules. Also
review quizzes or exams that you have taken and pay special attention to making sure you understand
why you missed a question.
3. If your professor has indicated that they might include a few of the problems presented within the
Practice modules, make sure you have formulated a good answer for each problem. If authorized,
collaborate with other students to improve your answers to the problems. Spend a moderate amount
of time reviewing each problem with its answer before the exam.
25.2.2 Memory Building Activities
Link to: MBA Review: Modular Programming Group: 6-9
5
25.2.3 Miscellaneous Items
None at this time.
25.3 Review: Structured Programming Group: 10-166
25.3.1 Strategy Discussion
Exams vary depending on your instructor. Many will use the following:
1. Denitions
2. Self-grading questions including true/false, multiple choice, short answer, etc.
3. Problems
The materials in this textbook/collection have covered these items at the end of every chapter within the
Practice module for that chapter. We suggest the following test preparation strategies:
4This content is available online at http://cnx.org/content/m22421/1.2/.
5See the le at http://cnx.org/content/m22421/latest/index.html
6This content is available online at http://cnx.org/content/m21653/1.5/.
267
1. If your professor is testing the denitions and expecting you to have them memorized, you should
review the Using the Flash Card Activity within the Study Habits that Build the Brain module
within the Appendix materials. Practice writing your denitions using the Flash Card Activity in
conjunction with the Memory Building Activities (MBAs) available within the Practice modules or
in the Memory Building Activities within this Review module.
2. Do a quick review of any exercises within the Connexions modules or the Practice moudles. Also
review quizzes or exams that you have taken and pay special attention to making sure you understand
why you missed a question.
3. If your professor has indicated that they might include a few of the problems presented within the
Practice modules, make sure you have formulated a good answer for each problem. If authorized,
collaborate with other students to improve your answers to the problems. Spend a moderate amount
of time reviewing each problem with its answer before the exam.
25.3.2 Memory Building Activities
Link to: MBA Review: Structured Programming Group: 10-16
7
25.3.3 Miscellaneous Items
Link to: Animated gif showing an if then else
8
Link to: Animated gif showing a do while loop
9
Link to: Animated gif showing a while loop
10
Link to: Manipulation of Data Part 2
11
Link to: Manipulation of Data Part 3
12
25.4 Review: Intermediate Topics Group: 17-2113
25.4.1 Strategy Discussion
Exams vary depending on your instructor. Many will use the following:
1. Denitions
2. Self-grading questions including true/false, multiple choice, short answer, etc.
3. Problems
The materials in this textbook/collection have covered these items at the end of every chapter within the
Practice module for that chapter. We suggest the following test preparation strategies:
1. If your professor is testing the denitions and expecting you to have them memorized, you should
review the Using the Flash Card Activity within the Study Habits that Build the Brain module
within the Appendix materials. Practice writing your denitions using the Flash Card Activity in
conjunction with the Memory Building Activities (MBAs) available within the Practice modules or
in the Memory Building Activities within this Review module.
2. Do a quick review of any exercises wtihin the Connexions modules or Practice modules. Also review
quizzes or exams that you have taken and pay special attention to making sure you understand why
you missed a question.
7See the le at http://cnx.org/content/m21653/latest/index.html
8See the le at http://cnx.org/content/m21653/latest/if_then_else_ow.gif
9See the le at http://cnx.org/content/m21653/latest/do_while_ow.gif
10See the le at http://cnx.org/content/m21653/latest/while_ow.gif
11See the le at http://cnx.org/content/m21653/latest/Manipulation_Data_Part_2.pdf
12See the le at http://cnx.org/content/m21653/latest/Manipulation_Data_Part_3.pdf
13This content is available online at http://cnx.org/content/m21642/1.4/.
268 CHAPTER 25. REVIEW MATERIALS
3. If your professor has indicated that they might include a few of the problems presented within the
Practice modules, make sure you have formulated a good answer for each problem. If authorized,
collaborate with other students to improve your answers to the problems. Spend a moderate amount
of time reviewing each problem with its answer before the exam.
25.4.2 Memory Building Activities
Link to: MBA Review: Intermediate Topics Group: 17-21
14
25.4.3 Miscellaneous Items
None at this time.
25.5 Review: Advanced Topics Group: 22-2415
25.5.1 Strategy Discussion
Exams vary depending on your instructor. Many will use the following:
1. Denitions
2. Self-grading questions including true/false, multiple choice, short answer, etc.
3. Problems
The materials in this textbook/collection have covered these items at the end of every chapter within the
Practice module for that chapter. We suggest the following test preparation strategies:
1. If your professor is testing the denitions and expecting you to have them memorized, you should
review the Using the Flash Card Activity within the Study Habits that Build the Brain module
within the Appendix materials. Practice writing your denitions using the Flash Card Activity in
conjunction with the Memory Building Activities (MBAs) available within the Practice modules or
in the Memory Building Activities within this Review module.
2. Do a quick review of any exerecises within the Connexions modules or the Practice modules. Also
review quizzes or exams that you have taken and pay special attention to making sure you understand
why you missed a question.
3. If your professor has indicated that they might include a few of the problems presented within the
Practice modules, make sure you have formulated a good answer for each problem. If authorized,
collaborate with other students to improve your answers to the problems. Spend a moderate amount
of time reviewing each problem with its answer before the exam.
25.5.2 Memory Building Activities
Link to: MBA Review: Advanced Topics Group: 22-24
16
25.5.3 Miscellaneous Items
None at this time.
14See the le at http://cnx.org/content/m21642/latest/index.html
15This content is available online at http://cnx.org/content/m22215/1.4/.
16See the le at http://cnx.org/content/m22215/latest/index.html
Chapter 26
Appendix
26.1 Abbreviated Precedence Chart for C++ Operators1
An operator is a language-specic syntactical token (one or more symbols) that causes an action to be
taken on one or more operands. The following item provides an abbreviated list of those C++ operators that
are typically taught in a programming fundamentals course that teaches modular structured programming
concepts.
The rst column shows the precedence (the higher precedence is 1 or it goes rst) and operators that
have the same precedence also have the same associativity (the associativity is only listed once for the
group of operators). Decrement is two minus signs, but some word processing software programs might have
problems printing two minus signs and convert it to a double dash. Insertion (two  signs) and extraction
(two  signs) might also have printing problems. These printing problems are noted in the comments with
emphasized text.
PR OPERATOR
NAME
SYMBOL(S) COMMENTS ASSOICIATIVITYCONNEXIONS
MODULE
1 function call () Left to Right m19145 (Sec-
tion 6.3)
1 index [] aka array index m21316 (Sec-
tion 18.2)
2 class member . a period Right to Left m20796 (Sec-
tion 16.1)
2 postx incre-
ment
++ unary m20499 (Sec-
tion 14.1)
2 postx decre-
ment
 unary, two
minus signs
m20499 (Sec-
tion 14.1)
continued on next page
1This content is available online at http://cnx.org/content/m18168/1.12/.
269
270 CHAPTER 26. APPENDIX
3 indirection * unary, aka
dereference
Right to Left m22152 (Sec-
tion 22.4)
3 address  unary m22148 (Sec-
tion 22.1)
3 unary positive + unary, aka plus m20501 (Sec-
tion 16.2)
3 unary negative - unary, aka mi-
nus
m20501 (Sec-
tion 16.2)
3 prex incre-
ment
++ unary m20499 (Sec-
tion 14.1)
3 prex decre-
ment
 unary, two
minus signs
m20499 (Sec-
tion 14.1)
3 cast (type) unary m18744 (Sec-
tion 3.7)
3 sizeof sizeof (type) unary m18736 (Sec-
tion 9.2)
3 logical NOT ! unary m19847 (Sec-
tion 12.2)
4 multiply * Left to Right m18706 (Sec-
tion 3.6)
4 divide / m18706 (Sec-
tion 3.6)
4 modulus % remainder m18706 (Sec-
tion 3.6)
5 add + Left to Right m18706 (Sec-
tion 3.6)
5 subtract - m18706 (Sec-
tion 3.6)
6 insertion writing, two
less than
signs
Left to Right m18835 (Sec-
tion 5.2)
6 extraction reading, two
greater than
signs
m18835 (Sec-
tion 5.2)
continued on next page
271
7 less than  Left to Right m19549 (Sec-
tion 11.3)
7 greater than  m19549 (Sec-
tion 11.3)
7 less than or
equal to
= m19549 (Sec-
tion 11.3)
7 greater than or
equal to
= m19549 (Sec-
tion 11.3)
8 equality == equal to Left to Right m19549 (Sec-
tion 11.3)
8 inequality != not equal to m19549 (Sec-
tion 11.3)
9 logical AND  Left to Right m19847 (Sec-
tion 12.2)
10 logical OR || Left to Right m19847 (Sec-
tion 12.2)
11 conditional ? : trinary Left to Right m20811 (Sec-
tion 17.1)
12 assignment = Right to Left m18725 (Sec-
tion 3.5)
12 addition as-
signment
+= m18743 (Sec-
tion 4.4)
12 subtraction as-
signment
-= m18743 (Sec-
tion 4.4)
12 multiplication
assignment
*= m18743 (Sec-
tion 4.4)
12 division assign-
ment
/= m18743 (Sec-
tion 4.4)
12 modulus as-
signment
%= m18743 (Sec-
tion 4.4)
13 sequence or
comma
, Left to Right m18690 (Sec-
tion 9.4)
Table 26.1
26.2 C++ Reserved Keywords2
All programming languages have reserved words. There are usually less than 50 of these reserved words in
any given programming language. They are reserved because they have been pre-assigned a specic meaning
within that programming language, thus the compiler recognizes those words to mean a specic thing or
action. Within C++ the reserved words are also known as keywords.
Programmers use identier names for a variety of items, to include: functions, variables, named constants,
alias names, etc. But, they can't use as identier names the words that are reserved to the language.
2This content is available online at http://cnx.org/content/m18181/1.5/.
272 CHAPTER 26. APPENDIX
For the C++ language all reserved keywords are typed in lower case. The list that follows includes
the American National Standards Institute (ANSI) and the International Organization for Standardization
(ISO) lists of reserved words for the C++ programming language. The ISO reserved words may not be
implemented in the compiler that you are using, however they may be adopted in future releases of C++
compilers. Wisdom dictates to avoid using them at this point so that there will not be a problem compiling
your source code in future releases of compilers. There has been no distinction made in the ANSI or ISO
reserved word lists. A search of the Internet for C++ reserved words will reveal several dierent lists. Some
are more unique to a specic compiler. Some will be incomplete because the list has been enlarged. The
talbe that follows should work for any beginning programming course using C++. The reserved keywords
are:
and double not_eq throw
and_eq dynamic_cast operator true
asm else or try
auto enum or_eq typedef
bitand explicit private typeid
bitor extern protected typename
bool false public union
break oat register unsigned
case fro reinterpret-cast using
catch friend return virtual
char goto short void
class if signed volatile
compl inline sizeof wchar_t
const int static while
const-cast long static_cast xor
continue mutable struct xor_eq
default namespace switch
delete new template
do not this
Table 26.2
26.3 ASCII Character Set3
ASCII stands for American Standard Code for Information Interchange (pronounced ask-key). Computers
can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a'
or '@' or an action of some sort. ASCII was developed a long time ago and now the non-printing characters
are rarely used for their original purpose. The rst 32 values (0 to 31) and the last value (127) are the
non-printing characters.
Several software products can be used to create an ASCII text le.
3This content is available online at http://cnx.org/content/m18169/1.7/.
273
• Notepad within Windows OS and it uses by default the .txt extension.
• Microsoft Word by saving the le as 'text only' and it uses by default the .txt extension.
• Integrated Development Environment (IDE) compliers for most programming languages usually save
source code as ASCII text les but they will use an extension that describes the content of the text
le. Example: C++ usually uses .cpp as the extension.
The following web links provide more information and tables listing the ASCII Character Set:
http://asciiset.com/
4
http://www.asciitable.com/
5
http://en.wikipedia.org/wiki/ASCII
6
26.4 Show Hide File Extensions7
By default, le extensions for known le types are hidden in Windows XP and Windows Vista. However,
you can change this setting so that le extensions are shown for les. Being able to see le extensions can
be very helpful for students taking computer courses because those course instructions often refer to le
extensions.
The following web links provide instructions for showing or hiding le extensions.
26.4.1 Windows XP
http://www.leinfo.net/help/windows-show-extensions.html
8
26.4.2 Windows Vista
http://windowshelp.microsoft.com/Windows/en-US/Help/a0b4607a-6fa8-42ab-aef6-
7418183389da1033.mspx
9
26.5 Academic or Scholastic Dishonesty10
26.5.1 Introduction
The relationship between faculty and students has always been one of open and honest communication. The
faculty member carries the responsibility of presenting course materials via reading assignments, lectures,
labs, etc. The student is to learn and understand these materials. Additionally, the faculty members employ
various methods to assess the student's mastery of the course materials. Frequently this is done via quizzes,
tests, writing assignments, the completion of lab materials, etc. Academic dishonesty (sometimes called
Scholastic Dishonesty) is the violation of that trust.
Cheating on quizzes and tests as well as plagiarism is usually well understood by students before arriving
at the collegiate level of education. Most colleges include adequate explanation in their student handbook
explaining well what constitutes cheating on exams and plagiarism. Academic dishonesty often carries some
sti penalties. Usually, the student receives the grade of F from the professor in the course in which he is
enrolled. The student might be expelled from all of their classes for which they are currently enrolled (F
in all of your classes) and expelled from the institution (may not register for classes in the future). Sounds
harsh, but it is a violation of the bond of trust between the student and the educational institution.
4http://asciiset.com/
5http://www.asciitable.com/
6http://en.wikipedia.org/wiki/ASCII
7This content is available online at http://cnx.org/content/m18100/1.4/.
8http://www.leinfo.net/help/windows-show-extensions.html
9http://windowshelp.microsoft.com/Windows/en-US/Help/a0b4607a-6fa8-42ab-aef6-7418183389da1033.mspx
10This content is available online at http://cnx.org/content/m18096/1.8/.
274 CHAPTER 26. APPENDIX
26.5.2 Collusion
Another category of academic dishonesty is collusion which is the unauthorized collaboration with another
person in preparing written work (including lab assignments) oered for credit (counting towards your
grade calculation). To better understand collusion, students need to realize that as part of the learning
and evaluation of that learning, many professors use group projects; a directed or authorized collaboration.
Often students are encouraged to form study groups to help discuss the course materials thus improving the
learning process. These authorized and sometimes directed activities are not collusion.
The following discussion is to help the student understand collusion (unauthorized collaboration) with
specic reference to courses that use computers. This is not an all inclusive list, but will cover the common
situations that faculty have encountered over the years. Unless your specic professor informs you dierently,
you are to assume that the following items discussed are collusion.
26.5.3 Type it Yourself
Lab assignments are to be your own personal typing eorts. That is you are to type them or make the
modications yourself to the les (documents, spreadsheets, databases, programming source code, etc.) If
your course is a programming subject, you are to run the source code le on your compiler, making corrections
as need to complete the lab assignment. If the directions for an assignment include starting a new le then
don't use an existing le and modify it to complete the assignment. Unless specically authorized by
your professor, students should not complete computerized course work as a team or group
and then share the nal completed product.
Students have said that they worked as a team or group and that all participated and all learned the
materials. Don't try this excuse because professors don't buy it. Here is the problem: Part of the learning
process is in you doing it yourself. Example: I ask two students to make me some pancakes for breakfast; I
expect two individually prepared plates of pancakes (one from each of them) for my breakfast. The professor
really does not want to eat two plates of pancakes (or 50 to 100 plates of pancakes, depending on how many
students they are teaching), but part of your directed learning activity for the course is to demonstrate that
you can make pancakes (not watch someone else make pancakes or participate as a group to make pancakes).
26.5.4 Control Access to Your Files
Controlling the les you create (or are directed to modify) means that others will not have access to copy
your work. In other words, don't share your les.
Students have said that they shared the le so they the other student could see how the completed
assignment should look. Don't try this excuse because professors don't buy it. Here is the problem: When
you share the le you share your typing eorts (or your original work and your eorts to create that original
work). Back to our pancake example: I only gave the other student a plate of completed pancakes, so he
could see what the end product should be. All the other student does is add some blue berries and whip
cream. If a student makes minor modications to your work (changes the spots where your name is to his
name) and turns it in as his work  you will be included in the charge of academic dishonesty. Unless
specically authorized by your professor, don't share any les that you create or modify with
another student  ever, not now and not in the future.
Here are two suggestions for controlling access to your les:
When using a course delivery software product or learning system, such as BlackBorad Vista, don't give
another person your password. With the password, they will have access to your submitted assignments
including the les that you created.
Don't leave your les on a machine where others may have access to them. If multiple students are
using or have access to the same machine (often happens with students living in the same household 
husband/wife, siblings or roommates) or in an on-campus course where many students will have access to
the machine  store your les on a ash drive. Physically control who gets access to your ash drive.
275
26.5.5 Ask for a Clarication of the Collaboration
If you have any question about an activity that might be construed as unauthorized collaboration, ask your
professor. They will provide clarication and direction to you about the activity.
Students have said that they did not understand or think that it was unauthorized collaboration. Don't
try this excuse because professors don't buy it. Here is the problem: We can't, and won't list every minor
way in which students can collude. The burden is for you to ask for any clarication for the specic
course from your professor. Don't assume that what another instructor allowed in another course will
be allowed by this professor in this course.
26.5.6 Detecting Academic Dishonesty
Professors weren't born yesterday. The faculty members of most institutions have individually years and
collectively thousands of years at understanding academic dishonesty. Cheating on tests, plagiarism and
collusion are not new to us. We share our expertise with each other at detecting academic dishonesty.
Additionally, the years of technical computer experience of professors who teach using computers in lab
settings is often astounding.
Students have said that they did not think they could be detected or that academic dishonesty could not
be proved. Don't try this approach because professors believe that they are slightly smarter. Actually, we
know that we are a lot smarter. It amazes us that some students don't realize that professors are a formidable
force. Don't gamble that you can beat us at the Academic Dishonesty Game. Please don't take
this as a challenge and use it as an excuse to see if you can be academically dishonest and not get caught.
We are warning you, not challenging you.
26.5.7 Summary
• The ethics of academic honesty; there is a bond of trust that whatever the student does in relationship
to the evaluation process are their own work and eorts.
• Collusion is the unauthorized collaboration of students on work submitted for evaluation.
• First directive: Type if yourself
• Second directive: Don't share your les
• Seek clarication from your professor if you have any doubt that the collaborative activity might be
considered collusion.
• Professors are very capable at detecting academic dishonesty.
26.6 Successful Learning Skills11
26.6.1 Realize the Time Commitment
College computer courses often are listed in the catalog of courses with both lecture and lab hours. But
unlike the natural and biological sciences (chemistry, physics and biology) that must meet in a specic lab
11This content is available online at http://cnx.org/content/m18101/1.9/.
276 CHAPTER 26. APPENDIX
room designed for those courses, students can usually complete their lab portions at a variety of locations
(the college's computer lab, home, work, public library, friend's house, etc.).
The normal rule of thumb is 1 to 1.5 hours out of class studying for every hour in class and for computer
courses this normally means both the lecture and lab hours. Students with learning disabilities or those whose
primary language is not English will want to plan for more study time and should use a larger ratio. Thus,
you should calculate the weekly hours of commitment needed for a course depending on your circumstances.
Example:
If a student is taking a 4 credit hour computer course that the college catalog says contains a combination
of 6 hours (adding your lecture and lab hours) during a regular 16 week semester; the weekly classroom and
study time for that course would be 12 to 15 hours a week.
But many students take courses at a faster pace by either taking a course between semesters in a very
concentrated mode, starting a course after the regular start of a semester or during the summer. To calculate
the weekly study time needed you will need to calculate the total regular semester instructional time and
divide by the number of weeks in the faster pace delivery. Example:
Our 4 credit hour course is to be taken during a summer term that has 9 weeks of instruction time. The
total regular semester time would be 15 times the normal semester commitment (180 to 225 hours). Dividing
it by 9 would mean 20 to 25 hours per week.
26.6.2 Understand Your Capacity to Concentrate
You cannot expect to spend long periods of time working on computer course materials. After 3 to 4 hours
of working on course materials, your ability to learn drops signicantly (and for most to near zero). This
problem is compounded by the nature of the material which is cumulative in nature. This means that you
must understand item a before you try to learn item b. All of the math and sciences courses of study are of
this nature.
26.6.3 Plan Regular Study Times
The combination of the time commitment and your ability to concentrate leads to the conclusion that you
cannot cram your study time into a week-end of concentrated study. You must break up your study time
into 3 to 4 hour study periods doing only one study period per day. You must establish a regular routine
for each week. Students taking a regular semester course on-campus will count their class (lecture and lab)
time and plan 2 to 3 additional study periods.
If taking a course via distance education, students need to plan for all of the course time, thus during a
regular semester term, our 4 credit hour course example would require 3 to 4 study periods with 3 to 4 hours
for each study period per week. If taking the course at faster pace (9 week summer term) you will need to
schedule more study times. This may mean a 3 to 4 hour study period daily for 6 days a week (with
only one day o as a day of rest).
You need to stay on top of a course to successfully complete it. Pacing yourself with multiple study
times allows for eective learning. Students who procrastinate until close to an exam and then try cramming
through course materials are rarely A students.
26.6.4 Learning Requires Variety and Repetition
Variety comes in many forms and includes lecture, lab assignments, studying textbooks, multi-media materi-
als, quizzes, writing a research papers, learning activities such as group discussions, crossword puzzles, ash
cards, etc. This variety actually helps our brain to understand and build memory. In addition to variety,
repetition (exposure over multiple study periods) is essential for our brains to be able to learn and recall
the course materials. Again, this understanding and recall are essential to courses that require cumulative
learning (you must understand item a before you can learn item b).
Textbooks and professors break-up course materials into chapters or learning modules often with learning
objectives rst and review items at the end of each unit. Each chapter or module might have any of the
277
above mentioned items. But doing things and study are dierent. You can't just show up to class and listen,
you can't just read stu, you need to study. Study requires a variety of activities. Ask yourself:
• Do you understand each learning objective?
• Can you explain or formulate an answer for each learning objective?
• If you did not understand the reading materials, did you re-read it?
• Do the review items (especially questions).
• Take lecture notes.
• Do the lecture notes or handouts give you a better understanding than the textbook?
• Often the problems or lab assignments are to be studied in conjunction with and reinforce the study
materials. Have you tried to do and understand the problems or lab assignments?
• Are there any learning activities available and if yes, did you do them.
• Did you consider using 3x5 cards to study denitions and vocabulary?
• Did you review the learning objectives before taking any quizzes?
• If the quizzes are computerized, did you study your quiz results?
• After reviewing quiz results and re-study, did you retake the quiz again if available?
All of this requires time and eort on your part as the student in any course (distance education or on-
campus). You need several study periods a week to learn the materials in any course. The purpose of a quiz
is for you to self assess your understanding of the materials. If your learning is not complete, change or
modify your learning habits.
26.6.5 Interact with the Other Students
In a normal classroom students interact with each other. They often form study groups with other students
and meet regularly to help each other study materials. These interactions in most cases are essential to the
learning process. If your only interaction is by private conversation or private email with the instructor, you
are not fully participating in the course. For distance education students, most learning systems (such as
Blackboard Vista) provide several tools to create this interaction. They typically include announcements,
discussion list, email and chat tools.
26.6.6 Don't Procrastinate and Don't Get Behind
What should you do if you get behind? Plan regular study periods. The lack of regular study periods
is most likely the reason for why you got behind. Plan when you will do extra study periods in order to
catch up.
26.6.7 Attend Class and Take Notes
Taking lecture notes and being able to review those note later when you are studying provides variety that
is needed to learn material. Just writing the notes down more actively engages the brain, because you are
listening and writing. But you need to arrange with at least two fellow classmates that you will all take notes
and share notes with each other if absent. In addition to course materials, other administrative matters are
discussed in class (such as the announcement of exam date change).
If you are taking a distance education course, you need to regularly enter the learning management system
(such as Blackboard Vista) and review the announcements, discussion list postings and read (and answer
if appropriate) email. Most distance education professors assume that anything he has communicated via
these tools will have been read by the student within 3 days. In short this means you are responsible for
having read the items and completing any action requested.
278 CHAPTER 26. APPENDIX
26.7 Study Habits that Build the Brain12
26.7.1 Introduction
During the spring of 2008 the author, Kenneth Leroy Busbee, did some research with students taking a com-
puter programming fundamentals course to determine if using 3x5 cards would improve student performance
on exams. In short, it did! This was not a surprise, but it became obvious that most of us (faculty at all
levels of education as well as students) have little understanding of how are brain builds understanding and
long term memory.
Attached are several PowerPoint presentations that have been save in an Adobe PDF format. Please
spend a few minutes reviewing the information provided. Hopefully it will help students to better learn the
subjects they are studying.
26.7.2 Main Presentation
Link to: Study Habits that Build the Brain
13
26.7.3 Specic Topics
Link to: Reading the Textbook
14
Link to: Taking Lecture Notes
15
Link to: Using 3x5 Cards
16
Link to: Using the Flash Card Activity
17
12This content is available online at http://cnx.org/content/m19977/1.4/.
13See the le at http://cnx.org/content/m19977/latest/Study_Habits_that_Build_the_Brain.pdf
14See the le at http://cnx.org/content/m19977/latest/Reading_the_Textbook.pdf
15See the le at http://cnx.org/content/m19977/latest/Taking_Lecture_Notes.pdf
16See the le at http://cnx.org/content/m19977/latest/Using_3x5_Cards.pdf
17See the le at http://cnx.org/content/m19977/latest/Using_the_Flash_Card_Activity.pdf
GLOSSARY 279
Glossary
A abs
A function within the cmath standard
library in C++ which stands for absolute.
action item
An attribute of iteration control
structures.
address operator
The ampersand or .
applications
An information system or collection of
programs that handles a major task.
array
A sequenced collection of elements of the
same data type with a single identier
name.
array function
A user dened specic task function
designed to process an array.
array member
An element or value in an array.
ASCII
American Standard Code for Information
Interchange
assignment
An operator that changes the value of a
modiable data object.
associativity
Determines the order in which the
operators of the same precedence are
allowed to manipulate the operands.
at least once
Indicating that test after loops execute the
action at least once.
B banners
A set of comment lines used to help
separate the functions and other sections
of a program.
block
Another name for a compound statement.
Boolean
A data type representing the concepts of
true and false.
braces
Used to identify a block of code in C++.
branching
A control structure that allows the ow of
execution to jump to a dierent part of
the program.
branching control structures
Allow the ow of execution to jump to a
dierent part of the program.
break
A branching control structure that
terminates the existing structure.
bubble sort
A method of swapping array members
until they are in the desired sequence.
C case
A control structure that does mulitway
selection.
central processing unit
The electronic circuitry that actually
executes computer instructions.
character
A data type representing single text
characters like the alphabet, numeral
digits, punctuation, etc.
circular nature
Connecting the negative and positive ends
of the domain of an integer family data
type.
class member
An operator used to invoke functions
associated with a class.
280 GLOSSARY
close
Your program requesting the operating
system to release a le that was
previously opened.
code checking
Using test data to check the coded
program in a specic language (like
C++).
comments
Information inserted into a source code le
for documentation of the program.
common area
An area of the program where variables
and constants are dened so that they
are available to all functions.
compiler
Converts source code to object code.
compiler directive
An instruction to the compiler to complete
a task before formally starting to compile
the program.
complex logic
Often solved with nested control
structures.
compound statement
A unit of code consisting of zero or more
statements.
concatenation
Combining two strings into one string.
conditional
A trinary C++ operator that acts like an
if then else control structure.
conditional compilation
A compiler directive that includes or
excludes lines of code based on a Boolean
expression.
condence
The reliance that Standard Library
functions work properly.
consistent
A rule that says to type identier names
in upper and lower case consistently
throughout your source code.
constant
A data item whose value cannot change
during the program's execution.
continue
A branching control structure that causes
a loop to stop its current iteration and
begin the next one.
control structures
Mechanisms that allow us to control the
ow of execution within a program.
counting controlled
Using a variable to count up or down to
control a loop.
D data area
A part of an object code le used for
storage of data.
data type
Denes a set of values and a set of
operations that can be applied on those
values.
date type families
1) Nothing 2) Integer 3) Floating-Point 4)
Complex
debugging
The process of removing errors from a
program. 1) compiler 2) linker 3) logic
decision symbol
A diamond used in owcharting for asking
a question and making a decision.
decrement
Subtracting one from the value of a
variable.
demotion
Going from a larger domain to a smaller
domain.
dereferencing
The concept of using the item to which a
pointer or address is pointing at.
device
A piece of equipment that is electronically
connected to the memory so that data
can be transferred between the memory
and the device.
device token
GLOSSARY 281
A key value provided by the operating
system to associate a device to your
program.
dimension
An axis of an array.
do while
A test after iteration control structure
available in C++.
documentation
A method of preserving information useful
to others in understanding an
information system or part thereof.
domain
The set of allowed values for a data type.
double
The most often used oating-point family
data type used in C++.
dynamic memory
Aka stack created memory associated with
local scope.
E escape code
An code directing an output device to do
something.
evaluation
The process of applying the operators to
the operands and resulting in a single
value.
event controlled
Using user input to control a loop.
exit
A pre-dened function used to
prematurely stop a program and jump to
the operating system.
explicit
Changing a value's data type with the cast
operator.
expression
A valid sequence of operand(s) and
operator(s) that reduces (or evaluates) to
a single value.
extraction
Aka reading or getting data from an input
device.
F factorial
A math problem that often is solved using
recursion.
lename
The name and its extension.
lespec
The location of a le along with its
lename.
ag
A variable or constant used to store
information that will normally be used to
control the program.
exible coding
Using the sizeof operator to calculate the
number of members in an array.
oating point
A data type representing numbers with
fractional parts.
ow lines
Lines (sometimes with arrows) that
connect the various owcharting symbols.
owcharting
A programming design tool that uses
graphical elements to visually depict the
ow of logic within a function.
folder
A named area for storage of documents or
other les on a disk drive or ash drive.
for
A test before iteration control structure
typically used for counting.
formatting
Modifying the way the output is
displayed.
function call
A function's using or invoking of another
function.
function denition
The code that denes what a function
does.
function prototype
A function's communications declaration
to a complier.
282 GLOSSARY
function
What modules are called in the two
predominant programming languages of
today: C++ and Java.
G global scope
Data storage dened outside of a function.
goto
A branching control structure that causes
the logic to jump to a dierent place in
the program.
H header le
A le that contains items we want to have
included toward the top of our source
code.
hierarchy chart
Convey the relationship or big picture of
the various functions in a program.
high performance computing
Grouping multiple computers or multiple
computer processors to accomplish a task
in less time.
I identier name
The name given by the programmer to
identify a function or other program
items such as variables.
if then else
A two way selection control structure.
implementation
The phase of a Systems Development Life
Cycle where the programmers would be
assigned to write specic programs.
implicit
A value that has its data type changed
automatically.
include
A compiler directive to insert the contents
of a le into the program.
increment
Adding one to the value of a variable.
indention
A method used to make sections of source
code more visible.
index
An operator that allows us to reference a
member of an array.
indirection operator
The asterisk used for dereferencing a
pointer.
innite loop
No method of exit, thus a bad thing.
initialize item
An attribute of iteration control
structures.
input/output symbol
A parallelogram used in owcharting for
input/output interactions.
insertion
Aka writing or sending data to an output
device.
integer
A data type representing whole numbers.
integer division
Division with no fractional parts.
IPO
Inputs - Processing - Outputs
iteration
A control structure that allows some lines
of code to be executed many times.
L life cycle
Systems Development Life Cycle:
Planning - Analysis - Design -
Implementation - Maintenance
linear search
Using a loop to sequentially step through
an array.
linker
Connects or links object les into an
executable le.
list
A single dimension array.
loader
Part of the operating system that loads
executable les into memory and direct
the CPU to start running the program.
GLOSSARY 283
local scope
Data storage dened inside of a function.
logical operator
An operator used to create complex
Boolean expressions.
loop attributes
Items associated with iteration or looping
control structures.
loop control
Making sure the attributes of a loop are
properly handled.
Lvalue
The requirement that the operand on the
left side of the assignment operator is
modiable, usually a variable.
M machine dependent
An attribute of a programming language
that changes depending on the
computer's CPU.
mantissa exponent
The two integer parts of a oating-point
value.
maximum
Aka max or the largest member of an
array.
meaningful
A rule that says identier names must be
easily understood by another reading the
source code.
might not happen
Indicating that test before loops might not
execute the action.
minimum
Aka min or the smallest member of an
array.
minus
Aka unary negative.
model checking
Using test data to check the design model
(usually done in pseudocode).
modular arithmetic
A system of arithmetic for integers where
numbers wrap around.
modularization
The ability to group some lines of code
into a unit that can be included in our
program.
modulus
The remainder part of integer division.
multiway selection
Using control structures to be able to
select from more than two choices.
mutually exclusive
Items that do not overlap. Example: true
and false.
N nested control structures
Placing one control structure inside of
another.
O object oriented
A programming approach that
encapsulates data with functions.
oset
The method of referencing array members
by starting at zero.
open source
Group development of source code for
software that is made available to the
public at no cost.
open
Your program requesting the operating
system to let it have access to an existing
le or to open a new le.
operand
A value that receives the operator's action.
operator
A language-specic syntactical token
(usually a symbol) that causes an action
to be taken on one or more operands.
P parallel processing
Dividing a task into parts that can utilize
more than one processor.
parallel programming
284 GLOSSARY
Involves developing programs that utilize
parallel processing algorithms that take
advantage of multiple processors.
parameter passing
How the data is communicated in to and
out of a function.
parentheses
Change the order of evaluation in an
expression. You do what's in the
parentheses rst.
phrase word
Words used to make pseudocode logic
clear to any reader.
plus
Aka unary positive.
pointer
A variable that holds an address as its
value.
portability
The ability to transport software on a ash
drive and thus use it on various machines.
postx
Placing the increment or decrement
operator to the right of the operand.
pre-processor
The rst step the complier does in
converting source code to object code.
precedence
Determines the order in which the
operators are allowed to manipulate the
operands.
precision
The eect on the domain of oating-point
values given a larger or smaller storage
area in bytes.
prex
Placing the increment or decrement
operator to the left of the operand.
procedural programming
Aka modular structured programming.
process symbol
A rectangle used in owcharting for
normal processes such as assignment.
program control
Functions used to simply sub divide and
control the program.
promotion
Going from a smaller domain to a larger
domain.
pseudo
Means false and includes the concepts of
fake or imitation.
pseudocode
English-like statements used to convey the
steps of an algorithm or function.
R read
Moving data from a device that has been
opened into a memory location dened in
your program.
recursion
A repetitive process in which a function
calls itself.
reference variable
Used with parameter passing by reference.
relational operator
An operator that gives a Boolean value by
evaluating the relationship between two
operands.
repeat until
A test after iteration control structure
that is not available in C++.
reserved word
Words that cannot be used by the
programmer as identier names because
they already have a specic meaning
within the programming language.
return
A branching control structure that causes
a function to jump back to the function
that called it.
Rvalue
Pulls or fetches the value stored in a
variable or constant.
S scope
GLOSSARY 285
The area of a source code le where an
identier name is recognized.
selection
A control structure where you select
between two or more choices.
sequence
A control structure where you do the
items in the sequence listed.
sequence
An operator used to separate multiple
occurrences of an item.
sequential processing
Using only one processor and completing
the tasks in a sequential order.
single quote marks
Used to create character type data within
the C++ programming language.
sizeof
An operator that tells you how many
bytes a data type occupies in storage.
sorting
Arranging data according to their values.
source code
Any collection of statements or
declarations written in some
human-readable computer programming
language.
specic task
Functions designed to be used with several
programs.
stack
A part of the computer's memory used for
storage of data.
standard input
The keyboard.
Standard Library
A set of specic task functions that have
been added to the programming language
for universal use.
standard output
The monitor.
static memory
Aka data area memory associated with
global scope.
string
A series or array of characters as a single
piece of data.
string class
A complex data item that uses object
oriented programming.
structure chart
Another name for a hierarchy chart.
structured programming
A method of planning programs that
avoids the branching category of control
structures.
sum
Latin for summa or a total.
switch
A C++ control structure that can be
made to act like a case control structure.
system analyst
Computer professional in charge of
creating applications.
T table
A two dimension array.
test data
Providing input values and predicting the
outputs.
test expression
An expression used to control
programming structures.
test item
An attribute of iteration control
structures.
testing shell
A program used to create specic task
functions.
text editor
A software program for creating and
editing ASCII text les.
text le
A le consisting of characters from the
ASCII character code set.
truncation
286 GLOSSARY
The fractional part of a oating-point data
type that is dropped when converted to
an integer.
truth tables
A common way to show logical
relationships.
typedef
Allows the programmer to create an alias,
or synonym, for an existing data type.
U udst
User Dened Specic Task
unary negative
An operator that causes negation.
unary positive
A worthless operator almost never used.
update item
An attribute of iteration control
structures.
user dened library
A le containing specic task functions
created by individuals to be used in many
programs.
V variable
A data item whose value can change
during the program's execution.
versatile
Easily modifying code to handle another
data type.
vertical alignment
A method of listing items vertically so
that they are easier to read quickly.
void data type
A data type that has no values or
operators and is used to represent
nothing.
W warning
A compiler alert that there might be a
problem.
while
A test before iteration control structure
available in C++.
wrapping
When output is not vertically spaced
properly.
write
Moving data from a memory location
dened in your program to a device that
has been opened.
INDEX 287
Index of Keywords and Terms
Keywords are listed by the section with that keyword (page numbers are in parentheses). Keywords
do not necessarily appear in the text of the page. They are merely associated with that section. Ex.
apples, Ÿ 1.1 (1) Terms are referenced by the page they appear on. Ex. apples, 1
3 3x5 cards, Ÿ 26.7(278)
A abs, 98
academic dishonesty, Ÿ 26.5(273)
action item, 164
address operator, 239, 241
ampersand, 239, 241
applications, 12
arithmetic assignment, 50
arithmetic operators, Ÿ 3.6(39)
array, 200, 213, 247
array data type, Ÿ 18.1(213)
array function, 224
array index operator, Ÿ 18.2(214)
array member, 215, 248
array members, Ÿ 18.3(215)
ASCII, 104, 199
ASCII Character Set, Ÿ 26.3(272)
assignment, 39, 167
associativity, 37, Ÿ 26.1(269)
asterisk, 241, 242
at least once, 164
B banners, 81
bits as ags, Ÿ 13.2(164)
black screen output box, 67
block, 138
Bloodshed Dev-C++ 5 compiler/IDE, 13, 21,
29, 42, 43, 51, 54, 55, 64, 70, 76, 83, 91, 92, 94,
98, 99, 104, 107, 130, 136, 139, 148, 156, 169,
181, 189, 190, 194, 195, 200, 203, 209, 210,
217, 218, 222, 224, 225, 226, 227, 229, 231,
233, 235, 237, 241, 243, 244, 247, 249, 250, 261
Boolean, 135
Boolean expression, 52, 133, 135, 136, 146,
161, 167, 168, 175
braces, 20, 82, 137
branching, 113
branching control structures, 152
break, 152
bubble sort, 232
C C++ data types, Ÿ 3.1(33)
C++ program layout, Ÿ 1.3(16)
C:Dev-Cpp, 15, 15, 15
call, 76
capacity to concentrate, Ÿ 26.6(275)
case, 152
central processing unit, 260
character, 104
cin, 67
circular nature, 189
class member, 200
close, 223
closed communications model, 240, 242
code checking, 29
collusion, Ÿ 26.5(273)
comments, 81
common area, 77
compiler, 65
compiler directive, 69
compiler/IDE, Ÿ 1.2(13)
complex logic, 195
compound statement, 138
computational science, Ÿ 24.2(254)
concatenation, 200
conditional, 208
conditional compilation, 249
conditional expression, Ÿ 17.1(207)
conditional operator, Ÿ 17.1(207)
condence, 98
consistent, 82
constant, 37
continue, 152
control structures, 112, Ÿ 11.1(133)
counting controlled, 180
counting loops, 112
cout, 67
D data area, 90
data type, 34
data type conversion, Ÿ 3.7(40)
date type families, 34
debugging, 65
288 INDEX
decision symbol, 129
decrement, 175
dened constant, 36
denition, 76
demotion, 42
dereferencing, 243
devcpp-4.9.9.2_setup.exe, 15, 15
device, 67
device token, 223
dimension, 214, 248
distributed processing, Ÿ 24.2(254)
do while, 164
documentation, 81
domain, 34
double, 49
DriveLetter, 15
DriveLetter:Dev-Cpp, 15
dynamic memory, 225
dynamic memory allocation, 224
E equality, 167
escape code, 68
evaluation, 38
event controlled, 180
exit, 152
explicit, 42
expression, 37
extraction, 68
F factorial, 209
File Extensions, Ÿ 26.4(273)
lename, 223
lespec, 223
xed, Ÿ 15.3(189)
ag, 166
ash cards, Ÿ 26.7(278)
exible coding, 217, 236
oat, Ÿ 4.2(48)
oating point, 34
oating-point data type, Ÿ 4.2(48)
oating-point division, 53
ow lines, 129
owcharting, Ÿ 10.3(115), 129
folder, 14
for, 186
formatting, 190
function, 19
function call, 20
function denition, 20
function prototype, 20
G global scope, 90, 224, 239
goto, 152
H header le, 93
hierarchy chart, 75
high performance computing, 260
HIPO, 27
I IDE, Ÿ 1.2(13)
identier name, 20
identier names, Ÿ 3.2(35)
if then else, 111, 134, 137
implementation, 13
implicit, 42
include, 69
increment, 175
indention, 82
index, 215, 248
indirection operator, 241, 243
innite loop, 164, Ÿ 14.2(175), Ÿ 15.1(183)
initialize item, 180
Input-Output Stream, 67, 68
input/output symbol, 129
insertion, 68
integer, 34
integer data type, Ÿ 4.1(47)
integer division, 53
Integrated Development Environment, 59
IPO, 26, 27
iteration, 113
iteration as alt to recursion, Ÿ 17.2(208)
K keywords, Ÿ 26.2(271)
L lecture notes, Ÿ 26.7(278)
life cycle, 12
linear search, 230
linker, 65
list, 214, 248
literal constant, 36
loader, 65
local scope, 90, 224, 239, 240, 242
logical operator, 148
long double, Ÿ 4.2(48)
loop attributes, 179
loop control, 189
Lvalue, 52
M machine dependent, 48, 104
mantissa exponent, 49
maximum, 230
meaningful, 82
memory constant, 37
might not happen, 180
INDEX 289
minimum, 230
minus, Ÿ 16.2(201), 202
model checking, 29
modular arithmetic, 189
modular structured programming, 253
modularization, 19, Ÿ 7.1(89)
modulo, Ÿ 15.2(187)
modulus, 54
multidimensional arrays, Ÿ 23.1(247)
multiplication table, Ÿ 15.4(191)
multiway selection, 112, 146
mutually exclusive, 134
N negation, Ÿ 16.2(201)
nested control structures, 146, Ÿ 15.4(191)
nested if then else, 151
no communication in  with no
communication out, 76
O object oriented, 254
oset, 215, 248
open, 223
open source, 13
operand, 37
operator, 37, 269
P parallel processing, 260
parallel programming, 260
parameter passing, 20, 76, 90
parentheses, 38
phrase word, 74, 113
plus, Ÿ 16.2(201), 202
pointer, 240, 241, 242
portability, 13
postx, 175
pre-processor, 65
precedence, 37
precedence chart, Ÿ 26.1(269)
precision, 49, Ÿ 15.3(189)
prex, 175
procedural programming, 254
process symbol, 129
procrastination, Ÿ 26.6(275)
program control, 20, Ÿ 6.3(75), 90
program design, Ÿ 2.1(25)
program documentation, Ÿ 6.5(78)
promotion, 42
prototype, 76
prototypes le, 91
pseudo, 27
pseudocode, 26, Ÿ 2.2(26)
pseudocode for control structures, Ÿ 10.2(113)
pseudocode for functions, Ÿ 6.1(73)
R read, 223
recursion, 209
reference variable, 241, 242
regular study times, Ÿ 26.6(275)
relational operator, 136
repeat until, 168
repetitive algorithms, Ÿ 17.2(208)
reserved word, 36
reserved words, Ÿ 26.2(271)
return, 152
Rvalue, 52
S scholastic dishonesty, Ÿ 26.5(273)
scope, 91
selection, 113
sequence, 107, 112
sequential processing, 260
setw, Ÿ 15.3(189)
showpoint, Ÿ 15.3(189)
single quote marks, 104
sizeof, 105, 216
sorting, 232
source code, 14, Ÿ 6.5(78), 221
specic task, 20, 90
specic task functions, Ÿ 7.1(89)
stack, 91
standard functions, 97
standard input, 68
Standard Library, 98
standard output, 68
static memory, 225
static memory allocation, 224
string, 50, 199, 213
string class, 200
structure chart, 75
structured programming, 113
sum, 226
supercomputing, Ÿ 24.2(254)
switch, 152
system analyst, 12
Systems Development Life Cycle, 11
T table, 214, 248
test after loop, 162
test after loops, 112
test before loop, 176, 184
test before loops, 112
test data, 26, Ÿ 2.3(27)
test expression, 52, 133, 135, 136, 146, 161,
166, 168, 175, 183
290 INDEX
test item, 164
testing shell, 93
text editor, 65
text le, 223
time commitment, Ÿ 26.6(275)
truncation, 42
truth tables, 148
two way selection, Ÿ 11.1(133)
two-way selection, 112
typedef, 106, 236
U udst, 93
unary negative, Ÿ 16.2(201), 202
unary positive, Ÿ 16.2(201), 202
underscore, 221
update item, 164
user dened header le, Ÿ 7.3(91)
user dened library, 90
user dened specic task, 223, 225
user library, Ÿ 7.3(91)
V variable, 37
variable as a ag, Ÿ 13.2(164)
variety and repetition, Ÿ 26.6(275)
verify header program, 91
versatile, 236
vertical alignment, 81
vertical spacing, 189
void data type, 78
W warning, 65
while, 111, 179
wrapping, 190
write, 223
ATTRIBUTIONS 291
Attributions
Collection: Programming Fundamentals - A Modular Structured Approach using C++
Edited by: Kenneth Leroy Busbee
URL: http://cnx.org/content/col10621/1.17/
License: http://creativecommons.org/licenses/by/2.0/
Module: Preface - Fundamentals I using C++
Used here as: Preface
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19049/1.14/
Pages: 1-3
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Author Acknowledgements - Fundamentals I using C++
Used here as: Author Acknowledgements
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19055/1.4/
Page: 5
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Orientation and Syllabus - Fundamentals I using C++
Used here as: Orientation and Syllabus
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19684/1.8/
Pages: 7-9
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Systems Development Life Cycle
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18684/1.5/
Pages: 11-13
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Bloodshed Dev-C++ 5 Compiler/IDE
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18785/1.14/
Pages: 13-16
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Modularization and C++ Program Layout
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18861/1.11/
Pages: 16-20
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
292 ATTRIBUTIONS
Module: Practice 1: Introduction to Programming
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22450/1.2/
Pages: 20-22
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Program Design
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18686/1.4/
Pages: 25-26
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Pseudocode
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18648/1.9/
Pages: 26-27
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Test Data
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18781/1.3/
Pages: 27-29
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 2: Program Planning  Design
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22453/1.2/
Pages: 29-31
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Data Types in C++
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18653/1.11/
Pages: 33-34
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Identier Names
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18692/1.4/
Pages: 35-36
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Constants and Variables
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18719/1.7/
Pages: 36-37
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
ATTRIBUTIONS 293
Module: Data Manipulation
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18705/1.5/
Pages: 37-38
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Assignment Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18725/1.2/
Pages: 38-39
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Arithmetic Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18706/1.3/
Pages: 39-40
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Data Type Conversions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18744/1.6/
Pages: 40-42
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 3: Data  Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22455/1.1/
Pages: 42-44
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Integer Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18654/1.5/
Pages: 47-48
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Floating-Point Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18657/1.5/
Pages: 48-49
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: String Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18656/1.5/
Pages: 49-50
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
294 ATTRIBUTIONS
Module: Arithmetic Assignment Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18743/1.6/
Pages: 50-51
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Lvalue and Rvalue
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18058/1.11/
Pages: 51-52
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Integer Division and Modulus
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18717/1.12/
Pages: 53-55
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 4: Often Used Data Types
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22456/1.1/
Pages: 55-56
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Integrated Development Environment
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18920/1.8/
Pages: 59-65
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Standard Input and Output
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18835/1.3/
Pages: 65-68
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Compiler Directives
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18787/1.6/
Pages: 68-69
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 5: Integrated Development Environment
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22457/1.1/
Pages: 69-71
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
ATTRIBUTIONS 295
Module: Pseudocode Examples for Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19136/1.6/
Pages: 73-74
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Hierarchy or Structure Chart
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18682/1.3/
Pages: 74-75
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Program Control Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19145/1.8/
Pages: 75-77
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Void Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18655/1.3/
Pages: 77-78
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Documentation and Making Source Code Readable
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18912/1.3/
Pages: 78-82
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 6: Program Control Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22458/1.2/
Pages: 82-86
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Specic Task Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19146/1.3/
Pages: 89-90
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Global vs Local Data Storage
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19147/1.4/
Pages: 90-91
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
296 ATTRIBUTIONS
Module: Using a Header File for User Dened Specic Task Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19346/1.4/
Pages: 91-93
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 7: Specic Task Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22459/1.1/
Pages: 93-94
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Standard Libraries
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19202/1.4/
Pages: 97-98
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Practice 8: Standard Libraries
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22460/1.2/
Pages: 99-100
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Character Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18669/1.5/
Pages: 103-104
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Sizeof Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18736/1.7/
Pages: 104-105
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Typedef - An Alias
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18741/1.4/
Pages: 105-106
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Sequence Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18690/1.7/
Pages: 106-107
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
ATTRIBUTIONS 297
Module: Practice 9: Character Data, Sizeof, Typedef, Sequence
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22461/1.2/
Pages: 107-108
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Structured Programming
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19628/1.6/
Pages: 111-113
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Pseudocode Examples for Control Structures
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18649/1.12/
Pages: 113-114
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Flowcharting
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19623/1.5/
Pages: 115-129
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 10: Introduction to Structured Programming
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19692/1.13/
Pages: 129-130
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: If Then Else
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19679/1.3/
Pages: 133-134
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Boolean Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19544/1.4/
Page: 135
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Relational Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19549/1.10/
Pages: 136-137
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
298 ATTRIBUTIONS
Module: Compound Statement
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19683/1.2/
Pages: 137-138
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 11: Two Way Selection
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19764/1.14/
Pages: 138-140
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Nested If Then Else
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19951/1.5/
Pages: 143-146
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Logical Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19847/1.6/
Pages: 146-148
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Case Control Structure
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19963/1.2/
Pages: 148-152
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Branching Control Structures
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19947/1.2/
Pages: 152-155
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 12: Multiway Selection
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19968/1.10/
Pages: 155-158
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Do While Loop
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20596/1.4/
Pages: 161-164
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
ATTRIBUTIONS 299
Module: Flag Concept
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20404/1.5/
Pages: 164-166
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Assignment vs Equality within C++
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19542/1.6/
Pages: 166-167
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Repeat Until Loop
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20597/1.2/
Pages: 167-168
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 13: Test After Loops
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20642/1.7/
Pages: 168-170
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Increment and Decrement Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20499/1.3/
Pages: 173-175
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: While Loop
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20598/1.6/
Pages: 175-180
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 14: Test Before Loops
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20643/1.9/
Pages: 180-181
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: For Loop
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20600/1.2/
Pages: 183-186
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
300 ATTRIBUTIONS
Module: Circular Nature of the Integer Data Type Family
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20743/1.3/
Pages: 187-189
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Formatting Output
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20660/1.3/
Pages: 189-190
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Nested For Loops
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20653/1.5/
Pages: 191-195
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 15: Counting Loops
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20809/1.5/
Pages: 195-196
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: String Class within C++
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20796/1.5/
Pages: 199-200
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Unary Positive and Negative Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20501/1.1/
Pages: 201-202
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 16: String Class, Unary Postitive and Negative
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20810/1.4/
Pages: 202-204
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Conditional Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20811/1.6/
Pages: 207-208
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
ATTRIBUTIONS 301
Module: Recursion vs Iteration
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20814/1.2/
Pages: 208-209
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 17: Conditional Operator and Recursion
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m20815/1.5/
Pages: 209-211
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Array Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21315/1.2/
Pages: 213-214
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Array Index Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21316/1.2/
Pages: 214-215
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Displaying Array Members
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21317/1.4/
Pages: 215-217
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 18: Introduction to Arrays
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21321/1.4/
Pages: 217-218
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: File Input and Output
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21623/1.2/
Pages: 221-223
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Arrays and Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21624/1.1/
Pages: 223-224
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
302 ATTRIBUTIONS
Module: Loading an Array from a File
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21625/1.1/
Pages: 224-225
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Math Statistics with Arrays
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21626/1.1/
Pages: 225-226
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 19: File I/O and Array Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21630/1.3/
Pages: 226-227
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Finding a Specic Member of an Array
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21627/1.1/
Pages: 229-230
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Sorting an Array
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21628/1.1/
Pages: 230-232
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 20: More Array Functions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21631/1.3/
Pages: 232-233
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Versatile Code with Typedef
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21629/1.1/
Pages: 235-236
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
ATTRIBUTIONS 303
Module: Practice 21: More on Typedef
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21632/1.3/
Pages: 236-237
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Address Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22148/1.2/
Pages: 239-240
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Parameter Passing by Reference
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22150/1.3/
Pages: 240-241
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Pointer Data Type
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22151/1.2/
Page: 241
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Indirection Operator
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22152/1.1/
Pages: 242-243
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 22: Pointers
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22153/1.3/
Pages: 243-245
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Multidimensional Arrays
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22203/1.2/
Pages: 247-248
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Conditional Compilation
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22204/1.3/
Pages: 248-249
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
304 ATTRIBUTIONS
Module: Practice 23: More Arrays  Compiler Directives
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22205/1.2/
Pages: 249-250
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Object Oriented Programming
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22188/1.2/
Pages: 253-254
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Understanding High Performance Computing
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19804/1.6/
Pages: 254-260
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Practice 24: OOP  HPC
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22194/1.4/
Pages: 260-262
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Review: Foundation Topics Group: 1-5
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22418/1.2/
Page: 265
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Review: Modular Programming Group: 6-9
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22421/1.2/
Page: 266
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Review: Structured Programming Group: 10-16
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21653/1.5/
Pages: 266-267
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Review: Intermediate Topics Group: 17-21
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m21642/1.4/
Pages: 267-268
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
ATTRIBUTIONS 305
Module: Review: Advanced Topics Group: 22-24
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m22215/1.4/
Page: 268
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Module: Abbreviated Precedence Chart for C++ Operators
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18168/1.12/
Pages: 269-271
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: C++ Reserved Keywords
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18181/1.5/
Pages: 271-272
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: ASCII Character Set
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18169/1.7/
Pages: 272-273
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Show Hide File Extensions
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18100/1.4/
Page: 273
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Academic or Scholastic Dishonesty
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18096/1.8/
Pages: 273-275
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Successful Learning Skills
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m18101/1.9/
Pages: 275-277
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/2.0/
Module: Study Habits that Build the Brain
By: Kenneth Leroy Busbee
URL: http://cnx.org/content/m19977/1.4/
Page: 278
Copyright: Kenneth Leroy Busbee
License: http://creativecommons.org/licenses/by/3.0/
Programming Fundamentals - A Modular Structured Approach using C++
Programming Fundamentals - A Modular Structured Approach using C++ is written by Kenneth Leroy
Busbee, a faculty member at Houston Community College in Houston, Texas. The materials used in this
textbook/collection were developed by the author and others as independent modules for publication within
the Connexions environment. Programming fundamentals are often divided into three college courses: Mod-
ular/Structured, Object Oriented and Data Structures. This textbook/collection covers the rst of those
three courses.
About Connexions
Since 1999, Connexions has been pioneering a global system where anyone can create course materials and
make them fully accessible and easily reusable free of charge. We are a Web-based authoring, teaching and
learning environment open to anyone interested in education, including students, teachers, professors and
lifelong learners. We connect ideas and facilitate educational communities.
Connexions's modular, interactive courses are in use worldwide by universities, community colleges, K-12
schools, distance learners, and lifelong learners. Connexions materials are in many languages, including
English, Spanish, Chinese, Japanese, Italian, Vietnamese, French, Portuguese, and Thai. Connexions is part
of an exciting new information distribution system that allows for Print on Demand Books. Connexions
has partnered with innovative on-demand publisher QOOP to accelerate the delivery of printed course
materials and textbooks into classrooms worldwide at lower prices than traditional academic publishers.

More Related Content

PDF
Sql developer usermanual_en
PDF
Endversion1 skriptum characterization of miscellaneous multi parametrical sil...
PDF
Drools expert-docs
PDF
Instructor utilities guide
PDF
Hibernate reference
PDF
Hibernate Reference
PDF
Hibernate Reference
Sql developer usermanual_en
Endversion1 skriptum characterization of miscellaneous multi parametrical sil...
Drools expert-docs
Instructor utilities guide
Hibernate reference
Hibernate Reference
Hibernate Reference

What's hot (17)

PDF
Mysql tutorial-excerpt-5.1-en
PDF
Java how to_program__7th_edition
PDF
Seam reference guide
PDF
Ibm system storage productivity center deployment guide sg247560
PDF
SAP_HANA_Modeling_Guide_for_SAP_HANA_Studio_en
PDF
Open edX Building and Running a Course
PDF
Red book Blueworks Live
PDF
Protel 99 se_traning_manual_pcb_design
ODT
Using Open Source Tools For STR7XX Cross Development
PDF
Mysql tutorial-excerpt-5.1-en
PDF
Mongo db manual
PDF
Manual
PDF
Sataid manual
PDF
AdvFS 1024 ACLs
PDF
AdvFS ACLs and Property Lists
PDF
Work flow api reference
Mysql tutorial-excerpt-5.1-en
Java how to_program__7th_edition
Seam reference guide
Ibm system storage productivity center deployment guide sg247560
SAP_HANA_Modeling_Guide_for_SAP_HANA_Studio_en
Open edX Building and Running a Course
Red book Blueworks Live
Protel 99 se_traning_manual_pcb_design
Using Open Source Tools For STR7XX Cross Development
Mysql tutorial-excerpt-5.1-en
Mongo db manual
Manual
Sataid manual
AdvFS 1024 ACLs
AdvFS ACLs and Property Lists
Work flow api reference
Ad

Viewers also liked (18)

PPTX
Unit ii-ppt
PDF
Javanotes5 linked
DOCX
How to use sq lite with java using net beans
PPT
Running your database in the cloud presentation
PPT
Chapter 02 collaborative recommendation
PDF
Big data-and-the-web
PDF
Rational rose tutorial
PPT
(148065320) dijistra algo
PPTX
Cloudcomputing basics
PDF
Intelli j idea-report
PPT
Knightstour
DOCX
Android wear notes
PPT
Running your database in the cloud presentation
PDF
7 embed systcasestudy
DOCX
Simple ado program by visual studio
DOCX
Mobile development xamarain
PPT
Filtering content bbased crs
PPTX
Apidays efficient-131204080056-phpapp02
Unit ii-ppt
Javanotes5 linked
How to use sq lite with java using net beans
Running your database in the cloud presentation
Chapter 02 collaborative recommendation
Big data-and-the-web
Rational rose tutorial
(148065320) dijistra algo
Cloudcomputing basics
Intelli j idea-report
Knightstour
Android wear notes
Running your database in the cloud presentation
7 embed systcasestudy
Simple ado program by visual studio
Mobile development xamarain
Filtering content bbased crs
Apidays efficient-131204080056-phpapp02
Ad

Similar to Programming (20)

PDF
Thats How We C
PDF
C++ For Quantitative Finance
PDF
452042223-Modern-Fortran-in-practice-pdf.pdf
PDF
C++ progrmming language
PDF
An Introduction to Computer Science - python
PDF
Vic broquard c++ for computer science and engineering 2006
PDF
Francois fleuret -_c++_lecture_notes
PDF
c programming
PDF
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 1 of 5 by...
PDF
Notes for c programming for mca, bca, b. tech cse, ece and msc (cs) 1 of 5 by...
PDF
Isoiec 148822011 Information Technology Programming Languages C 3rd Edition Iso
PDF
Haltermanpythonbook.pdf
PDF
Learn python the right way
PDF
Chapter1 6
PDF
Chapter1 6
PDF
Python_Programming_and_Numerical_Methods_A_Guide_for_Engineers_and.pdf
PDF
thinkcspy3.pdf
PDF
Basic ForTran Programming - for Beginners - An Introduction by Arun Umrao
PDF
Fortran programming help book
PDF
Learn c++
Thats How We C
C++ For Quantitative Finance
452042223-Modern-Fortran-in-practice-pdf.pdf
C++ progrmming language
An Introduction to Computer Science - python
Vic broquard c++ for computer science and engineering 2006
Francois fleuret -_c++_lecture_notes
c programming
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 1 of 5 by...
Notes for c programming for mca, bca, b. tech cse, ece and msc (cs) 1 of 5 by...
Isoiec 148822011 Information Technology Programming Languages C 3rd Edition Iso
Haltermanpythonbook.pdf
Learn python the right way
Chapter1 6
Chapter1 6
Python_Programming_and_Numerical_Methods_A_Guide_for_Engineers_and.pdf
thinkcspy3.pdf
Basic ForTran Programming - for Beginners - An Introduction by Arun Umrao
Fortran programming help book
Learn c++

Recently uploaded (20)

PDF
Digital Logic Computer Design lecture notes
PDF
R24 SURVEYING LAB MANUAL for civil enggi
PDF
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PPTX
web development for engineering and engineering
PDF
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
DOCX
573137875-Attendance-Management-System-original
PDF
Enhancing Cyber Defense Against Zero-Day Attacks using Ensemble Neural Networks
PDF
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
PDF
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
PPTX
Sustainable Sites - Green Building Construction
PPTX
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
PPTX
OOP with Java - Java Introduction (Basics)
PDF
Embodied AI: Ushering in the Next Era of Intelligent Systems
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PDF
composite construction of structures.pdf
PPTX
Construction Project Organization Group 2.pptx
PPTX
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
PDF
Operating System & Kernel Study Guide-1 - converted.pdf
PDF
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
Digital Logic Computer Design lecture notes
R24 SURVEYING LAB MANUAL for civil enggi
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
web development for engineering and engineering
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
573137875-Attendance-Management-System-original
Enhancing Cyber Defense Against Zero-Day Attacks using Ensemble Neural Networks
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
Sustainable Sites - Green Building Construction
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
OOP with Java - Java Introduction (Basics)
Embodied AI: Ushering in the Next Era of Intelligent Systems
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
composite construction of structures.pdf
Construction Project Organization Group 2.pptx
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
Operating System & Kernel Study Guide-1 - converted.pdf
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf

Programming

  • 1. Programming Fundamentals - A Modular Structured Approach using C++ By: Kenneth Leroy Busbee
  • 3. Programming Fundamentals - A Modular Structured Approach using C++ By: Kenneth Leroy Busbee Online: <http://cnx.org/content/col10621/1.17/ > C O N N E X I O N S Rice University, Houston, Texas
  • 4. ©2008 Kenneth Leroy Busbee This selection and arrangement of content is licensed under the Creative Commons Attribution License: http://creativecommons.org/licenses/by/2.0/
  • 5. Table of Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Author Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Orientation and Syllabus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1 1. Introduction to Programming 1.1 Systems Development Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 11 1.2 Bloodshed Dev-C++ 5 Compiler/IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3 Modularization and C++ Program Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4 Practice 1: Introduction to Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2 2. Program Planning & Design 2.1 Program Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.2 Pseudocode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.3 Test Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.4 Practice 2: Program Planning & Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3 3. Data & Operators 3.1 Data Types in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2 Identier Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.3 Constants and Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.4 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.5 Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 39 3.7 Data Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.8 Practice 3: Data Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4 4. Often Used Data Types 4.1 Integer Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 47 4.2 Floating-Point Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3 String Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4 Arithmetic Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.5 Lvalue and Rvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 51 4.6 Integer Division and Modulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.7 Practice 4: Often Used Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5 5. Integrated Development Environment 5.1 Integrated Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 59 5.2 Standard Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.3 Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.4 Practice 5: Integrated Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6 6. Program Control Functions 6.1 Pseudocode Examples for Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.2 Hierarchy or Structure Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.3 Program Control Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6.4 Void Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
  • 6. iv 6.5 Documentation and Making Source Code Readable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.6 Practice 6: Program Control Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7 7. Specic Task Functions 7.1 Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.2 Global vs Local Data Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 90 7.3 Using a Header File for User Dened Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.4 Practice 7: Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8 8. Standard Libraries 8.1 Standard Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8.2 Practice 8: Standard Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 9 9. Character Data, Sizeof, Typedef, Sequence 9.1 Character Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 103 9.2 Sizeof Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 9.3 Typedef - An Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 9.4 Sequence Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 9.5 Practice 9: Character Data, Sizeof, Typedef, Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 10 10. Introduction to Structured Programming 10.1 Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 10.2 Pseudocode Examples for Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 10.3 Flowcharting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 10.4 Practice 10: Introduction to Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 11 11. Two Way Selection 11.1 If Then Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 11.2 Boolean Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 11.3 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 11.4 Compound Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 11.5 Practice 11: Two Way Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 12 12. Multiway Selection 12.1 Nested If Then Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 12.2 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 12.3 Case Control Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 148 12.4 Branching Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 12.5 Practice 12: Multiway Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 13 13. Test After Loops 13.1 Do While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 13.2 Flag Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 13.3 Assignment vs Equality within C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 13.4 Repeat Until Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 13.5 Practice 13: Test After Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 14 14. Test Before Loops
  • 7. v 14.1 Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 14.2 While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 14.3 Practice 14: Test Before Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 15 15. Counting Loops 15.1 For Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 183 15.2 Circular Nature of the Integer Data Type Family . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 187 15.3 Formatting Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 189 15.4 Nested For Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 15.5 Practice 15: Counting Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 16 16. String Class, Unary Positive and Negative 16.1 String Class within C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 199 16.2 Unary Positive and Negative Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 16.3 Practice 16: String Class, Unary Postitive and Negative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 17 17. Conditional Operator and Recursion 17.1 Conditional Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 17.2 Recursion vs Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 208 17.3 Practice 17: Conditional Operator and Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 209 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 18 18. Introduction to Arrays 18.1 Array Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 18.2 Array Index Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 18.3 Displaying Array Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 18.4 Practice 18: Introduction to Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 19 19. File I/O and Array Functions 19.1 File Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 19.2 Arrays and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 19.3 Loading an Array from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 19.4 Math Statistics with Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 19.5 Practice 19: File I/O and Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 20 20. More Array Functions 20.1 Finding a Specic Member of an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 229 20.2 Sorting an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 20.3 Practice 20: More Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 21 21. More on Typedef 21.1 Versatile Code with Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 21.2 Practice 21: More on Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 22 22. Pointers 22.1 Address Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 22.2 Parameter Passing by Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 240 22.3 Pointer Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
  • 8. vi 22.4 Indirection Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 22.5 Practice 22: Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 23 23. More Arrays Compiler Directives 23.1 Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 23.2 Conditional Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 23.3 Practice 23: More Arrays Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 24 24. OOP HPC 24.1 Object Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 24.2 Understanding High Performance Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 254 24.3 Practice 24: OOP HPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 260 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 25 Review Materials 25.1 Review: Foundation Topics Group: 1-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 25.2 Review: Modular Programming Group: 6-9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 25.3 Review: Structured Programming Group: 10-16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 25.4 Review: Intermediate Topics Group: 17-21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 25.5 Review: Advanced Topics Group: 22-24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ?? 26 Appendix 26.1 Abbreviated Precedence Chart for C++ Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 26.2 C++ Reserved Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 26.3 ASCII Character Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 26.4 Show Hide File Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 26.5 Academic or Scholastic Dishonesty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 26.6 Successful Learning Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 26.7 Study Habits that Build the Brain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ?? Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Attributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291
  • 9. Preface1 About this Textbook/Collection Programming Fundamentals A Modular Structured Approach using C++ Programming Fundamentals - A Modular Structured Approach using C++ is written by Kenneth Leroy Busbee, a faculty member at Houston Community College in Houston, Texas. The materials used in this textbook/collection were developed by the author and others as independent modules for publication within the Connexions environment. Programming fundamentals are often divided into three college courses: Mod- ular/Structured, Object Oriented and Data Structures. This textbook/collection covers the rst of those three courses. Connexions Learning Modules The learning modules of this textbook/collection were written as standalone modules. Students using a collection of modules as a textbook will usually view it contents by reading the modules sequentially as presented by the author of the collection. However, the majority of readers of these modules will nd them as a result of an Internet search. The Connexions Project allows the author of a module to create web links to other Connexions modules and Internet locations. These links are shown when viewing materials on-line and are categorized into three types: Example, Prerequisite and Supplemental. The importance of each link is numbered from 1 to 3 by the author. When viewing the module each links shows a three part box with yellow or white rectangles. All three yellow means it is a strongly related link. As the yellow decreases the importance decreases. Students using this collection for a college course should note that all of the Prerequisite links within the modules will be modules that student should have already read and most of the Supplemental links will be modules that the student will read shortly. Thus, students should use Prerequisite links for review as needed and not be overly concerned about viewing all of the Supplemental links at the rst reading of this textbook/collection. Conceptual Approach The learning modules of this textbook/collection were, for the most part, written without consideration of a specic programming language. In many cases the C++ language is discussed as part of the explanation of the concept. Often the examples used for C++ are exactly the same for the Java programming language. However, some modules were written specically for the C++ programming language. This could not be avoided as the C++ language is used in conjunction with this textbook/collection by the author in teaching college courses. 1This content is available online at http://cnx.org/content/m19049/1.14/. 1
  • 10. 2 Bloodshed Dev-C++ 5 Compiler/IDE This open source compiler/IDE (Integrated Development Environment) was used to develop the demon- stration source code les provided within the modules of this textbook/collection. The compiler/IDE is presented to the student in the second module of Chapter 1, with instructions for downloading, installing and using the compiler/IDE. A more complete explanation of the IDE along with demonstration source code listings with errors is presented in rst module of Chapter 5. All of the source code les provided in this textbook/collection contain only ANSI standard C++ code and should work on any standard C++ compiler like Microsoft Visual Studio (which includes C++), Microsoft Visual C++ Express or Borland C++ Builder. About Connexions Connexions Modular Content The Connexions Project http://cnx.org 2 is part of the Open Educational Resources (OER) movement dedicated to providing high quality learning materials free online, free in printable PDF format, and at low cost in bound volumes through print-on-demand publishing. This textbook is one of many collections available to Connexions users. Each collection is composed of a number of re-usable learning modules written in the Connexions XML markup language. Each module may also be re-used (or 're-purposed') as part of other collections and may be used outside of Connexions. Re-use and Customization The Creative Commons (CC) Attribution license 3 applies to all Connexions modules. Under this license, any Connexions module may be used or modied for any purpose as long as proper attribution to the original author(s) is maintained. Connexions' authoring tools make re-use (or re-purposing) easy. There- fore, instructors anywhere are permitted to create customized versions of this textbook by editing modules, deleting unneeded modules, and adding their own supplementary modules. Connexions' authoring tools keep track of these changes and maintain the CC license's required attribution to the original authors. This process creates a new collection that can be viewed online, downloaded as a single PDF le, or ordered in any quantity by instructors and students as a low-cost printed textbook. Read the book online, print the PDF, or buy a copy of the book. To browse this textbook online, visit the collection home page. You will then have three options. 1. You may view the collection modules on-line by clicking on the Start link, which takes you to the rst module in the collection. You can then navigate to the next module using NEXT and through the subsequent modules by using the PREVIOUS | NEXT button that is towards the upper right to move forward and backward in the collection. You can jump to any module in the collection by clicking on that module's title in the TABLE OF CONTENTS box on the left side of the window. If these contents are hidden, make them visible by clicking on the small triangle to the right of the TABLE OF CONTENTS. Chapters also have a small triangle to show or hide contents. 2. You may obtain a PDF of the entire textbook to print or view oine by clicking on the Download PDF link in the Content Actions box. 3. You may order a bound copy of the collection (for a reasonable printing and shipping fee) by clicking on the Order printed copy button. 2http://cnx.org/ 3http://creativecommons.org/licenses/by/2.0/
  • 11. 3 Connexions PDF Conversion Problems Buying a copy of the textbook/collection is basically sending the PDF le to a printing service that has a contract with the Connexions project. There are several known printing problems and the Connexions Project is aware of them and seeking a solution. In the mean time, be aware that quirks exist for printed PDF materials. A description of the known problems are: 1. When it converts an Example the PDF displays the rst line of an example properly but indents the remaining lines of the example. This problem occurs for the printing of a book (because it prints a PDF) and downloading either a module or a textbook/collection as a PDF. 2. Chapter numbering has been added to the on-line Table of Contents. This will make it easier for students to quickly get to the chapter reading materials. However this creates a double chapter numbering within the textbook/collection's PDF and custom printing formats. 3. Within C++ there are three operators that do not convert properly to PDF format. decrement which is two minus signs insertion which is two less than signs extraction which is two greater than signs Table 1
  • 12. 4
  • 13. Author Acknowledgements4 I wish to acknowledge the many people who have helped me and have encouraged me in this project. 1. Mr. Abass Alamnehe, who is a fellow faculty member at Houston Community College. He has encour- aged the use of Connexions as an open source publishing concept. His comments on several modules have led directly to the improvement of the materials in this textbook/collection. 2. The hundreds (most likely a thousand plus) students that I have taken programming courses that I have taught since 1984. The languages include: COBOL, main frame IBM assembly, Intel assembly, Pascal, C and C++. They have often suggested that I write my own book because they thought that I was explaining the subject matter better than the author of the textbook that we were using. Little did my students understand that directly or indirectly they aided in the improvement of the materials from which I taught as well as improving me as a teacher. 3. To my future students and all those that will use this textbook/collection. They will provide suggestions for improvement as well as being the thousand eyes identifying the hard to nd typos, etc. 4. My wife, Carol, who supports me in all that I do. She has tolerated the many hours that I have spent in concentration on developing the modules that comprise this work. Without her support, this work would not have happened. 4This content is available online at http://cnx.org/content/m19055/1.4/. 5
  • 14. 6
  • 15. Orientation and Syllabus5 Orientation Textbook/Collection Layout The approach of this course will be to take the student through a progression of materials that will allow the student to develop the skills of programming. The basic unit of study is a Connexions module. Several modules are collected into a chapter. The chapters are divided into ve groups. Group Title Chapters Modules Pre-Chapter Items N/A 3 Foundation Topics 1-5 27 Modular Programming 6-9 17 Structured Programming 10-16 30 Intermediate Topics 17-21 17 Advanced Topics 22-24 11 Review Materials N/A 5 Appendix N/A 7 Total Modules N/A 117 Table 1 Some professors using this textbook/collection might decide to eliminate certain modules or chapters. Some may eliminate the entire Advanced Topics group. Other professors may choose to add additional study materials. The advantage of this textbook/collection is that it may be adapted by professors to suit the needs of their students. Chapter Layout Each chapter will usually ow from: 1. One or more Connexions modules built for independent delivery. 2. A Connexions Practice module built specically for this textbook/collection. As you proceed with the Connexions modules that comprise a chapter, you should: • Complete any tasks/demos that require downloading items. 5This content is available online at http://cnx.org/content/m19684/1.8/. 7
  • 16. 8 • Do any exercises. • Create 3x5 study cards for all denitions. When this material is used as a textbook for a course the denitions are to be memorized. Conrm this with your professor. As you start the Practice module you will usually encounter: • Learning Objectives • Memory Building Activities aka MBAs Link These could consist of any of the following types of interactive computer activities: ash card, crossword puzzle, seek a word, drag n drop, labeling, ordering or sorting. When the materials are used as a textbook for a course, it is imperative that students do a variety of repetitive activities in order to memorize basic course material. Besides, have fun learning. • Exercises In addition to any exercises within the study modules that you completed before the practice module, there will be at least one exercise for students to complete. • Miscellaneous Items These will exist for some of the chapters. • Lab Assignment Usually, completed on one's own eorts. Review the instructions/restrictions from your professor/teacher if using this for a high school or college credit course. • Problems The intent of this activity is for students to formulate their own answers. Thus, solutions to the problems will not be provided. When the materials are used as a textbook for a course, the professor/teacher may assign students to a Study Group or let students form study groups to discuss their solutions with each other. If you are using this for a high school or college credit course, verify that you may work as team at solving the problems. This type of approved activity is called authorized collusion and is not a violation of Academic or Scholastic Dishonesty rules. A professor using this textbook/collection/course will most likely have additional lab assignments, quizzes and exams that would be used in calculating your grade. Connexions Module Reading List The modules in this textbook/collection have had content reviewed and are believed to be sucient, thus no additional textbook is required. However, some students desire additional references or reading. The author has used several textbooks over the years for teaching COSC1436 Programming Fundamentals I course at Houston Community College. A reading reference list has been prepared and includes references for the following textbooks: 1. Starting Out with C++ Early Objects, by: Tony Gaddis et. al., 6 th Edition, ISBN: 0-321-51238-3 2. Starting Out with C++ Early Objects, by: Tony Gaddis et. al., 5 th Edition, ISBN: 0-321-38348-6 3. Computer Science A structured Approach using C++, by: Behrouz A. Forouzan et. al., 2 nd Edition, ISBN: 0-534-37480-8 These textbooks are typically available in the used textbook market at a reasonable price. You may use any one of the three books. If you acquire one of the above optional traditional textbooks, you may want to download and store the following le to your storage device (disk drive or ash drive) in an appropriate folder. Download from Connexions: Connexions_Module_Reading_List_col10621.pdf 6 Syllabus The syllabus for a course that is for credit will be provided by your specic course professor. If you are using this textbook/collection for non-credit as self-study, we have some suggestions: 6See the le at http://cnx.org/content/m19684/latest/Connexions_Module_Reading_List_col10621.pdf
  • 17. 9 1. Plan regular study periods 2. Review the three (3) Pre-Chapter Items modules 3. Review the last four (4) modules in the Appendix 4. Proceed with Chapter 1 going through all 24 chapters 5. Do all of the demo programs as you encounter them 6. Memorize all of the terms and denitions 7. Do all lab assignments 8. Prepare answers to all of the problems in the Practice modules 9. At the end of every section, do the Review module These is no magic way to learn about computer programming other than to immerse yourself into regular study and study includes more than casual reading. To help you keep track of your study, we have included a check o list for the textbook/collection. Check Description # Modules Pre-Chapter Items 3 Last four Appendix Items 4 Chapters 1 to 5 27 Review Materials for 1 to 5 1 Chapters 6 to 9 17 Review Materials for 6 to 9 1 Chapters 10 to 16 30 Review Materials for 10 to 16 1 Chapters 17 to 21 17 Review Materials for 17 to 21 1 Chapters 22 to 24 11 Review Materials for 22 to 24 1 First three Appendix Items 3 N/A Total Modules 117 Table 2
  • 18. 10
  • 19. Chapter 1 1. Introduction to Programming 1.1 Systems Development Life Cycle1 1.1.1 Discussion The Systems Development Life Cycle is the big picture of creating an information system that handles a major task (referred to as an application). The applications usually consist of many programs. An example would be the Department of Defense supply system, the customer system used at your local bank, the repair parts inventory system used by car dealerships. There are thousands of applications that use an information system created just to help solve a business problem. Another example of an information system would be the 101 Computer Games software you might buy at any of several retail stores. This is an entertainment application, that is we are applying the computer to do a task (entertain you). The software actually consists of many dierent programs (checkers, chess, tic tac toe, etc.) that were most likely written by several dierent programmers. Computer professionals that are in charge of creating applications often have the job title of System Analyst. The major steps in creating an application include the following and start at Planning step. 1This content is available online at http://cnx.org/content/m18684/1.5/. 11
  • 20. 12 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING Figure 1.1: Systems Development Life Cycle During the Design phase the System Analyst will document the inputs, processing and outputs of each program within the application. During the Implementation phase programmers would be assigned to write the specic programs using a programming language decided by the System Analyst. Once the system of programs is tested the new application is installed for people to use. As time goes by, things change and a specic part or program might need repair. During the Maintenance phase, it goes through a mini planning, analysis, design and implementation. The programs that need modication are identied and programmers change or repair those programs. After several years of use, the system usually becomes obsolete. At this point a major revision of the application is done. Thus the cycle repeats itself. 1.1.2 Denitions Denition 1.1: system analyst Computer professional in charge of creating applications. Denition 1.2: applications An information system or collection of programs that handles a major task. Denition 1.3: life cycle Systems Development Life Cycle: Planning - Analysis - Design - Implementation - Maintenance
  • 21. 13 Denition 1.4: implementation The phase of a Systems Development Life Cycle where the programmers would be assigned to write specic programs. 1.2 Bloodshed Dev-C++ 5 Compiler/IDE2 1.2.1 Introduction Microsoft and Borland are the two reputable names within the programming world for compilers. They sell compiler software for many programming languages. For the C++ programming language, the Microsoft Visual Studio which includes C++ and Borland C++ Builder are excellent compilers. Often with textbooks or free via the internet; you can get Microsoft's Visual C++ Express or Borland's Personal Edition version of a compiler. However, installing either of these compliers can be complex. Microsoft's Visual Studio compiler often creates a variety of installation problems (such as making sure the operating system and .net components are current) thus making it dicult for students to install at home. These compliers require you to build a project to encompass every program. Using a commercially sold compiler that professional programmers would consider using for project development is ne for professionals but often confusing to beginners. Eventually, if you are going to become a professional programmer, you will need to become familiar with the commercially sold compilers. We suggest that beginning students consider one of the easier to install compiler software packages for use in a programming fundamentals course. The best option we have found is an open source compiler/IDE (Integrated Development Environment) named: Bloodshed Dev-C++ 5 compiler/IDE. Denition 1.5: open source Group development of source code for software that is made available to the public at no cost. 1.2.2 Bloodshed Dev-C++ 5 compiler/IDE Advantages: Can be installed on Windows 95/98/NT/2000/XP operating systems. I have it installed on Windows Vista operating system, thus it can work with slower processors and almost any Windows operating system. It only requires about 80 MB of storage space (usually enough for the compiler with all of its les and storage room for several of your programs). It is very easy to install and easy to use. Does not require the use of a project; thus individual source code les can be easily compiled. Disadvantages: Would not normally be used by professional programmers, but is sucient for a beginning computer programming course and is a full-featured compiler/IDE. Unique Advantage: Can be installed and run on a ash drive, thus giving the student the ability to work on their lab assignments on any computer that has a USB port. This can give the student portability, being able to do lab assignments at home, work, library, open lab, classroom, friend's house, etc. Denition 1.6: portability The ability to transport software on a ash drive and thus use it on various machines. 1.2.3 Preparation before Installation 1.2.3.1 Creating the Needed Folders and Sub-Folders You need to get the software and a C++ source code program that has been tested and is error free. You will need about 80MB of storage space. We suggest that you create two folders on your hard drive or ash drive depending on which installation you choose. If on a ash drive create them at the root level of the drive. If on your home machine, you can use the folder area set up by the operating system for you as a user. Name them: 2This content is available online at http://cnx.org/content/m18785/1.14/.
  • 22. 14 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING • Cpp_Software_Download • Cpp_Source_Code_Files Within the Cpp_Source_Code_Files folder, create a sub-folder named: • Compiler_Test To help you keep les organized, you will want to create other sub-folders for storing source code les. We suggest you create at least two other sub-folder to be used with Connexions' related modules. Within the Cpp_Source_Code_Files, create sub-folders named: • Demo_Programs • Monitor_Header Denition 1.7: folder A named area for storage of documents or other les on a disk drive or ash drive. Denition 1.8: source code Any collection of statements or declarations written in some human-readable computer program- ming language. 1.2.3.2 Getting the Software The full version of the software is named: Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2 You can either download it from Bloodshed or download the version as of 12/8/2008 that is stored on the Connexions web site. Store it in the Cpp_Software_Download folder you created. The software is approximately 9.1 MB and will take several minutes to download if you are using a dial-up modem connection. tip: The software has not signicantly changed since 2007 and the Connexions version will be sucient for most users. The Bloodshed link requires some additional navigation to get to the software download. Thus, because it is signicantly easier, we recommend that you download the software from the Connections web site. Link to Bloodshed: http://www.bloodshed.net/dev/devcpp.html 3 Download from Connexions: devcpp-4.9.9.2_setup.exe 4 1.2.3.3 Getting a C++ Source Code File Listed below is a C++ source code le titled: Compiler_Test.cpp It has been prepared for Connexions web delivery. Download and store it in the Compiler_Test sub-folder you created. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Compiler_Test.cpp 5 1.2.4 Installation Instructions for Bloodshed Dev-C++ 5 compiler/IDE The Version 5 which is well tested (don't let the beta release scare you) and should work on a variety of machines and various Microsoft Operating systems including Windows 98, Windows 2000, Windows XP and Windows Vista. Below are installation instructions for installing it on a machine or installing it on a ash drive. We don't suggest trying to switch between the machine drive and ash drive. If it is installed on the machine drive and you try installing it on a ash drive, it creates problems and will not work perperly. Either install it on the ash drive to gain your portability or install it on your machine. 3http://www.bloodshed.net/dev/devcpp.html 4See the le at http://cnx.org/content/m18785/latest/devcpp-4.9.9.2_setup.exe 5See the le at http://cnx.org/content/m18785/latest/Compiler_Test.cpp
  • 23. 15 1.2.4.1 Computer Installation Instructions 1. Navigate to the Cpp_Software_Download folder and run the devcpp-4.9.9.2_setup.exe software by double cliking on the lename. 2. Use common sense and answer the installation prompts. NOTE THE FOLLOWING TWO ITEMS: 3. When it gets to the Choose Install Location use the default software location of: C:Dev-Cpp (or select the location you want to store the installed program but use the default unless you are familiar with installing software). 4. When it asks: Do you want to install Dev C++ for all users on this computer? answer Yes. 5. After it installs, it will ask some rst time conguration questions. Again, use common sense and answer the questions. NOTE THE FOLLOWING ITEM: 6. Answer No to the retrieve information from header les. 7. It will start your compiler/IDE with a Tip of the day. We suggest you check the box in the lower left and select Close. 8. Close your compiler/IDE by using the normal red X box. We want to show you how to start your compiller normally. 9. You start your compiler software similar to starting any software loaded on your machine (Start then All Programs then Bloodshed Dev-C++ then Dev-C++). 10. On the menus at the top Select File then Open project or le then navigate to where your source code le (Compiler_Test.cpp) is stored on your hard drive. See the suggested folder name above. Select the source code le and open it. 11. You should see the source code listing. Press F9 key or select the Execute then Compile Run from the menus at the top. A black screen box should appear and you answer questions appropriately to run the program. When you are done running your program the black screen box goes away. 1.2.4.2 Flash Drive Installation Instructions 1. Navigate to the Cpp_Software_Download folder and run the devcpp-4.9.9.2_setup.exe software by double cliking on the lename. 2. Use common sense and answer the installation prompts. NOTE THE FOLLOWING TWO ITEMS: 3. When it gets to the Choose Install Location you can see that the default software location of: C:Dev-Cpp however, it needs to be changed. Change the Destination Directory by selecting changing the default software location from: C:Dev-Cpp to DriveLetter:Dev-Cpp (where the DriveLetter is the drive that represents your ash drive). 4. When it asks: Do you want to install Dev C++ for all users on this computer? answer No. 5. After it installs, it will ask some rst time conguration questions. Again, use common sense and answer the questions. NOTE THE FOLLOWING ITEM: 6. Answer No to the retrieve information from header les. 7. It will start your compiler/IDE with a Tip of the day. We suggest you check the box in the lower left and select Close. 8. Close your compiler/IDE by using the normal red X box. We want to show you how to start your compiller normally. 9. To start your compiler software you navigate to the Dev-Cpp folder on your ash drive and select the devcpp.exe application. NOTE: When using the ash drive you should not try starting the compiler by double clicking on a C++ source code le. This method works on a machine installation but does not work on a ash drive installation. 10. On the menus at the top Select File then Open project or le then navigate to where your source code le (Compiler_Test.cpp) is stored on your ash drive. See the suggested folder name above. Select the source code le and open it. 11. You should see the source code listing. Press F9 key or select the Execute then Compile Run from the menus at the top. A black screen box should appear and you answer questions appropriately to run the program. When you are done running your program the black screen box goes away.
  • 24. 16 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING 1.3 Modularization and C++ Program Layout6 1.3.1 Concept of Modularization One of the most important concepts of programming is the ability to group some lines of code into a unit that can be included in our program. The original wording for this was a sub-program. Other names include: macro, sub-routine, procedure, module and function. We are going to use the term function for that is what they are called in the two predominant programming languages of today: C++ and Java. Functions are important because they allow us to take large complicated programs and to divide them into smaller manageable pieces. Because the function is a smaller piece of the overall program, we can concentrate on what we want it to do and test it to make sure it works properly. Generally functions fall into two categories: 1. Program Control - Functions used to simply sub divide and control the program. These functions are unique to the program being written. Other programs may use similar functions maybe even functions with the same name, but the content of the functions are almost always very dierent. 2. Specic Task - Functions designed to be used with several programs. These functions perform a specic task and thus are useable in many dierent programs because the other programs also need to do the specic task. Specic task functions are sometimes referred to as building blocks. Because they are already coded and tested, we can use them with condence to more eciently write a large program. The main program must establish the existence of functions used in that program. Depending on the programming language, there is a formal way to: 1. dene a function (it's denition or the code it will execute) 2. call a function 3. declare a function (a prototype is a declaration to a complier) Program Control functions normally to do not communicate information to each other but use a common area for variable storage. Specic Task functions are constructed so that data can be communicated between the calling program piece (which is usually another function) and the function being called. This ability to communicate data is what allows us to build a specic task function that may be used in many programs. The rules for how the data is communicated in and out of a function vary greatly by programming language, but the concept is the same. The data items passed (or communicated) are called parameters. Thus the wording: parameter passing. The four data communication options include: 1. no communication in with no communication out 2. some communication in with no communication out 3. some communication in with some communication out 4. no communication in with some communication out 1.3.2 Introduction of Functions within C++ We are going to consider a simple program that might be used for testing a compiler to make sure that it is installed correctly. Example 1.1: Compiler_Test.cpp source code //****************************************************** // Filename: Compiler_Test.cpp 6This content is available online at http://cnx.org/content/m18861/1.11/.
  • 25. 17 // Purpose: Average the ages of two people // Author: Ken Busbee; © Kenneth Leroy Busbee // Date: Jan 5, 2009 // Comment: Main idea is to be able to // debug and run a program on your compiler. //****************************************************** // Headers and Other Technical Items #include iostream using namespace std; // Function Prototypes void pause(void); // Variables int age1; int age2; double answer; //****************************************************** // main //****************************************************** int main(void) { // Input cout nEnter the age of the first person ---: ; cin age1; cout nEnter the age of the second person --: ; cin age2; // Process answer = (age1 + age2) / 2.0; // Output cout nThe average of their ages is --------: ; cout answer; pause(); return 0; } //****************************************************** // pause //****************************************************** void pause(void) {
  • 26. 18 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING cout nn; system(PAUSE); cout nn; return; } //****************************************************** // End of Program //****************************************************** This program has two functions, one from each of our categories. The technical layout of functions are the same, it is our distinction that creates the two categories based on how a function is being implemented. 1.3.2.1 Program Control Function The main program piece in C++ program is a special function with the identier name of main. The special or uniqueness of main as a function is that this is where the program starts executing code and this is where it usually stops executing code. It is usually the rst function dened in a program and appears after the area used for includes, other technical items, declaration of prototypes, the listing of global constants and variables and any other items generally needed by the program. The code to dene the function main is provided; however, it is not prototyped or usually called like other functions within a program. In this simple example, there are no other program control functions. 1.3.2.2 Specic Task Function We often have the need to perform a specic task that might be used in many programs. In the Com- pile_Test.cpp source code above we have such a task that is used to stop the execution of the code until the user hits the enter key. The functions name is: pause. This function is not communicating any information between the calling function and itself, thus the use of the data type void. Example 1.2: general layout of a function return value data type function identifier name(data type identifier name for input value) { lines of code; return value; } There is no semi-colon after the rst line. Semi-colons are used at the end of a statement in C++, but not on the rst line when dening a function. Functions have a set of braces {} used for identifying a group or block of statements or lines of code. There are normally several lines of code within a function. Lines of code containing the instructions end in a semi-colon. Can you identify the denition of the pause function in the above program example? The pause function denition is after the function main. Though not technically required, most programs list all functions (program control or specic task) after the function main. Let's identify the location where the function pause is called. The calling function is the function main and it towards the end of the function. The line looks like: pause(); When you call a function you use its identier name and a set of parentheses. You place any data items you are passing inside the parentheses, and in our example there are none. A semi-colon ends the statement
  • 27. 19 or line of code. After our program is compiled and running, the lines of code in the function main are executed and when it gets to the calling of the pause function, the control of the program moves to the pause function and starts executing the lines of code in the pause function. When it's done with the lines of code, it will return to the place in the program that called it (in our example the function main) and continue with the code in that function. Once we know how to dene a function and how to call a function, we usually will need to know how to declare a function to the compiler (called a prototype). Because of normal computer programming industry standards, programmers usually list the function main rst with other functions dened after it. Then somewhere in the function main, we will call a function. When we convert our source code program to an executable version for running on our computer, the rst step of the process is compiling. The compiler program demands to know what the communication will be between two functions when a function is called. It will know the communication (what going in and out as parameters) if the function being called has been dened. But, we have not dened that function yet; it is dened after the function main. To solve this problem, we show the compiler a prototype of what the function will look like (at least the communication features of the function) when we dene it. void pause(void); This line of code looks exactly like the rst line in our function denition with one important addition of a semi-colon. Prototypes (or declarations to the compiler of the communications of a function not yet dened) are placed near the top of the program before the function main. Summary concept: If you call a function before it is dened you must prototype it before it is called. Looking at our list of the three things you do in conjunction with a function in the order that they normally appear in a program, there is a formal way to: 1. declare a function (a prototype is a communications declaration to a complier) 2. call a function 3. dene a function 1.3.3 C++ Program Layout From the above example, you can see that 2/3 of the program is the two functions. Most C++ programs have several items before the function main. As in the example, they often are: 1. Documentation Most programs have a comment area at the start of the program with a variety of comments pertinent to the program. Any line starting with two slashes // is a comment and the compiler software disregards everything from the // to the end of the line. 2. #includeiostream This line of code inserts a le into the source code. The le contains necessary code to be able to do simple input and output. 3. using namespace std The C++ compiler has an area where it keeps the identier names used in a program organized and it is called a namespace. There is a namespace created in conjunction with the iostream le called: std. This line informs the compiler to use the namespace std where the identier names in the iostream are established. 4. Function prototypes have already been explained. 5. We need some variables (storage areas) for this program to work. They are dened next. 1.3.4 Denitions Denition 1.9: modularization The ability to group some lines of code into a unit that can be included in our program. Denition 1.10: function What modules are called in the two predominant programming languages of today: C++ and Java.
  • 28. 20 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING Denition 1.11: program control Functions used to simply sub divide and control the program. Denition 1.12: specic task Functions designed to be used with several programs. Denition 1.13: parameter passing How the data is communicated in to and out of a function. Denition 1.14: identier name The name given by the programmer to identify a function or other program items such as variables. Denition 1.15: function prototype A function's communications declaration to a complier. Denition 1.16: function call A function's using or invoking of another function. Denition 1.17: function denition The code that denes what a function does. Denition 1.18: braces Used to identify a block of code in C++. 1.4 Practice 1: Introduction to Programming7 1.4.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Install the Bloodshed Dev-C++ 5 compiler 3. Make minor modications to an existing program 1.4.2 Memory Building Activities Link to: MBA 01 8 1.4.3 Exercises Exercise 1.1 (Solution on p. 23.) Answer the following statements as either true or false: 1. Beginning programmers participate in all phases of the Systems Development Life Cycle. 2. The Bloodshed Dev-C++ 5 compiler/IDE is the preferred compiler for this text- book/collection, however any C++ compiler will work. 3. Most compilers can be installed on a ash drive. 4. In addition to function as the name of a sub-program, the computer industry also uses macro, procedure and module. 5. Generally functions fall into two categories: Program Control and Specic Task. 7This content is available online at http://cnx.org/content/m22450/1.2/. 8See the le at http://cnx.org/content/m22450/latest/index.html
  • 29. 21 1.4.4 Miscellaneous Items None at this time. 1.4.5 Lab Assignment 1.4.5.1 Creating a Folder or Sub-Folder for Chapter 01 Files Within the Chapter 1 Connexions modules you were given directions on how to install the Bloodshed Dev-C++ 5 compiler/IDE and to test your installation with the Compiler_Test.cpp source code le. If you have not done this, return to the Connexions materials and complete this task. In the compiler installation directions you were asked to make a folder named: Cpp_Source_Code_Files. All of your lab assignments in this course assume you have that folder on the same drive as your compiler (either drive C: your hard disk drive, or on a ash drive). If you don't have that folder, go create it now. Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_01 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 1.4.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Compiler_Test.cpp 9 1.4.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Navigate to your sub-folder: Chapter_01 and rename the Compiler_Test.cpp source code le to: Lab_01.cpp • If you are having problems seeing the le extensions, visit the Show Hide File Extensions instructions within the Appendix. • Start your compiler and open the source code le. Carefully make the following modications: • Change the comments at the top, specically: • The lename should be: Lab_01.cpp • Purpose should be: Average the weight of three people • Author: put your name and erase my name and copyright • Date: Put today's date • Remove the next 2 lines of comments (don't erase the asterisk line) • NOTE: During the rest of the course you will often use a source code le provided by the instructor as your starting point for a new lab assignment. Sometimes you will use a source code le that you have created as your starting point for a new lab assignment. Either way, you should modify the comments as appropriate to include at a minimum the four lines of information as established in this lab assignment. 9See the le at http://cnx.org/content/m22450/latest/Compiler_Test.cpp
  • 30. 22 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING • We are now going to make simple modications to this program so that it is able to average the weight of three people. Do the following: • Within the variables area, change the variable names for age1 and age2 to weight1 and weight2. Add another variable of integer data type with the identier name of weight3. • The input area has two prompts and requests for data from the user. They are paired up a prompt and getting data from the keyboard. We need to modify the prompt to ask for weight instead of age. We need to change the variable name from age1 to weight1. Do this for the second pair that prompts and gets the second data item. Create a third pair that prompts and gets the third data item. • The process area has only one line of code and we need to make changes that add the weight3 and divides by 3.0 instead of 2.0. The code should look like this: • answer = (weight1 + weight2 + weight3) / 3.0; • The output area needs the text modied from ages to weights. • Build (compile and run) your program. You have successfully written this program if when it run and you put in the three weights; it tells you the correct average. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 1.4.6 Problems 1.4.6.1 Problem 01a Instructions List the steps of the Systems Development Life Cycle and indicate which step you are likely to work in as a new computer professional.
  • 31. 23 Solutions to Exercises in Chapter 1 Solution to Exercise 1.1 (p. 20) Answers: 1. false 2. true 3. false 4. true 5. true
  • 32. 24 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
  • 33. Chapter 2 2. Program Planning Design 2.1 Program Design1 2.1.1 Topic Introduction Program Design consists of the steps a programmer should do before they start coding the program in a specic language. These steps when properly documented will make the completed program easier for other programmers to maintain in the future. There are three broad areas of activity: • Understanding the Program • Using Design Tools to Create a Model • Develop Test Data 2.1.2 Understanding the Program If you are working on a project as a one of many programmers, the system analyst may have created a variety of documentation items that will help you understand what the program is to do. These could include screen layouts, narrative descriptions, documentation showing the processing steps, etc. If you are not on a project and you are creating a simple program you might be given only a simple description of the purpose of the program. Understanding the purpose of a program usually involves understanding it's: • Inputs • Processing • Outputs This IPO approach works very well for beginning programmers. Sometimes, it might help to visualize the programming running on the computer. You can imagine what the monitor will look like, what the user must enter on the keyboard and what processing or manipulations will be done. 2.1.3 Using Design Tools to Create a Model At rst you will not need a hierarchy chart because your rst programs will not be complex. But as they grow and become more complex, you will divide your program into several modules (or functions). The rst modeling tool you will usually learn is pseudocode. You will document the logic or algorithm of each function in your program. At rst, you will have only one function, and thus your pseudocode will follow closely the IPO approach above. 1This content is available online at http://cnx.org/content/m18686/1.4/. 25
  • 34. 26 CHAPTER 2. 2. PROGRAM PLANNING DESIGN There are several methods or tools for planning the logic of a program. They include: owcharting, hierarchy or structure charts, pseudocode, HIPO, Nassi-Schneiderman charts, Warnier-Orr diagrams, etc. Programmers are expected to be able to understand and do owcharting and pseudocode. These methods of developing the model of a program are usually taught in most computer courses. Several standards exist for owcharting and pseudocode and most are very similar to each other. However, most companies have their own documentation standards and styles. Programmers are expected to be able to quickly adapt to any owcharting or pseudocode standards for the company at which they work. The others methods that are less universal require some training which is generally provided by the employer that chooses to use them. Later in your programming career, you will learn about using applications software that helps create an information system and/or programs. This type of software is called Computer-aided Software Engineering. Understanding the logic and planning the algorithm on paper before you start to code is very important concept. Many students develop poor habits and skipping this step is one of them. 2.1.4 Develop Test Data Test data consists of the user providing some input values and predicting the outputs. This can be quite easy for a simple program and the test data can be used to check the model to see if it produces the correct results. 2.1.5 Denitions Denition 2.1: IPO Inputs - Processing - Outputs Denition 2.2: pseudocode English-like statements used to convey the steps of an algorithm or function. Denition 2.3: test data Providing input values and predicting the outputs. 2.2 Pseudocode2 2.2.1 Overview Pseudocode is one method of designing or planning a program. Pseudo means false, thus pseudocode means false code. A better translation would be the word fake or imitation. Pseudocode is fake (not the real thing). It looks like (imitates) real code but it is NOT real code. It uses English statements to describe what a program is to accomplish. It is fake because no complier exists that will translate the pseudocode to any machine language. Pseudocode is used for documenting the program or module design (also known as the algorithm). The following outline of a simple program illustrates pseudocode. We want to be able to enter the ages of two people and have the computer calculate their average age and display the answer. Example 2.1: Outline using Pseudocode Input display a message asking the user to enter the first age get the first age from the keyboard display a message asking the user to enter the second age get the second age from the keyboard 2This content is available online at http://cnx.org/content/m18648/1.9/.
  • 35. 27 Processing calculate the answer by adding the two ages together and dividing by two Output display the answer on the screen pause so the user can see the answer After developing the program design, we use the pseudocode to write code in a language (like Pascal, COBOL, FORTRAN, C, C++, etc.) where you must follow the rules of the language (syntax) in order to code the logic or algorithm presented in the pseudocode. Pseudocode usually does not include other items produced during programming design such as identier lists for variables or test data. There are other methods for planning and documenting the logic for a program. One method is HIPO. It stands for Hierarchy plus Input Process Output and was developed by IBM in the 1960s. It involved using a hierarchy (or structure) chart to show the relationship of the sub-routines (or functions) in a program. Each sub-routine had an IPO piece. Since the above problem/task was simple, we did not need to use multiple sub-routines, thus we did not produce a hierarchy chart. We did incorporate the IPO part of the concept for the pseudocode outline. 2.2.2 Denitions Denition 2.4: pseudo Means false and includes the concepts of fake or imitation. 2.3 Test Data3 2.3.1 Overview Test data consists of the user providing some input values and predicting the outputs. This can be quite easy for a simple program and the test data can be used twice. 1. to check the model to see if it produces the correct results (model checking) 2. to check the coded program to see if it produces the correct results (code checking) Test data is developed by using the algorithm of the program. This algorithm is usually documented during the program design with either owcharting or pseudocode. Here is the pseudocode in outline form describing the inputs, processing and outputs for a program used for painting rectangular buildings. Example 2.2: Pseudocode using an IPO Outline for Painting a Rectangular Building Input display a message asking user for the length of the building get the length from the keyboard display a message asking user for the width of the building get the width from the keyboard display a message asking user for the height of the building get the height from the keyboard display a message asking user for the price per gallon of paint get the price per gallon of paint from the keyboard display a message asking user for the sq ft coverage of a gallon of paint get the sq ft coverage of a gallon of paint from the keyboard 3This content is available online at http://cnx.org/content/m18781/1.3/.
  • 36. 28 CHAPTER 2. 2. PROGRAM PLANNING DESIGN Processing calculate the total area of the building by: multiplying the length by height by 2 then multiply the width by height by 2 then add the two results together calculate the number of gallons of paint needed by: dividing the total area by the coverage per gallon then round up to the next whole gallon calculate the total cost of the paint by: multiplying the total gallons needed by the price of one gallon of paint Output display the number of gallons needed on the monitor display the total cost of the paint on the monitor pause so the user can see the answer 2.3.2 Creating Test Data and Model Checking Test data is used to verify that the inputs, processing and outputs are working correctly. As test data is initially developed it can verify that the documented algorithm (pseudocode in the example we are doing) is correct. It helps us understand and even visualize the inputs, processing and outputs of the program. Inputs: My building is 100 feet long by 40 feet wide and 10 feet in height and I selected paint costing $28.49 per gallon that will cover 250 square feet per gallon. We should verify that the pseudocode is prompting the user for this data. Processing: Using my solar powered hand held calculator, I can calculate (or predict) the total area would be: (100 x 10 x 2 plus 40 x 10 x 2) or 2,800 sq ft. The total gallons of paint would be: (2800 / 250) or 11.2 gallons. But rounded up, I would need twelve (12) gallons of paint. The total cost would be: (28.49 times 12) or $341.88. We should verify that the pseudocode is performing the correct calculations. Output: Only the signicant information (number of gallons to buy and the total cost) are displayed for the user to see. We should verify that the appropriate information is being displayed. 2.3.3 Testing the Coded Program Code Checking The test data can be developed and used to test the algorithm that is documented (in our case our pseu- docode) during the program design phase. Once the program is code with compiler and linker errors resolved, the programmer gets to play user and should test the program using the test data developed. When you run your program, how will you know that it is working properly? Did you properly plan your logic to accomplish your purpose? Even if your plan was correct, did it get converted correctly (coded) into the chosen programming language (in our case C++)? The answer (or solution) to all of these questions is our test data. By developing test data we are predicting what the results should be, thus we can verify that our program is working properly. When we run the program we would enter the input values used in our test data. Hopefully the program will output the predicted values. If not then our problem could be any of the following: 1. The plan (IPO outline or other item) could be wrong 2. The conversion of the plan to code might be wrong 3. The test data results were calculated wrong Resolving problems of this nature can be the most dicult problems a programmer encounters. You must review each of the above to determine where the error is lies. Fix the error and re-test your program.
  • 37. 29 2.3.4 Denitions Denition 2.5: model checking Using test data to check the design model (usually done in pseudocode). Denition 2.6: code checking Using test data to check the coded program in a specic language (like C++). 2.4 Practice 2: Program Planning Design4 2.4.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Create a pseudocode document for a programming problem 3. Create a test data document for a programming problem 2.4.2 Memory Building Activities Link to: MBA 02 5 2.4.3 Exercises Exercise 2.1 (Solution on p. 32.) Answer the following statements as either true or false: 1. Coding the program in a language like C++ is the rst task of planning. You plan as you code. 2. Pseudocode is the only commonly used planning tool. 3. Test data is developed for testing the program once it is code into a language like C++. 4. The word pseudo means false and includes the concepts of fake or imitation. 5. Many programmers pick up the bad habit of not completing the planning step before starting to code the program. 2.4.4 Miscellaneous Items None at this time. 2.4.5 Lab Assignment 2.4.5.1 Creating a Folder or Sub-Folder for Chapter 02 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_02 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 4This content is available online at http://cnx.org/content/m22453/1.2/. 5See the le at http://cnx.org/content/m22453/latest/index.html
  • 38. 30 CHAPTER 2. 2. PROGRAM PLANNING DESIGN 2.4.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Solution_Lab_01_Pseudocode.txt 6 Download from Connexions: Solution_Lab_01_Test_Data.txt 7 2.4.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Navigate to your sub-folder: Chapter_02 and print the: Solution_Lab_01_Pseudocode.txt and the: Solution_Lab_01_Test_Data.txt les. Review the printouts in conjunction with your Lab 01 source code le. Note: In Lab 01 we gave you step by step directions for modifying the Compiler_Test.cpp source code le into the Lab_01.cpp source code le. I could have given you the pseudocode and test data les, but you had not received any instructions about them. Now, after having studied the Chapter 2 materials, these les should make sense. • Make copies of the: Solution_Lab_01_Pseudocode.txt and Solution_Lab_01_Test_Data.txt and rename them: Lab_02_Pseudocode.txt and Lab_02_Test_Data.txt • Here is the problem. Your local bank has many customers who save their change and periodically bring it in for deposit. The customers have sorted the coins (pennies, nickels, dimes and quarters forget half dollars and dollar coins) and know how many (an integer data type) of each value they have but have evolved (or their environment has made them lazy). They have lost their ability to do simple arithmetic. They can't seem to determine the total value of all of the coins without a calculator (or computer). Write a program to interact with the customers and to determine and report the total value of their coins. • No! No! No! We are not going to write a program (create source code) using the C++ programming language. We are going to design a plan for a program using pseudocode as our model. Additionally, we need to develop some test data for use in testing our model. • Start your text editor (Microsoft Notepad. Set the font on Notepad to: Courier 12 font because Courier uses the same amount of space horizontally for each letter. It will make the information in the les show as it should be seen. Open your Lab 02 pseudocode text le. Change all items as needed to be able to solve the above problem. NOTE: You may use any application software that will let you open, modify and save ASCII text les. You may even use the Bloodshed Dev-C++ 5 compiler/IDE software to view, modify and save ASCII text les; after all, our source code les are ASCII text les with a special extension of .cpp • Open your Lab 02 test data text le. Modify the text le as appropriate. Use your test data and step through your pseudocode. Does everything seem to work? Have you missed something? • When you are satised that you have your program plan and test data completed, close your text les. That's right, I said, Save and close your text les. Files should be properly closed before being used by other software and this includes the Operating System software that moves, copies and renames les. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 2.4.6 Problems 2.4.6.1 Problem 02a Instructions Create simple IPO pseudocode to solve the following: 6See the le at http://cnx.org/content/m22453/latest/Solution_Lab_01_Pseudocode.txt 7See the le at http://cnx.org/content/m22453/latest/Solution_Lab_01_Test_Data.txt
  • 39. 31 Problem: I have a friend who is visiting from Europe and he does not understand exactly how much gas he is buying for his car. We need to write a program that allows him to enter the gallons of gas and convert it to liters (metric system). NOTE: One US gallon equals 3.7854 liters. 2.4.6.2 Problem 02b Instructions Create test data for the following: Problem: A major restaurant sends a chef to purchase fruits and vegetables every day. Upon returning to the store the chef must enter two pieces of data for each item he purchased. The quantity (Example: 2 cases) and the price he paid (Example: $4.67). The program has a list of 20 items and after the chef enters the information, the program provides a total for the purchases for that day. You need to prepare test data for ve (5) items: apples, oranges, bananas, lettuce and tomatoes.
  • 40. 32 CHAPTER 2. 2. PROGRAM PLANNING DESIGN Solutions to Exercises in Chapter 2 Solution to Exercise 2.1 (p. 29) Answers: 1. false 2. false 3. false 4. true 5. true
  • 41. Chapter 3 3. Data Operators 3.1 Data Types in C++1 3.1.1 General Discussion Our interactions (inputs and outputs) of a program are treated in many languages as a stream of bytes. These bytes represent data that can be interpreted as representing values that we understand. Additionally, within a program we process this data in various ways such as adding them up or sorting them. This data comes in dierent forms. Examples include: yourname which is a string of characters; your age which is usually an integer; or the amount of money in your pocket which is usually a value measured in dollars and cents (something with a fractional part). A major part of understanding how to design and code programs in centered in understanding the types of data that we want to manipulate and how to manipulate that data. A type denes a set of values and a set of operations that can be applied on those values. The set of values for each type is known as the domain for that type. 2 The four major families of data include: • Nothing • Integer • Floating-point • Complex The C++ programming language identies ve data types as standard data types: • Void • Boolean • Character • Integer • Floating-point The standard data types and the complex data types within C++ have a series of attributes, which include: • C++ Reserved or Key Word • Domain the allowed values • Signage do they allow negative numbers or only positive numbers • Meaning i.e. What do they represent • Rules of Denition What special characters indicate the data type • Size in terms of the number of bytes of storage used in the memory 1This content is available online at http://cnx.org/content/m18653/1.11/. 2Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United States of America: Thompson Brooks/Cole, 2004) 33. 33
  • 42. 34 CHAPTER 3. 3. DATA OPERATORS • Operations Allowed i.e. Which operators can I use on the data type Placing some of the above into a summary table, we get: Family Data Type Reserved Word Represents Standard Type Nothing Null or nothing void No data Yes Integer Boolean bool Logical true and false Yes Integer Character char Single characters Yes Integer Integer int Whole numbers Yes Floating Point Floating Point oat Fractional num- bers Yes Complex String string A sequence (sting them along) of characters No Complex Array N/A A collection of ele- ments of the same data type No Complex Pointer N/A A value that points to a loca- tion (an address) within the data area No Table 3.1 The ve standard data types usually exist in most programming languages and act or behave similarly from language to language. Most courses of study for a programming course or language will explain the standard data types rst. After they are learned, the complex data types are introduced. The Boolean, character and integer data types are identied as belonging to the Integer Family. These data types are all represented by integer numbers and thus act or behave similarly. 3.1.2 Denitions Denition 3.1: data type Denes a set of values and a set of operations that can be applied on those values. Denition 3.2: date type families 1) Nothing 2) Integer 3) Floating-Point 4) Complex Denition 3.3: domain The set of allowed values for a data type. Denition 3.4: integer A data type representing whole numbers. Denition 3.5: oating point A data type representing numbers with fractional parts.
  • 43. 35 3.2 Identier Names3 3.2.1 Overview Within programming a variety of items are given descriptive names to make the code more meaningful to us as humans. These names are called Identier Names. Constants, variables, type denitions, functions, etc. when declared or dened are identied by a name. These names follow a set of rules that are imposed by: 1. the language's technical limitations 2. good programming practices 3. common industry standards for the language 3.2.2 Technical to Language • Use only allowable characters (for C++ the rst character alphabetic or underscore, can continue with alphanumeric or underscore) • Can't use reserved words • Length limit These attributes vary from one programming language to another. The allowable characters and reserved words will be dierent. The length limit refers to how many characters are allowed in an identier name and often is compiler dependent and may vary from compiler to compiler for the same language. However, all programming languages have these three technical rules. 3.2.3 Good Programming Techniques • Meaningful • Be case consistent Meaningful identier names make your code easier for another to understand. After all what does p mean? Is it pi, price, pennies, etc. Thus do not use cryptic (look it up in the dictionary) identier names. Some programming languages treat upper and lower case letters used in identier names as the same. Thus: pig and Pig are treated as the same identier name. Unknown to you the programmer, the compiler usually forces all identier names to upper case. Thus: pig and Pig both get changed to PIG. However not all programming languages act this way. Some will treat upper and lower case letters as being dierent things. Thus: pig and Pig are two dierent identier names. If you declare it as pig and then reference it in your code later as Pig you get a compiler error. To avoid the problem altogether, we teach students to be case consistent. Use an identier name only once and spell it (upper and lower case) the same way within your program. 3.2.4 Industry Rules ˆ Do not start with underscore (used for technical programming) ˆ variables in all lower case ˆ CONSTANTS IN ALL UPPER CASE These rules are decided by the industry (those who are using the programming language). The above rules were commonly used within the C programming language and have to large degree carried over to C++. 3This content is available online at http://cnx.org/content/m18692/1.4/.
  • 44. 36 CHAPTER 3. 3. DATA OPERATORS 3.2.5 Denitions Denition 3.6: reserved word Words that cannot be used by the programmer as identier names because they already have a specic meaning within the programming language. 3.3 Constants and Variables4 3.3.1 Understanding Constants Various textbooks describe constants using dierent terminology. Added to the complexity are the explana- tions from various industry professionals will vary greatly. Let's see if we can clear it up. A constant is a data item whose value cannot change during the program's execution. Thus, as its name implies their value is constant. A variable is a data item whose value can change during the program's execution. Thus, as its name implies their value can vary. Constants are used in three ways within C++. They are: 1. literal constant 2. dened constant 3. memory constant A literal constant is a value you type into your program wherever it is needed. Examples include the constants used for initializing a variable and constants used in lines of code: Example 3.1: Literal Constants int age = 21; char grade = 'A'; float money = 12.34; bool rich = false; cout nStudents love computers; age = 57; Additionally, we have learned how to recognize the data types of literal constants. Single quotes for char, double quotes for string, number without a decimal point for integer, number with a decimal point belongs to the oating-point family, and Boolean can use the reserved words of true or false. In addition to literal constants, most text books refer to either symbolic constants or named constants but these two refer to the same concept. A symbolic constant is represented by a name similar to how we name variables. Let's say it backwards; the identier name is the symbol that represents the data item. Within C++ identier names have some rules. One of the rules says those names should be meaningful. Another rule about using ALL CAPS FOR CONSTANTS is an industry rule. There are two ways to create symbolic or named constants: #define PI 3.14159 Called a dened constant because it uses a textual substitution method controlled by the compiler pre-processor command word dene. const double PI = 3.14159; 4This content is available online at http://cnx.org/content/m18719/1.7/.
  • 45. 37 The second one is called sometimes called constant variable but that name is contradictory all by itself. How can it be constant and vary at the same time? The better name for the second one is a memory constant because they have a specic storage location in memory. 3.3.2 Dening Constants and Variables In the above examples we see how to dene both variables and constants along with giving them an initial value. Memory constants must be assigned a value when they are dened. But variables do not have to be assigned initial values. int height; float value_coins; Variables once dened may be assigned a value within the instructions of the program. height = 72; value_coins = 2 * 0.25 + 3 * 0.05; 3.3.3 Denitions Denition 3.7: constant A data item whose value cannot change during the program's execution. Denition 3.8: variable A data item whose value can change during the program's execution. 3.4 Data Manipulation5 3.4.1 Introduction Single values by themselves are important; however we need a method of manipulating values (processing data). Scientists wanted an accurate machine for manipulating values. They wanted a machine to process numbers or calculate answers (that is compute the answer). Prior to 1950, dictionaries listed the denition of computers as humans that do computations. Thus, all of the terminology for describing data manipulation is math oriented. Additionally, the two fundamental data type families (the integer family and oating-point family) consist entirely of number values. 3.4.2 Denitions Denition 3.9: expression A valid sequence of operand(s) and operator(s) that reduces (or evaluates) to a single value. Denition 3.10: operator A language-specic syntactical token (usually a symbol) that causes an action to be taken on one or more operands. Denition 3.11: operand A value that receives the operator's action. Denition 3.12: precedence Determines the order in which the operators are allowed to manipulate the operands. Denition 3.13: associativity Determines the order in which the operators of the same precedence are allowed to manipulate the operands. 5This content is available online at http://cnx.org/content/m18705/1.5/.
  • 46. 38 CHAPTER 3. 3. DATA OPERATORS Denition 3.14: evaluation The process of applying the operators to the operands and resulting in a single value. Denition 3.15: parentheses Change the order of evaluation in an expression. You do what's in the parentheses rst. 3.4.3 An Expression Example with Evaluation Let's look at an example: 2 + 3 * 4 + 5 is our expression but what does it equal? 1. the symbols of + meaning addition and * meaning multiplication are our operators 2. the values 2, 3, 4 and 5 are our operands 3. precedence says that multiplication is higher than addition 4. thus, we evaluate the 3 * 4 to get 12 5. now we have: 2 + 12 + 5 6. the associativity rules say that addition goes left to right, thus we evaluate the 2 +12 to get 14 7. now we have: 14 + 5 8. nally, we evaluate the 14 + 5 to get 19; which is the value of the expression Parentheses would change the outcome. (2 + 3) * (4 + 5) evaluates to 45. Parentheses would change the outcome. (2 + 3) * 4 + 5 evaluates to 25. 3.4.4 Precedence of Operators Chart Each computer language has some rules that dene precedence and associativity. They often follow rules we may have already learned. Multiplication and division come before addition and subtraction is a rule we learned in grade school. This rule still works. The precedence rules vary from one programming language to another. You should refer to the reference sheet that summarizes the rules for the language that you are using. It is often called a Precedence of Operators Chart. You should review this chart as needed when evaluating expressions. A valid expression consists of operand(s) and operator(s) that are put together properly. Why the (s)? Some operators are: 1. Unary that is only have one operand 2. Binary that is have two operands, one on each side of the operator 3. Trinary which has two operator symbols that separate three operands Most operators are binary, that is they require two operands. Within C++ there is only one trinary operator, the conditional. All of the unary operators are on the left side of the operand, except postx increment and postx decrement. Some precedence charts indicate of which operators are unary and trinary and thus all others are binary. 3.5 Assignment Operator6 3.5.1 Discussion The assignment operator allows us to change the value of a modiable data object (for beginning programmers this typically means a variable). It is associated with the concept of moving a value into the storage location (again usually a variable). Within C++ programming language the symbol used is the equal symbol. But bite your tongue, when you see the = symbol you need to start thinking: assignment. The assignment operator has two operands. The one to the left of the operator is usually an identier name for a variable. The one to the right of the operator is a value. 6This content is available online at http://cnx.org/content/m18725/1.2/.
  • 47. 39 Example 3.2: Simple Assignment int age; // variable set up then later in the program age = 21; The value 21 is moved to the memory location for the variable named: age. Another way to say it: age is assigned the value 21. Example 3.3: Assignment with an Expression int total_cousins; // variable set up then later in the program cousins = 4 + 3 + 5 + 2; The item to the right of the assignment operator is an expression. The expression will be evaluated and the answer is 14. The value 14 would assigned to the variable named: total_cousins. Example 3.4: Assignment with Identier Names in the Expression int students_period_1 = 25; // variable set up with initialization int students_period_2 = 19; int total_students; then later in the program total_students = students_period_1 + students_period_2; The expression to the right of the assignment operator contains some identier names. The program would fetch the values stored in those variables; add them together and get a value of 44; then assign the 44 to the total_students variable. 3.5.2 Denitions Denition 3.16: assignment An operator that changes the value of a modiable data object. 3.6 Arithmetic Operators7 3.6.1 General Discussion An operator performs an action on one or more operands. The common arithmetic operators are: 7This content is available online at http://cnx.org/content/m18706/1.3/.
  • 48. 40 CHAPTER 3. 3. DATA OPERATORS Action C ++ operator symbol Addition + Subtraction - Multiplication * Division / Modulus (associated with integers) % Table 3.2 These arithmetic operators are binary that is they have two operands. The operands may be either constants or variables. age + 1 This expression consists of one operator (addition) which has two operands. The rst is represented by a variable named age and the second is a literal constant. If age had a value of 14 then the expression would evaluate (or be equal to) 15. These operators work as you have learned them throughout your life with the exception of division and modulus. We normally think of division as resulting in an answer that might have a fractional part (a oating-point data type). However, division when both operands are of the integer data type act dierently. Please refer to the supplemental materials on Integer Division and Modulus. 3.7 Data Type Conversions8 3.7.1 Overview Changing a data type of a value is referred to as type conversion. There are two ways to do this: 1. Implicit the change is implied 2. Explicit the change is explicitly done with the cast operator The value being changed may be: 1. Promotion going from a smaller domain to a larger domain 2. Demotion going from a larger domain to a smaller domain 3.7.2 Implicit Type Conversion Automatic conversion of a value from one data type to another by a programming language, without the programmer specically doing so, is called implicit type conversion. It happens when ever a binary operator has two operands of dierent data types. Depending on the operator, one of the operands is going to be converted to the data type of the other. It could be promoted or demoted depending on the operator. Example 3.5: Implicit Promotion 55 + 1.75 8This content is available online at http://cnx.org/content/m18744/1.6/.
  • 49. 41 In this example the integer value 55 is converted to a oating-point value (most likely double) of 55.0. It was promoted. Example 3.6: Implicit Demotion int money; // variable set up then later in the program money = 23.16; In this example the variable money is an integer. We are trying to move a oating-point value 23.16 into an integer storage location. This is demotion and the oating-point value usually gets truncated to 23. 3.7.3 Promotion Promotion is never a problem because the lower data type (smaller range of allowable values) is sub set of the higher data type (larger range of allowable values). Promotion often occurs with three of the standard data types: character, integer and oating-point. The allowable values (or domains) progress from one type to another. That is the character data type values are a sub set of integer values and integer values are a sub set of oating-point values; and within the oating-point values: oat values are a sub set of double. Even though character data represent the alphabetic letters, numeral digits (0 to 9) and other symbols (a period, $, comma, etc.) their bit pattern also represent integer values from 0 to 255. This progression allows us to promote them up the chain from character to integer to oat to double. 3.7.4 Demotion Demotion represents a potential problem with truncation or unpredictable results often occurring. How do you t an integer value of 456 into a character value? How do you t the oating-point value of 45656.453 into an integer value? Most compilers give a warning if it detects demotion happening. A compiler warning does not stop the compilation process. It does warn the programmer to check to see if the demotion is reasonable. If I calculate the number of cans of soup to buy based on the number of people I am serving (say 8) and the servings per can (say 2.3), I would need 18.4 cans. I might want to demote the 18.4 into an integer. It would truncate the 18.4 into 18 and because the value 18 is within the domain of an integer data type, it should demote with the truncation side eect. If I tried demoting a double that contained the number of stars in the Milky Way galaxy into an integer, I might have a get an unpredictable result (assuming the number of stars is larger than allowable values within the integer domain). 3.7.5 Explicit Type Conversion Most languages have a method for the programmer to change or cast a value from one data type to another; called explicit type conversion. Within C++ the cast operator is a unary operator; it only has one operand and the operand is to the right of the operator. The operator is a set of parentheses surrounding the new data type. Example 3.7: Explicit Demotion with Truncation (int) 4.234 This expression would evaluate to: 4.
  • 50. 42 CHAPTER 3. 3. DATA OPERATORS 3.7.6 Demonstration Program in C++ 3.7.6.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 3.7.6.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Data_Type_Conversions.cpp 9 3.7.7 Denitions Denition 3.17: implicit A value that has its data type changed automatically. Denition 3.18: explicit Changing a value's data type with the cast operator. Denition 3.19: promotion Going from a smaller domain to a larger domain. Denition 3.20: demotion Going from a larger domain to a smaller domain. Denition 3.21: truncation The fractional part of a oating-point data type that is dropped when converted to an integer. 3.8 Practice 3: Data Operators10 3.8.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Understand basic data types and how operators manipulate data. 3. Given pseudocode and test data documents, write the C++ code for a program 3.8.2 Memory Building Activities Link to: MBA 03 11 9See the le at http://cnx.org/content/m18744/latest/Demo_Data_Type_Conversions.cpp 10This content is available online at http://cnx.org/content/m22455/1.1/. 11See the le at http://cnx.org/content/m22455/latest/index.html
  • 51. 43 3.8.3 Exercises Exercise 3.1 (Solution on p. 45.) Answer the following statements as either true or false: 1. A data type denes a set of values and the set of operations that can be applied on those values. 2. Reserved or key words can be used as identier names. 3. The concept of precedence says that some operators (like multiplication and division) are to be executed before other operators (like addition and subtraction). 4. An operator that needs two operands, will promote one of the operands as needed to make both operands be of the same data type. 5. Parentheses change the precedence of operators. 3.8.4 Miscellaneous Items Link to: Manipulation of Data Part 1 12 3.8.5 Lab Assignment 3.8.5.1 Creating a Folder or Sub-Folder for Chapter 03 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_03 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 3.8.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Solution_Lab_03_Pseudocode.txt 13 Download from Connexions: Solution_Lab_03_Test_Data.txt 14 3.8.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Navigate to your sub-folder: Chapter_03 and open and study the two les. • We have learned that a fundamental concept of interaction with computers is to divide the problem/task into three parts input, processing and output. This problem is simple and we will use the IPO (input processing output) approach again. However this time we are going to think about it backwards. • What output do I want displayed? 12See the le at http://cnx.org/content/m22455/latest/Manipulation_Data_Part_1.pdf 13See the le at http://cnx.org/content/m22455/latest/Solution_Lab_03_Pseudocode.txt 14See the le at http://cnx.org/content/m22455/latest/Solution_Lab_03_Test_Data.txt
  • 52. 44 CHAPTER 3. 3. DATA OPERATORS • Number of gallons of paint • Total cost of the paint • Thus, what calculations do I need to make? • Total cost of the paint is the Number of gallons needed times price per gallon • Number of gallons needed is the Total area to be covered (let's use square feet) divided by the coverage per gallon of paint (Note: you must round up to the next full gallon of paint.) • Total area to be covered is the Length times height times 2 added to the width times height times 2 • Which leads us to, what data do I need as input? • Price of a gallon of paint • Number of square feet that a gallon will cover • Length of the house • Width of the house • Height of the house • You can see that by working the logic backwards, we can start to completely see what the program must do. We need to enter some data (input), do some calculations (process) and display the results (output). • Copy into your sub-folder: Chapter_03 one of the source code listings that we have used (we suggest the Lab 01 source code) and rename the copy to: Lab_03.cpp • Modify the code to follow the Solution_Lab_03_Pseudocode.txt le. • I am just going to give you the line of code for rounding up to the next whole gallon of paint (See the Data Type Conversions module within Chapter 3 of the Connexions materials. Do you understand why it works?). • total_gal_paint = total_area / coverage_gal_paint + 0.9999; • Build (compile and run) your program. You have successfully written this program when it runs with your test data and gives the predicted results. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 3.8.6 Problems 3.8.6.1 Problem 03a Instructions Write the C++ code to do the following pseudocode example. Example 3.8: pseudocode Prompt the user for his monthly income. Get the users monthly income. Multiply the monthly income by 12. Display the annual income. Pause the program so the user can see the answer. (HINT: You may call a function.)
  • 53. 45 Solutions to Exercises in Chapter 3 Solution to Exercise 3.1 (p. 43) Answers: 1. true 2. false 3. true 4. true 5. false Parentheses change the order of evaluation in an expression.
  • 54. 46 CHAPTER 3. 3. DATA OPERATORS
  • 55. Chapter 4 4. Often Used Data Types 4.1 Integer Data Type1 4.1.1 General Discussion The integer data type has two meanings: • The integer data type with its various modiers that create dierent domains • The integer family which also includes the Boolean and character data types The integer data type basically represents whole numbers (no fractional parts). The integer values jump from one value to another. There is nothing between 6 and 7. It could be asked why not make all your numbers oating point which allow for fractional parts. The reason is twofold. First, some things in the real world are not fractional. A dog, even with only 3 legs, is still one (1) dog not ¾ of a dog. Second, integer data type is often used to control program ow by counting, thus the need for a data type that jumps from one value to another. The integer data type has the same attributes and acts or behaves similarly in all programming languages. The most often used integer data type in C++ is the simple integer. C++ Reserved Word int Represent Whole numbers (no fractional parts) Size Usually 4 bytes Normal Signage Signed (negative and positive values) Domain (Values Allowed) -2,147,483,648 to 2, 147,483,647 C++ syntax rule Do not start with a 0 (zero) C++ syntax rule No decimal point Table 4.1 Within C++ there are various reserved words that can be used to modify the size or signage of an integer. They include: long, short, signed and unsigned. Signed is rarely used because integers are signed by default you must specify unsigned if you want integers that are only positive. Possible combinations are: 1This content is available online at http://cnx.org/content/m18654/1.5/. 47
  • 56. 48 CHAPTER 4. 4. OFTEN USED DATA TYPES C++ Reserved Word Combination Signage short int signed unsigned short int unsigned int signed unsigned int unsigned long int singed unsigned long int unsigned Table 4.2 The domain of each of the above data type options varies with the complier being used and the computer. The domains vary because the byte size allocated to the data varies with the compiler and computer. This eect is known as being machine dependent. Additionally, there have been some size changes with upgrades to the language. In C the int data type was allocated 2 bytes of memory storage on an Intel compatible central processing unit (cpu) machine. In C++ an int is allocated 4 bytes. These variations of the integer data type are an annoyance in C++ for a beginning programmer. For a beginning programmer it is more important to understand the general attributes of the integer data type that apply to most programming languages. 4.1.2 Denitions Denition 4.1: machine dependent An attribute of a programming language that changes depending on the computer's CPU. 4.2 Floating-Point Data Type2 4.2.1 General Discussion The oating-point data type is a family of data types that act alike and dier only in the size of their domains (the allowable values). The oating-point family of data types represent number values with fractional parts. They are technically stored as two integer values: a mantissa and an exponent. The oating-point family has the same attributes and acts or behaves similarly in all programming languages. They can always store negative or positive values thus they always are signed; unlike the integer data type that could be unsigned. The domain for oating-point data types varies because they could represent very large numbers or very small numbers. Rather than talk about the actual values, we mention the precision. The more bytes of storage the larger the mantissa and exponent, thus more precision. The most often used oating-point family data type used in C++ is the double. By default, most compilers convert oating-point constants into the double data type for use in calculations. The double data type will store just about any number most beginning programmers will ever encounter. 2This content is available online at http://cnx.org/content/m18657/1.5/.
  • 57. 49 C++ Reserved Word double Represent Numbers with fractional parts Size Usually 8 bytes Storage two parts (always treated together)a mantissa and an exponent Normal Signage Signed (negative and positive values) Domain (Values Allowed) ±1.7E-308 to ±1.7E308 C++ syntax rule the presence of a decimal point means it's oating-point data Table 4.3 Within C++ there are various reserved words that can be used to establish the size in bytes of a oating- point data item. More bytes mean more precision: C++ Reserved Word Size oat 4 bytes double 8 bytes long double 10 to 12 bytes (varies by machine) Table 4.4 The domain of each of the above data type options varies with the complier being used and the computer. The domains vary because the byte size allocated to the data varies with the compiler and computer. This eect is known as being machine dependent. These variations of the oating-point family of data types are an annoyance in C++ for a beginning programmer. For a beginning programmer it is more important to understand the general attributes of the oating-point family that apply to most programming languages. 4.2.2 Denitions Denition 4.2: double The most often used oating-point family data type used in C++. Denition 4.3: precision The eect on the domain of oating-point values given a larger or smaller storage area in bytes. Denition 4.4: mantissa exponent The two integer parts of a oating-point value. 4.3 String Data Type3 4.3.1 General Discussion Technically, there is no string data type in the C++ programming language. However, the concept of a string data type makes it easy to handle stings of character data. A single character has some limitations. Many data items are not integers or oating-point values. The message Hi Mom! is a good example of a string. Thus, the need to handle a series of characters as a single piece of data (in English correctly called a datum). 3This content is available online at http://cnx.org/content/m18656/1.5/.
  • 58. 50 CHAPTER 4. 4. OFTEN USED DATA TYPES In the C programming language all string were handled as an array of characters that end in an ASCII null character (the value 0 or the rst character in the ASCII character code set). Associated with object oriented programming the string class has been added to C++ as a standard part of the programming language. This changed with the implementation with strings being stored as a length controlled item with a maximum length of 255 characters. Included in the C++ string class is the reserved word of string as if it were a data type. Some basics about strings include: C++ Reserved Word string Represent Series of characters (technically an array) Size Varies in length Normal Signage N/A Domain (Values Allowed) Extended ASCII Character Code Set C++ syntax rule Double quote marks for constants Table 4.5 For now, we will address only the use of strings as constants. Most modern compliers that are part of an Integrated Development Environment (IDE) will color the source code to help the programmer see dierent features more readily. Beginning programmers will use string constants to send messages to the monitor. A typical line of C++ code: cout Hi Mom!; would have the Hi Mom colored (usually red) to emphasize that the item is a string. 4.3.2 Denitions Denition 4.5: string A series or array of characters as a single piece of data. 4.4 Arithmetic Assignment Operators4 4.4.1 Overview of Arithmetic Assignment The ve arithmetic assignment operators are a form of short hand. Various textbooks call them com- pound assignment operators or combined assignment operators. Their usage can be explaned in terms of the assignment operator and the arithmetic operators. In the table we will use the variable age and you can assume that it is of integer data type. Arithmetic assignment examples: Equivalent code: age += 14; age = age + 14; age -= 14; age = age - 14; continued on next page 4This content is available online at http://cnx.org/content/m18743/1.6/.
  • 59. 51 age *= 14; age = age * 14; age /= 14; age = age / 14; age %= 14; age = age % 14; Table 4.6 4.4.2 Demonstration Program in C++ 4.4.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 4.4.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Arithmetic_Assignment.cpp 5 4.5 Lvalue and Rvalue6 4.5.1 Discussion They refer to on the left and right side of the assignment operator. The Lvalue (pronounced: L value) concept refers to the requirement that the operand on the left side of the assignment operator is modiable, usually a variable. Rvalue concept pulls or fetches the value of the expression or operand on the right side of the assignment operator. Some examples: Example 4.1 int age; // variable set up then later in the program age = 39; The value 39 is pulled or fetched (Rvalue) and stored into the variable named age (Lvalue); destroying the value previously stored in that variable. Example 4.2 5See the le at http://cnx.org/content/m18743/latest/Demo_Arithmetic_Assignment.cpp 6This content is available online at http://cnx.org/content/m18058/1.11/.
  • 60. 52 CHAPTER 4. 4. OFTEN USED DATA TYPES int age; // variable set up int voting_age = 18; // variable set up with initialization then later in the program age = voting_age; If the expression has a variable or named constant on the right side of the assignment operator, it would pull or fetch the value stored in the variable or constant. The value 18 is pulled or fetched from the variable named voting_age and stored into the variable named age. Example 4.3 age 17; If the expression is a test expression or Boolean expression, the concept is still an Rvalue one. The value in the identier named age is pulled or fetched and used in the relational comparison of less than. Example 4.4 const int JACK_BENNYS_AGE = 39; // constant set up then later in the program JACK_BENNYS_AGE = 65; This is illegal because the identier JACK_BENNYS_AGE does not have Lvalue properties. It is not a modiable data object, because it is a constant. Some uses of the Lvalue and Rvalue can be confusing. Example 4.5 int oldest = 55; // variable set up with initialization then later in the program age = oldest++; Postx increment says to use my existing value then when you are done with the other operators; increment me. Thus, the rst use of the oldest variable is an Rvalue context where the existing value of 55 is pulled or fetched and then assigned to the variable age; an Lvalue context. The second use of the oldest variable is an Lvalue context where in the value of oldest is incremented from 55 to 56. 4.5.2 Denitions Denition 4.6: Lvalue The requirement that the operand on the left side of the assignment operator is modiable, usually a variable. Denition 4.7: Rvalue Pulls or fetches the value stored in a variable or constant.
  • 61. 53 4.6 Integer Division and Modulus7 4.6.1 Overview of Integer Division and Modulus By the time we reach adulthood, we normally think of division as resulting in an answer that might have a fractional part (a oating-point data type). This type of division is known as oating-point division. However, division when both operands are of the integer data type acts dierently on most computers and is called: integer division. Within the C++ programming language the following expression does not give the answer of 2.75 or 2 ¾. Example 4.6 11 / 4 Because both operands are of the integer data type the evaluation of the expression (or answer) would be 2 with no fractional part (it gets thrown away). Again, this type of division is call integer division and it is what you learned in grade school the rst time you learned about division. Denition 4.8: integer division Division with no fractional parts. Figure 4.1: Integer division as learned in grade school. In the real world of data manipulation there are some things that are always handled in whole units or numbers (integer data type). Fractions just don't exist. To illustrate our example: I have 11 dollar coins to distribute equally to my 4 children. How many do they each get? Answer is 2 with me still having 3 left over (or with 3 still remaining in my hand). The answer is not 2 ¾ each or 2.75 for each child. The dollar coins are not divisible into fractional pieces. Don't try thinking out of the box and pretend you're a pirate. Using an axe and chopping the 3 remaining coins into pieces of eight. Then, giving each child 2 coins and 6 pieces of eight or 2 6/8 or 2 ¾ or 2.75. If you do think this way, I will change my example to cans of tomato soup. I dare you to try and chop up three cans of soup and give each kid ¾ of a can. Better yet, 7This content is available online at http://cnx.org/content/m18717/1.12/.
  • 62. 54 CHAPTER 4. 4. OFTEN USED DATA TYPES living things like puppy dogs. After you divide them up with an axe, most children will not want the ¾ of a dog. What is modulus? It's the other part of the answer for integer division. It's the remainder. Remember in grade school you would say, Eleven divided by four is two remainder three. In C++ programming language the symbol for the modulus operator is the percent sign (%). Example 4.7 11 % 4 Thus, the answer or value of this expression is 3 or the remainder part of integer division. Denition 4.9: modulus The remainder part of integer division. Many compilers require that you have integer operands on both sides of the modulus operator or you will get a compiler error. In other words, it does not make sense to use the modulus operator with oating-point operands. Don't let the following items confuse you. Example 4.8 6 / 24 which is different from 6 % 24 How many times can you divide 24 into 6? Six divied by 24 is zero. This is dierent from: What is the remainder of 6 divided by 24? Six, the remainder part given by modulus. Exercise 4.1 (Solution on p. 57.) Evaluate the following division expressions: 1. 14 / 4 2. 5 / 13 3. 7 / 2.0 Exercise 4.2 (Solution on p. 57.) Evaluate the following modulus expressions: 1. 14 % 4 2. 5 % 13 3. 7 % 2.0 4.6.2 Demonstration Program in C++ 4.6.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate.
  • 63. 55 4.6.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Following the methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Integer_Division_and_Modulus.cpp 8 4.7 Practice 4: Often Used Data Types9 4.7.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Design a program, to include: understanding the problem, completing Internet research as appropriate, create a pseudocode document and create a test data document. 3. Write the C++ code for a program using appropriate planning documentation that you or another has designed. 4.7.2 Memory Building Activities Link to: MBA 04 10 4.7.3 Exercises Exercise 4.3 (Solution on p. 57.) Answer the following statements as either true or false: 1. Integer data types are stored with a mantissa and an exponent. 2. Strings are identied by single quote marks. 3. An operand is a value that receives the operator's action. 4. Arithmetic assignment is a shorter way to write some expressions. 5. Integer division is rarely used in computer programming. 4.7.4 Miscellaneous Items None at this time. 4.7.5 Lab Assignment 4.7.5.1 Creating a Folder or Sub-Folder for Chapter 04 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: 8See the le at http://cnx.org/content/m18717/latest/Demo_Integer_Division_and_Modulus.cpp 9This content is available online at http://cnx.org/content/m22456/1.1/. 10See the le at http://cnx.org/content/m22456/latest/index.html
  • 64. 56 CHAPTER 4. 4. OFTEN USED DATA TYPES • Chapter_04 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 4.7.5.2 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • The Problem/Task I have a friend who is visiting from Europe and he does not understand Fahrenheit temperatures. We need to write a program that allows him to enter the temperature in Fahrenheit (as announced on TV or radio) and convert it to Celsius. Clue 1: Fahrenheit water freezes at 32 degrees and boils at 212 degrees. Celsius water freezes a zero (0) degrees and boils at 100 degrees. Google the internet (how to convert Fahrenheit to Celsius) if you need more help. Clue 2: You can also use Internet sites to do a conversion and thus create your test data. • You only need two variables in this program: Fahrenheit and Celsius both of which should be the integer data type. When you convert the Fahrenheit to Celsius you will need to use a oating-point expression doing oating-point calculations for precision. Additionally we want to round up or down the Celsius answer by adding 0.5 to the calculation expression. • Within your sub-folder: Chapter_04 you will need to create three les: Lab_04_Pseudocode.txt and Lab_04_Test_Data.txt and Lab_04.cpp NOTE: It will be easier to copy some previous les from another assignment and use those copies by renaming them and modifying them as appropriate. The professor is expecting the items you create to have a similar format to those we have been using in the course. • Create your pseudocode, test data and source code les. • Build (compile and run) your program. You have successfully written this program when it runs with your test data and gives the predicted results. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 4.7.6 Problems 4.7.6.1 Problem 04a Instructions Decide on the data type and identier names for the following: Problem: A men's clothing store that caters to the very rich wants to create a data base for its customers that records clothing measurements. They need to record information for shoes, socks, pants, dress shirts and casual shirts. HINT: You may need more than 5 data items.
  • 65. 57 Solutions to Exercises in Chapter 4 Solution to Exercise 4.1 (p. 54) Answers: 1. 3 2. 0 3. 3.5 because one of the operands is a oating-point value, it is not integer division Solution to Exercise 4.2 (p. 54) Answers: 1. 2 2. 5 3. error because most compilers require both operands to be of the integer data type Solution to Exercise 4.3 (p. 55) Answers: 1. false 2. false 3. true 4. true 5. false
  • 66. 58 CHAPTER 4. 4. OFTEN USED DATA TYPES
  • 67. Chapter 5 5. Integrated Development Environment 5.1 Integrated Development Environment1 5.1.1 IDE Overview High-level language programs are usually written (coded) as ASCII text into a source code le. A unique le extension (Examples: .asm .cob .for .pas .c .cpp) is used to identify it as a source code le. As you can guess for our examples Assembly, COBOL, FORTRAN, Pascal, C and C++ however, they are just ASCII text les (other text les usually use the extension of .txt). The source code produced by the programmer must be converted to an executable machine code le specically for the computer's CPU (usually an Intel or Intel compatible CPU within today's world of micro computers). There are several steps in getting a program from its source code stage to running the program on your computer. Historically, we had to use several software programs (a text editor, a compiler, a linker and operating system commands) to make the conversion and run our program. However, today all those software programs with their associated tasks have been integrated into one program usually called a compiler. However, this one compiler program is really many software items that create an environment used by programmers to develop software. Thus the name: Integrated Development Environment or IDE. The following gure shows the progression of activity in an IDE as a programmer enters the source code and then directs the IDE to compile and run the program. 1This content is available online at http://cnx.org/content/m18920/1.8/. 59
  • 68. 60 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT Figure 5.1: Integrated Development Environment or IDE Upon starting the IDE software the programmer usually indicates he wants to open a le for editing as source code. As they make changes they might either do a save as or save. When they have nished entering the source code, they usually direct the IDE to compile run the program. The IDE does the following steps: 1. If there are any unsaved changes to the source code le it has the test editor save the changes. 2. The compiler opens the source code le and does its rst step which is executing the pre-processor compiler directives and other steps needed to get the le ready for the second step. The #include will insert header les into the code at this point. If it encounters an error, it stops the process and returns the user to the source code le within the text editor with an error message. If no problems encountered it saves the source code to a temporary le called a translation unit. 3. The compiler opens the translation unit le and does its second step which is converting the programming language code to machine instructions for the CPU, a data area and a list of items to be resolved by the linker. Any problems encounted (usually a syntax or violation of the programming language rules) stops the process and returns the user to the source code le within the text editor with an error message. If no problems encountered it saves the machine instructions, data area and linker resolution list as an object le.
  • 69. 61 4. The linker opens the program object le and links it with the library object les as needed. Unless all linker items are resolved, the process stops and returns the user to the source code le within the text editor with an error message. If no problems encountered it saves the linked objects as an executable le. 5. The IDE directs the operating system's program called the loader to load the executable le into the computer's memory and have the Central Processing Unit (CPU) start processing the instructions. As the user interacts with the program, entering his test data, he might discover that the outputs are not correct. These types of errors are called logic errors and would require him to return to the source code to change the algorithm. 5.1.2 Resolving Errors Despite our best eorts at becoming perfect programmers, we will create errors. Solving these errors is known as debugging your program. The three types of errors in the order that they occur are: 1. Compiler 2. Linker 3. Logic There are two types of compiler errors; pre-processor (1st step) and conversion (2nd step). A review of Figure 1 above shows the four arrows returning to the source code so that the programmer can correct the mistake. During the conversion (2nd step) the complier might give a warning message which in some cases may not be a problem to worry about. For example: Data type demotion may be exactly what you want your program to do, but most compilers give a warning message. Warnings don't stop the compiling process but as their name implies, they should be reviewed. The next three gures show IDE monitor interaction for the Bloodshed Dev-C++ 5 compiler/IDE.
  • 70. 62 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT Figure 5.2: Compiler Error (the red line is where the complier stopped)
  • 71. 63 Figure 5.3: Linker Error (no red line with an error message describing linking problem)
  • 72. 64 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT Figure 5.4: Logic Error (from the output within the Black Box area) 5.1.3 Demonstration Program in C++ 5.1.3.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 5.1.3.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Pre_Processor_Compiler_Errors.cpp 2 Download from Connexions: Demo Compiler_Conversion_Errors.cpp 3 2See the le at http://cnx.org/content/m18920/latest/Demo_Pre_Processor_Compiler_Errors.cpp 3See the le at http://cnx.org/content/m18920/latest/Demo_Compiler_Conversion_Errors.cpp
  • 73. 65 Download from Connexions: Demo_Linker_Errors.cpp 4 Download from Connexions: Demo_Logic_Errors.cpp 5 5.1.4 Denitions Denition 5.1: text editor A software program for creating and editing ASCII text les. Denition 5.2: compiler Converts source code to object code. Denition 5.3: pre-processor The rst step the complier does in converting source code to object code. Denition 5.4: linker Connects or links object les into an executable le. Denition 5.5: loader Part of the operating system that loads executable les into memory and direct the CPU to start running the program. Denition 5.6: debugging The process of removing errors from a program. 1) compiler 2) linker 3) logic Denition 5.7: warning A compiler alert that there might be a problem. 5.2 Standard Input and Output6 5.2.1 General Discussion Every task we have the computer do happens inside the central processing unit (CPU) and the associated memory. Once our program is loaded into memory and the operating system directs the CPU to start executing our programming statements the computer looks like this: 4See the le at http://cnx.org/content/m18920/latest/Demo_Linker_Errors.cpp 5See the le at http://cnx.org/content/m18920/latest/Demo_Logic_Errors.cpp 6This content is available online at http://cnx.org/content/m18835/1.3/.
  • 74. 66 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT Figure 5.5: CPU Memory Input/Output Devices Our program now located in the memory has basically two areas: • Machine instructions our instructions for what we want done • Data storage our variables that we using in our program Often our program contains instructions to interact with the input/output devices. We need to move data into (read) and/or out of (write) the memory data area. A device is a piece of equipment that is electronically connected to the memory so that data can be transferred between the memory and the device. Historically this was done with punched cards and printouts. Tape drives were used for electronic storage. With time we migrated to using disk drives for storage with keyboards and monitors (with monitor output called soft copy) replacing punch cards and printouts (called hard copy). Most computer operating systems and by extension programming languages have identied the keyboard as the standard input device and the monitor as the standard output device. Often the keyboard and monitor are treated as the default device when no other specic device is indicated.
  • 75. 67 5.2.2 Standard I/O within C++ The developers of the C++ programming language decided to provide some of the more technical code needed to interact with the operating system and the I/O devices. In the following example the include directive inserts a le that contains code from the Input-Output Stream library. This le contains necessary code to use cout and cin for sending data to the monitor or getting data from the keyboard. #include iostream You should think of cout and cin as being locations that you can send to or receive data from; similar in concept to any other variable storage location within the data area of our program. The C++ programming language has two operators to use in conjunction with I/O devices. Action C ++ operator symbol Used with insertion operator (write) (a pair of less than symbols) cout extraction operator (read) (a pair of greater than symbols) cin Table 5.1 Consider the following code: Example 5.1: Insertion and Extraction int age1; // variable set up then later on in our program cout nEnter the age of the first person ---: ; cin age1; Using the cout the programmer displays (or inserts) a prompting message on the monitor for the user to see. Using the cin the user types an integer value and hits the enter key and the computer extracts the value from the keyboard and stores it into the variable named age1. Within the computer all data are stored as numbers and thus part of the technical code provided by the developers of the C++ programming language that is within the Input-Output Stream library converts data from numbers to those symbols we are used to seeing as humans and vice versa. Example: If the user entered the numeral digits 57 and hit the enter key the extraction operator would convert the 57 into a binary number and move the binary number into the integer storage place named age1. The cout which uses the standard output device does not format the output into a Graphical User Interface (GUI) where you have a mouse to use. A modern operating system using GUI normally opens a black screen output box that would be similar to how the monitor was used when rst developed in the 1960's. That is the default of how cout is normally implemented by most compilers. The output message has a unique item worth mentioning. At the very front of the message is a backslash followed by the letter n. They do not get printed on the monitor. It is a special code (called a printer escape code) telling the printer to go to a new line. Printer! I thought we were using a monitor? We are but the code is a left over from the early days of printer output. The backslash tells the printer or monitor that the next letter is a command. The letter n is used for telling the printer or monitor to go to the front of a new line. 5.2.3 Denitions Denition 5.8: device A piece of equipment that is electronically connected to the memory so that data can be transferred between the memory and the device.
  • 76. 68 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT Denition 5.9: standard input The keyboard. Denition 5.10: standard output The monitor. Denition 5.11: insertion Aka writing or sending data to an output device. Denition 5.12: extraction Aka reading or getting data from an input device. Denition 5.13: escape code An code directing an output device to do something. 5.3 Compiler Directives7 5.3.1 General Discussion A compiler directive is an instruction to the compiler to complete a task before formally starting to compile the program, thus they are sometimes called pre-processor directives. Among other items, during the pre- processor step the compiler is looking for compiler directives and processes them as they are encountered. After completing the tasks as directed, the compiler proceeds to its second step where it checks for syntax errors (violations of the rules of the language) and converts the source code into an object code that contains machine language instructions, a data area, and a list of items to be resolved when he object le is linked to other object les. Within C++ the pound symbol or # as the rst character of a line indicates that the next word is a directive (or command word) to be evaluated. The two most common compiler directives are: 1. include with the item following include being the name of a le that is to be inserted at that place in the le. The les are often called Header Files because the include directive is normally inserted toward the top of the le (at the head) as one of the rst items. 2. dene with the item followed by an identier name and a value. This identier name and value is stored by the compiler and when it encounters the identier name in the program it substitutes the value for the identier name. In the following example the include directive is inserting a le that contains code from the Input-Output Stream library. This le contains necessary code to use cout and cin for sending data to the monitor or getting data from the keyboard. #include iostream In the next example the dene directive is being used to handle a constant (called a dened constant). Example 5.2: Subtituting PI #define PI 3.14159 ....Later on in the program when it encounters PI ....it will replace or substitute PI with the value 3.14159 ....For example: area_circle = radius * radius * PI; would become: area_circle = radius * radius * 3.14159; 7This content is available online at http://cnx.org/content/m18787/1.6/.
  • 77. 69 Of note, compiler directives in C++ do not have a semi-colon after them. Within C++ programming instructions or statements end with a semi-colon, but not compiler directives. 5.3.2 Denitions Denition 5.14: compiler directive An instruction to the compiler to complete a task before formally starting to compile the program. Denition 5.15: include A compiler directive to insert the contents of a le into the program. 5.4 Practice 5: Integrated Development Environment8 5.4.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Be able to list the categories and give examples of errors encountered when using an Integrated Devel- opment Environment (IDE). 3. Write the C++ code for a program using appropriate planning documentation that you or another has designed. 5.4.2 Memory Building Activities Link to: MBA 05 9 5.4.3 Exercises Exercise 5.1 (Solution on p. 72.) Answer the following statements as either true or false: 1. IDE means Integer Division Expression. 2. Most modern compilers are really an IDE type of software, not just a compiler. 3. cin and cout are used for the standard input and output in C++. 4. Programming errors are extremely easy to understand and x. 5. All C++ programs will have at least one include type of compiler directive. 5.4.4 Miscellaneous Items None at this time. 8This content is available online at http://cnx.org/content/m22457/1.1/. 9See the le at http://cnx.org/content/m22457/latest/index.html
  • 78. 70 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT 5.4.5 Lab Assignment 5.4.5.1 Creating a Folder or Sub-Folder for Chapter 05 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_05 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 5.4.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Solution_Lab_02_Pseudocode.txt 10 Download from Connexions: Solution_Lab_02_Test_Data.txt 11 5.4.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Copy into your sub-folder: Chapter_05 one of the source code listings that we have used. We suggest the Lab 01 source code and rename the copy: Lab_05.cpp • Modify the code to follow the Solution_Lab_02_Pseudocode.txt le. • Build (compile and run) your program. You have successfully written this program if when it runs and you use the test data [use the test data as supplied as the solution for Lab 02] it gives the predicted results. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 5.4.6 Problems 5.4.6.1 Problem 05a Instructions List and describe what might cause the four (4) types of errors encountered in a program using an Integrated Development Environment software product. 5.4.6.2 Problem 05b Instructions Identify four (4) problems with this code listing (HINT: The four (4) types of errors encountered in a program using an Integrated Development Environment software product). Example 5.3: C++ Source Code Listing //****************************************************** // Filename: Compiler_Test.cpp // Purpose: Average the ages of two people 10See the le at http://cnx.org/content/m22457/latest/Solution_Lab_02_Pseudocode.txt 11See the le at http://cnx.org/content/m22457/latest/Solution_Lab_02_Test_Data.txt
  • 79. 71 // Author: Ken Busbee; © Kenneth Leroy Busbee // Date: Jan 5, 2009 // Comment: Main idea is to be able to // debug and run a program on your compiler. //****************************************************** // Headers and Other Technical Items #include iostrern using namespace std; // Function Prototypes void pause(void); // Variables int age1; int age2; double answear; //****************************************************** // main //****************************************************** int main(void) { // Input cout nEnter the age of the first person ---: ; cin age1; cout nEnter the age of the second person --: ; cin age2; // Process answer = (age1 + age2) / 3.0; // Output cout nThe average of their ages is --------: ; cout answer; pause(); return 0; } //****************************************************** // End of Program //******************************************************
  • 80. 72 CHAPTER 5. 5. INTEGRATED DEVELOPMENT ENVIRONMENT Solutions to Exercises in Chapter 5 Solution to Exercise 5.1 (p. 69) Answers: 1. false 2. true 3. true 4. false 5. true
  • 81. Chapter 6 6. Program Control Functions 6.1 Pseudocode Examples for Functions1 6.1.1 Concept No standard for pseudocode syntax exists. However, there are some commonly followed conventions to help make pseudocode written by one programmer easily understood by another programmer. The following describes a method for using pseudocode for functions that would be understood by programmers. Five concepts are: • Use a beginning phrase word to start the function • Use a communication phrase word to identify the items being passed into the function • Use indentation to show the action part of the function • Use a communication phrase word to identify the items being passed out of the function • Use an ending phrase word to end the function • Use a calling phrase word to direct your program to use a fucntion The following is a suggested outline of function phrase words: Item/Purpose Starting Phrase Word Ending Phrase Word Beginning Function N/A Communication In Pass In: none Action N/A N/A Communication Out Pass Out: none Ending N/A Endfunction Calling a Function Call: none Table 6.1 6.1.2 Examples Here are some examples showing functions dened in pseudocode using our conventions as described above. Example 6.1: pseudocode: Function with no parameter passing 1This content is available online at http://cnx.org/content/m19136/1.6/. 73
  • 82. 74 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS Function clear monitor Pass In: nothing Direct the operating system to clear the monitor Pass Out: nothing Endfunction Example 6.2: pseudocode: Function with parameter passing Function delay program so you can see the monitor Pass In: integer representing tenths of a second Using the operating system delay the program Pass Out: nothing Endfunction Example 6.3: pseudocode: Function main calling the clear monitor function Function main Pass In: nothing Doing some lines of code Call: clear monitor Doing some lines of code Pass Out: value zero to the operating system Endfunction 6.1.3 Denitions Denition 6.1: phrase word Words used to make pseudocode logic clear to any reader. 6.2 Hierarchy or Structure Chart2 6.2.1 Overview The hierarchy chart (also known as a structure chart) shows the relationship of various units. Its name comes from its general use in showing the organization (or structure) of a business. The President at the top, then vice presidents on the next level, etc. Within the context of a computer program it shows the relationship between modules (or functions). Detail logic of the program is not presented. It does represent the organization of the functions used within the program showing which functions are calling on a subordinate function. Those above are calling those on the next level down. Hierarchy charts are created by the programmer to help document a program. They convey the big picture of the modules (or functions) used in a program. 2This content is available online at http://cnx.org/content/m18682/1.3/.
  • 83. 75 Figure 6.1: Hierarchy or Structure chart for a program that has ve functions. 6.2.2 Denitions Denition 6.2: hierarchy chart Convey the relationship or big picture of the various functions in a program. Denition 6.3: structure chart Another name for a hierarchy chart. 6.3 Program Control Functions3 6.3.1 Prerequisite Material Critical to this module is the review of several Connexions modules: 1. m_18861 Titled: Modularization and C++ Program Layout 3This content is available online at http://cnx.org/content/m19145/1.8/.
  • 84. 76 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS 2. m_19136 Titled: Pseudocode Examples for Functions 3. m_18682 Titled: Hierarchy or Structure Chart You should review these materials before proceeding. If you are viewing this module on-line, links to these items are in the Links box to your right. 6.3.2 Concept of Modularization The concept is everywhere present in the real world about us. Simply put it is to take a large compli- cated problem and to divide it into smaller manageable pieces. The hierarchy chart of any large organization (government unit, company, university, hospital, etc.) will show levels of people with job titles that indicate a dierent area of responsibility. Each person is a small piece of the overall workings of the organization. Each person can concentrate on their unique talent or task to make sure it works properly. Collectively they accomplish the goals of the organization. Additionally, the concept has been around for a long time. A village of 300 years ago had farmers, tailors, butchers, blacksmiths, etc. Manufacturing is a prime example of not just work being modularized but the product itself is viewed in terms of modules or systems (Example of a automobile: engine, steering, brakes, etc.). The world of computers, both hardware (equipment) and software (computer programs), also uses this modular concept. Thus, the concept migrates to a single computer program; allowing us to modularize the program into manageable tasks called functions. 6.3.3 Program Control Functions Program Control functions normally to do not communicate information to each other but use a common area for variable storage. The rules for how data is communicated in and out of a function vary greatly by programming language, but the concept is the same. The data items passed (or communicated) are called parameters. Thus the wording: parameter passing. However, with program control functions we use the data communication option of no communication in with no communication out. Our data variables and constants are placed in a common area available to all functions (called global scope). The identier names for program control functions usually imply a task to be accomplished, such as get-data, process-data or show-results. As you learn to write more complicated programs the number of lines of code will increase. Prudence dictates that it would be benecial to divide the program into functions that perform unique tasks. The larger the program the more need for modularization or creating of program control functions. Depending on the programming language, there is a formal way to: 1. dene a function (it's denition or the code it will execute)) 2. call a function 3. declare a function (a prototype is a declaration to a complier) One of the easier ways to understand program control function is to view an example. Even if you don't know the C++ programming language, you can study the materials to help understand the modularization process. 6.3.4 Demonstration Program in C++ 6.3.4.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs
  • 85. 77 If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 6.3.4.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on some of the links and select Save Target As in order to download some of the les. Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Program_Control_Functions_before_Compiler_Test.cpp 4 Download from Connexions: Demo_Program_Control_Functions_Pseudocode.txt 5 Download from Connexions: Demo_Program_Control_Functions_Hierarchy_Chart.jpg 6 Download from Connexions: Demo_Program_Control_Functions.cpp 7 6.3.4.3 Study the Materials Collectively to Understand Modularization The four items represent a progression from no modularization to modularization: 1. Program code before it is modularized 2. Modularized pseudocode and a hierarchy chart for the program 3. Program code that has been modularized The simplicity of the program should not be considered during this review. It is obvious that the program does not need modularization. The example is to show or demonstrate how to modularize a program for program control. 6.3.5 Denitions Denition 6.4: common area An area of the program where variables and constants are dened so that they are available to all functions. 6.4 Void Data Type8 6.4.1 General Discussion The void data type has no values and no operations. It's a data type that represents the lack of a data type. C++ Reserved Word void Represent Nothing Size N/A or None Normal Signage N/A Domain (Values Allowed) None Table 6.2 4See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions_before_Compiler_Test.cpp 5See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions_Pseudocode.txt 6See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions_Hierarchy_Chart.jpg 7See the le at http://cnx.org/content/m19145/latest/Demo_Program_Control_Functions.cpp 8This content is available online at http://cnx.org/content/m18655/1.3/.
  • 86. 78 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS This data type was added in the transition from C to C++. In C by default a function returned an integer data type. Some functions don't return a value of any kind. Thus, the need to have a data type that indicates nothing is being returned. The void data type is mainly used in the denition and prototyping of functions to indicate that either nothing is being passed in and/or nothing is being passed out. 6.4.2 Denitions Denition 6.5: void data type A data type that has no values or operators and is used to represent nothing. 6.5 Documentation and Making Source Code Readable9 6.5.1 General Discussion We are going to consider a simple program that might be used for testing a compiler to make sure that it is installed correctly. Example 6.4: Compiler_Test.cpp source code //****************************************************** // Filename: Compiler_Test.cpp // Purpose: Average the ages of two people // Author: Ken Busbee; © Kenneth Leroy Busbee // Date: Jan 5, 2009 // Comment: Main idea is to be able to // debug and run a program on your compiler. //****************************************************** // Headers and Other Technical Items #include iostream using namespace std; // Function Prototypes void pause(void); // Variables int age1; int age2; double answer; //****************************************************** // main //****************************************************** int main(void) 9This content is available online at http://cnx.org/content/m18912/1.3/.
  • 87. 79 { // Input cout nEnter the age of the first person ---: ; cin age1; cout nEnter the age of the second person --: ; cin age2; // Process answer = (age1 + age2) / 2.0; // Output cout nThe average of their ages is --------: ; cout answer; pause(); return 0; } //****************************************************** // pause //****************************************************** void pause(void) { cout nn; system(PAUSE); cout nn; return; } //****************************************************** // End of Program //****************************************************** Within the programming industry there is a desire to make software programs easy to maintain. The desire centers in money. Simply put, it costs less money to maintain a well written program. One important aspect of program maintenance is making source code listings clear and as easy to read as possible. To that end we will consider the following: 1. Documentation 2. Vertical Alignment 3. Appropriate use of Comments 4. Banners for Functions 5. Block Markers on Lines by Themselves 6. Indent Block Markers 7. Meaningful Identier Names Consistently Typed 8. Appropriate use of Typedef Let's cover each item in more detail.
  • 88. 80 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS 6.5.1.1 Documentation Documentation is usually placed at the top of the program using several comment lines. The amount of information would vary based on the requirements or standards of the company who is paying its employees or independent contractors to write the code. Notice the indication of revision dates. 6.5.1.2 Vertical Alignment You see this within the documentation area. All of the items are aligned up within the same column. This vertical alignment occurs again when the variables are dened. When declaring variable or constants many textbooks put several items on one line; like this: Example 6.5: Common Textbook Dening of Variables float length, width, height, price_gal_paint, total_area, total_cost; int coverage_gal_paint, total_gal_paint; However common this is in textbooks, it would generally not be acceptable to standards used in most companies. You should declare each item on its own line; like this: Example 6.6: Proper Dening of Variables with Vertical Alignment float length; float width; float height; float price_gal_paint; int coverage_gal_paint; float total_area; int total_gal_paint; float total_cost; This method of using one item per line is more readable by humans. It is quicker to nd an identier name, because you can read the list vertically faster than searching horizontally. Some programmers list them in alphabetic order, especially when the number of variables exceeds about twenty. The lines of code inside either function are also aligned vertically and indented two spaces from the left. The indentation helps set the block o visually. 6.5.1.3 Appropriate use of Comments You can see through the source code short little comments that describe an area or section. Note the use of input, processing and output which are part of the IPO concept within the program design. 6.5.1.4 Banners for Functions Note the use of comments in the form of a banner before each function. Example 6.7: Comments as a Banner
  • 89. 81 //****************************************************** // main //****************************************************** The function name is placed with two lines of asterisks. It makes it extremely easy to nd each function denition because you don't have to read the functions to see where the one ends and the next one begins. You can quickly read the function names within the banners. 6.5.1.5 Block Markers on Lines by Themselves Within many languages there is a method to identify a group of programming statements as a unit. With C++ the functions use a set of symbols, the braces {}, to identify a block of code, sometimes referred to as a compound statement. Braces are used in other aspects of programs, but for now we will look at this simple example. These braces have a tendency to cause problems, especially when they don't have a proper opening brace associated with a proper closing brace. To solve that problem many programmers simply put a brace on a line by itself and make sure the opening brace and closing brace are in the same vertical column. 6.5.1.6 Indent Block Markers A block of code associated with a function or with a control structure is indented two or three spaces. When blocks of code are nested each nesting is indented two or three spaces. In our example above the blocks of code for the function denitions are indented two spaces. 6.5.1.7 Meaningful Identier Names Consistently Typed As the name implies identier names should clearly identify who (or what) you are talking about. Calling you spouse Snooky may be meaningful to only you. Others might need to see her full name (Jane Mary Smith) to appropriately identify who you are talking about. The same concept in programming is true. Variables, constants, functions, typedefs and other items should use meaningful identier names. Additionally, those names should be typed consistently in terms of upper and lower case as they are used in the program. Don't dene a variable as: Pig and then type it later on in your program as: pig. 6.5.1.8 Appropriate use of Typedef Many programming languages have a command that allows for the creation of an identier name that represents a data type. The new identier name is described or connected to a real data type. This feature is not demonstrated in the code above and is often a confusing concept. It is a powerful way to help document a program so that it is meaningful, but is often used by more experienced programmers. 6.5.2 Denitions Denition 6.6: documentation A method of preserving information useful to others in understanding an information system or part thereof. Denition 6.7: vertical alignment A method of listing items vertically so that they are easier to read quickly. Denition 6.8: comments Information inserted into a source code le for documentation of the program. Denition 6.9: banners A set of comment lines used to help separate the functions and other sections of a program.
  • 90. 82 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS Denition 6.10: braces Used to identify a block of code in C++. Denition 6.11: indention A method used to make sections of source code more visible. Denition 6.12: meaningful A rule that says identier names must be easily understood by another reading the source code. Denition 6.13: consistent A rule that says to type identier names in upper and lower case consistently throughout your source code. 6.6 Practice 6: Program Control Functions10 6.6.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Given pseudocode, test data and source code of an existing program, modify the pseudocode and source code to create program control functions. 6.6.2 Memory Building Activities Link to: MBA 06 11 6.6.3 Exercises Exercise 6.1 (Solution on p. 87.) Answer the following statements as either true or false: 1. Pseudocode has a strict set of rules and is the same everywhere in the computer programming industry. 2. Hierarchy Charts and Structure Charts are basically the same thing. 3. Program Control functions are used to simply sub divide and control the program. 4. The void data type is rarely used in C++. 5. Making source code readable is only used by beginning programmers. 6.6.4 Miscellaneous Items None at this time. 10This content is available online at http://cnx.org/content/m22458/1.2/. 11See the le at http://cnx.org/content/m22458/latest/index.html
  • 91. 83 6.6.5 Lab Assignment 6.6.5.1 Creating a Folder or Sub-Folder for Chapter 06 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_06 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 6.6.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Solution_Lab_01.cpp 12 Download from Connexions: Solution_Lab_01_Pseudocode.txt 13 Download from Connexions: Solution_Lab_01_Test_Data.txt 14 Download from Connexions: Solution_Lab_01m_with_Program_Control.cpp 15 Download from Connexions: Solution_Lab_01m_Pseudocode_with_Program_Control.txt 16 Download from Connexions: Solution_Lab_01m_Hierarchy_Chart.jpg 17 Download from Connexions: Solution_Lab_03.cpp 18 Download from Connexions: Solution_Lab_03_Pseudocode.txt 19 Download from Connexions: Solution_Lab_03_Test_Data.txt 20 6.6.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Navigate to your sub-folder: Chapter_06. Review the original Lab 01 materials. Compile and run the Lab 01 source code. Then review and compare the original Lab 01 materials to modularized Lab 01 materials taking note of the conversion to program control functions. Compile and run the Lab 01m source code. Review as needed the course materials. Email your professor if you have any questions. • We have supplied the solution to the Lab 03 assignment. Review the Lab 03 assignment by compiling and running the Lab 03 source code. • You need to copy the Lab 03 source code le and pseudocode le to make the following new les: Lab_06.cpp and Lab_06_Pseudocode.txt • Modify the Lab 06 pseudocode le to implement program control functions as shown in the demon- stration materials. • Modify the Lab 06 source code le to implement program control functions as shown in the demon- stration materials. • Build (compile and run) your program. You have successfully written this program if when it runs and you use the test data [use the same test data as used in Lab 03] it gives the same results as Lab 03. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 12See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01.cpp 13See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01_Pseudocode.txt 14See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01_Test_Data.txt 15See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01m_with_Program_Control.cpp 16See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01m_Pseudocode_with_Program_Control.txt 17See the le at http://cnx.org/content/m22458/latest/Solution_Lab_01m_Hierarchy_Chart.jpg 18See the le at http://cnx.org/content/m22458/latest/Solution_Lab_03.cpp 19See the le at http://cnx.org/content/m22458/latest/Solution_Lab_03_Pseudocode.txt 20See the le at http://cnx.org/content/m22458/latest/Solution_Lab_03_Test_Data.txt
  • 92. 84 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS 6.6.6 Problems 6.6.6.1 Problem 06a Instructions Create a hierarchy chart for the following pseudocode example. Example 6.8: pseudocode ****************************************************** Filename: Average_IQ.txt Purpose: Average the IQs of two people Author: Ken Busbee; © Kenneth Leroy Busbee Date: Jan 17, 2009 ****************************************************** Function main Pass In: nothing Call: get_iqs Call: process_iqs Call: show_average Pass Out: zero to the OS Endfunction ******************** Function get_iqs Pass In: nothing display a message asking user for the IQ of the first person get the IQ of the first person from the keyboard display a message asking user for the IQ of the second person get the IQ of the second person from the keyboard Pass Out: nothing Endfunction ******************** Function process_iqs Pass In: nothing calculate the answer by adding the two IQs and dividing by 2.0 Pass Out: nothing Endfunction ******************** Function show_average Pass In: nothing display the answer with an appropriate message Call: pause Pass Out: nothing Endfunction
  • 93. 85 ******************** Function pause Pass In: nothing direct the operating system to pause the program Pass Out: nothing Endfunction ****************************************************** Potential Variables Data Type Identifier Name ********* *************** integer iq1 integer iq2 double answer ****************************************************** End of file 6.6.6.2 Problem 06b Instructions Identify some problems that make this code undocumented, unreadable or wrong in some other way. Example 6.9: C++ source code //****************************************************** // Author: Ken Busbee; © 2009 Kenneth Leroy Busbee // Date: Jan 17, 2009 //****************************************************** #include iostream using namespace std; void pause(void); int age1, age2; double xx; //****************************************************** // main //****************************************************** int main(void) { // Input
  • 94. 86 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS cout nEnter the age of the first person ---: ; cin %gt; age1; cout nEnter the age of the second person --: ; cin %gt; age2; // Process xx = (age1 + age2) / 2.0; // Output cout nThe average of their ages is --------: ; cout xx; pause(); return 0; } void pause(void) { cout nn; system(PAUSE); cout nn; return; } //****************************************************** // End of Program //******************************************************
  • 95. 87 Solutions to Exercises in Chapter 6 Solution to Exercise 6.1 (p. 82) Answers: 1. false 2. true 3. true 4. false 5. false
  • 96. 88 CHAPTER 6. 6. PROGRAM CONTROL FUNCTIONS
  • 97. Chapter 7 7. Specic Task Functions 7.1 Specic Task Functions1 7.1.1 Prerequisite Material Critical to this module is the review of two Connexions modules: 1. m_18861 Titled: Modularization and C++ Program Layout 2. m_19145 Titled: Program Control Functions You should review these materials before proceeding. If you are viewing this module on-line, links to these items are in the Links box to your right. 7.1.2 General Concept Program Control functions which might have similar identier names usually perform slightly dierent tasks in one program to another. Looking at the organizational chart or hierarchy chart for two companies, both might have a vice president of production, but producing automobiles is dierent than producing ice cream. Similar but dierent. As you go down deeper into an organization you might nd the job title of security guard. Notice that the security guard at the automobile plant and the security guard at the ice cream plant have exactly the same job. In fact, they are most likely interchangeable. Within programming when a task gets specic it might be useable in several programs. The calculation of leap year is a good example. Needed for the verication of dates, is there or is there not a 29 th of February for this year. Needed in thousands of programs. 7.1.3 Specic Task Functions To create good Specic Task functions you need to do all communication needed via parameter passing. Thus all programs that will use the function will communicate in precisely the same way. In our leap year example, you would communicate into the function the year and the function would return the communication of true or false; meaning it is a leap year and there is a 29 th of February (true) or it is not a leap year (false). The ability to modularize our program into specic task functions means that we can write the specic task function once making sure it works correctly, then reuse it over and over in many programs. As you can guess there is a balance. Most programs will have some program control functions and some specic task functions. The key to deciding if the function should be a specic task function is usually rooted in the uniqueness of the task so that it can be used in many programs. Specic task functions once created are usually placed into a user dened library then shared with others for use in many programs. 1This content is available online at http://cnx.org/content/m19146/1.3/. 89
  • 98. 90 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS 7.1.4 Denitions Denition 7.1: user dened library A le containing specic task functions created by individuals to be used in many programs. 7.2 Global vs Local Data Storage2 7.2.1 General Discussion The concept of global and local data storage is usually tied to the concept of scope. Scope is the area of the program where an item (be it variable, constant, function, etc.) that has an identier name is recognized. In our discussion we will use a variable and the place within a program where the variable is dened determines its scope. Global scope (and by extension global data storage) occurs when a variable is dened outside of a function. When compiling the program it creates the storage area for the variable within the program's data area as part of the object code. The object code has a machine code piece, a data area and linker resolution instructions. Because the variable has global scope it is available to all of the functions within your source code. It can even be made available to functions in other object modules that will be linked to your code; however we will forgo that explanation now. A key wording change should be learned at this point. Although the variable has global scope, technically it is available only from the point of denition to the end of the program source code. That is why most variable with global scope are placed near the top of the source code before any functions. This way they are available to all of the functions. Local scope (and by extension local data storage) occurs when a variable is dened inside of a function. When compiling, the compiler creates machine instructions that will direct the creation of storage locations on an area known as the stack which is part of the computer's memory. These memory locations exist until the function completes its task and returns to its calling function. In assembly language we talk about items being pushed onto the stack and popped o the stack when the function terminates. Thus the, stack is a reusable area of memory being used by all functions and released as functions terminate. Although the variable has local scope, technically it is available only from the point of denition to the end of the function. The parameter passing of data items into a function establishes them as local variables. Additionally, any other variables or constants needed by the function usually occur near the top of the function denition so that they are available during the entire execution of the function's code. Scope is an important concept to modularization. Program Control functions usually use global scope for variables and constants placing them near the top of the program before any functions. Specic Task functions use only local scope variables by passing data as needed into the function with parameter passing and creating local variables and constants as needed. Any information that needs to be communicated back to the calling function is again done via parameter passing. This closed communications model that passes all data into and out of a function creates an important predecessor concept for encapsulation which is used in object oriented programming. 7.2.2 Denitions Denition 7.2: global scope Data storage dened outside of a function. Denition 7.3: local scope Data storage dened inside of a function. Denition 7.4: data area A part of an object code le used for storage of data. 2This content is available online at http://cnx.org/content/m19147/1.4/.
  • 99. 91 Denition 7.5: stack A part of the computer's memory used for storage of data. Denition 7.6: scope The area of a source code le where an identier name is recognized. 7.3 Using a Header File for User Dened Specic Task Functions3 7.3.1 Concept: User Dened Specic Task Functions Most companies have certain tasks that are unique to their company. Collectively the programming sta may decide to build several functions and organize them into one or more user libraries. Specic task functions are often built using a testing shell program. The sole purpose of the testing shell program is to create the specic task functions and to test them to insure that they are working properly. Think of a clam, its shell surrounds the important part, the pearl. A testing shell program surrounds the specic task function (the important part). Usually the testing shell program will be used to create several functions that will be placed into a user dened library. The process ows as follows: 1. The testing shell program with the specic task functions is built and thoroughly tested. 2. A copy of the source code is saved as the header le that will be placed in the user library. You delete the main part of the program leaving a comments area, any needed include le references and the specic task functions. 3. A copy of the header le is saved as the prototypes le. This is a text le that strips out the function code, adds a semi colon to create the prototypes. The functions should be using meaningful identier names, thus the prototypes should provide adequate information to others on how to call the function with appropriate parameter passing. 4. Another copy of the source code is saved as a verify header program. You delete the functions and provide an include that points to the header le. This program is compiled and run to make sure the header le is working properly. A good way to understand the concept is to review the four les described above that have been created by a programmer. We will be using the C++ programming language, however the code is easy to understand and will serve our needs well at explaining the concepts; even if you are not familiar with C++. 7.3.2 Demonstration Using C++ 7.3.2.1 Creating a Folder or Sub-Folder for the Four Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Monitor_Header If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 7.3.2.2 Download the Four Files Download and store the following les to your storage device in the appropriate folder. You may need to right click on some of the links and select Save Target As in order to download some of the les. Download from Connexions: Monitor_Testing_Shell.cpp 4 3This content is available online at http://cnx.org/content/m19346/1.4/. 4See the le at http://cnx.org/content/m19346/latest/Monitor_Testing_Shell.cpp
  • 100. 92 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS Download from Connexions: udst_monitor.h 5 Download from Connexions: udst_monitor_prototypes.txt 6 Download from Connexions: Monitor_Verify_Header.cpp 7 7.3.2.3 Study the Files Collectively to Understand the Concepts Take a few moments to review the les in conjunction with the concept discussion above. You should compile and run the Monitor_Testing_Shell.cpp program. 7.3.2.4 Creating a Folder or Sub-Folder for your User Library Depending on your compiler/IDE, you should decide where to create a folder that will hold the header les you create. We suggest that you create the folder in conjunction with the compiler/IDE software. If you were using the Bloodshed Dev-C++ 5 compiler/IDE you most likely installed the compiler/IDE software at: C:Dev-Cpp if you installed it on your machine or at: DriveLetter:Dev-Cpp (where the DriveLetter is the drive that represents your ash drive) if you installed it on a ash drive. We suggest that you create a sub-folder at that location named: • user_library The path of: C:Dev-Cppuser_library would be created as the location for your user library if using your machine installation. You can literally place it anywhere and name the library any name, but once you decide on a place and name; you do not want to move or rename the folders. 7.3.2.5 Placing the Header File into the User Library You need to copy the udst_monitor.h le placing it into the user_library folder just created. As you can guess the udst stands for user dened specic task. The functions within this header le would be used to control the interaction a user has with the monitor. The .h is a convention of the C++ programming language and indicates a header le. Thus the identier name for the header le is very meaningful and descriptive. 7.3.2.6 Verify that the Header File Works Properly Review the Monitor_Verify_Header.cpp source code le and note the two include commands are dif- ferent. 1. The Standard Library uses a less than and a greater than to bracket the Standard Library name of: iostream 2. The user library uses quote marks to bracket the location of the header le. This identies to the complier that we are specifying the exact le we want. We provide a complete le specication (drive, path information, lename and extension). 3. Because this item is technically a string within C++, we must use two back slashes between the drive, path(s) and lename. This is because the rst back slash assumes that the next character is an escape code and if we really don't want an escape code but a back slash, the second back slash says no I wanted a back slash.This string: C:Dev-Cppuser_libraryudst_monitor.h will be interpreted to mean: C:Dev-Cppuser_libraryudst_monitor.h Depending on what drive you are using, what path folder structure you are using and what you called your folder; you may need to correct the include reference within the source code so that it properly references the header le. 5See the le at http://cnx.org/content/m19346/latest/udst_monitor.h 6See the le at http://cnx.org/content/m19346/latest/udst_monitor_prototypes.txt 7See the le at http://cnx.org/content/m19346/latest/Monitor_Verify_Header.cpp
  • 101. 93 Compile and run the Monitor_Verify_Header.cpp program. Note: It should work exactly as the Moni- tor_Testing_Shell.cpp program. 7.3.3 Denitions Denition 7.7: udst User Dened Specic Task Denition 7.8: testing shell A program used to create specic task functions. Denition 7.9: header le A le that contains items we want to have included toward the top of our source code. 7.4 Practice 7: Specic Task Functions8 7.4.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Given a testing shell program already coded and tested, create a user dened specic task header le, a user dened specic task prototypes document and a source code program to verify that the header le works properly. 7.4.2 Memory Building Activities Link to: MBA 07 9 7.4.3 Exercises Exercise 7.1 (Solution on p. 95.) Answer the following statements as either true or false: 1. Scope refers to a brand of mouth wash. 2. User dened specic task functions are usually placed into a user dened library. 3. Local and global data storage is associated with the concept of scope. 4. Creating a header le for user dened specic task functions is a dicult task. 5. The stack is part of the computer's memory used for storage of data. 7.4.4 Miscellaneous Items None at this time. 8This content is available online at http://cnx.org/content/m22459/1.1/. 9See the le at http://cnx.org/content/m22459/latest/index.html
  • 102. 94 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS 7.4.5 Lab Assignment 7.4.5.1 Creating a Folder or Sub-Folder for Chapter 07 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_07 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 7.4.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_07_Testing_Shell.cpp 10 7.4.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Navigate to your sub-folder: Chapter_07. Compile and run the Lab 07 Testing Shell source code. Note: This program uses an include le that points to the udst_monitor.h le as explained in Connexions Chapter 7 materials. • Following same process as shown in the Connexions module Using a Header File for User Dened Specic Task Functions that is within the Chapter 7 materials; make the following les: udst_us_to_metric.h and udst_us_to_metric_prototypes.txt and Lab_07_Verify_Header.cpp • Copy the header le to your user library, then build (compile and run) your verify header program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 7.4.6 Problems 7.4.6.1 Problem 07a Instructions Create the pseudocode to solve the following specic task function: Problem: An interior designer always needs to calculate the area of a room to determine the amount of oor covering needed (usually carpet). The rooms are rectangular with the dimensions measured in feet (with decimal fractions). The function however needs to return square yards. Hint: There are 3 lineal feet to a yard. 7.4.6.2 Problem 07b Instructions Create test data the following specic task function: Problem: An interior designer always needs to calculate the area of a room to determine the amount of oor covering needed (usually carpet). The rooms are rectangular with the dimensions measured in feet (with decimal fractions). The function however needs to return square yards. Hint: There are 3 lineal feet to a yard. 10See the le at http://cnx.org/content/m22459/latest/Lab_07_Testing_Shell.cpp
  • 103. 95 Solutions to Exercises in Chapter 7 Solution to Exercise 7.1 (p. 93) Answers: 1. false Although Scope is a brand of mouth wash; we are looking for the computer related denition. 2. true 3. true 4. false It may seem dicult at rst, but with a little practice it is really quite easy. 5. true
  • 104. 96 CHAPTER 7. 7. SPECIFIC TASK FUNCTIONS
  • 105. Chapter 8 8. Standard Libraries 8.1 Standard Libraries1 8.1.1 Overview of Standard Libraries Many common or standard functions, whose denitions have been written, are ready to be used in any program. They are organized into a group of functions (think of them as several books) and are collectively called a Standard Library There are many function organized into several libraries For example, within C++ many math functions exist and have been coded (and placed into libraries). These functions were written by programmers and tested to insure that they work properly. In most cases the functions were reviewed by several people to double and triple check to insure that they did what was expected. We have the advantage of using these functions with condence that they will work properly in our programs, thus saving us time and money. A main program must establish the existence of functions used in that program. Depending on the programming language, there is a formal way to: 1. dene a function 2. declare a function (a prototype is a declaration to a compiler) 3. call a function When we create functions in our program, we usually see them in the following order in our source code listing: 1. declare the function (prototype) 2. call the function 3. dene the function When we use functions created by others that have been organized into library, we include a header le in our program which contains the prototypes for the functions. Just like functions that we create, we see them in the following order in our source code listing: 1. declaring the function (prototype provided in the include le) 2. call the function (with parameter passing of values) 3. dene the function (it is either dened in the header le or the linker program provides the actual object code from a Standard Library object area) 1This content is available online at http://cnx.org/content/m19202/1.4/. 97
  • 106. 98 CHAPTER 8. 8. STANDARD LIBRARIES In most cases, the user can look at the prototype and understand exactly how the communications (parameter passing) into and out of the function will occur when the function is called. Let's look at the math example of absolute value. The prototype is: int abs(int number); Not wanting to have a long function name the designers named it: abs instead of absolute. This might seem to violate the identier naming rule of using meaningful names, however when identier names are established for standard libraries they are often shortened to a name that is easily understood by all who would be using them. The function is of data type int, meaning that the function will return an integer value. It is obvious that the integer value returned is the answer to the question, What is the absolute value of the integer that is being passed into the function. This function is passed only one value; an int number. If I had two integer variables named apple and banana; and I wanted to store the absolute value of banana into apple; then a line of code to call this function would be: apple = abs(banana); Let's say it in English, pass the function absolute the value stored in variable banana and assign the returning value from the function to the variable apple. Thus, if you know the prototype you can usually properly call the function and use its returning value (if it has one) without ever seeing the denition of the code (i.e. the source code that tells the function how to get the answer; that is written by someone else; and either included in the header le or compiled and placed into an object library; and linked during the linking step of the Integrated Development Environment (IDE). 8.1.2 Demonstration Program in C++ 8.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 8.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on some of the links and select Save Target As in order to download some of the les. Following the methods of your compiler/IDE, compile and run the program(s). Study the source code and/or other le(s) in conjunction with other learning materials. Download from Connexions: Demo_Standard_Libraries.cpp 2 Download from Connexions: Demo_Standard_Libraries_Listing.txt 3 8.1.3 Denitions Denition 8.1: Standard Library A set of specic task functions that have been added to the programming language for universal use. Denition 8.2: condence The reliance that Standard Library functions work properly. Denition 8.3: abs A function within the cmath standard library in C++ which stands for absolute. 2See the le at http://cnx.org/content/m19202/latest/Demo_Standard_Libraries.cpp 3See the le at http://cnx.org/content/m19202/latest/Demo_Standard_Libraries_Listing.txt
  • 107. 99 8.2 Practice 8: Standard Libraries4 8.2.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Given a testing shell program already coded and tested, add another specic task function, and test it, then create a user dened specic task header le, a user dened specic task prototypes document and a source code program to verify that the header le works properly. 8.2.2 Memory Building Activities Link to: MBA 08 5 8.2.3 Exercises Exercise 8.1 (Solution on p. 101.) Answer the following statements as either true or false: 1. The standard library is a set of specic task functions that have been added to the program- ming language for universal use. 2. Programmers should not have condence that standard library functions work properly. 3. It would be easier to write programs without using specic task functions. 8.2.4 Miscellaneous Items None at this time. 8.2.5 Lab Assignment 8.2.5.1 Creating a Folder or Sub-Folder for Chapter 08 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_08 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 8.2.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_08_Testing_Shell.cpp 6 4This content is available online at http://cnx.org/content/m22460/1.2/. 5See the le at http://cnx.org/content/m22460/latest/index.html 6See the le at http://cnx.org/content/m22460/latest/Lab_08_Testing_Shell.cpp
  • 108. 100 CHAPTER 8. 8. STANDARD LIBRARIES 8.2.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Navigate to your sub-folder: Chapter_08. Compile and run the Lab 08 Testing Shell source code. Note: This program uses an include le that points to the udst_monitor.h le as explained in Connexions Chapter 7 materials. • You need to add another function to this testing shell titled: area_triangle that is to calculate the area of a triangle. Dene the function, prototype it, and within the function main add an area for calling the function (similar to the existing functions with test data). Be condent that it is working properly. • Following same process as shown in the Connexions module Using a Header File for User De- ned Specic Task Functions that is within the Chapter 7 materials; make the following les: udst_geo_area.h and udst_geo_area_prototypes.txt and Lab_08_Verify_Header.cpp • Copy the header le to your user library, then build (compile and run) your verify header program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 8.2.6 Problems 8.2.6.1 Problem 08a Instructions Write the C++ code to do the following specic task function. Example 8.1: pseudocode Function area_regular_hexagon Pass In: side Calculate: side times side times 3 times the square root of 0.75 Pass Out: the calculation Endfunction
  • 109. 101 Solutions to Exercises in Chapter 8 Solution to Exercise 8.1 (p. 99) Answers: 1. true 2. false 3. false
  • 110. 102 CHAPTER 8. 8. STANDARD LIBRARIES
  • 111. Chapter 9 9. Character Data, Sizeof, Typedef, Sequence 9.1 Character Data Type1 9.1.1 Overview of the Character Data Type The character data type basically represents individual or single characters. Characters comprise a variety of symbols such as the alphabet (both upper and lower case) the numeral digits (0 to 9), punctuation, etc. All computers store character data in a one byte eld as an integer value. Because a byte consists of 8 bits, this one byte eld has 28 or 256 possibilities using the positive values of 0 to 255. Most microcomputers use the ASCII (stands for American Standard Code for Information Interchange and is pronounced ask-key) Character Set which has established values for 0 to 127. For the values of 128 to 255 they usually use the Extended ASCII Character Set. When we hit the capital A on the keyboard, the keyboard sends a byte with the bit pattern equal to an integer 65. When the byte is sent from the memory to the monitor, the monitor converts the integer value of 65 to into the symbol of the capital A to display on the monitor. The character data type attributes include: C++ Reserved Word char Represent Single characters Size 1 byte Normal Signage Unsigned (positive values only) Domain (Values Allowed) Values from 0 to 127 as shown in the standard ASCII Character Set, plus values 128 to 255 from the Extended ASCII Character Set continued on next page 1This content is available online at http://cnx.org/content/m18669/1.5/. 103
  • 112. 104 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE C++ syntax rule Single quote marks Example: 'A' Table 9.1 9.1.2 Demonstration Program in C++ 9.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 9.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the soruce code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Character_Data_Type.cpp 2 9.1.3 Denitions Denition 9.1: character A data type representing single text characters like the alphabet, numeral digits, punctuation, etc. Denition 9.2: ASCII American Standard Code for Information Interchange Denition 9.3: single quote marks Used to create character type data within the C++ programming language. 9.2 Sizeof Operator3 9.2.1 Overview Every data item, constants and variables, not only have a data type, but the data type determines how many bytes the item will use in the memory of the computer. The size of each data type varies with the complier being used and the computer. This eect is known as being machine dependent. Additionally, there have been some size changes with upgrades to the language. In C the int data type was allocated 2 bytes of memory storage on an Intel compatible central processing unit (cpu) machine. In C++ an int is allocated 4 bytes. There is an operator named sizeof (. . . ) that is a unary operator, that is it has only one operand. The operand is to the right of the operator and is placed within the parentheses if it is a data type. The operand may be any data type (including those created by typedef). If an identier name it does not need to go inside of the parentheses. It works for both variable and memory constant identier names. This operator is unique in that it does its calculation at compile time for global scoped items and at run time for local scoped items. Examples: 2See the le at http://cnx.org/content/m18669/latest/Demo_Character_Data_Type.cpp 3This content is available online at http://cnx.org/content/m18736/1.7/.
  • 113. 105 cout The size of an integer is: sizeof (int); The compiler would determine the byte size of an integer on the specic machine and in essence replaces the sizeof operator with a value. Integers are usually 4 bytes long, thus the line of code would be changed to: cout The size of an integer is: 4; If you place an identier name that represents a data storage area (variable or memory constant), it looks at the denition for the identier name. NOTE: the parentheses are not needed and often not included for an identier name. Example 9.1: sizeof with a Variable double money; // variable set up with initialization then later on in the program cout The size of money is: sizeof money; The compiler would determine the byte size of money by looking at the denition where it indicates that the data type is double. The double data type on the specic machine (usually 8 bytes) would replace the code and it would become: cout The size of money is: 8; 9.2.2 Denitions Denition 9.4: sizeof An operator that tells you how many bytes a data type occupies in storage. 9.3 Typedef - An Alias4 9.3.1 General Discussion The typedef statement allows the programmer to create an alias, or synonym, for an existing data type. This can be useful in documenting a program. The C++ programming language syntax is: typedef the real data type the alias identifier name; Let's say a programmer is using a double data type to store the amount of money that is being used for various purposes in a program. He might dene the variables as follows: Example 9.2: Regular Denition of Variables double income; double rent; double vacation; However, he might use the typedef statement and dene the variables as follows: Example 9.3: Using typedef when Dening Variables 4This content is available online at http://cnx.org/content/m18741/1.4/.
  • 114. 106 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE typedef double cash; the typedef must be defined before its use cash income; cash rent; cash vacation; The typedef statement is not used very often by beginning programmers. It usually creates more confusion than needed, thus stick to using the normal data types at rst. 9.3.2 Denitions Denition 9.5: typedef Allows the programmer to create an alias, or synonym, for an existing data type. 9.4 Sequence Operator5 9.4.1 General Discussion The sequence (or comma) operator is used to separate items. It has several uses, four of which are listed then demonstrated: 1. To separate identier names when declaring variables or constants 2. To separate several parameters being passed into a function 3. To separate several initialization items or update items in a for loop 4. Separate values during the inititalization of an array This rst example is often seen in textbooks, but this method of declaring variables is not preferred. It is dicult to quickly read the identier names. int pig, dog, cat, rat; The following vertical method of declaring variables or constants is preferred. Example 9.4: Preferred Vertical Method of Dening Variables int pig; int dog; int cat; int rat; The data types and identier names (known as parameters) are separated from each other. This example is a function prototype. double area_trapezoid(double base, double height, double top); In the syntax of a for loop you have three parts each separated by a semi-colon. The rst is the initial- ization area which could have more than one initialization. The last is the update area which could have more than one update. Mutiple initializations or updates use the comma to separate them. This example is only the rst line of a for loop. for(x = 1, y = 5; x 15; x++, y++) The variable ages is an array of integers. Initial values are assigned using block markers with the values separated from each other using a comma. int ages[] = {2,4,6,29,32}; 5This content is available online at http://cnx.org/content/m18690/1.7/.
  • 115. 107 9.4.2 Denitions Denition 9.6: sequence An operator used to separate multiple occurrences of an item. 9.5 Practice 9: Character Data, Sizeof, Typedef, Sequence6 9.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Given appropriate documents produced by a System Analyst, create planning documents (pseudocode and test data), then a source code program that accomplishes the goals of the program. 9.5.2 Memory Building Activities Link to: MBA 09 7 9.5.3 Exercises Exercise 9.1 (Solution on p. 109.) Answer the following statements as either true or false: 1. The character data type in C++ uses the double quote marks, like: char grade = A; 2. Sizeof is an operator that tells you how many bytes a data type occupies in storage. 3. Typedef helps people who can't hear and is one of the standard accommodation features of a programming language for people with a learning disability. 4. The sequence operator should be used when dening variables in order to save space. 5. Programming can be both enjoyable and frustrating. 9.5.4 Miscellaneous Items None at this time. 9.5.5 Lab Assignment 9.5.5.1 Creating a Folder or Sub-Folder for Chapter 09 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_09 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 6This content is available online at http://cnx.org/content/m22461/1.2/. 7See the le at http://cnx.org/content/m22461/latest/index.html
  • 116. 108 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE 9.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_09_Narrative_Description.txt 8 Download from Connexions: Lab_09_Aerial_View_Center_Pivot_Irrigation.jpg 9 Download from Connexions: Lab_09_Hierarchy_Chart.jpg 10 9.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Review the Connexions module Systems Development Life Cycle within the Chapter 1 materials. Think of yourself as a programmer assigned to a project during the Implementation phase with your professor as the System Analyst. • Navigate to your sub-folder: Chapter_09. Review the rst two items provided by the system analyst which he produced during the Design phase of the Systems Development Life Cycle. These two documents historically would have been printed and be placed into a program documentation folder. The items you produce in creating the program would be added to the folder. However, shifting to our paperless view of the world, today these items might be created and stored electronically in electronic folders (which is basically what we are doing by using our sub-folder titled: Chapter_09. The third item, the hierarchy chart, would normally be produced by the programmer. However, given your inexperience, the system analyst has created it for you. Make sure you understand what the program is to do. Any questions ask the system analyst (aka your professor). • Design the program and create your test data by building a Lab_09_Pseudocode.txt le and a Lab_09_Test_Data.txt le. WARNING: Don't touch the compiler/IDE. Don't start by creating the source code le. Creating the source code then producing the planning documentation afterwards is a bad habit that beginning programmers often acquire. NOTE: In your pseudocode document you do not need to create any pseudocode for the Standard Library or User Library functions. Just indicate that you call them from the Program Control functions. If needed, review the Connexions module Pseudocode Examples for Functions within the Chapter 6 materials. HINT: Copying the pseudocode and test data les from the Chapter 06 folder might be a good way to start building these items. • After you have successfully planned the document and created your test data; create the source code le naming it: Lab_09.cpp HINTS: Using a previous source code le as your starting le makes sense. The le in the Chapter 06 folder might be a good start. You might want to copy some of the include information from the Verify Header code in Chapter 08 into your Lab 09 source code le. • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 9.5.6 Problems 9.5.6.1 Problem 09a Instructions The sequence operator can be used when declaring multiple identier names for variables or constants of the same data type. Is this a good or bad programming habit and why? 8See the le at http://cnx.org/content/m22461/latest/Lab_09_Narrative_Description.txt 9See the le at http://cnx.org/content/m22461/latest/Lab_09_Aerial_View_Center_Pivot_Irrigation.jpg 10See the le at http://cnx.org/content/m22461/latest/Lab_09_Hierarchy_Chart.jpg
  • 117. 109 Solutions to Exercises in Chapter 9 Solution to Exercise 9.1 (p. 107) Answers: 1. false 2. true 3. false 4. false 5. true
  • 118. 110 CHAPTER 9. 9. CHARACTER DATA, SIZEOF, TYPEDEF, SEQUENCE
  • 119. Chapter 10 10. Introduction to Structured Programming 10.1 Structured Programming1 10.1.1 Introduction One of the most important concepts of programming is the ability to control a program so that dierent lines of code are executed or that some lines of code are executed many times. The mechanisms that allow us to control the ow of execution are called control structures. Flowcharting is a method of documenting (charting) the ow (or paths) that a program would execute. There are four main categories of control structures: • Sequence Very boring. Simply do one instruction then the next and the next. Just do them in a given sequence or in order listed. Most lines of code are this. • Selection This is where you select or choose between two or more ows. The choice is decided by asking some sort of question. The answer determines the path (or which lines of code) will be executed. • Iteration Also known as repetition, it allows some code (one too many lines) to be executed (or repeated) several times. The code might not be executed at all (repeat it zero times), executed a xed number of times or executed indenitely until some condition has been met. Also known as looping because the owcharting shows the ow looping back to repeat the task. • Branching A control structure that allows the ow of execution to jump to a dierent part of the program. This category is rarely used in modular structured programming. All high-level programming languages have control structures. All languages have the rst three categories of control structures (sequence, selection, and iteration). Most have the if then else structure (which belongs to the selection category) and the while structure (which belongs to the iteration category). After these two basic structures there are usually language variations. The concept of structured programming started in the late 1960's with an article by Edsger Dijkstra. He proposed a go to less method of planning programming logic that eliminated the need for the branching category of control structures. The topic was debated for about 20 years. But ultimately By the end of the 20th century nearly all computer scientists were convinced that it is useful to learn and apply the concepts of structured programming. 2 1This content is available online at http://cnx.org/content/m19628/1.6/. 2Structured programming from Wikipedia 111
  • 120. 112 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING 10.1.1.1 Introduction to Selection Control Structures The basic attribute of a selection control structure is to be able to select between two of more alternate paths. This is described as either two-way selection or multiway selection. A question using Boolean concepts usually controls which path is selected. All of the paths from a selection control structure join back up at the end of the control structure, before moving on to the next lines of code in a program. We have mentioned that the if then else control structure belongs to the selection category and is a two-way selection. Example 10.1: if then else control structure if (age 17) { out You can vote.; } else { cout You can't vote.; } 10.1.1.2 Introduction to Iteration Control Structures The basic attribute of an iteration control structure is to be able to repeat some lines of code. The visual display of iteration creates a circular loop pattern when owcharted, thus the word loop is associated with iteration control structures. Iteration can be accomplished with test before loops, counting loops, and test after loops. A question using Boolean concepts usually controls how long the loop will execute. We have mentioned that the while control structure belongs to the iteration category and is a test before loop. Example 10.2: while control structure counter = 0; while (counter 5) { cout nI love computers!; counter ++; } 10.1.2 Denitions Denition 10.1: control structures Mechanisms that allow us to control the ow of execution within a program. Denition 10.2: sequence A control structure where you do the items in the sequence listed.
  • 121. 113 Denition 10.3: selection A control structure where you select between two or more choices. Denition 10.4: iteration A control structure that allows some lines of code to be executed many times. Denition 10.5: branching A control structure that allows the ow of execution to jump to a dierent part of the program. Denition 10.6: structured programming A method of planning programs that avoids the branching category of control structures. 10.2 Pseudocode Examples for Control Structures3 10.2.1 Overview No standard for pseudocode syntax exists. However, there are some commonly followed conventions to help make pseudocode written by one programmer easily understood by another programmer. Most of these conventions follow two concepts: • Use indentation to show the action part of a control structure • Use an ending phrase word to end a control structure The sequence control structure simply lists the lines of pseudocode. The concern is not with the sequence category but with selection and two of the iteration control structures. The following are commonly used ending phrase-words: Control Structure Ending Phrase Word If then Else Endif Case Endcase While Endwhile For Endfor Table 10.1 The Do While and Repeat Until iteration control structures don't need an ending phrase-word. We simply use the rst word, then the action part, followed by the second word with the test expression. Here are some examples: 10.2.2 Selection Control Structures Example 10.3: pseudocode: If then Else If age 17 Display a message indicating you can vote. Else Display a message indicating you can't vote. Endif 3This content is available online at http://cnx.org/content/m18649/1.12/.
  • 122. 114 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING Example 10.4: pseudocode: Case Case of age 0 to 17 Display You can't vote. 18 to 64 Display Your in your working years. 65 + Display You should be retired. Endcase 10.2.3 Iteration (Repetition) Control Structures Example 10.5: pseudocode: While count assigned zero While count 5 Display I love computers! Increment count Endwhile Example 10.6: pseudocode: For For x starts at 0, x 5, increment x Display Are we having fun? Endfor Example 10.7: pseudocode: Do While count assigned five Do Display Blast off is soon! Decrement count While count zero Example 10.8: pseudocode: Repeat Until count assigned five Repeat Display Blast off is soon! Decrement count Until count one
  • 123. 115 10.3 Flowcharting4 10.3.1 Flowcharting Symbols 10.3.1.1 Terminal The rounded rectangles, or terminal points, indicate the owchart's starting and ending points. Figure 10.1 10.3.1.2 Process The rectangle depicts a process such as a mathematical computation, or a variable assignment. Note: the C++ language equivalent is the statement. 4This content is available online at http://cnx.org/content/m19623/1.5/.
  • 124. 116 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING Figure 10.2 10.3.1.3 Input/Output The parallelograms designate input or output operations. Note: the C++ language equivalent is cin or cout. Figure 10.3 10.3.1.4 Connectors Sometimes a owchart is broken into two or more smaller owcharts. This is usually done when a owchart does not t on a single page, or must be divided into sections. A connector symbol, which is a small circle
  • 125. 117 with a letter or number inside it, allows you to connect two owcharts on the same page. A connector symbol that looks like a pocket on a shirt, allows you to connect to a owchart on a dierent page. On-Page Connector Figure 10.4 O-Page Connector Figure 10.5 10.3.1.5 Decision The diamond is used to represent the true/false statement being tested in a decision symbol.
  • 126. 118 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING Figure 10.6 10.3.1.6 Module Call A program module is represented in a owchart by rectangle with some lines to distinguish it from process symbol. Often programmers will make a distinction between program control and specic task modules as shown below. Note: C++ equivalent is the function. Local module: usually a program control function. Figure 10.7 Library module: usually a specic task function.
  • 127. 119 Figure 10.8 10.3.1.7 Flow Lines Note: The default ow is left to right and top to bottom (the same way you read English). To save time arrowheads are often only drawn when the ow lines go contrary the normal. Figure 10.9 10.3.2 Examples We will demonstrate various owcharting items by showing the owchart for some pseudocode.
  • 128. 120 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING 10.3.2.1 Functions Example 10.9: pseudocode: Function with no parameter passing Function clear monitor Pass In: nothing Direct the operating system to clear the monitor Pass Out: nothing Endfunction Figure 10.10: Function clear monitor Example 10.10: pseudocode: Function main calling the clear monitor function Function main Pass In: nothing Doing some lines of code Call: clear monitor Doing some lines of code Pass Out: value zero to the operating system Endfunction
  • 129. 121 Figure 10.11: Function main 10.3.2.2 Sequence Control Structures The next item is pseudocode for a simple temperature conversion program. This demonstrates the use of both the on-page and o-page connectors. It also illustrates the sequence control structure where nothing unusually happens. Just do one instruction after another in the sequence listed. Example 10.11: pseudocode: Sequence control structure Filename: Solution_Lab_04_Pseudocode.txt Purpose: Convert Temperature from Fahrenheit to Celsius Author: Ken Busbee; © 2008 Kenneth Leroy Busbee Date: Dec 24, 2008 Pseudocode = IPO Outline input display a message asking user for the temperature in Fahrenheit get the temperature from the keyboard processing calculate the Celsius by adding subtracting 32 from the Fahrenheit temperature then multiply the result by 5 then divide the result by 9. Round up or down to the whole number. HINT: Use 32.0 when subtracting to ensure floating-point accuracy. output display the celsius with an appropriate message
  • 130. 122 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING pause so the user can see the answer Figure 10.12: Sequence control structure
  • 131. 123 Figure 10.13: Sequence control structured continued 10.3.2.3 Selection Control Structures Example 10.12: pseudocode: If then Else If age 17 Display a message indicating you can vote. Else Display a message indicating you can't vote. Endif
  • 132. 124 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING Figure 10.14: If then Else control structure Example 10.13: pseudocode: Case Case of age 0 to 17 Display You can't vote. 18 to 64 Display Your in your working years. 65 + Display You should be retired. Endcase
  • 133. 125 Figure 10.15: Case control structure 10.3.2.4 Iteration (Repetition) Control Structures Example 10.14: pseudocode: While count assigned zero While count 5 Display I love computers! Increment count Endwhile
  • 134. 126 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING Figure 10.16: While control structure Example 10.15: pseudocode: For For x starts at 0, x 5, increment x Display Are we having fun? Endfor The for loop does not have a standard owcharting method and you will nd it done in dierent ways. The for loop as a counting loop can be owcharted similar to the while loop as a counting loop.
  • 135. 127 Figure 10.17: For control structure Example 10.16: pseudocode: Do While count assigned five Do Display Blast off is soon! Decrement count While count zero
  • 136. 128 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING Figure 10.18: Do While control structure Example 10.17: pseudocode: Repeat Until count assigned five Repeat Display Blast off is soon! Decrement count Until count one
  • 137. 129 Figure 10.19: Repeat Until control structure 10.3.3 Denitions Denition 10.7: owcharting A programming design tool that uses graphical elements to visually depict the ow of logic within a function. Denition 10.8: process symbol A rectangle used in owcharting for normal processes such as assignment. Denition 10.9: input/output symbol A parallelogram used in owcharting for input/output interactions. Denition 10.10: decision symbol A diamond used in owcharting for asking a question and making a decision. Denition 10.11: ow lines Lines (sometimes with arrows) that connect the various owcharting symbols. 10.4 Practice 10: Introduction to Structured Programming5 10.4.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Given pseudocode, write the C++ code for a program that uses if then else and while control structures. 5This content is available online at http://cnx.org/content/m19692/1.13/.
  • 138. 130 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING 10.4.2 Memory Building Activities Link to: MBA 10 6 10.4.3 Exercises Exercise 10.1 (Solution on p. 131.) Answer the following statements as either true or false: 1. There are only two categories of control structures. 2. Branching control structures are rarely used in good structured programming. 3. If then else is a multiway selection control structure. 4. The while control structure is part of the branching category. 5. Pseudocode is better than owcharting. 10.4.4 Miscellaneous Items None at this time. 10.4.5 Lab Assignment 10.4.5.1 Creating a Folder or Sub-Folder for Chapter 10 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_10 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 10.4.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_10_Pseudocode.txt 7 10.4.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le from the Lab_10_Pseudocode.txt le. Name it: Lab_10.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 10.4.6 Problems 10.4.6.1 Problem 10a Instructions List the four categories of control structures and provide a brief description of each category. 6See the le at http://cnx.org/content/m19692/latest/index.html 7See the le at http://cnx.org/content/m19692/latest/Lab_10_Pseudocode.txt
  • 139. 131 Solutions to Exercises in Chapter 10 Solution to Exercise 10.1 (p. 130) Answers: 1. false 2. true 3. false 4. false 5. false
  • 140. 132 CHAPTER 10. 10. INTRODUCTION TO STRUCTURED PROGRAMMING
  • 141. Chapter 11 11. Two Way Selection 11.1 If Then Else1 11.1.1 Introduction to Two Way Selection 11.1.1.1 Traditional Two Way Selection We are going to introduce the control structure from the selection category that is available in every high level language. It is called the if then else structure. Asking a question that has a true or false answer controls the if then else structure. It looks like this: if the answer to the question is true then do this else because it's false do this In most languages the question (called a test expression) is a Boolean expression. The Boolean data type has two values true and false. Let's rewrite the structure to consider this: if expression is true then do this else because it's fales do this Some languages use reserved words of: if, then and else. Many eliminate the then. Additionally the do this can be tied to true and false. You might see it as: if expression is true action true else action false And most languages infer the is true you might see it as: 1This content is available online at http://cnx.org/content/m19679/1.3/. 133
  • 142. 134 CHAPTER 11. 11. TWO WAY SELECTION if expression action true else action false The above four forms of the control structure are saying the same thing. The else word is often not used in our English speaking today. However, consider the following conversation between a mother and her child. Child asks, Mommy, may I go out side and play? Mother answers, If your room is clean then you may go outside and play or else you may go sit on a chair for ve minutes as punishment for asking me the question when you knew your room was dirty. Let's note that all of the elements are present to determine the action (or ow) that the child will be doing. Because the question (your room is clean) has only two possible answers (true or false) the actions are mutually exclusive. Either the child 1) goes outside and plays or 2) sits on a chair for ve minutes. One of the actions is executed; never both of the actions. 11.1.1.2 One Choice Implied Two Way Selection Often the programmer will want to do something only if the expression is true, that is with no false action. The lack of a false action is also referred to as a null else and would be written as: if expression action true else do nothing Because the else do nothing is implied, it is usually written in short form like: if expression action true 11.1.2 Two Way Selection within C++ The syntax for the if then else control structure within the C++ programming language is: if (expression) statement; else statement; Note: The test expression is within the parentheses, but this is not a function call. The parentheses are part of the control structure. Additionally, there is no semicolon after the parenthesis following the expression. 11.1.3 Denitions Denition 11.1: if then else A two way selection control structure. Denition 11.2: mutually exclusive Items that do not overlap. Example: true and false.
  • 143. 135 11.2 Boolean Data Type2 11.2.1 Discussion The Boolean data type is also known as the logical data type and represents the concepts of true and false. The name Boolean comes from the mathematician George Boole; who in 1854 published: An Investigation of the Laws of Thought. Boolean algebra is the area of mathematics that deals with the logical representation of true and false using the numbers 0 and 1. The importance of the Boolean data type within programming is that it is used to control programming structures (if then else, while loops, etc.) that allow us to implement choice into our algorithms. The Boolean data type has the same attributes and acts or behaves similarly in all programming lan- guages. The rules within the C++ programming language are: C++ Reserved Word bool Represent Logical concepts of true and false Size Usually 1 byte Normal Signage Unsigned Domain (Values Allowed) 0 meaning false, and 1 meaning true C++ syntax rule true and false are reserved words that can be used as values in expressions C++ concept/rule Any value from any data type can be demoted into a Boolean data type with zero representing false and all non-zero values representing true. Table 11.1 Most control structures use a test expression that executes either selection (as in the: if then else) or iteration (as in the while; do while; or for loops) based on the truthfulness or falseness of the expression. Thus, we often talk about the Boolean expression that is controlling the structure. Within many programming languages, this expression must be a Boolean expression and is governed by a tight set of rules. However, in C++ every data type can be used as a Boolean expression because the value of any data type within C++ can be demoted into a Boolean value. Within most languages, expressions that yield Boolean data type values are divided into two groups. One group uses the relational operators within their expressions and the other group uses logical operators within their expressions. Within the C++ programming language the Boolean data type is one of the standard or basic data types and is a member of the integer family. 11.2.2 Denitions Denition 11.3: Boolean A data type representing the concepts of true and false. Denition 11.4: test expression An expression used to control programming structures. 2This content is available online at http://cnx.org/content/m19544/1.4/.
  • 144. 136 CHAPTER 11. 11. TWO WAY SELECTION 11.3 Relational Operators3 11.3.1 Overview of the Relational Operators The relational operators are often used to create a test expression that controls program ow. This type of expression is also known as a Boolean expression because they create a Boolean answer or value when evaluated. There are six common relational operators that give a Boolean value by comparing (showing the relationship) between two operands. If the operands are of dierent data types, implicit promotion occurs to convert the operands to the same data type. Denition 11.5: relational operator An operator that gives a Boolean value by evaluating the relationship between two operands. Operator symbols and/or names vary with dierent programming languages. The C++ programming language operators with their meanings are: C++ Operator Meaning less than greater than = less than or equal to = greater than or equal to == equality (equal to) != inequality (not equal to) Table 11.2 Exercise 11.1 (Solution on p. 141.) Evaluate the following Boolean expressions: 1. 9 25 2. 9 3 3. 9 14 4. 9 = 17 5. 9 = 25 6. 9 == 13 7. 9 != 13 8. 9 ! 25 The answers to Boolean expressions within the C++ programming language are a value of either 1 for true or 0 for false. Be careful. In math you are familiar with using this symbol = to mean equal and = to mean not equal. In the C++ programming language the = is not used and the = symbol means assignment. 11.3.2 Demonstration Program in C++ 11.3.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: 3This content is available online at http://cnx.org/content/m19549/1.10/.
  • 145. 137 • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 11.3.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Relational_Operators.cpp 4 11.4 Compound Statement5 11.4.1 The Need for a Compound Statement For illustration we will use the syntax for the if then else control structure within the C++ programming language. However this problem generally exits for all control structures within any language that requires the use of compound statements. The syntax is: if (expression) statement; else statement; Within the C++ programming language there can be only one statement listed as the action part of a control structure. Often, we will want to do more than one statement. This problem is overcome by creating a compound statement. The brace symbols the opening { and the closing } - are used to create a compound statement. For example: if(expression) { statement; statement; } else { statement; statement; } Because programmers often forget that they can have only one statement listed as the action part of a control structure; the C++ programming industry encourages the use of indentation (to see the action parts clearly) and the use of compound statements (braces), even if there is only one action. Thus: if(expression) { 4See the le at http://cnx.org/content/m19549/latest/Demo_Relational_Operators.cpp 5This content is available online at http://cnx.org/content/m19683/1.2/.
  • 146. 138 CHAPTER 11. 11. TWO WAY SELECTION statement; } else { statement; } By writing code in this manner, if the programmer modies the code by adding more statements to either the action true or the action false; they will not introduce either compiler or logic errors. Using indentation and braces should become standard practice for C++ programmers and programmers in any other language that require the use of compound statements with the control strucutes. 11.4.2 Other Uses of a Compound Statement A compound statement is a unit of code consisting of zero or more statements. It is also known as a block. The compound statement allows a group of statements to become one single entry. You used a compound statement in your rst program when you formed the body of the function main. All C++ functions contain a compound statement known as the function body. A compound statement consist of an opening brace, optional declarations, denitions, and statements, followed by a closing brace. Although all three are optional, one should be present. 6 11.4.3 Denitions Denition 11.6: compound statement A unit of code consisting of zero or more statements. Denition 11.7: block Another name for a compound statement. 11.5 Practice 11: Two Way Selection7 11.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Given pseudocode, write the C++ code for a program that uses the if then else control structure. 11.5.2 Memory Building Activities Link to: MBA 11 8 6Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United States of America: Thompson Brooks/Cole, 2004) 100. 7This content is available online at http://cnx.org/content/m19764/1.14/. 8See the le at http://cnx.org/content/m19764/latest/index.html
  • 147. 139 11.5.3 Exercises Exercise 11.2 (Solution on p. 141.) Evaluate the following Boolean expressions: 1. 25 7 2. 3 7 3. 14 7 4. 17 = 7 5. 25 = 7 6. 13 == 7 7. 9 != 7 8. 5 ! 7 11.5.4 Miscellaneous Items Link to: Animated gif showing if then else 9 Link to: Manipulation of Data Part 2 10 11.5.5 Lab Assignment 11.5.5.1 Creating a Folder or Sub-Folder for Chapter 11 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_11 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 11.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_11_Pseudocode.txt 11 11.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le from the Lab_11_Pseudocode.txt le. Name it: Lab_11.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 9See the le at http://cnx.org/content/m19764/latest/if_then_else_ow.gif 10See the le at http://cnx.org/content/m19764/latest/Manipulation_Data_Part_2.pdf 11See the le at http://cnx.org/content/m19764/latest/Lab_11_Pseudocode.txt
  • 148. 140 CHAPTER 11. 11. TWO WAY SELECTION 11.5.6 Problems 11.5.6.1 Problem 11a Instructions Create a table with the six relational operators and their meanings. 11.5.6.2 Problem 11b Instructions Explain why we are using the if then else to manipulate the input data in the example below. Example 11.1: C++ source code cout nEnter one side of the rectangle ---------: ; cin side1; cout nEnter the other side of the rectangle ---: ; cin side2; if (side1 side2) { length = side1; width = side2; } else { length = side2; width = side1; }
  • 149. 141 Solutions to Exercises in Chapter 11 Solution to Exercise 11.1 (p. 136) Answers: 1. 1 2. 0 3. 0 4. 1 5. 0 6. 0 7. 1 8. Error, the not less than is not a valid operator. Solution to Exercise 11.2 (p. 139) Answers: 1. 0 2. 1 3. 1 4. 0 5. 1 6. 0 7. 1 8. Error, the not greater than is not a valid operator.
  • 150. 142 CHAPTER 11. 11. TWO WAY SELECTION
  • 151. Chapter 12 12. Multiway Selection 12.1 Nested If Then Else1 12.1.1 Introduction to Mulitway Selection 12.1.1.1 Nested Control Structures We are going to rst introduce the concept of nested control structures. Nesting is a concept that places one item inside of another. Consider: if expression true action else false action This is the basic form of the if then else control structure. Now consider: if age is less than 18 you can't vote if age is less than 16 you can't drive else you can drive else you can vote if age is less than 21 you can't drink else you can drink As you can see we simply included as part of the true action a statement and another if then else control structure. We did the same (nested another if then else) for the false action. In our example we nested if then else control structures. Nesting could have an if then else within a while loop. Thus, the concept of nesting allows the mixing of the dierent categories of control structures. 1This content is available online at http://cnx.org/content/m19951/1.5/. 143
  • 152. 144 CHAPTER 12. 12. MULTIWAY SELECTION 12.1.1.2 Multiway Selection One of the drawbacks of two way selection is that we can only consider two choices. But what do you do if you have more than two choices. Consider the following which has four choices: if age equal to 18 you can now vote else if age equal to 39 you are middle aged else if age equal to 65 you can consider retirement else your age is unimportant You get an appropriate message depending on the value of age. The last item is referred to as the default. If the age is not equal to 18, 39 or 65 you get the default message. In some situations there is no default action. Consider: if age equal to 18 you can now vote else if age equal to 39 you are middle aged else if age equal to 65 you can consider retirement The last if then else control structure has no else. It's implied else do nothing. Without the default the multiway selection could be written as a series of if then without the else structures. Consider: if age equal to 18 you can now vote if age equal to 39 you are middle aged if age equal to 65 you can consider retirement We have shown two ways to accomplish multiway selection. The choice of using nested it then else control structures or a series of if then control structures is decided on the existence of a default action (you must use nested if then else) or programmer preference if there is not a default action (you may use nested if then else or a series of if then control structures). 12.1.2 if then else Syntax within C++ The syntax for the if then else control structure within the C++ programming language is: Example 12.1: C++ source code: Layout of an if then else
  • 153. 145 if (expression) { statement; } else { statement; } note: The test expression is within the parentheses, but this is not a function call. The parentheses are part of the control structure. Additionally, there is no semicolon after the parenthesis following the expression. 12.1.3 C++ Example Multiway selection is often needed to cover all possibilities. Assume that the user has been prompted for the ages of two people with the answers stored in variables named age1 and age2. Consider: Example 12.2: C++ source code if(age1 age2) { cout nnThe first person is older.; } else { cout nnThe second person is older.; } What if the two persons are the same age? The program incorrectly says the second person is older. To solve this we must handle all three possibilities. Consider this mulitway selection example: Example 12.3: C++ source code if(age1 == age2) { cout nnThey are the same age.; } else { if(age1 age2) { cout nnThe first person is older.; } else
  • 154. 146 CHAPTER 12. 12. MULTIWAY SELECTION { cout nnThe second person is older.; } } 12.1.4 Denitions Denition 12.1: nested control structures Placing one control structure inside of another. Denition 12.2: multiway selection Using control structures to be able to select from more than two choices. 12.2 Logical Operators2 12.2.1 Overview of the Logical Operators Within most languages, expressions that yield Boolean data type values are divided into two groups. One group uses the relational operators within their expressions and the other group uses logical operators within their expressions. The logical operators are often used to help create a test expression that controls program ow. This type of expression is also known as a Boolean expression because they create a Boolean answer or value when evaluated. The answers to Boolean expressions within the C++ programming language are a value of either 1 for true or 0 for false. There are three common logical operators that give a Boolean value by manipulating other Boolean operand(s). Operator symbols and/or names vary with dierent programming languages. The C++ programming language operators with their meanings are: C++ Operator Meaning Comment Typing Logical and two ampersands || Logical or two vertical dashes or piping symbols ! Logical not unary the exclamation point Table 12.1 In most languages there are strict rules for forming proper logical expressions. An example is: 6 4 2 = 14 This expression has two relational operators and one logical operator. Using the precedence of operator rules the two relational comparisons will be done before the logical and operation. Thus: 1 1 or true true The nal evaluation of the expression is: 1 meaning true. We can say this in English as: It is true that six is greater than four and that two is less than or equal to fourteen. When forming logical expressions programmers often use parentheses (even when not technically needed) to make the logic of the expression very clear. Consider the above complex Boolean expression rewritten: (6 4) (2 = 14) 2This content is available online at http://cnx.org/content/m19847/1.6/.
  • 155. 147 12.2.2 Truth Tables A common way to show logical relationships is in truth tables. Logical and () x y x y false false false false true false true false false true true true Table 12.2 Logical or (||) x y x ||y false false false false true true true false true true true true Table 12.3 Logical not (!) x !x false true true false Table 12.4 12.2.3 Examples I call this example of why I hate and and love or. Everyday as I came home from school on Monday through Thursday; I would ask my mother, May I go outside and play? She would answer, If your room is clean and your homework is done then you may go outside and play. I learned to hate the word and. I could manage to get one of the tasks done and have some time to play before dinner, but both of them. . . well, I hated and. On Friday my mother took a more relaxed view point and when asked if I could go outside and play she responded, If your room is clean or your homework is done then you may go outside and play. I learned to clean my room quickly on Friday afternoon. Well needless to say, I loved or. For the next example, just imagine a teenager talking to their mother. During the conversation mom says, After all, your Dad is reasonable! The teenager says, Reasonable. (short pause) Not. Maybe college professors will think that all their students studied for the exam. Ha ha! Not. Well, I hope you get the point. Exercise 12.1 (Solution on p. 159.) Evaluate the following Logical Boolean expressions:
  • 156. 148 CHAPTER 12. 12. MULTIWAY SELECTION 1. 25 7 || 15 36 2. 15 36 || 3 7 3. 14 7 5 = 5 4. 4 3 17 = 7 5. ! false 6. ! (13 != 7) 7. 9 != 7 ! 0 8. 5 7 12.2.4 Demonstration Program in C++ 12.2.4.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 12.2.4.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Logical_Operators.cpp 3 12.2.5 Denitions Denition 12.3: logical operator An operator used to create complex Boolean expressions. Denition 12.4: truth tables A common way to show logical relationships. 12.3 Case Control Structure4 12.3.1 Traditional Case Control Structure 12.3.1.1 Multiway Selection using the Case Structure One of the drawbacks of two way selection is that we can only consider two choices. But what do you do if you have more than two choices. Consider the following which has four choices: if age equal to 18 you can vote else 3See the le at http://cnx.org/content/m19847/latest/Demo_Logical_Operators.cpp 4This content is available online at http://cnx.org/content/m19963/1.2/.
  • 157. 149 if age equal to 39 you're middle aged else if age equal to 65 consider retirement else age is un-important You get an appropriate message depending on the value of age. The last item is referred to as the default. If the age is not equal to 18, 39 or 65 you get the default message. In some situations there is no default action. Consider this owchart example: Figure 12.1 This owchart is of the case control structure and is used for multiway selection. The decision box holds the variable age. The logic of the case is one of equality where in the value in the variable age is compared to the listed values in order from left to right. Thus, the value stored in age is compared to 18 or is age equal to 18. If it is true, the logic ows down through the action and drops out at the bottom of the case structure. If the value of the test expression is false, it moves to the next listed value to the right and makes another comparison. It works exactly the same as our nested if then else structure.
  • 158. 150 CHAPTER 12. 12. MULTIWAY SELECTION 12.3.1.2 C++ Code to Accomplish Multiway Selection Using the same example as above, here is the C++ code to accomplish the case control structure. Example 12.4: C++ source code switch (age) { case 18: cout nYou can vote.; break; case 39: cout nYou're middle aged.; break; case 65: cout nConsider retirement.; break; default: cout nAge is un-important.; } The rst thing you should note is that the C++ programming language does not formally have a case control structure. It does have a switch control structure but it acts dierently than the traditional case control structure. We use a break (which is a branching control structure) with the switch to make it act like the traditional case structure. This is one of the few allowable ways to use the switch with break within the C++ programming language to simulate the traditional case structure. All other uses of the switch or break are to be avoided if you are to stay within the bounds of good structured programming techniques. The value in the variable age is compared to the rst case (Note: It is one of the C++ reserved words.) which is the value 18 using an equality comparison or is age equal to 18. If it is true, the cout is executed which displays You can vote. and the next line of code (the break) is done (which jumps us to the end of the control structure). If it is false, it moves on to the next case for comparison. 12.3.2 Limitations of the Case Control Structure Most programming languages including C++ require the listed values for the case control structure be of the integer family of data types. This basically means either an integer or character data type. Additionally, ranges of values are not allowed. Consider this owcharting example that used ranges:
  • 159. 151 Figure 12.2 Consider also the following pseudocode for the same logic: Case of age 0 to 17 Display You can't vote. 18 to 64 Display You're in your working years. 65 + Display You should be retired. Endcase Using the case control structure when using non integer family or ranges of values is allowed when design- ing a program and documenting that design with pseudocode or owcharting. However, the implementation in most languages would follow a nested if then else approach with complex Boolean expressions. The logic of the above examples would look like this: if age 0 and age = to 17 display You can't vote. else if age is = 18 and age = 64
  • 160. 152 CHAPTER 12. 12. MULTIWAY SELECTION display You're in your working years. else display You should be retired. 12.3.3 Good Structured Programming Methods Most text book authors conrm that good structured programming techniques and habits are more important than concentrating on the technical possibilities and capabilities of the language that you are using to learn programming skills. Remember, this module is concentrating on programming fundamentals and concepts and it uses the C++ programming language to build our initial programming skills. It is not a created with the intent to cover the C++ programming language in detail, despite the fact that at times we have to cover C++ language mechanics. 12.3.4 Denitions Denition 12.5: case A control structure that does mulitway selection. Denition 12.6: switch A C++ control structure that can be made to act like a case control structure. 12.4 Branching Control Structures5 12.4.1 Discussion The branching control structures allow the ow of execution to jump to a dierent part of the program. The three common branching control structures are: break, continue and goto. These are rarely used in modular structured programming with one exception. That exception is in relation to creating the case within the selection category of control structures. There is one other branching control structure that is often not viewed as branching control structure. It is: return. Additionally, we will add to our list of branching items a pre-dened function commonly used in the C++ programming language of: exit that is part of the C standard library (cstdlib). Some denitions: 12.4.1.1 Denitions Denition 12.7: branching control structures Allow the ow of execution to jump to a dierent part of the program. Denition 12.8: break A branching control structure that terminates the existing structure. Denition 12.9: continue A branching control structure that causes a loop to stop its current iteration and begin the next one. Denition 12.10: goto A branching control structure that causes the logic to jump to a dierent place in the program. Denition 12.11: return A branching control structure that causes a function to jump back to the function that called it. Denition 12.12: exit A pre-dened function used to prematurely stop a program and jump to the operating system. 5This content is available online at http://cnx.org/content/m19947/1.2/.
  • 161. 153 We will discuss each item indicating which ones are allowed or not allowed within good structured programming practices. 12.4.2 Examples 12.4.2.1 break The break is used in one of two ways; with the switch (a C++ programming structure) to make it act like a case structure (it's more common name within most programming languages) or as part of a looping process to break out of the loop. The rst usage is allowed in good structured programming and the second is not allowed in good structured programming. Example 12.5: C++ source code switch (age) { case 18: cout nYou can vote.; break; case 39: cout nYou are middle aged.; break; case 65: cout nYou are at retirement age.; break; default: cout nYour current age is not important.; } The following is an unauthorized use of break in a loop and it gives the appearance that the loop will execute 8 times, but the break statement causes it to stop during the fth iteration. Example 12.6: C++ source code counter = 0; while(counter 8) { cout counter endl; if (counter == 4) { break; } counter++; } 12.4.2.2 continue The continue structure is not allowed in good structured programming. The following gives the appearance that the loop will print to the monitor 8 times, but the continue statement causes it not to print number 4. Example 12.7: C++ source code
  • 162. 154 CHAPTER 12. 12. MULTIWAY SELECTION for(counter = 0; counter 8; counter++) { if (counter == 4) { continue; } cout counter endl; } 12.4.2.3 goto The goto structure is not allowed in good structured programming. It is with a certain amount of hesitancy that we even show it. Many textbooks do not cover the goto. Within the C++ programming language you create a label with an identier name followed by a colon. You use the command word goto followed by the label. A label can be used before it is declared. Example 12.8: C++ source code some lines of code; goto mynewspot; //jumps to the label some lines of code; some lines of code; some lines of code; mynewspot: some statement; //Declared label some lines of code; 12.4.2.4 return The return is allowed in good structured programming, but only at the end of a function. A function should not pre-maturely end by having the logic of the function have it terminate by jumping back to the function that called it. Example 12.9: C++ source code //****************************************************** // get data //****************************************************** void get_data(void) { // Input - Test Data - 5678.9, 5432.1 cout nEnter the length of the property in feet ---: ; cin property_length; cout nEnter the width of the property in feet ----: ;
  • 163. 155 cin property_width; return; } 12.4.2.5 exit Although exit is technically a pre-dened function, it is covered here because of its common usage in pro- gramming. A good example is the opening a le and then testing to see if the le was actually opened. If not, we have an error that usually indicates that we want to pre-maturely stop the execution of the program. Within the C++ programming language the exit function terminates the running of the program and in the process returns an integer value back to the operating system. It ts the denition of branching which is to jump to some other place in the program. In our example the value returned to the operating system is the value of the constant named: EXIT_FAILURE. Example 12.10: C++ source code inData.open(filename); //Open input file if (!inData) //Test to see if file was opened { cout nnError opening file: filename nn; pause(); //Pause - user reads message exit(EXIT_FAILURE); //Allows a pre-mature jump to OS } 12.5 Practice 12: Multiway Selection6 12.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Identify which selection control structures are two-way selection and which are multiway selection. 3. Understand, dene and/or explain case, switch and nested if then else. 4. Be able to write pseudo code or owcharting for the case control structure. 5. Be able to write C++ source code for a case structure using equality and listed values (switch with break to act like a case structure). 6. Be able to write C++ source code for a case structure using ranges of values or oating-point values (nested if then else to act like a case structure). 7. When feasible, be able to convert C++ source code from switch acting like a case to nested if then else and vice versa. 6This content is available online at http://cnx.org/content/m19968/1.10/.
  • 164. 156 CHAPTER 12. 12. MULTIWAY SELECTION 12.5.2 Memory Building Activities Link to: MBA 12 7 12.5.3 Exercises Exercise 12.2 (Solution on p. 159.) Evaluate the following Logical Boolean expressions: 1. 25 39 || 15 36 2. 19 26 || 13 17 3. 14 7 6 = 6 4. 4 3 17 = 7 5. ! true 6. ! (13 == 7) 7. 9 != 7 ! 1 8. 6 8 12.5.4 Miscellaneous Items Link to: Manipulation of Data Part 3 8 12.5.5 Lab Assignment 12.5.5.1 Creating a Folder or Sub-Folder for Chapter 12 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_12 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 12.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_12a.cpp 9 12.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Compile and run the Lab_12a.cpp source code le. Understand how it works. • Copy the source code le Lab_12a.cpp naming it: Lab_12b.cpp • Convert the nested if then else to a switch with breaks. • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 7See the le at http://cnx.org/content/m19968/latest/index.html 8See the le at http://cnx.org/content/m19968/latest/Manipulation_Data_Part_3.pdf 9See the le at http://cnx.org/content/m19968/latest/Lab_12a.cpp
  • 165. 157 12.5.6 Problems 12.5.6.1 Problem 12a Instructions Flowchart the following pseudocode: Example 12.11: pseudocode Case of shoe_size 4 to 6 Display Small. 7 to 9 Display Medium. 10 + Display Large. Endcase 12.5.6.2 Problem 12b Instructions The Flip-Flops is a unique shoe store that only sells ip-ops. Adult shoe sizes less than 4 are handled in the children's department, thus we don't need to concern ourselves with sizes less than 4. Half shoe sizes are to be rounded down, thus the prompt to the user that happens before this case structure will have addressed that issue. The variable shoe_size will be an integer value between 4 and 1,000,000,000 (one billion). Write C++ source code for the following pseudocode: Example 12.12: pseudocode Case of shoe_size 4 to 6 Display Small. 7 to 9 Display Medium. 10 + Display Large. Endcase 12.5.6.3 Problem 12c Instructions Write C++ source code for the following pseudocode: Example 12.13: pseudocode If age equal to 24 Display a message You're the same age as Melinda. Else If age equal to 27 Display a message You're the same age as Ruth. Else If age equal to 34 Display a message You're the same age as Ben. Else
  • 166. 158 CHAPTER 12. 12. MULTIWAY SELECTION Display a message You're age is un-important. Endif Endif Endif
  • 167. 159 Solutions to Exercises in Chapter 12 Solution to Exercise 12.1 (p. 147) Answers: 1. 0 2. 1 3. 1 4. 0 5. 1 6. 0 7. 1 8. Error, there needs to be an operand between the operators and . Solution to Exercise 12.2 (p. 156) Answers: 1. 0 2. 1 3. 0 4. 1 5. 0 6. 1 7. 0 8. Error, there needs to be an operand between the operators and .
  • 168. 160 CHAPTER 12. 12. MULTIWAY SELECTION
  • 169. Chapter 13 13. Test After Loops 13.1 Do While Loop1 13.1.1 Introduction to Test After Loops There are two commonly used test after loops in the iteration (or repetition) category of control structures. They are: do while and repeat until. This module covers the: do while. 13.1.1.1 Understanding Iteration in General do while The concept of iteration is connected to possibly wanting to repeat an action. Like all control structures we ask a question to control the execution of the loop. The term loop comes from the circular looping motion that occurs when using owcharting. The basic form of the do while loop is as follows: do some statements or action some statements or action some statements or action update the flag while the answer to the question is true In every language that I know the question (called a test expression) is a Boolean expression. The Boolean data type has two values true and false. Let's rewrite the structure to consider this: do some statements or action some statements or action some statements or action update the flag while expression is true Within the do while control structure there are three attributes of a properly working loop. They are: • Action or actions • Update of the ag 1This content is available online at http://cnx.org/content/m20596/1.4/. 161
  • 170. 162 CHAPTER 13. 13. TEST AFTER LOOPS • Test expression The English phrasing is, You do the action while the expression is true. This is looping on the true. When the test expression is false, you stop the loop and go on with the next item in the program. Notice, because this is a test after loop the action will always happen at least once. It is called a test after loop because the test comes after the action. It is also sometimes called a post-test loop, meaning the test is post (or Latin for after) the action and update. 13.1.2 The do while Structure within C++ 13.1.2.1 Syntax The syntax for the do while control structure within the C++ programming language is: do { statement; statement; statement; statement; // This statement updates the flag; } while (expression); note: The test expression is within the parentheses, but this is not a function call. The parentheses are part of the control structure. Additionally, there is a semicolon after the parenthesis following the expression. 13.1.2.2 An Example Example 13.1: C++ source code: do while loop do { cout nWhat is your age? ; cin age_user; cout nWhat is your friend's age? ; cin age_friend; cout nTogether your ages add up to: ; cout (age_user + age_friend); cout nDo you want to do it again? y or n ; cin loop_response; } while (loop_response == 'y'); The three attributes of a test after loop are present. The action part consists of the 6 lines that prompt for data and then displays the total of the two ages. The update of the ag is the displaying the question and getting the answer for the variable loop_response. The test is the equality relational comparison of the value in the ag variable to the lower case character of y.
  • 171. 163 This type of loop control is called an event controlled loop. The ag updating is an event where someone decides if they want the loop to execute again. Using indentation with the alignment of the loop actions and ag update is normal industry practice within the C++ community. 13.1.2.3 Innite Loops At this point it's worth mentioning that good programming always provides for a method to insure that the loop question will eventually be false so that the loop will stop executing and the program continues with the next line of code. However, if this does not happen then the program is in an innite loop. Innite loops are a bad thing. Consider the following code: Example 13.2: C++ source code: innite loop loop_response = 'y'; do { cout nWhat is your age? ; cin age_user; cout nWhat is your friend's age? ; cin age_friend; cout nTogether your ages add up to: ; cout (age_user + age_friend); } while (loop_response == 'y'); The programmer assigned a value to the ag before the loop and forgot to update the ag. Every time the test expression is asked it will always be true. Thus, an innite loop because the programmer did not provide a way to exit the loop (he forgot to update the ag). Consider the following code: Example 13.3: C++ source code: innite loop do { cout nWhat is your age? ; cin age_user; cout nWhat is your friend's age? ; cin age_friend; cout nTogether your ages add up to: ; cout (age_user + age_friend); cout nDo you want to do it again? y or n ; cin loop_response; } while (loop_response = 'y'); No matter what the user replies during the ag update, the test expression does not do a relational comparison but does an assignment. It assigns 'y' to the variable and asks if 'y' is true? Since all non-zero values are treated as representing true within the Boolean concepts of the C++ programming language, the answer to the text question is true. Viola, you have an innite loop.
  • 172. 164 CHAPTER 13. 13. TEST AFTER LOOPS 13.1.3 Denitions Denition 13.1: do while A test after iteration control structure available in C++. Denition 13.2: action item An attribute of iteration control structures. Denition 13.3: update item An attribute of iteration control structures. Denition 13.4: test item An attribute of iteration control structures. Denition 13.5: at least once Indicating that test after loops execute the action at least once. Denition 13.6: innite loop No method of exit, thus a bad thing. 13.2 Flag Concept2 13.2.1 Concept Discussion For centuries ags have been used as a signal to let others know something about the group or individual that is displaying, ying or waving the ag. There are country ags and state ags. Ships at sea ew the ag of their country. Pirates ew the skull and cross bones. A yellow ag was used for quarantine, usually the plague. Even pirates stayed away. Today, some people might recognize the ag used by scuba divers. The Presidents of most countries have a ag. At a race car event they use the checkered ag to indicate the race is over. 2This content is available online at http://cnx.org/content/m20404/1.5/.
  • 173. 165 Figure 13.1 Computer programming uses the concept of a ag in the same way that physical ags are used. A ag is anything that signals some information to the person looking at it. 13.2.2 Computer Implementation Any variable or constant that holds data can be used as a ag. You can think of the storage location as a ag pole. The value stored within the variable conveys some meaning and you can think of it as being the ag. An example might be a variable named: gender which is of the character data type. The two values normally stored in the variable are: 'F' and 'M' meaning female and male. Then, somewhere within a program we might look at the variable to make a decision: Example 13.4: ag controling an if then control structure if gender equals 'F' display Are you pregnant? get answer from user store in pregnant variable
  • 174. 166 CHAPTER 13. 13. TEST AFTER LOOPS Looking at the ag implies comparing the value in the variable to another value (a constant or the value in another variable) using a relational operator (in our above example: equality). Control structures are controlled by using a test expression which is usually a Boolean expres- sion. Thus, the ag concept of looking at the value in the variable and comparing it to another value is fundamental to understanding how all control structures work. 13.2.3 Two Flags with the Same Meaning Sometimes we will use an iteration control structure of do while to allow us to decide if we want to do the loop action again. A variable might be named loop_response with the user prompted for their answer of 'y' for yes or 'n' for no. Once the answer is retrieved from the keyboard and stored in our ag variable of loop_response the test expression to control the loop might be: Example 13.5: simple ag comparison loop_response equals 'y' This is ne but what if the user accidentally has on the caps lock. Then his response of 'Y' would not have the control structure loop and perform the action again. The solution lies in looking at the ag twice. Consider: Example 13.6: complex ag comparison loop_response equals 'y' or loop_response equals 'Y' We look to see if the ag is either a lower case y or an upper case Y by using a more complex Boolean expression with both relational and logical operators. 13.2.4 Multiple Flags in One Byte Within assembly language programming and in many technical programs that control special devices; the use of a single byte to represent several ags is common. This is accomplished by having each one of the 8 bits that make up the byte represent a ag. Each bit has a value of either 1 or 0 and can represent true and false, on or o, yes or no, etc. 13.2.5 Denitions Denition 13.7: ag A variable or constant used to store information that will normally be used to control the program. 13.3 Assignment vs Equality within C++3 13.3.1 General Discussion Most control structures use a test expression that executes either selection (as in the: if then else) or iteration (as in the while; do while; or for loops) based on the truthfulness or falseness of the expression. Thus, 3This content is available online at http://cnx.org/content/m19542/1.6/.
  • 175. 167 we often talk about the Boolean expression that is controlling the structure. Within many programming languages, this expression must be a Boolean expression and is governed by a tight set of rules. However, in C++ every data type can be used as a Boolean expression, because every data type can be demoted into a Boolean value by using the rule/concept that zero represents false and all non-zero values represent true. Within C++ we have the potential added confusion of the equals symbol as an operator that does not represent the normal math meaning of equality that we have used for most of our life. The equals symbol with C++ means: assignment. To get the equality concept of math within C++ we use two equal symbols to represent the relational operator of equality. Let's consider: if (pig = 'y') { cout nPigs are good; } else { cout nPigs are bad.; } The test expression of the control structure will always be true, because the expression is an assignment (not the relational operator of ==). It assigns the 'y' to the variable pig, then looks at the value in pig and determines that it is not zero; therefore the expression is true. And it will always be true and the else part will never be executed. This is not what the programmer had intended. Let's consider: do { cout nPigs are good; cout nDo it again, answer y or n: ; cin do_it_again } while (do_it_again = 'y'); The loop's test expression will always be true, because the expression is an assignment (not the relational operator of ==). It assigns the 'y' to the variable do_it_again, then looks at the value in do_it_again and determines that it is not zero; therefore the expression is true. And it will always be true and you have just created an innite loop. As a reminder, innite loops are not a good thing. These examples are to remind you that you must be careful in creating your test expressions so that they are indeed a question usually involving the relational operators. Don't get caught using assignment for equality. 13.4 Repeat Until Loop4 13.4.1 Introduction to Test After Loops There are two commonly used test after loops in the iteration (or repetition) category of control structures. They are: do while and repeat until. This module covers the: repeat until. 4This content is available online at http://cnx.org/content/m20597/1.2/.
  • 176. 168 CHAPTER 13. 13. TEST AFTER LOOPS 13.4.1.1 Understanding Iteration in General repeat until The concept of iteration is connected to possibly wanting to repeat an action. Like all control structures we ask a question to control the execution of the loop. The term loop comes from the circular looping motion that occurs when using owcharting. The basic form of the repeat until loop is as follows: repeat some statements or action some statements or action some statements or action update the flag until the answer to the question becomes true In every language that I know the question (called a test expression) is a Boolean expression. The Boolean data type has two values true and false. Let's rewrite the structure to consider this: repeat some statements or action some statements or action some statements or action update the flag until expression becomes true Within the repeat until control structure there are three attributes of a properly working loop. They are: • Action or actions • Update of the ag • Test expression The English phrasing is, You repeat the action until the expression becomes true. This is looping on the false. When the test expression becomes true, you stop the loop and go on with the next item in the program. Notice, because this is a test after loop the action will always happen at least once. It is called a test after loop because the test comes after the action. It is also sometimes called a post-test loop, meaning the test is post (or Latin for after) the action and update. 13.4.2 The repeat until Structure within C++ Well, it just does not exist. Most programming languages have either the do while or the repeat until control structures, but not both. 13.4.3 Denitions Denition 13.8: repeat until A test after iteration control structure that is not available in C++. 13.5 Practice 13: Test After Loops5 13.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 5This content is available online at http://cnx.org/content/m20642/1.7/.
  • 177. 169 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Identify which selection control structures are test after iteration. 3. Be able to write pseudo code or owcharting for the do while control structure. 4. Be able to write C++ source code for a do while control structure. 13.5.2 Memory Building Activities Link to: MBA 13 6 13.5.3 Exercises Exercise 13.1 (Solution on p. 171.) Answer the following statements as either true or false: 1. The do while and repeat until structure act exactly the same. 2. Students sometimes confuse assignment and equality. 3. The repeat until looping control structure is available in all programming languages. 4. Because ags are often used, they are usually a special data type. 5. The do while is a test before loop. 13.5.4 Miscellaneous Items Link to: Animated gif showing a do while loop 7 13.5.5 Lab Assignment 13.5.5.1 Creating a Folder or Sub-Folder for Chapter 13 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_13 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 13.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_13_Pseudocode.txt 8 13.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le from the Lab_13_Pseudocode.txt le. Name it: Lab_13.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 6See the le at http://cnx.org/content/m20642/latest/index.html 7See the le at http://cnx.org/content/m20642/latest/do_while_ow.gif 8See the le at http://cnx.org/content/m20642/latest/Lab_13_Pseudocode.txt
  • 178. 170 CHAPTER 13. 13. TEST AFTER LOOPS 13.5.6 Problems 13.5.6.1 Problem 13a Instructions Flowchart the following pseudocode: Example 13.7: pseudocode Do Display I like cheese cake! Display Do it again? y or n --- Get answer from keyboard While answer is 'y'
  • 179. 171 Solutions to Exercises in Chapter 13 Solution to Exercise 13.1 (p. 169) Answers: 1. false 2. true 3. false 4. false 5. false
  • 180. 172 CHAPTER 13. 13. TEST AFTER LOOPS
  • 181. Chapter 14 14. Test Before Loops 14.1 Increment and Decrement Operators1 14.1.1 General Discussion The idea of increment or decrement is to either add or subtract 1 from a variable that is usually acting as a ag. Using a variable named counter; in generic terms, for example: increment the counter The concept is: counter is assigned counter + 1 That is you fetch the existing value of the counter and add one then store the answer back into the variable counter. Many programming languages allow their increment and decrement operators to only be used with the integer data type. Programmers will sometimes use inc and dec as abbreviations for increment and decrement respectively. Operator symbols and/or names vary with dierent programming languages. The C++ programming language operators with their meanings are: C++ Operator Meaning ++ increment, two plus signs decrement, two minus signs Table 14.1 14.1.2 C++ Code Examples 14.1.2.1 Basic Concept Within the C++ programming language the increment and decrement are often used in this simple generic way. The operator of increment is represented by two plus signs in a row. Examples: counter = counter + 1; counter += 1; counter++; ++counter; As C++ statements, the four examples all do the same thing. They add 1 to the value of whatever is stored in counter. The decrement opereator is represented by two minus signs in a row. They would 1This content is available online at http://cnx.org/content/m20499/1.3/. 173
  • 182. 174 CHAPTER 14. 14. TEST BEFORE LOOPS subtract 1 from the value of whatever was in the variable being decremented. The precedence of increment and decrement depends on if the operator is attached to the right of the operand (postx) or to the left of the operand (prex). Within C++ postx and prex do not have the same precedence. 14.1.2.2 Postx Increment Postx increment says to use my existing value then when you are done with the other operators; increment me. An example: int oldest = 44; // variable set up with initialization then later on in the code age = oldest++; The rst use of the oldest variable is an Rvalue context where the existing value of 44 is pulled or fetched and then assigned to the variable age; then the variable oldest is incremented with its value changing from 44 to 45. This seems to be a violation of precedence because increment is higher precedence than assignment. But that is how postx increment works within the C++ programming language. 14.1.2.3 Prex Increment Prex increment says to increment me now and use my new value in any calculation. An example: int oldest = 44; // variable set up with initialization then later on in the code age = ++oldest; The variable oldest is incremented with the new value changing it from 44 to 45; then the new value is assigned to age. In postx age is assigned 44 in prex age is assigned 45. One way to help remember the dierence is to think of postx as being polite (use my existing value and return to increment me after the other operators are done) where as prex has an ego (I am important so increment me rst and use my new value for the rest of the evaluations). 14.1.2.4 Allowable Data Types Within some programming languages, increment and decrement can be used only on the integer data type. C++ however, expands this not only to all of the integer family but also to the oating-point family (oat and double). Incrementing 3.87 will change the value to 4.87. Decrementing 'C' will change the value to 'B'. Remember the ASCII character values are really one byte unsigned integers (domain from 0 to 255). 14.1.2.5 Exercises Exercise 14.1 (Solution on p. 182.) Evaluate the following items using increment or decrement: 1. True or false: x = x +1 and x+=1 and x++ all accomplish increment? 2. Given: int y = 19; and int z; what values will y and z have after: z = y; 3. Given: double x = 7.77; and int y; what values will x and y have after: y = ++x; 4. Is this ok? Why or why not? 6 * ++(age -3)
  • 183. 175 14.1.3 Denitions Denition 14.1: increment Adding one to the value of a variable. Denition 14.2: decrement Subtracting one from the value of a variable. Denition 14.3: postx Placing the increment or decrement operator to the right of the operand. Denition 14.4: prex Placing the increment or decrement operator to the left of the operand. 14.2 While Loop2 14.2.1 Introduction to Test Before Loops There are two commonly used test before loops in the iteration (or repetition) category of control structures. They are: while and for. This module covers the: while. 14.2.1.1 Understanding Iteration in General while The concept of iteration is connected to possibly wanting to repeat an action. Like all control structures we ask a question to control the execution of the loop. The term loop comes from the circular looping motion that occurs when using owcharting. The basic form of the while loop is as follows: initialization of the flag while the answer to the question is true then do some statements or action some statements or action some statements or action update the flag In almost all languages the question (called a test expression) is a Boolean expression. The Boolean data type has two values true and false. Let's rewrite the structure to consider this: initialization of the flag while the expression is true then do some statements or action some statements or action some statements or action update the flag Within the while control structure there are four attributes to a properly working loop. They are: • Initializing the ag • Text expression • Action or actions • Update of the ag 2This content is available online at http://cnx.org/content/m20598/1.6/.
  • 184. 176 CHAPTER 14. 14. TEST BEFORE LOOPS The initialization of the ag is not technically part of the control structure, but a necessary item to occur before the loop is started. The English phrasing is, While the expression is true, do the following actions. This is looping on the true. When the test expression is false, you stop the loop and go on with the next item in the program. Notice, because this is a test before loop the action might not happen. It is called a test before loop because the test comes before the action. It is also sometimes called a pre-test loop, meaning the test is pre (or Latin for before) the action and update. 14.2.1.2 Human Example of the while Loop Consider the following one-way conversation from a mother to her child. Child: The child says nothing, but mother knows the child had Cheerios for breakfast and history tells us that the child most likely spilled some Cheerios on the oor. Mother says: While it is true that you see (As long as you can see) a Cheerio on oor, pick it up and put it in the garbage. Note: All of the elements are present to determine the action (or ow) that the child will be doing (in this case repeating). Because the question (can you see a Cheerios) has only two possible answers (true or false) the action will continue while there are Cheerios on the oor. Either the child 1) never picks up a Cheerio because they never spilled any or 2) picks up a Cheerio and keeps picking up Cheerios one at a time while he can see a Cheerio on the oor (that is until they are all picked up). 14.2.2 The while Structure within C++ 14.2.2.1 Syntax The syntax for the do while control structure within the C++ programming language is: statement; // This statement initializes the flag; while (expression) { statement; statement; statement; statement; // This statement updates the flag; } note: The test expression is within the parentheses, but this is not a function call. The parentheses are part of the control structure. Additionally, there is not a semicolon after the parenthesis following the expression. 14.2.2.2 An Example Example 14.1: C++ source code: while loop_response = 'y'; while (loop_response == 'y') { cout nWhat is your age? ; cin age_user; cout nWhat is your friend's age? ;
  • 185. 177 cin age_friend; cout nTogether your ages add up to: ; cout (age_user + age_friend); cout nDo you want to do it again? y or n ; cin loop_response; } The four attributes of a test before loop are present. The initialization of the ag. The test is the equality relational comparison of the value in the ag variable to the lower case character of y. The action part consists of the 6 lines that prompt for data and then displays the total of the two ages. The update of the ag is the displaying the question and getting the answer for the variable loop_response. This type of loop control is called an event controlled loop. The ag updating is an event where someone decides if they want the loop to execute again. Using indentation with the alignment of the loop actions and ag update is normal industry practice within the C++ community. 14.2.2.3 Innite Loops At this point it's worth mentioning that good programming always provides for a method to insure that the loop question will eventually be false so that the loop will stop executing and the program continues with the next line of code. However, if this does not happen then the program is in an innite loop. Innite loops are a bad thing. Consider the following code: Example 14.2: C++ source code: innite loop loop_response = 'y'; while (loop_response == 'y') { cout nWhat is your age? ; cin age_user; cout nWhat is your friend's age? ; cin age_friend; cout nTogether your ages add up to: ; cout (age_user + age_friend); } The programmer assigned a value to the ag before the loop which is correct. However, he forgot to update the ag. Every time the test expression is asked it will always be true. Thus, an innite loop because the programmer did not provide a way to exit the loop (he forgot to update the ag). Consider the following code: Example 14.3: C++ source code: innite loop loop_response = 'y'; while (loop_response = 'y') { cout nWhat is your age? ; cin age_user; cout nWhat is your friend's age? ;
  • 186. 178 CHAPTER 14. 14. TEST BEFORE LOOPS cin age_friend; cout nTogether your ages add up to: ; cout (age_user + age_friend); cout nDo you want to do it again? y or n ; cin loop_response; } No matter what the user replies during the ag update, the test expression does not do a relational comparison but does an assignment. It assigns 'y' to the variable and asks if 'y' is true? Since all non-zero values are treated as representing true within the Boolean concepts of the C++ programming language, the answer to the text question is true. Viola, you have an innite loop. 14.2.3 Counting Loops The examples above are for an event controlled loop. The ag updating is an event where someone decides if they want the loop to execute again. Often the initialization sets the ag so that the loop will execute at least once. Another common usage of the while loop is as a counting loop. Consider: Example 14.4: C++ source code: while loop that is counting counter = 0; while (counter 5) { cout nI love ice cream!; counter++; } The variable counter is said to be controlling the loop. It is set to zero (called initialization) before entering the while loop structure and as long as it is less than 5 (ve); the loop action will be executed. But part of the loop action uses the increment operator to increase counter's value by one. After executing the loop ve times (once for counter's values of: 0, 1, 2, 3 and 4) the expression will be false and the next line of code in the program will execute. A counting loop is designed to execute the action (which could be more than one statement) a set of given number of times. In our example, the message is displayed ve times on the monitor. It is accomplished my making sure all four attributes of the while control structure are present and working properly. The attributes are: • Initializing the ag • Text expression • Action or actions • Update of the ag Missing an attribute might cause an innite loop or give undesired results (does not work properly). 14.2.3.1 Innite Loops Consider: Example 14.5: C++ source code: innite loop
  • 187. 179 counter = 0; while (counter 5) { cout nI love ice cream!; } Missing the ag update usually causes an innite loop. 14.2.3.2 Variations on Counting In the following example, the integer variable age is said to be controlling the loop (that is the ag). We can assume that age has a value provided earlier in the program. Because the while structure is a test before loop; it is possible that the person's age is 0 (zero) and the rst time we test the expression it will be false and the action part of the loop would never be executed. Example 14.6: C++ source code: while as a counting loop while (0 age) { cout nI love candy!; age--; } Consider the following variation assuming that age and counter are both integer data type and that age has a value: Example 14.7: C++ source code: while as a counting loop counter = 0; while (counter age) { cout nI love corn chips!; counter++; } This loop is a counting loop similar to our rst counting loop example. The only dierence is instead of using a literal constant (in other words 5) in our expression, we used the variable age (and thus the value stored in age) to determine how many times to execute the loop. However, unlike our rst counting loop example which will always execute exactly 5 times; it is possible that the person's age is 0 (zero) and the rst time we test the expression it will be false and the action part of the loop would never be executed. 14.2.4 Denitions Denition 14.5: while A test before iteration control structure available in C++. Denition 14.6: loop attributes Items associated with iteration or looping control structures.
  • 188. 180 CHAPTER 14. 14. TEST BEFORE LOOPS Denition 14.7: initialize item An attribute of iteration control structures. Denition 14.8: might not happen Indicating that test before loops might not execute the action. Denition 14.9: event controlled Using user input to control a loop. Denition 14.10: counting controlled Using a variable to count up or down to control a loop. 14.3 Practice 14: Test Before Loops3 14.3.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Identify which selection control structures are test before iteration. 3. Be able to write pseudo code or owcharting for the while control structure. 4. Be able to write C++ source code for the while control structure. 14.3.2 Memory Building Activities Link to: MBA 14 4 14.3.3 Exercises Exercise 14.2 (Solution on p. 182.) Evaluate the following items using increment or decrement: 1. True or false: x = x - 1; and x -= 1; and x; and x; all accomplish decrement. 2. Given: int y = 26; and int z; what values will y and z have after: z = y++; 3. Given: double x = 4.44; and int y; what values will x and y have after: y = x; 4. As an expression: 10 / ++(money * 4) Is this ok? Why or why not? 14.3.4 Miscellaneous Items Link to: Animated gif showing a while loop 5 3This content is available online at http://cnx.org/content/m20643/1.9/. 4See the le at http://cnx.org/content/m20643/latest/index.html 5See the le at http://cnx.org/content/m20643/latest/while_ow.gif
  • 189. 181 14.3.5 Lab Assignment 14.3.5.1 Creating a Folder or Sub-Folder for Chapter 14 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_14 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 14.3.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_14_Pseudocode.txt 6 14.3.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le from the Lab_14_Pseudocode.txt le. Name it: Lab_14.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 14.3.6 Problems 14.3.6.1 Problem 14a Instructions Flowchart the following pseudocode: Example 14.8: pseudocode Assign counter a value of zero While counter is less than 5 Display I love cookies! Increment counter Endwhile 6See the le at http://cnx.org/content/m20643/latest/Lab_14_Pseudocode.txt
  • 190. 182 CHAPTER 14. 14. TEST BEFORE LOOPS Solutions to Exercises in Chapter 14 Solution to Exercise 14.1 (p. 174) Answers: 1. true 2. y is: 18 and z is: 19 3. x is: 8.77 and y is: 8 Note: truncation of 8.77 to 8 upon demotion. 4. Not ok. Error, the item incremented must have Lvalue attributes, usually a variable. It is an expression not a variable. Solution to Exercise 14.2 (p. 180) Answers: 1. true 2. y is: 27 and z is: 26 3. x is: 3.44 and y is: 3 Note: truncation of 3.44 to 3 upon demotion to integer data type. 4. Not ok. Error, the item incremented must have Lvalue attributes, usually a variable. Because of the parentheses, it is an expression not a variable.
  • 191. Chapter 15 15. Counting Loops 15.1 For Loop1 15.1.1 Introduction to Test Before Loops There are two commonly used test before loops in the iteration (or repetition) category of control structures. They are: while and for. This module covers the: for. 15.1.1.1 Understanding Iteration in General for In most programming languages the for loop is used exclusively for counting; that is to repeat a loop action as it either counts up or counts down. There is a starting value and a stopping value. The question that controls the loop is a test expression that compares the starting value to the stopping value. This expression is a Boolean expression and is usually using the relational operators of either less than (for counting up) or greater than (for counting down). The term loop comes from the circular looping motion that occurs when using owcharting. The basic form of the for loop (counting up) is as follows: for initialization of the starting value starting value is less than the stopping value some statements or action some statements or action some statements or action increment the starting value It might be best to understand the for loop by understanding a while loop acting like a counting loop. Let's consider; initialization of the starting value while the starting value is less than the stopping value some statements or action some statements or action some statements or action increment the starting value 1This content is available online at http://cnx.org/content/m20600/1.2/. 183
  • 192. 184 CHAPTER 15. 15. COUNTING LOOPS Within the for control structure there are four attributes to a properly working loop. They are: • Initializing the ag done once • Text expression • Action or actions • Update of the ag The initialization of the ag is not technically part of the while control structure, but it is usually part of the for control structure. The English phrasing is, For x is 1; x less than 3; do the following actions; increment x; loop back to the test expression. This is doing the action on the true. When the test expression is false, you stop the loop and go on with the next item in the program. Notice, because this is a test before loop the action might not happen. It is called a test before loop because the test comes before the action. It is also sometimes called a pre-test loop, meaning the test is pre (or Latin for before) the action and update. 15.1.2 The for Structure within C++ 15.1.2.1 Syntax The syntax for the do while control structure within the C++ programming language is: for (initializations; expression; updates) { statement; statement; statement; } note: The initializations, test expression and updates are within the parentheses (each separated by a semi-colon), but this is not a function call. The parentheses are part of the control structure. Additionally, there is not a semicolon after the parenthesis following the expression. 15.1.2.2 An Example Example 15.1: C++ source code: for for (counter = 0; counter 5; counter++) { cout nI love ice cream!; } The four attributes of a test before loop are present. The initialization of the ag. The test is the less than relational comparison of the value in the ag variable to the constant value of 5. The action part consists of the 1 line of output. The update of the ag is done with the increment operator. Using indentation with the alignment of the loop actions is normal industry practice within the C++ community.
  • 193. 185 15.1.2.3 Innite Loops At this point it's worth mentioning that good programming always provides for a method to insure that the loop question will eventually be false so that the loop will stop executing and the program continues with the next line of code. However, if this does not happen then the program is in an innite loop. Innite loops are a bad thing. Consider the following code: Example 15.2: C++ source code: innite loop for (counter = 0; counter 5;) { cout nI love ice cream!; } The programmer assigned a value to the ag during the initialization step which is correct. However, he forgot to update the ag (the update step is missing). Every time the test expression is asked it will always be true. Thus, an innite loop because the programmer did not provide a way to exit the loop (he forgot to update the ag). 15.1.2.4 Multiple Items in the Initialization and Update The following shows the use of the sequence operator to separate the multiple initializations and multiple updates. This is not available in most languages, thus is more unique to the C++ programming language. Example 15.3: C++ source code: for with multiple initializations and updates for (x = 0, y = 10; x 10; x++, y--) { cout x * y endl; } 15.1.3 Counting Loop Conversion a while into a for Below is a color coded the conversion of a while loop that displays a message exactly three times (which is a counting loop) into a for loop using C++ programming language syntax. The four loop attributes are color highlighted as follows:
  • 194. 186 CHAPTER 15. 15. COUNTING LOOPS Figure 15.1 15.1.4 Miscellaneous Information about the for Structure Many languages (Pascal, FORTRAN, and other) have a for loop structure that is used exclusively for counting. The for loop in the C++ programming language is much more versatile and can be used (and generally is used) in place of the while loop structure. In reality a counting loop is just a particular use of a while loop. The name for comes from mathematics' method of writing an iteration (or repetition). In math we would say: For the variable i starts at a given value and repeats an action increasing the value of i until i is executed for the stopping value. Usually written in math as: for i = 1 to 5 do some action Note: here the = means equals not assignment. Another way to say it is that i varies from 1 to 5. 15.1.5 Denitions Denition 15.1: for A test before iteration control structure typically used for counting.
  • 195. 187 15.2 Circular Nature of the Integer Data Type Family2 15.2.1 General Discussion There are times when character and integer data types are lumped together because they both act the same (often called the integer family). Maybe we should say they act dierently than the oating-point data types. The integer family values jump from one value to another. There is nothing between 6 and 7 nor between 'A' and 'B'. It could be asked why not make all your numbers oating-point data types. The reason is twofold. First, some things in the real world are not fractional. A dog, even with only 3 legs, is still one dog not three fourths of a dog. Second, the integer data type is often used to control program ow by counting (counting loops). The integer family has a circular wrap around feature. Using a two byte integer, the next number bigger than 32767 is negative 32768 (character acts the same way going from 255 to 0. We could also reverse that to be the next smaller number than negative 32768 is positive 32767. This can be shown by using a normal math line, limiting the domain and then connecting the two ends to form a circle. Figure 15.2 This circular nature of the integer family works for both integer and character data types. In theory, it 2This content is available online at http://cnx.org/content/m20743/1.3/.
  • 196. 188 CHAPTER 15. 15. COUNTING LOOPS should work for the Boolean data type as well; but in most programming languages it does not for various technical reasons. In mathematics, modular arithmetic (sometimes called clock arithmetic) is a system of arithmetic for integers where numbers wrap around after they reach a certain value the modulus. . . . A familiar use of modular arithmetic is its use in the 12 hour clock the arithmetic of time-keeping in which the day is divided into two 12 hour periods. If the time is 7:00 now, then 8 hours later it will be 3:00. Usual addition would suggest that the later time should be 7 + 8 = 15, but this is not the answer because clock time wraps around every 12 hours; there is no 15 o'clock. Likewise, if the clock starts at 12:00 (noon) and 21 hours elapse, then the time will be 9:00 the next day, rather than 33:00. Since the hour number starts over when it reaches 12, this is arithmetic modulo 12. Figure 15.3 Time-keeping on a clock gives an example of modular arithmetic. (Modular arithmetic from Wikipedia) The use of the modulus operator in integer division is tied to the concepts used in modular arithmetic. 15.2.2 Implications When Executing Loops If a programmer sets up a counting loop incorrectly, usually one of three things happen: • Innite loop usually caused by missing update attribute. • Loop never executes usually the text expression is wrong with the direction of the less than or greater than relationship needing to be switched. • Loop executes more times than desired update not properly handled. Usually the direction of counting (increment or decrement) need to be switched. Let's give an example of the loop executing for what appears to be for innity (the third item on our list). Example 15.4: C++ source code for (int x = 0; x 10; x--) { cout x endl; } The above code accidently decrements and the value of x goes in a negative way towards -2147483648 (the largest negative value in a normal four byte signed integer data type). It might take a while (thus it might appear to be in an innite loop) for it to reach the negative 2 billion plus value, before nally decrementing to positive 2147483647 which would, incidentally, stop the loop execution.
  • 197. 189 15.2.3 Demonstration Program in C++ 15.2.3.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 15.2.3.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Circular_Nature_Integer.cpp 3 15.2.4 Denitions Denition 15.2: circular nature Connecting the negative and positive ends of the domain of an integer family data type. Denition 15.3: loop control Making sure the attributes of a loop are properly handled. Denition 15.4: modular arithmetic A system of arithmetic for integers where numbers wrap around. 15.3 Formatting Output4 15.3.1 General Discussion Formatting of output is handled in dierent ways in the various languages used today. Many programming languages have dierent formatting instructions for the standard output device which is usually the monitor (going to a DOS black screen output box) versus using the monitor as a Graphical User Interface (GUI). File storage output is often handled similarly to the standard output device. All of this makes formatting of output very machine, output device and language dependent. When teaching programming fundamentals, many professors prefer to use the standard output device. For the C++ programming language this means going to the monitor using a DOS black screen output box. 15.3.2 C++ Considerations using Standard Output (cout) 15.3.2.1 Text Wrapping and Vertical Spacing There are two items used to keep output from lling up a line and wrapping on to the next line. They are: • Using the escape code sequence of n within your strings (text between as set of double quote marks). • Using the item from the iostream named: endl; which is short for end line. Thus the programmer is responsible for making text show reasonably on the screen. Both of the above also allow for adequate vertical spacing when needed in your output. 3See the le at http://cnx.org/content/m20743/latest/Demo_Circular_Nature_Integer.cpp 4This content is available online at http://cnx.org/content/m20660/1.3/.
  • 198. 190 CHAPTER 15. 15. COUNTING LOOPS 15.3.2.2 Handling Floating-point Data Type It is nice to have your output displayed so humans can read it (most humans are not use to scientic notation). There are three lines often inserted near the start of your code (rst items in the function main) that can be used to direct the formatting of oating-point data. They are: cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(n); They do the following for the rest of your program: • xed Do not use scientic notation but show oating-point values like integer values (numeral digits of 0 to 9 no exponent notation). • showpoint Always show a decimal point for oating-point values even if there is no fractional part. • precision Always show this number of digits (change n to a number like 2) to the right of the decimal point. 15.3.2.3 Setting the Width for Numbers Setting the width for integer family and oating-point family data types must be done for the output of each value. Assume in the following example that age is an integer data type and money is a oating-point data type. cout setw(4) age endl; cout setw(8) money endl; Note that each value had to have its own setw(n) where n is an integer number telling it how many positions to use for the output. The iomanip header le (immediately shown) will need to be included in your program. #includeiomanip // needed for the setw 15.3.3 Demonstration Program in C++ 15.3.3.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 15.3.3.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Formatting_Output.cpp 5 15.3.4 Denitions Denition 15.5: formatting Modifying the way the output is displayed. Denition 15.6: wrapping When output is not vertically spaced properly. 5See the le at http://cnx.org/content/m20660/latest/Demo_Formatting_Output.cpp
  • 199. 191 15.4 Nested For Loops6 15.4.1 General Discussion 15.4.1.1 Nested Control Structures We are going to rst introduce the concept of nested control structures. Nesting is a concept that places one item inside of another. Consider: if expression true action else false action This is the basic form of the if then else control structure. Now consider: if age is less than 18 you can't vote if age is less than 16 you can't drive else you can drive else you can vote if age is less than 21 you can't drink else you can drink As you can see we simply included as part of the true action a statement and another if then else control structure. We did the same (nested another if then else) for the false action. In our example we nested if then else control structures. Nesting could have an if then else within a while loop. Thus, the concept of nesting allows the mixing of the dierent categories of control structures. Many complex logic problems require using nested control structures. By nesting control structures (or placing one inside another) we can accomplish almost any complex logic problem. 15.4.2 An Example Nested for loops Here is an example of a 12 by 12 multiplication table: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ------------------------------------------------------------------------- 1 ! 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 2 ! 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 | 24 | 3 ! 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 | 33 | 36 | 4 ! 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 5 ! 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 6 ! 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 | 66 | 72 | 7 ! 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 | 77 | 84 | 6This content is available online at http://cnx.org/content/m20653/1.5/.
  • 200. 192 CHAPTER 15. 15. COUNTING LOOPS 8 ! 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 | 88 | 96 | 9 ! 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 | 99 | 108 | 10 ! 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | 110 | 120 | 11 ! 11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99 | 110 | 121 | 132 | 12 ! 12 | 24 | 36 | 48 | 60 | 72 | 84 | 96 | 108 | 120 | 132 | 144 | We might also see that the answers could be designed as a collection of cells (each cell being exactly six spaces wide). The C++ source code to produce the above is: Example 15.5: C++ source code: nested for loops - multiplication table cout ; for(across=1; across 13; across++) { cout setw(4) across |; } cout endl; cout ; for(across=1; across 13; across++) { cout ------; } cout endl; for(down=1; down 13; down++) { cout setw(4) down !; for(across=1; across 13; across++) { cout setw(4) down*across |; } cout endl; }
  • 201. 193 Figure 15.4: Colorized Code - multiplication table
  • 202. 194 CHAPTER 15. 15. COUNTING LOOPS Figure 15.5: Colorized Output - multiplication table 15.4.3 Demonstration Program in C++ 15.4.3.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 15.4.3.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Nested_For_Loops.cpp 7 7See the le at http://cnx.org/content/m20653/latest/Demo_Nested_For_Loops.cpp
  • 203. 195 15.4.4 Denitions Denition 15.7: complex logic Often solved with nested control structures. 15.5 Practice 15: Counting Loops8 15.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Identify which selection control structures are commonly used a counting loops. 3. Be able to write pseudo code or owcharting for the for control structure. 4. Be able to write C++ source code for a for control structure. 5. When feasible, be able to convert C++ source code from while loop acting like a counting loop to a for loop and and vice versa. 15.5.2 Memory Building Activities Link to: MBA 15 9 15.5.3 Exercises Exercise 15.1 (Solution on p. 197.) Answer the following statements as either true or false: 1. Only for loops can be counting loops. 2. The integer data type has modular arithmetic attributes. 3. The escape code of n is part of formatting output. 4. Nested for loops is not allowed in the C++ programming language. 5. Counting loops use all four of the loop attributes. 15.5.4 Miscellaneous Items None at this time. 15.5.5 Lab Assignment 15.5.5.1 Creating a Folder or Sub-Folder for Chapter 15 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_15 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 8This content is available online at http://cnx.org/content/m20809/1.5/. 9See the le at http://cnx.org/content/m20809/latest/index.html
  • 204. 196 CHAPTER 15. 15. COUNTING LOOPS 15.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_15a.cpp 10 15.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Compile and run the Lab_15a.cpp source code le. Understand how it works. • Copy the source code le Lab_15a.cpp naming it: Lab_15b.cpp • Convert the code that is counting (all four attributes) to a for loop. • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 15.5.6 Problems 15.5.6.1 Problem 15a Instructions Using proper C++ syntax, convert the following for loop to a while loop. Example 15.6: C++ source code for (x = 0; x 10; x++) { cout Having fun!; } 10See the le at http://cnx.org/content/m20809/latest/Lab_15a.cpp
  • 205. 197 Solutions to Exercises in Chapter 15 Solution to Exercise 15.1 (p. 195) Answers: 1. false 2. true 3. true 4. false 5. true
  • 206. 198 CHAPTER 15. 15. COUNTING LOOPS
  • 207. Chapter 16 16. String Class, Unary Positive and Negative 16.1 String Class within C++1 16.1.1 General Discussion In most programming languages a string is typically a string of characters (string them along in a series). The rules for handling strings vary from language to language. Technically, there is no string data type in the C++ programming language. However, the concept of a string data type makes it easy to handle stings of character data. Associated with object oriented programming the string class has been added to C++ as a standard part of the programming language. Most data is more complex than just one character, integer, etc. Programming languages develop other methods to represent and store data that are more complex. A complex data type of array is rst most students encounter. An array is a sequenced collection of elements of the same data type with a single identier name. This denition perfectly describes our string data type concept. The simplest array is called a one-dimensional array; also know as a list because we usually list the members or elements verti- cally. However, strings are viewed as a one-dimensional array that visualize as listed horizontally. Strings are an array of character data. In the C programming language all strings were handled as an array of characters that end in an ASCII null character (the value 0 or the rst character in the ASCII character code set). This changed with the implementation of the string class within C++ where strings are stored as a length controlled array with a maximum length of 255 characters. This string class implementation also allowed programmers to use the reserved word string as if it were a data type. Commonly used operators and some alternatives for the string class are summarized in the following table: C++ Operator Operator Name String Class Implementation = assignment Same as for standard data types , , =, =, ==, != six relational Same as for standard data types continued on next page 1This content is available online at http://cnx.org/content/m20796/1.5/. 199
  • 208. 200 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE + addition Concatenation or Append sizeof Usage how many bytes a data type occupies Implemented using a class mem- ber function named length. For- mat: identier_name.length() NOTE: The period between the identier name and the function name is the class member opera- tor. . the period class member Used in conjunction with class functions Table 16.1 Most other operators are not allowed and basically do not make sense for a string data type. The above items are demonstrated in the following program. 16.1.2 Demonstration Program in C++ 16.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 16.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_String_Class.cpp 2 16.1.3 Denitions Denition 16.1: array A sequenced collection of elements of the same data type with a single identier name. Denition 16.2: concatenation Combining two strings into one string. Denition 16.3: string class A complex data item that uses object oriented programming. Denition 16.4: class member An operator used to invoke functions associated with a class. 2See the le at http://cnx.org/content/m20796/latest/Demo_String_Class.cpp
  • 209. 201 16.2 Unary Positive and Negative Operators3 16.2.1 General Discussion Unary positive also known as plus and unary negative also known as minus are unique operators. The plus and minus when used with a constant value represent the concept that the values are either positive or negative. Let's consider: +5 + -2 We have three operators in this order: unary positive, addition, and unary negative. The answer to this expression is a positive 3. As you can see, one must dierentiate between when the plus sign means unary positive and when it means addition. Unary negative and subtraction have the same problem. Let's consider: -2 - +5 The expression evaluates to negative 7. Let's consider: 7 - -2 First constants that do not have a unary minis in front of them are assumed (the default) to be positive. When you subtract a negative number it is like adding, thus the expression evaluates to positive 9. 16.2.2 C++ Code Examples The above examples work within the C++ programming language. What happens if we put a unary positive or unary negative in front of a variable or a named constant? 16.2.2.1 Negation Unary Negative The concept of negation is to take a value and change its sign, that is: ip it. If it positive make it negative and if it is negative make it positive. Mathematically, it is the following C++ code example, given that money is an integer variable with a value of 6: -money money * -1 The above two expressions evaluate to the same value. In the rst line, the value in the variable money is fetched and then it's negated to a negative 6. In the second line, the value in the variable money is fetched and then it's multiplied by negative 1 making the answer a negative 6. 16.2.2.2 Unary Positive Worthless Simply to satisfy symmetry, the unary positive was added to the C++ programming language as on operator. However, it is a totally worthless or useless operator and is rarely used. However don't be confused the following expression is completely valid: 6 + +5 The second + sign is interpreted as unary positive. The rst + sign is interpreted as addition. money +money money * +1 For all three lines, if the value stored in money is 6 the value of the expression is 6. Even if the value in money was negative 77 the value of the expression would be negative 77. The operator does nothing, because multiplying anything by 1 does not change its value. 3This content is available online at http://cnx.org/content/m20501/1.1/.
  • 210. 202 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE 16.2.2.3 Possible Confusion Do not confuse the unary negative operator with decrement. Decrement changes the value in the variable and thus is an Lvalue concept. Unary negative does not change the value of the variable, but uses it in an Rvalue context. It fetches the value and then negates that value. The original value in the variable does not change. Because there is no changing of the value associated with the identier name, the identier name could represent a variable or named constant. 16.2.2.4 Exercises Exercise 16.1 (Solution on p. 205.) Evaluate the following items involving unary positive and unary negative: 1. +10 - -2 2. -18 + 24 3. 4 - +3 4. +8 + - +5 5. +8 + / +5 16.2.3 Denitions Denition 16.5: unary positive A worthless operator almost never used. Denition 16.6: unary negative An operator that causes negation. Denition 16.7: plus Aka unary positive. Denition 16.8: minus Aka unary negative. 16.3 Practice 16: String Class, Unary Postitive and Negative4 16.3.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Identify which operators are allowed with the string class. 3. Understand the unary positive and unary negative operators. 16.3.2 Memory Building Activities Link to: MBA 16 5 4This content is available online at http://cnx.org/content/m20810/1.4/. 5See the le at http://cnx.org/content/m20810/latest/index.html
  • 211. 203 16.3.3 Exercises Exercise 16.2 (Solution on p. 205.) Evaluate the following items involving unary positive and unary negative: 1. +13 - -2 2. -10 + 14 3. 4 + - 3 4. +8 - * +5 16.3.4 Miscellaneous Items None at this time. 16.3.5 Lab Assignment 16.3.5.1 Creating a Folder or Sub-Folder for Chapter 16 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_16 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 16.3.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_16_Pseudocode.txt 6 16.3.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le from the Lab_16_Pseudocode.txt le. Name it: Lab_16.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 16.3.6 Problems 16.3.6.1 Problem 16a Instructions Describe the normal C++ operators allowed with the string data type. 16.3.6.2 Problem 16b Instructions Describe why unary positive is worthless. 6See the le at http://cnx.org/content/m20810/latest/Lab_16_Pseudocode.txt
  • 212. 204 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE 16.3.6.3 Problem 16c Instructions Describe how unary negative works.
  • 213. 205 Solutions to Exercises in Chapter 16 Solution to Exercise 16.1 (p. 202) Answers: 1. 12 2. 6 3. 1 4. It's 3. Surprised, but it works. The middle plus sign is addition and the rest are unary positive or unary negative. 5. Error, no operand between addition and division. Solution to Exercise 16.2 (p. 203) Answers: 1. 15 2. 4 3. 1 4. Error, no operand between subtraction and multiplication.
  • 214. 206 CHAPTER 16. 16. STRING CLASS, UNARY POSITIVE AND NEGATIVE
  • 215. Chapter 17 17. Conditional Operator and Recursion 17.1 Conditional Operator1 17.1.1 Overview The conditional operator is unique in that it has three operands separated by two unconnected operator symbols. All other C++ operators are either unary (one operator and one operand) or binary (one operator and two operands). On the Abbreviated Precedence Chart for C++ Operators the conditional operator has the word trinary in the comments column. This prex tri means three, thus three operands. C++ Operator Meaning Comments ? : conditional trinary three operands with two operators Table 17.1 As an operator it produces a value for the expression. An easy way to explain the conditional operator is to convert an if then else control structure to an expression using the conditional operator. Example 17.1: if then else if (age 17) { cout You can vote.; } else { cout You can't vote.; } Example 17.2: conditional = option 1 age 17 ? cout You can vote. : cout You can't vote.; 1This content is available online at http://cnx.org/content/m20811/1.6/. 207
  • 216. 208 CHAPTER 17. 17. CONDITIONAL OPERATOR AND RECURSION Example 17.3: conditional = option 2 cout (age 17 ? You can vote. : You can't vote.); note: The use of parenthesizes is needed because of the precedence of operators. The conditional expression is of lower precedence than the insertion (writing) operator. The rst operand is a test expression similar to those that control program ow in control structures. This type of expression is also known as a Boolean expression because they create a Boolean answer of true or false. If the test is true the second operand becomes the value of the expression. If false, the third operand becomes the value of the expression. The operators of the question mark and colon separate the three operands. Example 17.4: general format test expression ? expression true : expression false 17.1.2 Denitions Denition 17.1: conditional A trinary C++ operator that acts like an if then else control structure. 17.2 Recursion vs Iteration2 17.2.1 Repetitive Algorithms In general, there are two approaches to writing repetitive algorithms. One uses loops; the other uses recursion. Recursion is a repetitive process in which a function calls itself. Both approaches provide repetition, and either can be converted to the other's approach. 3 Iteration is one of the categories of control structures. It allows for the processing of some action zero to many times. Iteration is also known as looping and repetition. The math term to iterate means to perform the statement parts of the loop. Many problems/tasks require the use of repetitive algorithms. With most programming languages this can be done with either: 1. looping control structures, specically the for loop (an iterative approach) 2. recursive calling of a function Using repetitive algorithms as the solution method occurs in many mathematical oriented problems. These in include factorial, Fibonacci numbers, and the Towers of Hanoi problem. Solutions to these problems are often only presented in terms of using the recursive method. However, . . . you should understand the two major limitations of recursion. First, recursive solutions may involve extensive overhead because they use function calls. Second, each time you make a call you use up some of your memory allocation. If the 2This content is available online at http://cnx.org/content/m20814/1.2/. 3Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United States of America: Thompson Brooks/Cole, 2004) 265.
  • 217. 209 recursion is deep that is, if there is a large number or recursive calls then you may run out of memory. Both the factorial and Fibonacci numbers solutions are better developed iteratively. 4 Understanding how recursion or the iterative approaches work will be left to others. They are usually covered in detail as part of studying data structures. Our goal in covering them is to: 1. Provide you with a denition of recursion 2. Introduce the alternate solution approach of iteration The following demonstration program shows both solutions for 8! (eight factorial). 17.2.2 Demonstration Program in C++ 17.2.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 17.2.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Factorial.cpp 5 17.2.3 Denitions Denition 17.2: recursion A repetitive process in which a function calls itself. Denition 17.3: factorial A math problem that often is solved using recursion. 17.3 Practice 17: Conditional Operator and Recursion6 17.3.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Understand the conditional operator and how it works. 3. Understand recursion as a problem solving technique. 4. When feasible, be able to convert C++ source code from a conditional expression to an if then else and vice versa. 4Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United States of America: Thompson Brooks/Cole, 2004) 272. 5See the le at http://cnx.org/content/m20814/latest/Demo_Factorial.cpp 6This content is available online at http://cnx.org/content/m20815/1.5/.
  • 218. 210 CHAPTER 17. 17. CONDITIONAL OPERATOR AND RECURSION 17.3.2 Memory Building Activities Link to: MBA 17 7 17.3.3 Exercises Exercise 17.1 (Solution on p. 212.) Answer the following statements as either true or false: 1. The conditional expression acts like a case structure. 2. The conditional operator is a two part operator with three operands. 3. Recursion is one method of implementing a repetitive algorithm. 4. Recursion is always preferred over an iterative approach to a repetitive problem. 5. Factorial is usually demonstrated with an iterative approach. 17.3.4 Miscellaneous Items None at this time. 17.3.5 Lab Assignment 17.3.5.1 Creating a Folder or Sub-Folder for Chapter 17 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_17 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 17.3.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_17a.cpp 8 17.3.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Compile and run the Lab_17a.cpp source code le. Understand how it works. • Copy the source code le Lab_17a.cpp naming it: Lab_17b.cpp • Convert the code that is using the if then else to a conditional expression. • Convert the code that is using the conditional expression to an if then else. • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 7See the le at http://cnx.org/content/m20815/latest/index.html 8See the le at http://cnx.org/content/m20815/latest/Lab_17a.cpp
  • 219. 211 17.3.6 Problems 17.3.6.1 Problem 17a Instructions Using proper C++ syntax, convert the following if then else to a conditional expression. Example 17.5: if then else if (x == y) { z = 14; } else { z++; } 17.3.6.2 Problem 17b Instructions Using proper C++ syntax, convert the following conditional expression to an if then else. Example 17.6: conditional answer = y z ? 47 : 92;
  • 220. 212 CHAPTER 17. 17. CONDITIONAL OPERATOR AND RECURSION Solutions to Exercises in Chapter 17 Solution to Exercise 17.1 (p. 210) Answers: 1. false 2. true 3. true 4. false 5. false
  • 221. Chapter 18 18. Introduction to Arrays 18.1 Array Data Type1 18.1.1 Overview An array is a sequenced collection of elements of the same data type with a single identier name. As such, the array data type belongs to the Complex category or family of data types. Arrays can have multiple axes (more than one axis). Each axis is a dimension. Thus a single dimension array is also known as a list. A two dimension array is commonly known as a table (a spreadsheet like Excel is a two dimension array). In real life there are occasions to have data organized into multiple dimensioned arrays. Consider a theater ticket with section, row and seat (three dimensions). This module will only cover the single dimension array. Most single dimension arrays are visualized vertically and are often called a list. Most programmers are familiar with a special type of array called a string. Strings are basically a single dimension array of characters. Unlike other single dimension arrays, we usually envision a string as a horizontal stream of characters and not vertically as a list. Within C++ the string data type is a length-controlled array and is a pre-dened data class. We refer to the individual values as members (or elements) of the array. Programming languages imple- ment the details of arrays dierently. Because there is only one identier name assigned to the array, we have operators that allow us to reference or access the individual members of an array. The operator commonly associated with referencing array members is the index operator. It is important to learn how to dene an array and initialize its members. Additionally, the sizeof operator is often used to calculate the number of members in an array. 18.1.2 Dening an Array in C++ Example: int ages[5] = {49,48,26,19,16}; This is the dening of storage space. The square brackets (left [ and right ]) are used here to create the array with ve integer members and the identier name of ages. The assignment with braces (that is a block) establishes the initial values assigned to the members of the array. Note the use of the sequence or comma operator. We could have done it this way: int ages[] = {49,48,26,19,16}; By leaving out the ve and having initial values assigned, the compiler will know to create the array with ve storage spaces because there are ve values listed. This method is preferred because we can simply add members to or remove members from the array by changing the items inside of the braces. We could have also done this: 1This content is available online at http://cnx.org/content/m21315/1.2/. 213
  • 222. 214 CHAPTER 18. 18. INTRODUCTION TO ARRAYS int ages[5]; This would have declared the storage space of ve integers with the identier name of ages but their initial values would have been unknown values (actually there would be values there but we don't know what they would be and thus think of the values as garbage). We could assign values later in our program by doing this: ages[0] = 49; ages[1] = 48; ages[2] = 26; ages[3] = 19; ages[4] = 16; note: The members of the array go from 0 to 4; NOT 1 to 5. This is explained in more detail in another Connexions module that covers accessing array members and is listed in the supplemental links provided. See: Array Index Operator. 18.1.3 Denitions Denition 18.1: dimension An axis of an array. Denition 18.2: list A single dimension array. Denition 18.3: table A two dimension array. 18.2 Array Index Operator2 18.2.1 Array Index Operator in C++ Example: int ages[5] = {49,48,26,19,16}; int my_age; my_age = ages[2] This second usage of the square brackets is as the array notation of dereference or more commonly called the index operator. As an operator it either provides the value held by the member of the array (Rvalue) or changes the value of member (Lvalue). In the above example the member that is two osets from the front of the array (the value 26) is assigned to variable named my_age. The dereference operator of [2] means to go the 2 nd oset from the front of the ages array and get the value stored there. In this case the value would be 26. The array members (or elements) are referenced starting at zero. The more common way for people to reference a list is by starting with one. Many programming languages reference array members starting at one, however for some languages (and C++ is one of them) you will need to change your thinking. Consider: 2This content is available online at http://cnx.org/content/m21316/1.2/.
  • 223. 215 Position C++ Miss America Other Contests zero osets from the front ages [0] Winner 1 st Place one osets from the front ages [1] 1 st Runner Up 2 nd Place two osets from the front ages [2] 2 nd Runner Up 3 rd Place three osets from the front ages [3] 3 rd Runner Up 4 th Place four osets from the front ages [4] 4 th Runner Up 5 th Place Table 18.1 Saying that my cousin is the 2 nd Runner Up in the Miss America contest sounds so much better than saying that she was in 3 rd Place. We would be talking about the same position in the array of the ve nalists. ages[3] = 20; This is an example of changing an array's value by assigning 20 to the 4 th member of the array and replacing the value 19 with 20. This is an Lvalue context because the array is on the left side of the assignment operator. The C++ operator name is called the array index or simply the index operator and it uses the square brackets as the operator symbols. 18.2.2 Denitions Denition 18.4: array member An element or value in an array. Denition 18.5: index An operator that allows us to reference a member of an array. Denition 18.6: oset The method of referencing array members by starting at zero. 18.3 Displaying Array Members3 18.3.1 Accessing Array Members in C++ Example 18.1: accessing the members of an array int ages[] = {49,48,26,19,16}; int counter; for (counter = 0, counter 5, counter++) { cout ages[counter] endl; } This second usage of the square brackets is as the array notation of dereference or more commonly called the index operator. As an operator it provides the value held by the member of the array. For example, 3This content is available online at http://cnx.org/content/m21317/1.4/.
  • 224. 216 CHAPTER 18. 18. INTRODUCTION TO ARRAYS during one of the iterations of the for loop the index (which is an integer data type) will have the value of 3. The expression ages[counter] would in essence be: ages[3]. The dereference operator of [3] means to go the 3 rd oset from the front of the ages array and get the value stored there. In this case the value would be 19. The array members (or elements) are referenced starting at zero. The more common way for people to reference a list is by starting with one. Many programming languages reference array members starting at one, however for some languages (and C++ is one of them) you will need to change your thinking. Consider: Position C++ Miss America Other Contests zero osets from the front ages [0] Winner 1 st Place one osets from the front ages [1] 1 st Runner Up 2 nd Place two osets from the front ages [2] 2 nd Runner Up 3 rd Place three osets from the front ages [3] 3 rd Runner Up 4 th Place four osets from the front ages [4] 4 th Runner Up 5 th Place Table 18.2 Saying that my cousin is the 2 nd Runner Up in the Miss America contest sounds so much better than saying that she was in 3 rd Place. We would be talking about the same position in the array of the ve nalists. Rather than using the for loop to display the members of the array, we could have written ve lines of code as follows: cout ages[0] endl; cout ages[1] endl; cout ages[2] endl; cout ages[3] endl; cout ages[4] endl; 18.3.2 Using the Sizeof Operator with Arrays in C++ Example 18.2: using the sizeof operator int ages[] = {49,48,26,19,16}; int counter; for (counter = 0, counter sizeof ages / sizeof ages[0], counter++) { cout ages[counter] endl; } Within the control of the for loop for the displaying of the grades, note that we calculated the number of the members in the array by using the sizeof operator. The expression is: sizeof ages / sizeof ages[0] When you ask for the sizeof an array identier name the answer is how many total bytes long is the array (or in other words how many bytes of storage does this array need to store its values). This will depend
  • 225. 217 on the data type of the array and the number of elements. When you ask for the sizeof one of its members, it tells you how many bytes one member needs. By dividing the total number of bytes by the size of one member, we get the answer we want: the number of members in the array. This method allows for exible coding. By writing the for loop in this fashion, we can change the declaration of the array by adding or subtracting members and we don't need to change our for loop code. 18.3.3 Demonstration Program in C++ 18.3.3.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 18.3.3.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Arrays.cpp 4 18.3.4 Denitions Denition 18.7: exible coding Using the sizeof operator to calculate the number of members in an array. 18.4 Practice 18: Introduction to Arrays5 18.4.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Within C++ source code be able to dene a single dimension array. 3. Within C++ source code be able to access array members using the index operator. 4. Within C++ source code be able to calculate the number of members in an array using the sizeof operator. 18.4.2 Memory Building Activities Link to: MBA 18 6 4See the le at http://cnx.org/content/m21317/latest/Demo_Arrays.cpp 5This content is available online at http://cnx.org/content/m21321/1.4/. 6See the le at http://cnx.org/content/m21321/latest/index.html
  • 226. 218 CHAPTER 18. 18. INTRODUCTION TO ARRAYS 18.4.3 Exercises Exercise 18.1 (Solution on p. 219.) Answer the following statements as either true or false: 1. The array data type is one of the standard data types in C++. 2. Arrays can have more than one dimension. 3. For loops are often used to display the members of an array. 4. When dening an array, it is preferable to specify how many members are in the array. 5. Arrays are rarely used to represent data. 18.4.4 Miscellaneous Items None at this time. 18.4.5 Lab Assignment 18.4.5.1 Creating a Folder or Sub-Folder for Chapter 18 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_18 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 18.4.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_18_Narrative_Description.txt 7 18.4.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le following the directions in the Lab_18_Narrative_Description.txt le. Name it: Lab_18.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 18.4.6 Problems 18.4.6.1 Problem 18a Instructions Briey explain what an array is and list the two common operators used with arrays. 7See the le at http://cnx.org/content/m21321/latest/Lab_18_Narrative_Description.txt
  • 227. 219 Solutions to Exercises in Chapter 18 Solution to Exercise 18.1 (p. 218) Answers: 1. false 2. true 3. true 4. false 5. false
  • 228. 220 CHAPTER 18. 18. INTRODUCTION TO ARRAYS
  • 229. Chapter 19 19. File I/O and Array Functions 19.1 File Input and Output1 19.1.1 Overview of File I/O in C++ We need to understand how to open, read, write and close text les. The following File Input/Output terms are explained: Text File A le consisting of characters from the ASCII character code set. Text les (also know an ASCII text les) contain character data. When we create a text le we usually think of it consisting of a series of lines. On each line are several characters (including spaces, punctuation, etc.) and we generally end the line with a return (this a character within the ASCII character code set). The return is also known as the new line character. You are most likely already familiar with the escape code of n which is used within C++ to indicate a return character when used with in a literal string with the cout. A typical text le consisting of lines can be created by text editors (Notepad) or word processing programs (Microsoft Word). When using a word processor you must usually specify the output le as text (.txt) when saving it. Most source code les are ASCII text les with a unique le extension; such as C++ using .cpp, Pascal using .pas, Cobol using .cob, etc. Thus, most compiler/Integrated Development Environment software packages (such as the Bloodshed Dev-C++ 5 compiler/IDE) can be used to create ASCII text les. Filename The name and its extension. Most operating systems have restrictions on which characters can be used in lenames. Example for MS-DOS and Windows: Lab_05.txt Because some operating systems do not allow spaces, we suggest that you use the underscore where needed for spacing in a lename. Filespec The location of a le along with its lename. It is short for le specication. Most operating systems have a set of rules on how to specify the drive and directory (or path through several directory levels) along with the lename. Example for MS-DOS and Windows: C:mylescosc_1436Lab_05.txt Because some operating systems do not allow spaces, we suggest that you use the underscore where needed when creating folders or sub-directories. Open Your program requesting the operating system to let it have access to an existing le or to open a new le. Within C++ this is accomplished by including the header le: fstream File Input/Output is handled in C++ by using a pre-dened class of data objects, similar to the way string data type is handled. This class of objects has both data type names and functions built to specically accomplish opening and closing a le. Within your program you create a local storage variable with the data type of fstream like this: fstream inData; 1This content is available online at http://cnx.org/content/m21623/1.2/. 221
  • 230. 222 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS This variable will be used to store the device token that the operating system assigns to the le being opened. Thus, opening a le uses a class member function call like this: inData.open(C:myfilescosc_1436Lab_05.txt, ios::in); The two parameters passed to the function are the lespec and the method that you want to use the le (in this example as input). The function provides a returning value of a device token from the operating system and it is stored in the variable named inData. It is considered good programming practice to determine if the le was opened properly. The device token should be a non zero value. It the operating system gives you the value of zero it was not able to open the le. The reason it usually can't open a le is because the lespec is wrong (misspelled or not typed case consistent in some operating systems) or the le is not stored in the location specied. We often test the device token by using an if then control structure with the action consisting of stopping the program if it is true that you got the zero. The rst line of the if then control structure looks like this: if (!inData) Don't be misled by the not operator. This reads if it is true that the token stored in inData is zero. If inData is zero, noting zero is 1 or true. Read Moving data from a device that has been opened into a memory location dened in your program. When reading text les that have integer or oating-point constants, the operating systems converts the text symbols to a binary number. The operator used is the extraction or read operator. An example of reading is: inData next_number This expression is similar to reading from the standard input device (aka the keyboard): cin next_number The cin is a predened device token associated with the Standard Input and Output devices. For our le reading example you might say, Go to the device identied by the token stored in the inData variable and read in the next value storing it in the next_number variable within my program. Write Moving data from a memory location dened in your program to a device that has been opened. When writing integer or oating-point data types, the operating system converts the binary number into the proper text symbols. The operator used is the insertion or write operator. An example of writing is: outData Total is: total endl; This expression is similar to writing to the standard output device (aka the monitor): cout Total is: total endl; The cout is a predened device token associated with the Standard Input and Output devices. For our le writing example you might say, Go to the device identied by the token stored in the outData variable and write the items listed (the string constant then the value stored in my program variable named total then the endl or new line or the return character). Close Your program requesting the operating system to release a le that was previously opened. There are two reasons to close a le. First, it releases the le and frees up the associated operation system resources. Second, if closing a le that was opened for output; it will clear the out the operating system's buer and insure that all of the data is physically stored in the output le. Some examples of closing les: inData.close(); outData.close(); You need to study this module in conjunction with the demo le provided. 19.1.2 Demonstration Program in C++ 19.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs
  • 231. 223 If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 19.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_File_IO.cpp 2 Download from Connexions: Demo_File_IO_Input.txt 3 After you run the program use a text editor to examine the Demo_File_IO_Output.txt le created by the program. You should see the output as: Total is: 33.3 19.1.3 Denitions Denition 19.1: text le A le consisting of characters from the ASCII character code set. Denition 19.2: lename The name and its extension. Denition 19.3: lespec The location of a le along with its lename. Denition 19.4: open Your program requesting the operating system to let it have access to an existing le or to open a new le. Denition 19.5: device token A key value provided by the operating system to associate a device to your program. Denition 19.6: read Moving data from a device that has been opened into a memory location dened in your program. Denition 19.7: write Moving data from a memory location dened in your program to a device that has been opened. Denition 19.8: close Your program requesting the operating system to release a le that was previously opened. 19.2 Arrays and Functions4 19.2.1 Overview of Array Functions Arrays are an important complex data type used in almost all programming. We continue to concentrate on simple one dimension arrays also called a list. Most programmers develop a series of user dened specic task functions that can be used with an array for normal processing. These functions are usually passed the array along with the number of elements within the array. Some of functions also pass another piece of data needed for that particular functions task. This module covers the displaying the array members on the monitor via calling an array function dedicated to that task. You need to study this module in conjunction with the demo le provided. 2See the le at http://cnx.org/content/m21623/latest/Demo_File_IO.cpp 3See the le at http://cnx.org/content/m21623/latest/Demo_File_IO_Input.txt 4This content is available online at http://cnx.org/content/m21624/1.1/.
  • 232. 224 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS 19.2.2 Demonstration Program in C++ 19.2.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 19.2.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. Download from Connexions: Demo_Array_Display_Function.cpp 5 19.2.3 Denitions Denition 19.9: array function A user dened specic task function designed to process an array. 19.3 Loading an Array from a File6 19.3.1 Conceptual Overview Loading an array from a le presents an interesting dilemma. The problem resolves around how many elements you should plan for in the array. Let's say 100, but what if the le has fewer or more than 100 values. How can the program handle it correctly? The solution involves some simple steps: 1. We can read the le once to get the element count. Thus, we will know exactly how many members (elements) we will need. 2. We can then create an array using dynamic memory allocation by dening the array within a function so that it has local scope. Local scope variables are created during the execution of the program and use the stack as the storage location instead of the data area. If you dene the array outside of a function (global scope also known as static memory allocation) it stores it in the data area and must know how much storage space to allocate to the array when you write the source code. Since we don't know how many elements will be on the input le when we write the source code dening an array with global scope will not work. But, we can determine exactly how many members we need for the array by having our program count them (step 1) so that we can then dene the array with local scope to the precise size needed. 3. We can then load the array by reading the le a second time and storing the values read into the array just created. This method is demonstrated in the demo le provided, thus you need to study this material in conjunction with the demo program. 5See the le at http://cnx.org/content/m21624/latest/Demo_Array_Display_Function.cpp 6This content is available online at http://cnx.org/content/m21625/1.1/.
  • 233. 225 19.3.2 Demonstration Program in C++ 19.3.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 19.3.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Loading_Array_from_File.cpp 7 Download from Connexions: Demo_Farm_Acres_Input.txt 8 19.3.3 Denitions Denition 19.10: dynamic memory Aka stack created memory associated with local scope. Denition 19.11: static memory Aka data area memory associated with global scope. 19.4 Math Statistics with Arrays9 19.4.1 Overview Arrays are an important complex data type used in almost all programming. We continue to concentrate on simple one dimension arrays also called a list. Most programmers develop a series of user dened specic task functions that can be used with an array for normal processing. These functions are usually passed the array along with the number of elements within the array. Some of functions also pass another piece of data needed for that particular functions task. This module covers the totaling of the members of an integer array member. The Latin name for totaling is summa sometimes shortened to the word sum. The array function is often called sum and it does some parameter passing. It passes into the function the common two items of the array: its name along with the number of elements; but it also returns a value representing sum or total of the values within the array. You need to study this module in conjunction with the demo le provided. Other mathematical functions often associated with statistics such as: average, count, minimum, maxi- mum, standard deviation, etc. are often developed for processing arrays. 7See the le at http://cnx.org/content/m21625/latest/Demo_Loading_Array_from_File.cpp 8See the le at http://cnx.org/content/m21625/latest/Demo_Farm_Acres_Input.txt 9This content is available online at http://cnx.org/content/m21626/1.1/.
  • 234. 226 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS 19.4.2 Demonstration Program in C++ 19.4.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 19.4.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Sum_ Array_Function.cpp 10 Download from Connexions: Demo_Farm_Acres_Input.txt 11 19.4.3 Denitions Denition 19.12: sum Latin for summa or a total. 19.5 Practice 19: File I/O and Array Functions12 19.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Within C++ source code be able to understand basic le input and le output. 3. Understand why we test to see if a le was opened properly. 4. Understand why we close a le when we are done with it. 5. Within C++ source code be able to understand functions for arrays, specically counting the number of elements in a le so you can dene an array, load that array with those elements, display the array and sum the array. 6. Within C++ source code be able to create functions for arrays, specically a function for averaging. 19.5.2 Memory Building Activities Link to: MBA 19 13 10See the le at http://cnx.org/content/m21626/latest/Demo_Sum_Array_Function.cpp 11See the le at http://cnx.org/content/m21626/latest/Demo_Farm_Acres_Input.txt 12This content is available online at http://cnx.org/content/m21630/1.3/. 13See the le at http://cnx.org/content/m21630/latest/index.html
  • 235. 227 19.5.3 Exercises Exercise 19.1 (Solution on p. 228.) Answer the following statements as either true or false: 1. Text les are hard to create. 2. A lespec refers to a very small (like a spec dust) le. 3. A device token is a special non zero value the operating system gives your program and is associated with the le that you requested to be opened. 4. Programmers should not worry about closing a le. 5. Where you dene an item, that is global or local scope, is rarely important. 19.5.4 Miscellaneous Items None at this time. 19.5.5 Lab Assignment 19.5.5.1 Creating a Folder or Sub-Folder for Chapter 19 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_19 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 19.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_19_Narrative_Description.txt 14 19.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le following the directions in the Lab_19_Narrative_Description.txt le. Name it: Lab_19.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 19.5.6 Problems 19.5.6.1 Problem 19a Instructions For what purpose do we use the sizeof operator with an array. 19.5.6.2 Problem 19b Instructions Why would we open a le and count its elements and then close the le. 14See the le at http://cnx.org/content/m21630/latest/Lab_19_Narrative_Description.txt
  • 236. 228 CHAPTER 19. 19. FILE I/O AND ARRAY FUNCTIONS Solutions to Exercises in Chapter 19 Solution to Exercise 19.1 (p. 227) Answers: 1. false 2. false 3. true 4. false 5. false
  • 237. Chapter 20 20. More Array Functions 20.1 Finding a Specic Member of an Array1 20.1.1 Overview Finding a specic member of an array means searching the array until the member is found. It's possible that the member does not exist and the programmer must handle that possibility within the logic of his algorithm. Two specic searches can be made for the maximum (largest) values in the array or the minimum (smallest) value in the array. Maximum and minimum are also know as max and min. There are two basic ways of searching for a specic value: 1. Linear search 2. Binary search The linear search is a very simple algorithm. Sometimes called a sequential search, it uses a loop to sequentially step through an array, starting with the rst element. It compares each element with the value being search for, and stops when either the value is found or the end of the array is encountered. If the value being searched for is not in the array, the algorithm will search to the end of the array. 2 Binary search is not cover in this module. Linear search and searching for the maximum is demonstrated in the demo le provided, thus you need to study this material in conjunction with the demo program. 20.1.2 Demonstration Program in C++ 20.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 1This content is available online at http://cnx.org/content/m21627/1.1/. 2Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of America: Pearson Addison Wesley, 2008) 559. 229
  • 238. 230 CHAPTER 20. 20. MORE ARRAY FUNCTIONS 20.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Finding Array Member.cpp 3 Download from Connexions: Demo_Farm_Acres_Input.txt 4 20.1.3 Denitions Denition 20.1: linear search Using a loop to sequentially step through an array. Denition 20.2: maximum Aka max or the largest member of an array. Denition 20.3: minimum Aka min or the smallest member of an array. 20.2 Sorting an Array5 20.2.1 Overview Sorting is the process through which data are arranged according to their values. There are several sorting algorithms or methods that can be used to sort data. Some include: 1. Bubble 2. Selection 3. Insertion We will not be covering the selection or insertion sort methods in this module. The bubble sort is an easy way to arrange data in ascending or descending order. If an array is sorted in ascending order, it means the values in the array are stored from lowest to highest. If values are sorted in descending order, they are stored from highest to lowest. Bubble sort works by comparing each element with its neighbor and swapping them it they are not in the desired order. 6 There are several dierent methods of bubble sorting and some methods are more ecient than others. Most use a pair of nested loops or iteration control structures. One method sets a ag that indicates that the array is sorted, then does a pass and if any elements are exchanged (switched); it sets the ag to indicate that the array is not sorted. It is executed until it makes a pass and nothing is exchanged. 3See the le at http://cnx.org/content/m21627/latest/Demo_Finding_Array_Member.cpp 4See the le at http://cnx.org/content/m21627/latest/Demo_Farm_Acres_Input.txt 5This content is available online at http://cnx.org/content/m21628/1.1/. 6Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of America: Pearson Addison Wesley, 2008) 569.
  • 239. 231 Figure 20.1 The bubble sort gets its name from the lighter bubbles that move or bubble up to the top of a glass of soda pop. We move the smaller elements of the array to the top as the larger elements move to the bottom of the array. This can be viewed from a dierent perspective. Using an Italian salad dressing with oil, water and herbs; once shaken you can either: 1. envision the lighter oil rising to the top; OR 2. envision the heaver water and herbs sinking to the bottom Either way is correct and this version of the code simply demonstrates the sinking to the bottom the heaver or larger elements of the array. Bubble sorting is demonstrated in the demo le provided, thus you need to study this material in con- junction with the demo program. 20.2.2 Demonstration Program in C++ 20.2.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named:
  • 240. 232 CHAPTER 20. 20. MORE ARRAY FUNCTIONS • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 20.2.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Sort_Array_Function.cpp 7 Download from Connexions: Demo_Farm_Acres_Input.txt 8 20.2.3 Denitions Denition 20.4: sorting Arranging data according to their values. Denition 20.5: bubble sort A method of swapping array members until they are in the desired sequence. 20.3 Practice 20: More Array Functions9 20.3.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Within C++ source code be able to understand functions for arrays, specically searching a array's values to see if a given value exists, nding the maximum value in an array and sorting an array. 3. Within C++ source code be able to create functions for arrays, specically a function for nding the smallest value in an array. 4. Within C++ source code be able to modifying existing code to process dierent types of arrays. 20.3.2 Memory Building Activities Link to: MBA 20 10 20.3.3 Exercises Exercise 20.1 (Solution on p. 234.) Answer the following statements as either true or false: 1. Linear searches require complex algorithms. 2. Functions are often created for searching for the max and min values in an array. 3. The bubble sort is an easy way to arrange data an array. 4. There is only one method of bubble sorting. 7See the le at http://cnx.org/content/m21628/latest/Demo_Sort_Array_Function.cpp 8See the le at http://cnx.org/content/m21628/latest/Demo_Farm_Acres_Input.txt 9This content is available online at http://cnx.org/content/m21631/1.3/. 10See the le at http://cnx.org/content/m21631/latest/index.html
  • 241. 233 5. Sorting an array is frequently done. 20.3.4 Miscellaneous Items None at this time. 20.3.5 Lab Assignment 20.3.5.1 Creating a Folder or Sub-Folder for Chapter 20 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_20 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 20.3.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_20_Narrative_Description.txt 11 20.3.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le following the directions in the Lab_20_Narrative_Description.txt le. Name it: Lab_20.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 20.3.6 Problems 20.3.6.1 Problem 20a Instructions Give a short explanation of bubble sorting. 11See the le at http://cnx.org/content/m21631/latest/Lab_20_Narrative_Description.txt
  • 242. 234 CHAPTER 20. 20. MORE ARRAY FUNCTIONS Solutions to Exercises in Chapter 20 Solution to Exercise 20.1 (p. 232) Answers: 1. false 2. true 3. true 4. false 5. true
  • 243. Chapter 21 21. More on Typedef 21.1 Versatile Code with Typedef1 21.1.1 Overview Everyone seeks of ways to be more ecient in what they do. A framer uses a tractor instead of a horse. A construction worker uses an air powered nail gun instead of a hammer. Programmers are no dierent than others, in that they are constantly improving their ability to produce correctly working programs. Some aspect of this is the use of modular/structured programming, proper documentation and following industry rules for a specic programming language. One example of ecient coding is letting the computer count the number of elements in an array. If we dene an array: int ages[] = {33,32,10,3}; We can use the following expression to calculate the number of members in the array: sizeof ages / sizeof ages[0] This type of exible coding allows us to change the members of the array by adding or subtracting a values, like this: int ages[] = {57,33,32,3,1}; Thus, we don't have to modify our code that uses the expression that calculates the number of member in the array. One use of the typedef is to allow us to write code that can be quickly changed to handle dierent data types. There are several integer and oating-point data types that all store number values with dierent domains. If we write our code using some typedef statement, then our code becomes versatile. By changing only our typedef commands, our code can be used to process data of a dierent data type. This is demon- strated within the demo le provided, thus you need to study this material in conjunction with the demo program. 21.1.2 Demonstration Program in C++ 21.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 1This content is available online at http://cnx.org/content/m21629/1.1/. 235
  • 244. 236 CHAPTER 21. 21. MORE ON TYPEDEF 21.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Versatile_Array_Functions.cpp 2 Download from Connexions: Demo_Farm_Acres_Input.txt 3 Download from Connexions: Demo_Deposit_Checks_Input.txt 4 21.1.3 Denitions Denition 21.1: versatile Easily modifying code to handle another data type. Denition 21.2: exible coding Using the sizeof operator to calculate the number of members in an array. Denition 21.3: typedef Allows the programmer to create an alias, or synonym, for an existing data type. 21.2 Practice 21: More on Typedef5 21.2.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Understand how typedef is used within C++ source code be able make the code versatile that is easy to change for dierent data types. 21.2.2 Memory Building Activities Link to: MBA 21 6 21.2.3 Exercises Exercise 21.1 (Solution on p. 238.) Answer the following statements as either true or false: 1. Most programmers rarely worry about eciency. 2. Modular/structured programming helps improve eciency. 3. Flexible coding helps improve eciency. 4. Who cares about indentation and alignment within source code. It's a waste of time. 5. Versatile code is a concept that is easy to understand. 2See the le at http://cnx.org/content/m21629/latest/Demo_Versatile_Array_Functions.cpp 3See the le at http://cnx.org/content/m21629/latest/Demo_Farm_Acres_Input.txt 4See the le at http://cnx.org/content/m21629/latest/Demo_Deposit_Checks_Input.txt 5This content is available online at http://cnx.org/content/m21632/1.3/. 6See the le at http://cnx.org/content/m21632/latest/index.html
  • 245. 237 21.2.4 Miscellaneous Items None at this time. 21.2.5 Lab Assignment 21.2.5.1 Creating a Folder or Sub-Folder for Chapter 18 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_18 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 21.2.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_21_Narrative_Description.txt 7 Download from Connexions: Lab_21_Input.txt 8 21.2.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le following the directions in the Lab_21_Narrative_Description.txt le. Name it: Lab_21.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 21.2.6 Problems 21.2.6.1 Problem 21a Instructions Explain the dierence between exible coding and versatile coding. 7See the le at http://cnx.org/content/m21632/latest/Lab_21_Narrative_Description.txt 8See the le at http://cnx.org/content/m21632/latest/Lab_21_Input.txt
  • 246. 238 CHAPTER 21. 21. MORE ON TYPEDEF Solutions to Exercises in Chapter 21 Solution to Exercise 21.1 (p. 236) Answers: 1. false Eciency of code execution, no; eciency of code production and maintenance, yes. 2. true 3. true 4. false 5. maybe true and maybe false It does require some eort to catch on to how it works.
  • 247. Chapter 22 22. Pointers 22.1 Address Operator1 22.1.1 Address Operator in C++ Every variable is assigned a memory location whose address can be retrieved using the address operator . The address of a memory location is called a pointer. Every variable in an executing program is allocated a section of memory large enough to hold a value of that variable's type. 2 Thus, whether the variables are global scope and use the data area for storage or local scope and use the stack for storage; you can ask the question at what address in the memory does this variable exist. Given an integer variable named age: int age = 47; We can use the address operator [which is the ampersand or ] to determine where it exists (or its address) in the memory by: age This expression is a pointer data type. The concept of an address and a pointer are one in the same. A pointer points to the location in memory because the value of a pointer is the address were the data item resides in the memory. The address operator is commonly used in two ways: 1. To do parameter passing by reference 2. To establish the value of pointers Both of these items are covered in the supplemental links to this module. You can print out the value of the address with the following code: cout age; This will by default print the value in hexadecimal. Some people prefer an integer value and to print it as an integer you will need to cast the address into a long data type: cout long(age); One additional tidbit, an array's name is by denition a pointer to the arrays rst element. Thus: int iqs[] = {122, 105, 131, 97}; establishes iqs as a pointer to the array. 22.1.2 Denitions Denition 22.1: address operator The ampersand or . 1This content is available online at http://cnx.org/content/m22148/1.2/. 2Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of America: Pearson Addison Wesley, 2008) 597. 239
  • 248. 240 CHAPTER 22. 22. POINTERS Denition 22.2: pointer A variable that holds an address as its value. 22.2 Parameter Passing by Reference3 22.2.1 Overview When we pass parameters to functions we usually pass by value; that is the calling function provides several values to the called function as needed. The called function takes these values which have local scope and stores them on the stack using them as needed for whatever processing the functions accomplishes. This is the preferred method when calling user dened specic task functions. The called function passes back a single value as the return item if needed. This has the advantage of a closed communications model with everything being neatly passed in as values and any needed item returned back as a parameter. By necessity there are two exceptions to this closed communications model: 1. When we need more than one item of information returned by the function 2. When a copy of an argument cannot reasonably or correctly be made (example: le stream objects). These exceptions are handled by parameter passing by reference instead of passing a value. The item passed is called a reference variable and it represents a concept of an alias for the variable. Any change made to the reference variable is actually performed on the variable that it represents. The symbol of the ampersand is used to designate the reference variable (and it is associated with the address operator). Example 22.1: parameter passing by reference // prototype void process_values(int qty_dimes, int qty_quarters, double value_dimes, double value_quarters); // variable definitions int dimes = 45; int quarters = 33; double value_dimes; double value_quarters; // somewhere in the function main process_values(dimes, quarters, value_dimes, value_quarters); // definition of the function void process_values(int qty_dimes, int qty_quarters, double value_dimes, double value_quarters); { value_dimes = dimes * 0.10; value_quarters = quarters * 0.25; } note: The ampersand must appear in both the prototype and the function denition but it does not appear in the function call. The above example shows the basic mechanics of parameter passing by reference. You should study the demonstration program in conjunction with this module. 3This content is available online at http://cnx.org/content/m22150/1.3/.
  • 249. 241 22.2.2 Demonstration Program in C++ 22.2.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 22.2.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Parameter_Passing.cpp 4 22.2.3 Denitions Denition 22.3: reference variable Used with parameter passing by reference. 22.3 Pointer Data Type5 22.3.1 Pointer Data Type in C++ A pointer variable is a variable that holds the address of a memory location. Every variable is assigned a memory location whose address can be retrieved using the address operator . The address of a memory location is called a pointer. 6 The pointer data type allows us to designate a variable to hold an address or a pointer. The concept of an address and a pointer are one in the same. A pointer points to the location in memory because the value of a pointer is the address were the data item resides in the memory. Given an integer variable named age: int age = 47; We can create a pointer variable and establish its value which would be the done using the address operator [which is the ampersand or ] by: int * int_pointer = age; The asterisk is used to designate that the variable int_pointer is an integer pointer [int *]. This means that whenever we use the variable int_pointer that the compiler will know that it is a pointer that points to an integer. In order to use pointers you will need to understand the indirection operator which is covered a supplemental link. 22.3.2 Denitions Denition 22.4: pointer A variable that holds an address as its value. 4See the le at http://cnx.org/content/m22150/latest/Demo_Parameter_Passing.cpp 5This content is available online at http://cnx.org/content/m22151/1.2/. 6Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of America: Pearson Addison Wesley, 2008) 597.
  • 250. 242 CHAPTER 22. 22. POINTERS 22.4 Indirection Operator7 22.4.1 Indirection Operator in C++ When we pass parameters to functions we usually pass by value; that is the calling function provides several values to the called function as needed. The called function takes these values which have local scope and stores them on the stack using them as needed for whatever processing the functions accomplishes. This is the preferred method when calling user dened specic task functions. The called function passes back a single value as the return item if needed. This has the advantage of a closed communications model with everything being neatly passed in as values and any needed item returned back as a parameter. By necessity there are two exceptions to this closed communications model: 1. When we need more than one item of information returned by the function 2. When a copy of an argument cannot reasonably or correctly be made (example: le stream objects). These exceptions could be handled by parameter passing by reference instead of passing a value. Although dierent syntax than parameter passing when using a reference variable; using a pointer variable and the indirection operator can accomplish the same eect. The indirection operator is the asterisk or the character that we also use for multiplication. The concept of indirection is also known as dereferencing, meaning that we are not interested in the pointer but want the item to which the address is referring or referencing. Example 22.2: parameter passing with pointers // prototype void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_value_quarte // variable definitions int dimes = 45; int quarters = 33; double value_dimes; double value_quarters; double * ptr_value_dimes = value_dimes; double * ptr_value_quarters = value_quarters; // somewhere in the function main process_values(dimes, quarters, ptr_value_dimes, ptr_value_quarters); // definition of the function void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_quarters); { * ptr_value_dimes = dimes * 0.10; * ptr_value_quarters = quarters * 0.25; } note: The asterisk and must appear in both the prototype and the function denition when dening the pointer variables but it does not appear in the function call when the pointers are passed into the function. 7This content is available online at http://cnx.org/content/m22152/1.1/.
  • 251. 243 The above example shows the basic mechanics of the indirection operator. The use of pointers with indirection is often preferred for processing arrays. The array index operator is also known as the array method of dereferencing. The following couts are equivalent: int ages[] = {47, 45, 18, 11, 9}; cout ages[3]; cout *(ages + 3); The both say, The name of an array is a pointer; take the pointer and calculate a new address that points to the 3 rd oset by adding the correct number of bytes onto the pointer (integer data type is normally 4 bytes long 3 osets times 4 bytes is 12 bytes); then dereference that pointer (since this is an Rvalue context fetch me the value that you are pointing at) and send it to the standard output device. You should study the demonstration programs in conjunction with this module. 22.4.2 Demonstration Program in C++ 22.4.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 22.4.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Pointer_Passing.cpp 8 Download from Connexions: Demo_Array_ Pointer_Processing.cpp 9 22.4.3 Denitions Denition 22.5: indirection operator The asterisk used for dereferencing a pointer. Denition 22.6: dereferencing The concept of using the item to which a pointer or address is pointing at. 22.5 Practice 22: Pointers10 22.5.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 8See the le at http://cnx.org/content/m22152/latest/Demo_Pointer_Passing.cpp 9See the le at http://cnx.org/content/m22152/latest/Demo_Array_Pointer_Processing.cpp 10This content is available online at http://cnx.org/content/m22153/1.3/.
  • 252. 244 CHAPTER 22. 22. POINTERS 2. Acquire a general understanding of the pointer data type, the address and indirection operators, the concept of dereferencing. 3. Given pseudocode, write the C++ code for a program that uses reference variables. 22.5.2 Memory Building Activities Link to: MBA 22 11 22.5.3 Exercises Exercise 22.1 (Solution on p. 246.) Answer the following statements as either true or false: 1. The address operator is the @ symbol. 2. Passing by reference should be used when there is only one item to be modied. 3. Variables of pointer data type are dened using an asterisk. 4. Using pointers with the indirection operator can be used instead of passing variables by reference. 5. There are two kinds of dereferencing one with the indirection operator and the other with the index operator. 22.5.4 Miscellaneous Items None at this time. 22.5.5 Lab Assignment 22.5.5.1 Creating a Folder or Sub-Folder for Chapter 22 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_22 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 22.5.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_22_Pseudocode.txt 12 22.5.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le from the Lab_22_Pseudocode.txt le. Name it: Lab_22.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 11See the le at http://cnx.org/content/m22153/latest/index.html 12See the le at http://cnx.org/content/m22153/latest/Lab_22_Pseudocode.txt
  • 253. 245 22.5.6 Problems 22.5.6.1 Problem 22a Instructions Give a general explanation of the pointer data type and the use of addresses and dereferencing. Include both the indirection operator and the index operator in your discussion.
  • 254. 246 CHAPTER 22. 22. POINTERS Solutions to Exercises in Chapter 22 Solution to Exercise 22.1 (p. 244) Answers: 1. false 2. false 3. true 4. true 5. true
  • 255. Chapter 23 23. More Arrays Compiler Directives 23.1 Multidimensional Arrays1 23.1.1 Overview An array is a sequenced collection of elements of the same data type with a single identier name. As such, the array data type belongs to the Complex category or family of data types. Arrays can have multiple axes (more than one axis). Each axis is a dimension. Thus a single dimension array is also known as a list. A two dimension array is commonly known as a table (a spreadsheet like Excel is a two dimension array). In real life there are occasions to have data organized into multiple dimensioned arrays. Consider a theater ticket with section, row and seat (three dimensions). We refer to the individual values as members (or elements) of the array. Programming languages imple- ment the details of arrays dierently. Because there is only one identier name assigned to the array, we have operators that allow us to reference or access the individual members of an array. The operator commonly associated with referencing an array member is the index operator. It is important to learn how to dene an array and initialize its members. The index operator is a set of square brackets with an integer value between the brackets that represents the oset from the front of the array. Multidimensional arrays use one set of square brackets per dimension or axis of the array. For example a table which has two dimensions would use two sets of square brackets to dene the array variable and two sets of square brackets for the index operators to access the members of the array. Because of the complexity for multidimensional arrays, the demonstration program shows a two dimension array and you should study it in conjunction with this module. 23.1.2 Demonstration Program in C++ 23.1.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 1This content is available online at http://cnx.org/content/m22203/1.2/. 247
  • 256. 248 CHAPTER 23. 23. MORE ARRAYS COMPILER DIRECTIVES 23.1.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Multidimension_Arrays.cpp 2 23.1.3 Denitions Denition 23.1: dimension An axis of an array. Denition 23.2: list A single dimension array. Denition 23.3: table A two dimension array. Denition 23.4: array member An element or value in an array. Denition 23.5: index An operator that allows us to reference a member of an array. Denition 23.6: oset The method of referencing array members by starting at zero. 23.2 Conditional Compilation3 23.2.1 Overview As you proceed in your programming career, the problems/tasks that need solving become more complex. The documentation of the algorithm done in pseudo code (or some other method) will still need to be con- verted into a programming solution. Inevitably, when writing that source code mistakes will be introduced. When learning the syntax of a new programming language, programmers sometimes automatically think in their old language syntax, and make mistakes that are sometimes hard to detect. The concept of using a ag to either activate or have remain dormant certain lines of code designed solely to help with the debugging of a program has existed since almost the beginning of modern computer programming (1950's). One of the debugging tools available within C++ is conditional compilation. For our ag, we would use a dened constant like: #define DEBUG 1 Then using another compiler directive pair, the #if and #endif, we can have the compiler during the pre-processor either include or not include one or more lines of code. #if DEBUG cout n***** DEBUG Code ** Hi mom!; #endif Of course saying Hi mom! is not very useful for debugging your code. However, you can use test data with conditional compilation. A series of input data values and a series of output predictors can be placed in the program. Then you can turn on the debug feature or turn them o with your debugging ag. You should study the demonstration program in conjunction with this module. 2See the le at http://cnx.org/content/m22203/latest/Demo_Multidimension_Arrays.cpp 3This content is available online at http://cnx.org/content/m22204/1.3/.
  • 257. 249 23.2.2 Demonstration Program in C++ 23.2.2.1 Creating a Folder or Sub-Folder for Source Code Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Demo_Programs If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 23.2.2.2 Download the Demo Program Download and store the following le(s) to your storage device in the appropriate folder(s). Following the methods of your compiler/IDE, compile and run the program(s). Study the source code le(s) in conjunction with other learning materials. You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Demo_Conditional_Compliation.cpp 4 23.2.3 Denitions Denition 23.7: conditional compilation A compiler directive that includes or excludes lines of code based on a Boolean expression. 23.3 Practice 23: More Arrays Compiler Directives5 23.3.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Have an exposure to multidimensional arrays. 3. Understand conditional compilation as a testing technique. 4. When supplied with test data, add conditional compilation lines to an existing C++ source code. 23.3.2 Memory Building Activities Link to: MBA 23 6 23.3.3 Exercises Exercise 23.1 (Solution on p. 251.) Answer the following statements as either true or false: 1. Very few arrays need more than one axis. 2. Multidimensional arrays use multiple square brackets, one set per axis. 3. Using a ag to activate debugging lines of code has been around since the 1950s. 4See the le at http://cnx.org/content/m22204/latest/Demo_Conditional_Compilation.cpp 5This content is available online at http://cnx.org/content/m22205/1.2/. 6See the le at http://cnx.org/content/m22205/latest/index.html
  • 258. 250 CHAPTER 23. 23. MORE ARRAYS COMPILER DIRECTIVES 4. Within C++ we can use the conditional compilation compiler directives to implement debug- ging line of code. 23.3.4 Miscellaneous Items None at this time. 23.3.5 Lab Assignment 23.3.5.1 Creating a Folder or Sub-Folder for Chapter 23 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_23 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 23.3.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_23a.cpp 7 23.3.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Compile and run the Lab_23a.cpp source code le. Understand how it works. • Copy the source code le Lab_23a.cpp naming it: Lab_23b.cpp • Add conditional compilation statements similar to the demonstration program used in the Conditional Compilation Connexions module. Specically use: 157 pennies, 92 nickels, 23 dimes and 31 quarters as your test data. • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 23.3.6 Problems 23.3.6.1 Problem 23a Instructions Give three examples in the real world where data might be structured into a multidimensional array. One example (and you can't count it) is a theatre ticket which might have a section, row and seat number on it. 7See the le at http://cnx.org/content/m22205/latest/Lab_23a.cpp
  • 259. 251 Solutions to Exercises in Chapter 23 Solution to Exercise 23.1 (p. 249) Answers: 1. false 2. true 3. true 4. true
  • 260. 252 CHAPTER 23. 23. MORE ARRAYS COMPILER DIRECTIVES
  • 261. Chapter 24 24. OOP HPC 24.1 Object Oriented Programming1 24.1.1 Discussion In procedural programming, the programmer constructs procedures (or functions, as they are called in C++). The procedures are collections of programming statements that perform a specic task. The pro- cedures each contain their own variables and commonly share variables with other procedures. Procedural programming is centered on the procedure or function. 2 For decades (1950s to through the 1980s) most programming was taught as procedural programming. Coupled with the imposition of using standardized control structures in the late 1960s, we have what is typically called modular structured programming. Another, equally valid approach to programming is object-oriented programming or OOP. It was introduced in the mid 1980s and was widely accepted as a programming approach by the early 1990s. The rst languages to introduce OPP to the masses were C++ and Java. Shortly after their introduction, there were American National Standards Institute (ANSI) standards established for those languages. Today, C++ and Java are widely used. The primary dierences between the two approaches is their use of data. In a procedural program, the design centers around the rules or procedures for processing the data. The procedures, implemented as functions in C++, are the focus of the design. The data objects are passed to the functions as parameters. The key question is how the functions will transform the data they receive for either storage or further processing. Procedural programming has been the mainstay of computer science since its beginning and is still heavily used today. In an object-oriented program, abbreviated OPP, the design centers around objects that contain (encap- sulate) the data and the necessary functions to process the data. In OOP, the objects own the functions that process the data. 3 Object-oriented programming . . . is centered on the object. An object is a programming element that contains data and the procedures that operate on the data. The objects contain, within themselves, both the information and the ability to manipulate the information. 4 To help complicate the picture, the C++ programming language can be used (and is used) to write either a procedural program (modular structured program) or an object-oriented program. Some items used by those writing procedural programs in C++ are in fact objects. Examples include: 1This content is available online at http://cnx.org/content/m22188/1.2/. 2Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of America: Pearson Addison Wesley, 2008) 22. 3Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United States of America: Thompson Brooks/Cole, 2004) 156. 4Tony Gaddis, Judy Walters and Godfrey Muganda, Starting Out with C++ Early Objects Sixth Edition (United States of America: Pearson Addison Wesley, 2008) 22. 253
  • 262. 254 CHAPTER 24. 24. OOP HPC 1. Standard input and output items of: cout and cin; example: cout.setf(ios::xed) 2. Strings; calculating the length with: identier_name.length() 3. File input/output; example: inData.open(lespec, ios::in) Objects are implemented with a class data type; which is a complex or derived data type. Implementation details will not be presented in the module. 24.1.2 Transition Many students will learn modular structured programming before learning object-oriented programming. The common way of teaching programming fundamentals is to cover them or divide them into three courses, usually covered in this order: 1. Modular structured 2. Object-oriented 3. Data structures The following items learned in modular structured programming ow into the learning of object-oriented programming: 1. The standard and complex data types are the same 2. The operators are the same, thus data manipulation is the same 3. The control structures are the same 4. Concepts of documentation and making code readable are the same 5. The use of test data to verify logical thinking and program results is similar 24.1.3 Denitions Denition 24.1: procedural programming Aka modular structured programming. Denition 24.2: object oriented A programming approach that encapsulates data with functions. 24.2 Understanding High Performance Computing5 24.2.1 Preface June 2, 2009 This module was created as an entry for the 2008-'09 Open Education Cup: High Performance Computing competition. The competition was supervised by Dr. Jan Erik Odegard, Executive Director of the Ken Kennedy Institute for Information Technology at Rice University. It was submitted to the Parallel Algorithms and Applications category and specically designed as an introduction to the subject targeting intermediate grade school students to collegiate undergraduates who have little knowledge of High Performance Computing (HPC). Those who reviewed the entries for the competition made some suggestions for improvement and most have been incorporated into this revised edition of the module. As always; my thanks to them and all others who make suggestions for improving educational materials. Kenneth Leroy Busbee 5This content is available online at http://cnx.org/content/m19804/1.6/.
  • 263. 255 24.2.2 Introduction to High Performance Computing Grouping multiple computers or multiple computer processors to accomplish a task quicker is referred to as High Performance Computing (HPC). We want to explain how this is accomplished using parallel programming algorithms or concepts. 24.2.2.1 The Shift from a Single Processor to Parallel We are going to start our explanation by giving two simple examples. Example 24.1 After eating all you can, you toss your chicken leg bone out of the car window (shame on you for trashing up the highway), but in short order an ant nds your tossed chicken bone. One single ant could bite o the left over on the bone and transport it to the colony, one bite at a time; but, it might take him 1 whole day (24 hours) of work. But, what if he gets help? He signals some buddies and being a small colony of ants they allocate a total of 10 ants to do the task. Ten times the workers take one tenth the time. The ten ants do the task in 2 hours and 24 minutes. I toss another bone out the window. An ant nds it and the colony allocates 50 ants to do the task of picking the bone clean. In less than 30 minutes (28.8 to be exact) the 50 ants working in parallel complete the task. Example 24.2 One painter might take 8 hours to paint the exterior of an average sized house. But, if he can put a crew of 10 painters working simultaneously (or in other words in parallel) it takes only 48 munities. What about a crew of 50 painters assuming that they can do work and not get in the way of each other; well how about less than 10 minutes (9.6 to be exact). Now let's make sure we understand that the same amount of work was done in the examples given. The work was only completed in a shorter amount of time because we put more workers on the task. Not all tasks can be divided up in this way, but when it can be divided between multiple workers, we can take advantage of the workers doing their sub part of the task in parallel. Let's look at another example. Example 24.3 I want to drive from Houston, Texas to Dallas, Texas; a distance of about 250 miles. For easy calculations let's say I can travel 50 miles in one hour. It would take me 5 hours. Well, I could divide the task between 5 cars and have each car travel 50 miles and arrive in Dallas in 1 hour. Right? Well, wrong. The task of driving from Houston to Dallas cannot be divided into tasks that can be done in parallel. The task can only be done by one person driving in a line from Houston to Dallas in 5 hours. I used the word line because it helps connect us to the word: linear. A linear task cannot be broken-up into smaller tasks to be done in parallel by multiple workers. Within the computer world, the word associated with linear concept is sequential processing. I must drive one mile at a time in sequence to get to Dallas. Our natural tendency is to share the work that is to work in parallel whenever it is possible. As a group we can accomplish many tasks that can be done in parallel in less time. 24.2.2.2 The Birth of Computers A Parallel to Central Processing Unit (CPU) Story ENIAC, short for Electronic Numerical Integrator And Computer, was the rst general-purpose electronic computer (July 1946). It was the rst Turing-complete, digital computer capable of being reprogrammed to solve a full range of computing problems. ENIAC had twenty ten-digit signed accumulators which used ten's complement representation and could perform 5,000 simple addition or subtraction operations between any of them and a source (e.g., another accumulator, or a constant transmitter) every second. It was possible to connect several accumulators to run simultaneously, so the peak speed of operation was potentially much higher due to parallel operation. (ENIAC from Wikipedia)
  • 264. 256 CHAPTER 24. 24. OOP HPC Often not understood by many today, the rst computer used base 10 arithmetic in the electronics and was a parallel processing machine by using several accumulators to improve the speed. However, this did not last for long. During its construction: The First Draft of a Report (commonly shortened to First Draft) on the EDVAC Electronic Discrete Variable Automatic Computer was an incomplete 101 page document written by John von Neumann and distributed on June 30, 1945 by Herman Goldstine, security ocer on the classied ENIAC project. It contains the rst published description of the logical design of a computer using the stored-program concept, which has come to be known as the von Neumann architecture. (First Draft of a Report on the EDVAC from Wikipedia) The von Neumann architecture is a design model for a stored-program digital computer that uses a [central] processing [unit] and a single separate storage structure to hold both instructions and data. It is named after the mathematician and early computer scientist John von Neumann. Such computers implement a universal Turing machine and have a sequential architecture. (Von Neumann architecture from Wikipedia) Von Neumann also proposed using a binary (base 2) numbering system for the electronics. One of the characteristics of the von Neumann architecture was the trade o of multiple processors using base 10 electronics to a single central processor using base 2 (or digital) electronics. To compare to our ant example, the idea was to use one real fast ant versus 10 slow ants. If one real fast ant can do 1,000 tasks in an hour; it would be more powerful (be able to do more tasks) than 10 ants doing 10 tasks an hour or the equivalent of 100 tasks per hour. The rest is history most commercially built computers for about the rst forty years (1951 to 1991) followed the von Neumann architecture. The electronic engineers keep building more reliable and faster electronics. From vacuum tube, to transistor, to integrated circuit to what we call today chip technology. This transformation made computers break down less frequently (they were more reliable), physically smaller, needing less electric power and faster. Personal computers were introduced in the late 1970's and within ten years became more commonly available and used. One short coming was that most programming eorts were towards improving the linear (or sequential) way of thinking or solving a problem. After all, the computer electronic engineers would be making a faster computer next year. Everyone understood that the computer had only one central processing unit (CPU). Right? 24.2.2.3 The Need for Power Well, wrong. Computer scientists and electronic engineers had been experimenting with multi-processor computers with parallel programming since 1946. But it's not until the 1980's that we see the rst par- allel processing computers (built by Cray and other computer companies) being sold as commercial built computers. It's time for another example. Example 24.4 The circus traveling by train from one city to the next has an elephant that dies. They decide to toss the elephant o the train (shame on them for trashing up the country side), but in short order a super ant (faster than most regular ants) nds the elephant. This project is much larger than your tossed chicken bone. One single super ant could do the task (bite o a piece of the elephant and transport it to the colony, one bite at a time); but, it might take one whole year. After all this requires a lot more work than a chicken bone. But, what if he gets help? He signals some buddies and being a large colony of super ants they allocate a total of 2,190 ants to do the task. Wow, they devour the elephant in six hours. This elephant example is exactly where the computer scientists had arrived. The electronic engineers were going to continue to make improvements in the speed of a single central processing unit computer, but not soon enough to satisfy the need for power to be able to solve tasks requiring immense computing power. Some of the new tasks that would require immense computer power included the human genome project, searching for oil and gas by creating 3 dimensional images of geological formations and the study of gravitational forces in the universe; just to mention a few. The solution: parallel processing to the
  • 265. 257 rescue. Basically the only way to get this immense computer power was to implement parallel processing techniques. During the late 1970's and early 1980's scientists saw the need to explore the parallel processing paradigm more fully and thus the birth of High Performance Computing. Various national and international conferences started during the 1980's to be able to further the cause of High Performance Computing. For example in November of 2008 the SC08 supercomputing conference celebrated their 20 th anniversary. The predicting of the weather is a good example for the need of High Performance Computing. Using the fastest central processing unit computer it might take a year to predict tomorrow's weather. The information would be correct but 365 days late. Using parallel processing techniques and a powerful high performance computer, we might be able to predict tomorrow's weather in 6 hours. Not only correct, but in time to be useful. 24.2.2.4 Measuring Computer Power Most people are familiar with the giga hertz (billions of instructions per second) measure to describe how fast a single CPU's processor is running. Most microcomputers of today are running around 3 GHz or 3 billion instructions a second. Although 3 billion sounds fast, many of these instructions are simple operations. Supercomputing uses a measurement involving oating point arithmetic calculations as the benchmark for comparing computer power. In computing, FLOPS (or ops or op/s) is an acronym meaning FLoating point Operations Per Second. and again On May 25, 2008, an American military supercomputer built by IBM, named 'Roadrunner', reached the computing milestone of one petaop by processing more than 1.026 quadrillion calculations per second. (FLOPS from Wikipedia) For those of us not familiar: Example 24.5: Getting a Sense of Power 3 billion or 3 GHz is: 3,000,000,000 1 quadrillion or 1 pedaflop is: 1,000,000,000,000,000 You also should realize that your personal computer is not doing 3 gigafolp worth of calculations, but something slower when using the FLOPS measurement. 24.2.2.5 High Performance Computing Made Personal It took several years (about 30) to get computers to a personal level (1951 to 1981). It took about twenty years (late 1980's to present 2009) to get multi-processor computers to the personal level. Currently available to the general public are computers with duo core and quad core processors. In the near future, micro computers will have 8 to 16 core processors. People ask, Why would I need that much computer power? There are dozens of applications, but I can think of a least one item that almost everyone wants: high quality voice recognition. That's right! I want to talk to my computer. Toss your mouse, toss your keyboard, no more touch pad talk to it. Again, one short coming is that most programming eorts have been towards teaching and learning the sequential processing way of thinking or solving a problem. Educators will now need to teach and programmers will now need to develop skills in programming using parallel concepts and algorithms. 24.2.2.6 Summary We have bounced you back and forth between sequential and parallel concepts. We covered our natural tendency to do work in parallel. But with the birth of computers the parallel concepts were set to the side and the computer industry implemented a faster single processor approach (sequential). We explained the limitations of sequential processing and the need for computing power. Thus, the birth of High Performance Computing. Parallel processing computers are migrating into our homes. With that migration, there is a great need to educate the existing generation and develop the next generation of scientists and programmers to be able to take advantage of High Performance Computing.
  • 266. 258 CHAPTER 24. 24. OOP HPC 24.2.3 Learner Appropriate Activities High Performance Computing is impacting how we do everything. Learning, working, even our relaxation and entertainment are impacted by HPC. To help more people understand HPC, I have listed appropriate activities based on where a learner is in relation to their programming skills. 24.2.3.1 Computer Literacy but No Programming Skills We have provided two computer programs that help students see the impact of parallel processing. The rst is a Linear to Parallel Calculator where the student enters how long it would take one person to complete a task, asks how many people will work as a group on the task, then calculates how long it will take the group to complete the task. The second is a Parallel Speed Demonstration Program that simulates parallel processing. It displays to the monitor the rst 60 factorial numbers in 60 seconds, then shows as if 10 processors are doing it in 6 seconds, then as if 100 processors are doing it in less than 1 second. Both are compiled and ready for use on an Intel CPU machine (compiled for use on Windows OS). Download the executable le from Connexions: Linear to Parallel Calculator 6 Download the executable le from Connexions: Parallel Speed Demonstration Program 7 An interesting activity would be to join a group that is using thousands of personal microcomputers via Internet connections for parallel processing. Several distributed processing projects are listed in the FLOPS article on Widipedia. One such group is the Great Internet Mersenne Prime Search - GIMPS. A link to the GIMPS web site is: http://www.mersenne.org/ 8 Another activity is to Google some keywords. Be careful - Googling can be confusing and often can be dicult to focus on the precise subject that you want. • high performance computing • computational science • supercomputing • distributed processing 24.2.3.2 Learning Programming Fundamentals Students learning to program that are currently taking courses in Modular/Structured programming and/or Object Oriented programming might want to review the source code les for the demonstration programs listed above. These programs do not do parallel programming, but the student could modify or improve them to better explain parallel programming concepts. You may need to right click on the link and select Save Target As in order to download these source code les. Download the source code le from Connexions: Linear to Parallel Calculator 9 Download the source code le from Connexions: Parallel Speed Demonstration Program 10 Another appropriate activity is to Google some of the key words listed above. With your fundamental understanding of programming, you will understand more of the materials than those with no programming experience. You should get a sense that parallel programming is becoming a more important part of a computer professional's work and career. Review the Top 500 Super Computers at: http://www.top500.org/ 11 Look at the source code listings provided in the next section, but remember, you cannot compile or run these on your normal computer. 6See the le at http://cnx.org/content/m19804/latest/Demo_Linear_to_Parallel.exe 7See the le at http://cnx.org/content/m19804/latest/Demo_Parallel_Speed.exe 8http://www.mersenne.org/ 9See the le at http://cnx.org/content/m19804/latest/Demo_Linear_to_Parallel.cpp 10See the le at http://cnx.org/content/m19804/latest/Demo_Parallel_Speed.cpp 11http://www.top500.org/
  • 267. 259 24.2.3.3 Upper Division Under-Graduate College Students The challenge is to try parallel computing, not just talk about it. During the week of May 21st to May 26th in 2006, this author attended a workshop on Parallel and Distributed Computing. The workshop was given by the National Computational Science Institute and introduced parallel programming using multiple computers (a group of micro computers grouped or clustered into a super-micro computer). The conference emphasized several important points related to the computer industry: 1. During the past few years super-micro computers have become more powerful and more available. 2. Desk top computers are starting to be built with multiple processors (or cores) and we will have multiple (10 to 30) core processors within a few years. 3. Use of super-micro computing power is wide spread and growing in all areas: scientic research, engineering applications, 3D animation for computer games and education, etc. 4. There is a shortage of educators, scientic researchers, and computer professionals that know how to manage and utilize this developing resource. Computer professionals needed include: Technicians that know how to create and maintain a super-micro computer; and Programmers that know how to create computer applications that use parallel programming concepts. This last item was emphasized to those of you beginning a career in computer programming that as you progress in your education, you should be aware of the changing nature of computer programming as a profession. Within a few years all professional programmers will have to be familiar with parallel programming. During the conference this author wrote a program that sorts an array of 150,000 integers using two dierent approaches. The rst way was without parallel processing. When it was compiled and executed using a single machine, it took 120.324 seconds to run (2 minutes). The second way was to redesign the program so parts of it could be run on several processors at the same time. When it was compiled and executed using 11 machines within a cluster of micro-computers, it took 20.974 seconds to run. That's approximately 6 times faster. Thus, parallel programming will become a necessity to be able to utilize the multi-processor hardware of the near future. A distributed computing environment was set up in a normal computer lab using a Linix operating system stored on a CD. After booting several computers with the CD, the computers can communicate with each other with the support of Message Passing Interface or MPI commands. This model known as the Bootable Cluster CD (BCCD) is available from: Bootable Cluster CD University of Northern Iowa at: http://www.bccd.net/ 12 The source code les used during the above workshop were modied to a version 8, thus an 8 is in the lename. The non-parallel processing super code was named: nonps8.cpp with the parallel processing super code named: ps8.cpp (Note: The parallel processing code contains some comments that describe that part of the code being run by a machine identied as the SERVER_NODE with a part of the code being run by the 10 other machines (the Clients). The client machines communicate critical information to the server node using Message Passing Interface or MPI commands.) You may need to right click on the link and select Save Target As in order to download these source code les. Download the source code le from Connexions: nonps8.cpp 13 Download the source code le from Connexions: ps8.cpp 14 Two notable resources with super computer information were provided by presenters during the workshop: Oklahoma University Supercomputing Center for Education Research at: http://www.oscer.ou.edu/education.php 15 12http://www.bccd.net/ 13See the le at http://cnx.org/content/m19804/latest/nonps8.cpp 14See the le at http://cnx.org/content/m19804/latest/ps8.cpp 15http://www.oscer.ou.edu/education.php
  • 268. 260 CHAPTER 24. 24. OOP HPC Contra Costa College High Performance Computing at: http://contracosta.edu/hpc/resources/presentations/ 16 You can also Google the topic's key words and spend several days reading and experimenting with High Performance Computing. Consider reviewing the Educator Resources links provided in the next section. 24.2.4 Educator Resources There are many sites that provide materials and assistance to those teaching the many aspects of High Performance Computing. A few of them are: Shodor A National Resource for Computational Science Education at: http://www.shodor.org/home/ 17 CSERD Computational Science Education Reference Desk at: http://www.shodor.org/refdesk/ 18 National Computational Science Institute at: http://www.computationalscience.org/ 19 Association of Computing Machinery at: http://www.acm.org/ 20 Super Computing Education at: http://sc09.sc-education.org/about/index.php 21 24.2.5 Simple Denitions Denition 24.3: high performance computing Grouping multiple computers or multiple computer processors to accomplish a task in less time. Denition 24.4: sequential processing Using only one processor and completing the tasks in a sequential order. Denition 24.5: parallel processing Dividing a task into parts that can utilize more than one processor. Denition 24.6: central processing unit The electronic circuitry that actually executes computer instructions. Denition 24.7: parallel programming Involves developing programs that utilize parallel processing algorithms that take advantage of multiple processors. 24.3 Practice 24: OOP HPC22 24.3.1 Learning Objectives With 100% accuracy during a: memory building activity, exercises, lab assignment, problems, or timed quiz/exam; the student is expected to: 1. Dene the terms on the denitions as listed in the modules associated with this chapter. 2. Gain an exposure to object-oriented programming. 3. Gain an exposure to high performance computing. 4. G iven general instructions, write the C++ code for a program that includes a general review of the textbook/collection/course. 16http://contracosta.edu/hpc/resources/presentations/ 17http://www.shodor.org/home/ 18http://www.shodor.org/refdesk/ 19http://www.computationalscience.org/ 20http://www.acm.org/ 21http://sc09.sc-education.org/about/index.php 22This content is available online at http://cnx.org/content/m22194/1.4/.
  • 269. 261 24.3.2 Memory Building Activities Link to: MBA 24 23 24.3.3 Exercises Exercise 24.1 (Solution on p. 263.) Answer the following statements as either true or false: 1. Procedural programming and object-oriented programming cannot be done with the same compiler/IDE. 2. Object-oriented programming encapsulates data and functions. 3. High Performance Computing is a new topic on the computer scene. 4. The concepts and examples of High Performance Computer are dicult to explain. 5. All programmers will need to know about parallel programming in the near future. 24.3.4 Miscellaneous Items None at this time. 24.3.5 Lab Assignment 24.3.5.1 Creating a Folder or Sub-Folder for Chapter 24 Files Depending on your compiler/IDE, you should decide where to download and store source code les for processing. Prudence dictates that you create these folders as needed prior to downloading source code les. A suggested sub-folder for the Bloodshed Dev-C++ 5 compiler/IDE might be named: • Chapter_24 within the folder named: Cpp_Source_Code_Files If you have not done so, please create the folder(s) and/or sub-folder(s) as appropriate. 24.3.5.2 Download the Lab File(s) Download and store the following le(s) to your storage device in the appropriate folder(s). You may need to right click on the link and select Save Target As in order to download the le. Download from Connexions: Lab_24_Narrative_Description.txt 24 24.3.5.3 Detailed Lab Instructions Read and follow the directions below carefully, and perform the steps in the order listed. • Create a source code le following the directions in the Lab_24_Narrative_Description.txt le. Name it: Lab_24.cpp • Build (compile and run) your program. • After you have successfully written this program, if you are taking this course for college credit, follow the instructions from your professor/instructor for submitting it for grading. 23See the le at http://cnx.org/content/m22194/latest/index.html 24See the le at http://cnx.org/content/m22194/latest/Lab_24_Narrative_Description.txt
  • 270. 262 CHAPTER 24. 24. OOP HPC 24.3.6 Problems 24.3.6.1 Problem 24a Instructions Describe the fundamental dierences between procedural (modular structured) programming and object- oriented programming. 24.3.6.2 Problem 24b Instructions Explain why High Performance Computing is needed to predict tomorrow's weather.
  • 271. 263 Solutions to Exercises in Chapter 24 Solution to Exercise 24.1 (p. 261) Answers: 1. false 2. true 3. false 4. false 5. true
  • 272. 264 CHAPTER 24. 24. OOP HPC
  • 273. Chapter 25 Review Materials 25.1 Review: Foundation Topics Group: 1-51 25.1.1 Strategy Discussion Exams vary depending on your instructor. Many will use the following: 1. Denitions 2. Self-grading questions including true/false, multiple choice, short answer, etc. 3. Problems The materials in this textbook/collection have covered these items at the end of every chapter within the Practice module for that chapter. We suggest the following test preparation strategies: 1. If your professor is testing the denitions and expecting you to have them memorized, you should review the Using the Flash Card Activity within the Study Habits that Build the Brain module within the Appendix materials. Practice writing your denitions using the Flash Card Activity in the Memory Building Activities (MBAs) available within the Practice modules or in the Memory Building Activities within this Review module. 2. Do a quick review of any exercises within the Connexions modules or the Practice modules. Also review quizzes or exams that you have taken and pay special attention to making sure you understand why you missed a question. 3. If your professor has indicated that they might include a few of the problems presented within the Practice modules, make sure you have formulated a good answer for each problem. If authorized, collaborate with other students to improve your answers to the problems. Spend a moderate amount of time reviewing each problem with its answer before the exam. 25.1.2 Memory Building Activities Link to: MBA Review: Foundation Topics Group: 1-5 2 25.1.3 Miscellaneous Items Link to: Manipulation of Data Part 1 3 1This content is available online at http://cnx.org/content/m22418/1.2/. 2See the le at http://cnx.org/content/m22418/latest/index.html 3See the le at http://cnx.org/content/m22418/latest/Manipulation_Data_Part_1.pdf 265
  • 274. 266 CHAPTER 25. REVIEW MATERIALS 25.2 Review: Modular Programming Group: 6-94 25.2.1 Strategy Discussion Exams vary depending on your instructor. Many will use the following: 1. Denitions 2. Self-grading questions including true/false, multiple choice, short answer, etc. 3. Problems The materials in this textbook/collection have covered these items at the end of every chapter within the Practice module for that chapter. We suggest the following test preparation strategies: 1. If your professor is testing the denitions and expecting you to have them memorized, you should review the Using the Flash Card Activity within the Study Habits that Build the Brain module within the Appendix materials. Practice writing your denitions using the Flash Card Activity in conjunction with the Memory Building Activities (MBAs) available within the Practice modules or in the Memory Building Activities within this Review module. 2. Do a quick review of any exercises within the Connexions modules or the Practice modules. Also review quizzes or exams that you have taken and pay special attention to making sure you understand why you missed a question. 3. If your professor has indicated that they might include a few of the problems presented within the Practice modules, make sure you have formulated a good answer for each problem. If authorized, collaborate with other students to improve your answers to the problems. Spend a moderate amount of time reviewing each problem with its answer before the exam. 25.2.2 Memory Building Activities Link to: MBA Review: Modular Programming Group: 6-9 5 25.2.3 Miscellaneous Items None at this time. 25.3 Review: Structured Programming Group: 10-166 25.3.1 Strategy Discussion Exams vary depending on your instructor. Many will use the following: 1. Denitions 2. Self-grading questions including true/false, multiple choice, short answer, etc. 3. Problems The materials in this textbook/collection have covered these items at the end of every chapter within the Practice module for that chapter. We suggest the following test preparation strategies: 4This content is available online at http://cnx.org/content/m22421/1.2/. 5See the le at http://cnx.org/content/m22421/latest/index.html 6This content is available online at http://cnx.org/content/m21653/1.5/.
  • 275. 267 1. If your professor is testing the denitions and expecting you to have them memorized, you should review the Using the Flash Card Activity within the Study Habits that Build the Brain module within the Appendix materials. Practice writing your denitions using the Flash Card Activity in conjunction with the Memory Building Activities (MBAs) available within the Practice modules or in the Memory Building Activities within this Review module. 2. Do a quick review of any exercises within the Connexions modules or the Practice moudles. Also review quizzes or exams that you have taken and pay special attention to making sure you understand why you missed a question. 3. If your professor has indicated that they might include a few of the problems presented within the Practice modules, make sure you have formulated a good answer for each problem. If authorized, collaborate with other students to improve your answers to the problems. Spend a moderate amount of time reviewing each problem with its answer before the exam. 25.3.2 Memory Building Activities Link to: MBA Review: Structured Programming Group: 10-16 7 25.3.3 Miscellaneous Items Link to: Animated gif showing an if then else 8 Link to: Animated gif showing a do while loop 9 Link to: Animated gif showing a while loop 10 Link to: Manipulation of Data Part 2 11 Link to: Manipulation of Data Part 3 12 25.4 Review: Intermediate Topics Group: 17-2113 25.4.1 Strategy Discussion Exams vary depending on your instructor. Many will use the following: 1. Denitions 2. Self-grading questions including true/false, multiple choice, short answer, etc. 3. Problems The materials in this textbook/collection have covered these items at the end of every chapter within the Practice module for that chapter. We suggest the following test preparation strategies: 1. If your professor is testing the denitions and expecting you to have them memorized, you should review the Using the Flash Card Activity within the Study Habits that Build the Brain module within the Appendix materials. Practice writing your denitions using the Flash Card Activity in conjunction with the Memory Building Activities (MBAs) available within the Practice modules or in the Memory Building Activities within this Review module. 2. Do a quick review of any exercises wtihin the Connexions modules or Practice modules. Also review quizzes or exams that you have taken and pay special attention to making sure you understand why you missed a question. 7See the le at http://cnx.org/content/m21653/latest/index.html 8See the le at http://cnx.org/content/m21653/latest/if_then_else_ow.gif 9See the le at http://cnx.org/content/m21653/latest/do_while_ow.gif 10See the le at http://cnx.org/content/m21653/latest/while_ow.gif 11See the le at http://cnx.org/content/m21653/latest/Manipulation_Data_Part_2.pdf 12See the le at http://cnx.org/content/m21653/latest/Manipulation_Data_Part_3.pdf 13This content is available online at http://cnx.org/content/m21642/1.4/.
  • 276. 268 CHAPTER 25. REVIEW MATERIALS 3. If your professor has indicated that they might include a few of the problems presented within the Practice modules, make sure you have formulated a good answer for each problem. If authorized, collaborate with other students to improve your answers to the problems. Spend a moderate amount of time reviewing each problem with its answer before the exam. 25.4.2 Memory Building Activities Link to: MBA Review: Intermediate Topics Group: 17-21 14 25.4.3 Miscellaneous Items None at this time. 25.5 Review: Advanced Topics Group: 22-2415 25.5.1 Strategy Discussion Exams vary depending on your instructor. Many will use the following: 1. Denitions 2. Self-grading questions including true/false, multiple choice, short answer, etc. 3. Problems The materials in this textbook/collection have covered these items at the end of every chapter within the Practice module for that chapter. We suggest the following test preparation strategies: 1. If your professor is testing the denitions and expecting you to have them memorized, you should review the Using the Flash Card Activity within the Study Habits that Build the Brain module within the Appendix materials. Practice writing your denitions using the Flash Card Activity in conjunction with the Memory Building Activities (MBAs) available within the Practice modules or in the Memory Building Activities within this Review module. 2. Do a quick review of any exerecises within the Connexions modules or the Practice modules. Also review quizzes or exams that you have taken and pay special attention to making sure you understand why you missed a question. 3. If your professor has indicated that they might include a few of the problems presented within the Practice modules, make sure you have formulated a good answer for each problem. If authorized, collaborate with other students to improve your answers to the problems. Spend a moderate amount of time reviewing each problem with its answer before the exam. 25.5.2 Memory Building Activities Link to: MBA Review: Advanced Topics Group: 22-24 16 25.5.3 Miscellaneous Items None at this time. 14See the le at http://cnx.org/content/m21642/latest/index.html 15This content is available online at http://cnx.org/content/m22215/1.4/. 16See the le at http://cnx.org/content/m22215/latest/index.html
  • 277. Chapter 26 Appendix 26.1 Abbreviated Precedence Chart for C++ Operators1 An operator is a language-specic syntactical token (one or more symbols) that causes an action to be taken on one or more operands. The following item provides an abbreviated list of those C++ operators that are typically taught in a programming fundamentals course that teaches modular structured programming concepts. The rst column shows the precedence (the higher precedence is 1 or it goes rst) and operators that have the same precedence also have the same associativity (the associativity is only listed once for the group of operators). Decrement is two minus signs, but some word processing software programs might have problems printing two minus signs and convert it to a double dash. Insertion (two signs) and extraction (two signs) might also have printing problems. These printing problems are noted in the comments with emphasized text. PR OPERATOR NAME SYMBOL(S) COMMENTS ASSOICIATIVITYCONNEXIONS MODULE 1 function call () Left to Right m19145 (Sec- tion 6.3) 1 index [] aka array index m21316 (Sec- tion 18.2) 2 class member . a period Right to Left m20796 (Sec- tion 16.1) 2 postx incre- ment ++ unary m20499 (Sec- tion 14.1) 2 postx decre- ment unary, two minus signs m20499 (Sec- tion 14.1) continued on next page 1This content is available online at http://cnx.org/content/m18168/1.12/. 269
  • 278. 270 CHAPTER 26. APPENDIX 3 indirection * unary, aka dereference Right to Left m22152 (Sec- tion 22.4) 3 address unary m22148 (Sec- tion 22.1) 3 unary positive + unary, aka plus m20501 (Sec- tion 16.2) 3 unary negative - unary, aka mi- nus m20501 (Sec- tion 16.2) 3 prex incre- ment ++ unary m20499 (Sec- tion 14.1) 3 prex decre- ment unary, two minus signs m20499 (Sec- tion 14.1) 3 cast (type) unary m18744 (Sec- tion 3.7) 3 sizeof sizeof (type) unary m18736 (Sec- tion 9.2) 3 logical NOT ! unary m19847 (Sec- tion 12.2) 4 multiply * Left to Right m18706 (Sec- tion 3.6) 4 divide / m18706 (Sec- tion 3.6) 4 modulus % remainder m18706 (Sec- tion 3.6) 5 add + Left to Right m18706 (Sec- tion 3.6) 5 subtract - m18706 (Sec- tion 3.6) 6 insertion writing, two less than signs Left to Right m18835 (Sec- tion 5.2) 6 extraction reading, two greater than signs m18835 (Sec- tion 5.2) continued on next page
  • 279. 271 7 less than Left to Right m19549 (Sec- tion 11.3) 7 greater than m19549 (Sec- tion 11.3) 7 less than or equal to = m19549 (Sec- tion 11.3) 7 greater than or equal to = m19549 (Sec- tion 11.3) 8 equality == equal to Left to Right m19549 (Sec- tion 11.3) 8 inequality != not equal to m19549 (Sec- tion 11.3) 9 logical AND Left to Right m19847 (Sec- tion 12.2) 10 logical OR || Left to Right m19847 (Sec- tion 12.2) 11 conditional ? : trinary Left to Right m20811 (Sec- tion 17.1) 12 assignment = Right to Left m18725 (Sec- tion 3.5) 12 addition as- signment += m18743 (Sec- tion 4.4) 12 subtraction as- signment -= m18743 (Sec- tion 4.4) 12 multiplication assignment *= m18743 (Sec- tion 4.4) 12 division assign- ment /= m18743 (Sec- tion 4.4) 12 modulus as- signment %= m18743 (Sec- tion 4.4) 13 sequence or comma , Left to Right m18690 (Sec- tion 9.4) Table 26.1 26.2 C++ Reserved Keywords2 All programming languages have reserved words. There are usually less than 50 of these reserved words in any given programming language. They are reserved because they have been pre-assigned a specic meaning within that programming language, thus the compiler recognizes those words to mean a specic thing or action. Within C++ the reserved words are also known as keywords. Programmers use identier names for a variety of items, to include: functions, variables, named constants, alias names, etc. But, they can't use as identier names the words that are reserved to the language. 2This content is available online at http://cnx.org/content/m18181/1.5/.
  • 280. 272 CHAPTER 26. APPENDIX For the C++ language all reserved keywords are typed in lower case. The list that follows includes the American National Standards Institute (ANSI) and the International Organization for Standardization (ISO) lists of reserved words for the C++ programming language. The ISO reserved words may not be implemented in the compiler that you are using, however they may be adopted in future releases of C++ compilers. Wisdom dictates to avoid using them at this point so that there will not be a problem compiling your source code in future releases of compilers. There has been no distinction made in the ANSI or ISO reserved word lists. A search of the Internet for C++ reserved words will reveal several dierent lists. Some are more unique to a specic compiler. Some will be incomplete because the list has been enlarged. The talbe that follows should work for any beginning programming course using C++. The reserved keywords are: and double not_eq throw and_eq dynamic_cast operator true asm else or try auto enum or_eq typedef bitand explicit private typeid bitor extern protected typename bool false public union break oat register unsigned case fro reinterpret-cast using catch friend return virtual char goto short void class if signed volatile compl inline sizeof wchar_t const int static while const-cast long static_cast xor continue mutable struct xor_eq default namespace switch delete new template do not this Table 26.2 26.3 ASCII Character Set3 ASCII stands for American Standard Code for Information Interchange (pronounced ask-key). Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long time ago and now the non-printing characters are rarely used for their original purpose. The rst 32 values (0 to 31) and the last value (127) are the non-printing characters. Several software products can be used to create an ASCII text le. 3This content is available online at http://cnx.org/content/m18169/1.7/.
  • 281. 273 • Notepad within Windows OS and it uses by default the .txt extension. • Microsoft Word by saving the le as 'text only' and it uses by default the .txt extension. • Integrated Development Environment (IDE) compliers for most programming languages usually save source code as ASCII text les but they will use an extension that describes the content of the text le. Example: C++ usually uses .cpp as the extension. The following web links provide more information and tables listing the ASCII Character Set: http://asciiset.com/ 4 http://www.asciitable.com/ 5 http://en.wikipedia.org/wiki/ASCII 6 26.4 Show Hide File Extensions7 By default, le extensions for known le types are hidden in Windows XP and Windows Vista. However, you can change this setting so that le extensions are shown for les. Being able to see le extensions can be very helpful for students taking computer courses because those course instructions often refer to le extensions. The following web links provide instructions for showing or hiding le extensions. 26.4.1 Windows XP http://www.leinfo.net/help/windows-show-extensions.html 8 26.4.2 Windows Vista http://windowshelp.microsoft.com/Windows/en-US/Help/a0b4607a-6fa8-42ab-aef6- 7418183389da1033.mspx 9 26.5 Academic or Scholastic Dishonesty10 26.5.1 Introduction The relationship between faculty and students has always been one of open and honest communication. The faculty member carries the responsibility of presenting course materials via reading assignments, lectures, labs, etc. The student is to learn and understand these materials. Additionally, the faculty members employ various methods to assess the student's mastery of the course materials. Frequently this is done via quizzes, tests, writing assignments, the completion of lab materials, etc. Academic dishonesty (sometimes called Scholastic Dishonesty) is the violation of that trust. Cheating on quizzes and tests as well as plagiarism is usually well understood by students before arriving at the collegiate level of education. Most colleges include adequate explanation in their student handbook explaining well what constitutes cheating on exams and plagiarism. Academic dishonesty often carries some sti penalties. Usually, the student receives the grade of F from the professor in the course in which he is enrolled. The student might be expelled from all of their classes for which they are currently enrolled (F in all of your classes) and expelled from the institution (may not register for classes in the future). Sounds harsh, but it is a violation of the bond of trust between the student and the educational institution. 4http://asciiset.com/ 5http://www.asciitable.com/ 6http://en.wikipedia.org/wiki/ASCII 7This content is available online at http://cnx.org/content/m18100/1.4/. 8http://www.leinfo.net/help/windows-show-extensions.html 9http://windowshelp.microsoft.com/Windows/en-US/Help/a0b4607a-6fa8-42ab-aef6-7418183389da1033.mspx 10This content is available online at http://cnx.org/content/m18096/1.8/.
  • 282. 274 CHAPTER 26. APPENDIX 26.5.2 Collusion Another category of academic dishonesty is collusion which is the unauthorized collaboration with another person in preparing written work (including lab assignments) oered for credit (counting towards your grade calculation). To better understand collusion, students need to realize that as part of the learning and evaluation of that learning, many professors use group projects; a directed or authorized collaboration. Often students are encouraged to form study groups to help discuss the course materials thus improving the learning process. These authorized and sometimes directed activities are not collusion. The following discussion is to help the student understand collusion (unauthorized collaboration) with specic reference to courses that use computers. This is not an all inclusive list, but will cover the common situations that faculty have encountered over the years. Unless your specic professor informs you dierently, you are to assume that the following items discussed are collusion. 26.5.3 Type it Yourself Lab assignments are to be your own personal typing eorts. That is you are to type them or make the modications yourself to the les (documents, spreadsheets, databases, programming source code, etc.) If your course is a programming subject, you are to run the source code le on your compiler, making corrections as need to complete the lab assignment. If the directions for an assignment include starting a new le then don't use an existing le and modify it to complete the assignment. Unless specically authorized by your professor, students should not complete computerized course work as a team or group and then share the nal completed product. Students have said that they worked as a team or group and that all participated and all learned the materials. Don't try this excuse because professors don't buy it. Here is the problem: Part of the learning process is in you doing it yourself. Example: I ask two students to make me some pancakes for breakfast; I expect two individually prepared plates of pancakes (one from each of them) for my breakfast. The professor really does not want to eat two plates of pancakes (or 50 to 100 plates of pancakes, depending on how many students they are teaching), but part of your directed learning activity for the course is to demonstrate that you can make pancakes (not watch someone else make pancakes or participate as a group to make pancakes). 26.5.4 Control Access to Your Files Controlling the les you create (or are directed to modify) means that others will not have access to copy your work. In other words, don't share your les. Students have said that they shared the le so they the other student could see how the completed assignment should look. Don't try this excuse because professors don't buy it. Here is the problem: When you share the le you share your typing eorts (or your original work and your eorts to create that original work). Back to our pancake example: I only gave the other student a plate of completed pancakes, so he could see what the end product should be. All the other student does is add some blue berries and whip cream. If a student makes minor modications to your work (changes the spots where your name is to his name) and turns it in as his work you will be included in the charge of academic dishonesty. Unless specically authorized by your professor, don't share any les that you create or modify with another student ever, not now and not in the future. Here are two suggestions for controlling access to your les: When using a course delivery software product or learning system, such as BlackBorad Vista, don't give another person your password. With the password, they will have access to your submitted assignments including the les that you created. Don't leave your les on a machine where others may have access to them. If multiple students are using or have access to the same machine (often happens with students living in the same household husband/wife, siblings or roommates) or in an on-campus course where many students will have access to the machine store your les on a ash drive. Physically control who gets access to your ash drive.
  • 283. 275 26.5.5 Ask for a Clarication of the Collaboration If you have any question about an activity that might be construed as unauthorized collaboration, ask your professor. They will provide clarication and direction to you about the activity. Students have said that they did not understand or think that it was unauthorized collaboration. Don't try this excuse because professors don't buy it. Here is the problem: We can't, and won't list every minor way in which students can collude. The burden is for you to ask for any clarication for the specic course from your professor. Don't assume that what another instructor allowed in another course will be allowed by this professor in this course. 26.5.6 Detecting Academic Dishonesty Professors weren't born yesterday. The faculty members of most institutions have individually years and collectively thousands of years at understanding academic dishonesty. Cheating on tests, plagiarism and collusion are not new to us. We share our expertise with each other at detecting academic dishonesty. Additionally, the years of technical computer experience of professors who teach using computers in lab settings is often astounding. Students have said that they did not think they could be detected or that academic dishonesty could not be proved. Don't try this approach because professors believe that they are slightly smarter. Actually, we know that we are a lot smarter. It amazes us that some students don't realize that professors are a formidable force. Don't gamble that you can beat us at the Academic Dishonesty Game. Please don't take this as a challenge and use it as an excuse to see if you can be academically dishonest and not get caught. We are warning you, not challenging you. 26.5.7 Summary • The ethics of academic honesty; there is a bond of trust that whatever the student does in relationship to the evaluation process are their own work and eorts. • Collusion is the unauthorized collaboration of students on work submitted for evaluation. • First directive: Type if yourself • Second directive: Don't share your les • Seek clarication from your professor if you have any doubt that the collaborative activity might be considered collusion. • Professors are very capable at detecting academic dishonesty. 26.6 Successful Learning Skills11 26.6.1 Realize the Time Commitment College computer courses often are listed in the catalog of courses with both lecture and lab hours. But unlike the natural and biological sciences (chemistry, physics and biology) that must meet in a specic lab 11This content is available online at http://cnx.org/content/m18101/1.9/.
  • 284. 276 CHAPTER 26. APPENDIX room designed for those courses, students can usually complete their lab portions at a variety of locations (the college's computer lab, home, work, public library, friend's house, etc.). The normal rule of thumb is 1 to 1.5 hours out of class studying for every hour in class and for computer courses this normally means both the lecture and lab hours. Students with learning disabilities or those whose primary language is not English will want to plan for more study time and should use a larger ratio. Thus, you should calculate the weekly hours of commitment needed for a course depending on your circumstances. Example: If a student is taking a 4 credit hour computer course that the college catalog says contains a combination of 6 hours (adding your lecture and lab hours) during a regular 16 week semester; the weekly classroom and study time for that course would be 12 to 15 hours a week. But many students take courses at a faster pace by either taking a course between semesters in a very concentrated mode, starting a course after the regular start of a semester or during the summer. To calculate the weekly study time needed you will need to calculate the total regular semester instructional time and divide by the number of weeks in the faster pace delivery. Example: Our 4 credit hour course is to be taken during a summer term that has 9 weeks of instruction time. The total regular semester time would be 15 times the normal semester commitment (180 to 225 hours). Dividing it by 9 would mean 20 to 25 hours per week. 26.6.2 Understand Your Capacity to Concentrate You cannot expect to spend long periods of time working on computer course materials. After 3 to 4 hours of working on course materials, your ability to learn drops signicantly (and for most to near zero). This problem is compounded by the nature of the material which is cumulative in nature. This means that you must understand item a before you try to learn item b. All of the math and sciences courses of study are of this nature. 26.6.3 Plan Regular Study Times The combination of the time commitment and your ability to concentrate leads to the conclusion that you cannot cram your study time into a week-end of concentrated study. You must break up your study time into 3 to 4 hour study periods doing only one study period per day. You must establish a regular routine for each week. Students taking a regular semester course on-campus will count their class (lecture and lab) time and plan 2 to 3 additional study periods. If taking a course via distance education, students need to plan for all of the course time, thus during a regular semester term, our 4 credit hour course example would require 3 to 4 study periods with 3 to 4 hours for each study period per week. If taking the course at faster pace (9 week summer term) you will need to schedule more study times. This may mean a 3 to 4 hour study period daily for 6 days a week (with only one day o as a day of rest). You need to stay on top of a course to successfully complete it. Pacing yourself with multiple study times allows for eective learning. Students who procrastinate until close to an exam and then try cramming through course materials are rarely A students. 26.6.4 Learning Requires Variety and Repetition Variety comes in many forms and includes lecture, lab assignments, studying textbooks, multi-media materi- als, quizzes, writing a research papers, learning activities such as group discussions, crossword puzzles, ash cards, etc. This variety actually helps our brain to understand and build memory. In addition to variety, repetition (exposure over multiple study periods) is essential for our brains to be able to learn and recall the course materials. Again, this understanding and recall are essential to courses that require cumulative learning (you must understand item a before you can learn item b). Textbooks and professors break-up course materials into chapters or learning modules often with learning objectives rst and review items at the end of each unit. Each chapter or module might have any of the
  • 285. 277 above mentioned items. But doing things and study are dierent. You can't just show up to class and listen, you can't just read stu, you need to study. Study requires a variety of activities. Ask yourself: • Do you understand each learning objective? • Can you explain or formulate an answer for each learning objective? • If you did not understand the reading materials, did you re-read it? • Do the review items (especially questions). • Take lecture notes. • Do the lecture notes or handouts give you a better understanding than the textbook? • Often the problems or lab assignments are to be studied in conjunction with and reinforce the study materials. Have you tried to do and understand the problems or lab assignments? • Are there any learning activities available and if yes, did you do them. • Did you consider using 3x5 cards to study denitions and vocabulary? • Did you review the learning objectives before taking any quizzes? • If the quizzes are computerized, did you study your quiz results? • After reviewing quiz results and re-study, did you retake the quiz again if available? All of this requires time and eort on your part as the student in any course (distance education or on- campus). You need several study periods a week to learn the materials in any course. The purpose of a quiz is for you to self assess your understanding of the materials. If your learning is not complete, change or modify your learning habits. 26.6.5 Interact with the Other Students In a normal classroom students interact with each other. They often form study groups with other students and meet regularly to help each other study materials. These interactions in most cases are essential to the learning process. If your only interaction is by private conversation or private email with the instructor, you are not fully participating in the course. For distance education students, most learning systems (such as Blackboard Vista) provide several tools to create this interaction. They typically include announcements, discussion list, email and chat tools. 26.6.6 Don't Procrastinate and Don't Get Behind What should you do if you get behind? Plan regular study periods. The lack of regular study periods is most likely the reason for why you got behind. Plan when you will do extra study periods in order to catch up. 26.6.7 Attend Class and Take Notes Taking lecture notes and being able to review those note later when you are studying provides variety that is needed to learn material. Just writing the notes down more actively engages the brain, because you are listening and writing. But you need to arrange with at least two fellow classmates that you will all take notes and share notes with each other if absent. In addition to course materials, other administrative matters are discussed in class (such as the announcement of exam date change). If you are taking a distance education course, you need to regularly enter the learning management system (such as Blackboard Vista) and review the announcements, discussion list postings and read (and answer if appropriate) email. Most distance education professors assume that anything he has communicated via these tools will have been read by the student within 3 days. In short this means you are responsible for having read the items and completing any action requested.
  • 286. 278 CHAPTER 26. APPENDIX 26.7 Study Habits that Build the Brain12 26.7.1 Introduction During the spring of 2008 the author, Kenneth Leroy Busbee, did some research with students taking a com- puter programming fundamentals course to determine if using 3x5 cards would improve student performance on exams. In short, it did! This was not a surprise, but it became obvious that most of us (faculty at all levels of education as well as students) have little understanding of how are brain builds understanding and long term memory. Attached are several PowerPoint presentations that have been save in an Adobe PDF format. Please spend a few minutes reviewing the information provided. Hopefully it will help students to better learn the subjects they are studying. 26.7.2 Main Presentation Link to: Study Habits that Build the Brain 13 26.7.3 Specic Topics Link to: Reading the Textbook 14 Link to: Taking Lecture Notes 15 Link to: Using 3x5 Cards 16 Link to: Using the Flash Card Activity 17 12This content is available online at http://cnx.org/content/m19977/1.4/. 13See the le at http://cnx.org/content/m19977/latest/Study_Habits_that_Build_the_Brain.pdf 14See the le at http://cnx.org/content/m19977/latest/Reading_the_Textbook.pdf 15See the le at http://cnx.org/content/m19977/latest/Taking_Lecture_Notes.pdf 16See the le at http://cnx.org/content/m19977/latest/Using_3x5_Cards.pdf 17See the le at http://cnx.org/content/m19977/latest/Using_the_Flash_Card_Activity.pdf
  • 287. GLOSSARY 279 Glossary A abs A function within the cmath standard library in C++ which stands for absolute. action item An attribute of iteration control structures. address operator The ampersand or . applications An information system or collection of programs that handles a major task. array A sequenced collection of elements of the same data type with a single identier name. array function A user dened specic task function designed to process an array. array member An element or value in an array. ASCII American Standard Code for Information Interchange assignment An operator that changes the value of a modiable data object. associativity Determines the order in which the operators of the same precedence are allowed to manipulate the operands. at least once Indicating that test after loops execute the action at least once. B banners A set of comment lines used to help separate the functions and other sections of a program. block Another name for a compound statement. Boolean A data type representing the concepts of true and false. braces Used to identify a block of code in C++. branching A control structure that allows the ow of execution to jump to a dierent part of the program. branching control structures Allow the ow of execution to jump to a dierent part of the program. break A branching control structure that terminates the existing structure. bubble sort A method of swapping array members until they are in the desired sequence. C case A control structure that does mulitway selection. central processing unit The electronic circuitry that actually executes computer instructions. character A data type representing single text characters like the alphabet, numeral digits, punctuation, etc. circular nature Connecting the negative and positive ends of the domain of an integer family data type. class member An operator used to invoke functions associated with a class.
  • 288. 280 GLOSSARY close Your program requesting the operating system to release a le that was previously opened. code checking Using test data to check the coded program in a specic language (like C++). comments Information inserted into a source code le for documentation of the program. common area An area of the program where variables and constants are dened so that they are available to all functions. compiler Converts source code to object code. compiler directive An instruction to the compiler to complete a task before formally starting to compile the program. complex logic Often solved with nested control structures. compound statement A unit of code consisting of zero or more statements. concatenation Combining two strings into one string. conditional A trinary C++ operator that acts like an if then else control structure. conditional compilation A compiler directive that includes or excludes lines of code based on a Boolean expression. condence The reliance that Standard Library functions work properly. consistent A rule that says to type identier names in upper and lower case consistently throughout your source code. constant A data item whose value cannot change during the program's execution. continue A branching control structure that causes a loop to stop its current iteration and begin the next one. control structures Mechanisms that allow us to control the ow of execution within a program. counting controlled Using a variable to count up or down to control a loop. D data area A part of an object code le used for storage of data. data type Denes a set of values and a set of operations that can be applied on those values. date type families 1) Nothing 2) Integer 3) Floating-Point 4) Complex debugging The process of removing errors from a program. 1) compiler 2) linker 3) logic decision symbol A diamond used in owcharting for asking a question and making a decision. decrement Subtracting one from the value of a variable. demotion Going from a larger domain to a smaller domain. dereferencing The concept of using the item to which a pointer or address is pointing at. device A piece of equipment that is electronically connected to the memory so that data can be transferred between the memory and the device. device token
  • 289. GLOSSARY 281 A key value provided by the operating system to associate a device to your program. dimension An axis of an array. do while A test after iteration control structure available in C++. documentation A method of preserving information useful to others in understanding an information system or part thereof. domain The set of allowed values for a data type. double The most often used oating-point family data type used in C++. dynamic memory Aka stack created memory associated with local scope. E escape code An code directing an output device to do something. evaluation The process of applying the operators to the operands and resulting in a single value. event controlled Using user input to control a loop. exit A pre-dened function used to prematurely stop a program and jump to the operating system. explicit Changing a value's data type with the cast operator. expression A valid sequence of operand(s) and operator(s) that reduces (or evaluates) to a single value. extraction Aka reading or getting data from an input device. F factorial A math problem that often is solved using recursion. lename The name and its extension. lespec The location of a le along with its lename. ag A variable or constant used to store information that will normally be used to control the program. exible coding Using the sizeof operator to calculate the number of members in an array. oating point A data type representing numbers with fractional parts. ow lines Lines (sometimes with arrows) that connect the various owcharting symbols. owcharting A programming design tool that uses graphical elements to visually depict the ow of logic within a function. folder A named area for storage of documents or other les on a disk drive or ash drive. for A test before iteration control structure typically used for counting. formatting Modifying the way the output is displayed. function call A function's using or invoking of another function. function denition The code that denes what a function does. function prototype A function's communications declaration to a complier.
  • 290. 282 GLOSSARY function What modules are called in the two predominant programming languages of today: C++ and Java. G global scope Data storage dened outside of a function. goto A branching control structure that causes the logic to jump to a dierent place in the program. H header le A le that contains items we want to have included toward the top of our source code. hierarchy chart Convey the relationship or big picture of the various functions in a program. high performance computing Grouping multiple computers or multiple computer processors to accomplish a task in less time. I identier name The name given by the programmer to identify a function or other program items such as variables. if then else A two way selection control structure. implementation The phase of a Systems Development Life Cycle where the programmers would be assigned to write specic programs. implicit A value that has its data type changed automatically. include A compiler directive to insert the contents of a le into the program. increment Adding one to the value of a variable. indention A method used to make sections of source code more visible. index An operator that allows us to reference a member of an array. indirection operator The asterisk used for dereferencing a pointer. innite loop No method of exit, thus a bad thing. initialize item An attribute of iteration control structures. input/output symbol A parallelogram used in owcharting for input/output interactions. insertion Aka writing or sending data to an output device. integer A data type representing whole numbers. integer division Division with no fractional parts. IPO Inputs - Processing - Outputs iteration A control structure that allows some lines of code to be executed many times. L life cycle Systems Development Life Cycle: Planning - Analysis - Design - Implementation - Maintenance linear search Using a loop to sequentially step through an array. linker Connects or links object les into an executable le. list A single dimension array. loader Part of the operating system that loads executable les into memory and direct the CPU to start running the program.
  • 291. GLOSSARY 283 local scope Data storage dened inside of a function. logical operator An operator used to create complex Boolean expressions. loop attributes Items associated with iteration or looping control structures. loop control Making sure the attributes of a loop are properly handled. Lvalue The requirement that the operand on the left side of the assignment operator is modiable, usually a variable. M machine dependent An attribute of a programming language that changes depending on the computer's CPU. mantissa exponent The two integer parts of a oating-point value. maximum Aka max or the largest member of an array. meaningful A rule that says identier names must be easily understood by another reading the source code. might not happen Indicating that test before loops might not execute the action. minimum Aka min or the smallest member of an array. minus Aka unary negative. model checking Using test data to check the design model (usually done in pseudocode). modular arithmetic A system of arithmetic for integers where numbers wrap around. modularization The ability to group some lines of code into a unit that can be included in our program. modulus The remainder part of integer division. multiway selection Using control structures to be able to select from more than two choices. mutually exclusive Items that do not overlap. Example: true and false. N nested control structures Placing one control structure inside of another. O object oriented A programming approach that encapsulates data with functions. oset The method of referencing array members by starting at zero. open source Group development of source code for software that is made available to the public at no cost. open Your program requesting the operating system to let it have access to an existing le or to open a new le. operand A value that receives the operator's action. operator A language-specic syntactical token (usually a symbol) that causes an action to be taken on one or more operands. P parallel processing Dividing a task into parts that can utilize more than one processor. parallel programming
  • 292. 284 GLOSSARY Involves developing programs that utilize parallel processing algorithms that take advantage of multiple processors. parameter passing How the data is communicated in to and out of a function. parentheses Change the order of evaluation in an expression. You do what's in the parentheses rst. phrase word Words used to make pseudocode logic clear to any reader. plus Aka unary positive. pointer A variable that holds an address as its value. portability The ability to transport software on a ash drive and thus use it on various machines. postx Placing the increment or decrement operator to the right of the operand. pre-processor The rst step the complier does in converting source code to object code. precedence Determines the order in which the operators are allowed to manipulate the operands. precision The eect on the domain of oating-point values given a larger or smaller storage area in bytes. prex Placing the increment or decrement operator to the left of the operand. procedural programming Aka modular structured programming. process symbol A rectangle used in owcharting for normal processes such as assignment. program control Functions used to simply sub divide and control the program. promotion Going from a smaller domain to a larger domain. pseudo Means false and includes the concepts of fake or imitation. pseudocode English-like statements used to convey the steps of an algorithm or function. R read Moving data from a device that has been opened into a memory location dened in your program. recursion A repetitive process in which a function calls itself. reference variable Used with parameter passing by reference. relational operator An operator that gives a Boolean value by evaluating the relationship between two operands. repeat until A test after iteration control structure that is not available in C++. reserved word Words that cannot be used by the programmer as identier names because they already have a specic meaning within the programming language. return A branching control structure that causes a function to jump back to the function that called it. Rvalue Pulls or fetches the value stored in a variable or constant. S scope
  • 293. GLOSSARY 285 The area of a source code le where an identier name is recognized. selection A control structure where you select between two or more choices. sequence A control structure where you do the items in the sequence listed. sequence An operator used to separate multiple occurrences of an item. sequential processing Using only one processor and completing the tasks in a sequential order. single quote marks Used to create character type data within the C++ programming language. sizeof An operator that tells you how many bytes a data type occupies in storage. sorting Arranging data according to their values. source code Any collection of statements or declarations written in some human-readable computer programming language. specic task Functions designed to be used with several programs. stack A part of the computer's memory used for storage of data. standard input The keyboard. Standard Library A set of specic task functions that have been added to the programming language for universal use. standard output The monitor. static memory Aka data area memory associated with global scope. string A series or array of characters as a single piece of data. string class A complex data item that uses object oriented programming. structure chart Another name for a hierarchy chart. structured programming A method of planning programs that avoids the branching category of control structures. sum Latin for summa or a total. switch A C++ control structure that can be made to act like a case control structure. system analyst Computer professional in charge of creating applications. T table A two dimension array. test data Providing input values and predicting the outputs. test expression An expression used to control programming structures. test item An attribute of iteration control structures. testing shell A program used to create specic task functions. text editor A software program for creating and editing ASCII text les. text le A le consisting of characters from the ASCII character code set. truncation
  • 294. 286 GLOSSARY The fractional part of a oating-point data type that is dropped when converted to an integer. truth tables A common way to show logical relationships. typedef Allows the programmer to create an alias, or synonym, for an existing data type. U udst User Dened Specic Task unary negative An operator that causes negation. unary positive A worthless operator almost never used. update item An attribute of iteration control structures. user dened library A le containing specic task functions created by individuals to be used in many programs. V variable A data item whose value can change during the program's execution. versatile Easily modifying code to handle another data type. vertical alignment A method of listing items vertically so that they are easier to read quickly. void data type A data type that has no values or operators and is used to represent nothing. W warning A compiler alert that there might be a problem. while A test before iteration control structure available in C++. wrapping When output is not vertically spaced properly. write Moving data from a memory location dened in your program to a device that has been opened.
  • 295. INDEX 287 Index of Keywords and Terms Keywords are listed by the section with that keyword (page numbers are in parentheses). Keywords do not necessarily appear in the text of the page. They are merely associated with that section. Ex. apples, Ÿ 1.1 (1) Terms are referenced by the page they appear on. Ex. apples, 1 3 3x5 cards, Ÿ 26.7(278) A abs, 98 academic dishonesty, Ÿ 26.5(273) action item, 164 address operator, 239, 241 ampersand, 239, 241 applications, 12 arithmetic assignment, 50 arithmetic operators, Ÿ 3.6(39) array, 200, 213, 247 array data type, Ÿ 18.1(213) array function, 224 array index operator, Ÿ 18.2(214) array member, 215, 248 array members, Ÿ 18.3(215) ASCII, 104, 199 ASCII Character Set, Ÿ 26.3(272) assignment, 39, 167 associativity, 37, Ÿ 26.1(269) asterisk, 241, 242 at least once, 164 B banners, 81 bits as ags, Ÿ 13.2(164) black screen output box, 67 block, 138 Bloodshed Dev-C++ 5 compiler/IDE, 13, 21, 29, 42, 43, 51, 54, 55, 64, 70, 76, 83, 91, 92, 94, 98, 99, 104, 107, 130, 136, 139, 148, 156, 169, 181, 189, 190, 194, 195, 200, 203, 209, 210, 217, 218, 222, 224, 225, 226, 227, 229, 231, 233, 235, 237, 241, 243, 244, 247, 249, 250, 261 Boolean, 135 Boolean expression, 52, 133, 135, 136, 146, 161, 167, 168, 175 braces, 20, 82, 137 branching, 113 branching control structures, 152 break, 152 bubble sort, 232 C C++ data types, Ÿ 3.1(33) C++ program layout, Ÿ 1.3(16) C:Dev-Cpp, 15, 15, 15 call, 76 capacity to concentrate, Ÿ 26.6(275) case, 152 central processing unit, 260 character, 104 cin, 67 circular nature, 189 class member, 200 close, 223 closed communications model, 240, 242 code checking, 29 collusion, Ÿ 26.5(273) comments, 81 common area, 77 compiler, 65 compiler directive, 69 compiler/IDE, Ÿ 1.2(13) complex logic, 195 compound statement, 138 computational science, Ÿ 24.2(254) concatenation, 200 conditional, 208 conditional compilation, 249 conditional expression, Ÿ 17.1(207) conditional operator, Ÿ 17.1(207) condence, 98 consistent, 82 constant, 37 continue, 152 control structures, 112, Ÿ 11.1(133) counting controlled, 180 counting loops, 112 cout, 67 D data area, 90 data type, 34 data type conversion, Ÿ 3.7(40) date type families, 34 debugging, 65
  • 296. 288 INDEX decision symbol, 129 decrement, 175 dened constant, 36 denition, 76 demotion, 42 dereferencing, 243 devcpp-4.9.9.2_setup.exe, 15, 15 device, 67 device token, 223 dimension, 214, 248 distributed processing, Ÿ 24.2(254) do while, 164 documentation, 81 domain, 34 double, 49 DriveLetter, 15 DriveLetter:Dev-Cpp, 15 dynamic memory, 225 dynamic memory allocation, 224 E equality, 167 escape code, 68 evaluation, 38 event controlled, 180 exit, 152 explicit, 42 expression, 37 extraction, 68 F factorial, 209 File Extensions, Ÿ 26.4(273) lename, 223 lespec, 223 xed, Ÿ 15.3(189) ag, 166 ash cards, Ÿ 26.7(278) exible coding, 217, 236 oat, Ÿ 4.2(48) oating point, 34 oating-point data type, Ÿ 4.2(48) oating-point division, 53 ow lines, 129 owcharting, Ÿ 10.3(115), 129 folder, 14 for, 186 formatting, 190 function, 19 function call, 20 function denition, 20 function prototype, 20 G global scope, 90, 224, 239 goto, 152 H header le, 93 hierarchy chart, 75 high performance computing, 260 HIPO, 27 I IDE, Ÿ 1.2(13) identier name, 20 identier names, Ÿ 3.2(35) if then else, 111, 134, 137 implementation, 13 implicit, 42 include, 69 increment, 175 indention, 82 index, 215, 248 indirection operator, 241, 243 innite loop, 164, Ÿ 14.2(175), Ÿ 15.1(183) initialize item, 180 Input-Output Stream, 67, 68 input/output symbol, 129 insertion, 68 integer, 34 integer data type, Ÿ 4.1(47) integer division, 53 Integrated Development Environment, 59 IPO, 26, 27 iteration, 113 iteration as alt to recursion, Ÿ 17.2(208) K keywords, Ÿ 26.2(271) L lecture notes, Ÿ 26.7(278) life cycle, 12 linear search, 230 linker, 65 list, 214, 248 literal constant, 36 loader, 65 local scope, 90, 224, 239, 240, 242 logical operator, 148 long double, Ÿ 4.2(48) loop attributes, 179 loop control, 189 Lvalue, 52 M machine dependent, 48, 104 mantissa exponent, 49 maximum, 230 meaningful, 82 memory constant, 37 might not happen, 180
  • 297. INDEX 289 minimum, 230 minus, Ÿ 16.2(201), 202 model checking, 29 modular arithmetic, 189 modular structured programming, 253 modularization, 19, Ÿ 7.1(89) modulo, Ÿ 15.2(187) modulus, 54 multidimensional arrays, Ÿ 23.1(247) multiplication table, Ÿ 15.4(191) multiway selection, 112, 146 mutually exclusive, 134 N negation, Ÿ 16.2(201) nested control structures, 146, Ÿ 15.4(191) nested if then else, 151 no communication in with no communication out, 76 O object oriented, 254 oset, 215, 248 open, 223 open source, 13 operand, 37 operator, 37, 269 P parallel processing, 260 parallel programming, 260 parameter passing, 20, 76, 90 parentheses, 38 phrase word, 74, 113 plus, Ÿ 16.2(201), 202 pointer, 240, 241, 242 portability, 13 postx, 175 pre-processor, 65 precedence, 37 precedence chart, Ÿ 26.1(269) precision, 49, Ÿ 15.3(189) prex, 175 procedural programming, 254 process symbol, 129 procrastination, Ÿ 26.6(275) program control, 20, Ÿ 6.3(75), 90 program design, Ÿ 2.1(25) program documentation, Ÿ 6.5(78) promotion, 42 prototype, 76 prototypes le, 91 pseudo, 27 pseudocode, 26, Ÿ 2.2(26) pseudocode for control structures, Ÿ 10.2(113) pseudocode for functions, Ÿ 6.1(73) R read, 223 recursion, 209 reference variable, 241, 242 regular study times, Ÿ 26.6(275) relational operator, 136 repeat until, 168 repetitive algorithms, Ÿ 17.2(208) reserved word, 36 reserved words, Ÿ 26.2(271) return, 152 Rvalue, 52 S scholastic dishonesty, Ÿ 26.5(273) scope, 91 selection, 113 sequence, 107, 112 sequential processing, 260 setw, Ÿ 15.3(189) showpoint, Ÿ 15.3(189) single quote marks, 104 sizeof, 105, 216 sorting, 232 source code, 14, Ÿ 6.5(78), 221 specic task, 20, 90 specic task functions, Ÿ 7.1(89) stack, 91 standard functions, 97 standard input, 68 Standard Library, 98 standard output, 68 static memory, 225 static memory allocation, 224 string, 50, 199, 213 string class, 200 structure chart, 75 structured programming, 113 sum, 226 supercomputing, Ÿ 24.2(254) switch, 152 system analyst, 12 Systems Development Life Cycle, 11 T table, 214, 248 test after loop, 162 test after loops, 112 test before loop, 176, 184 test before loops, 112 test data, 26, Ÿ 2.3(27) test expression, 52, 133, 135, 136, 146, 161, 166, 168, 175, 183
  • 298. 290 INDEX test item, 164 testing shell, 93 text editor, 65 text le, 223 time commitment, Ÿ 26.6(275) truncation, 42 truth tables, 148 two way selection, Ÿ 11.1(133) two-way selection, 112 typedef, 106, 236 U udst, 93 unary negative, Ÿ 16.2(201), 202 unary positive, Ÿ 16.2(201), 202 underscore, 221 update item, 164 user dened header le, Ÿ 7.3(91) user dened library, 90 user dened specic task, 223, 225 user library, Ÿ 7.3(91) V variable, 37 variable as a ag, Ÿ 13.2(164) variety and repetition, Ÿ 26.6(275) verify header program, 91 versatile, 236 vertical alignment, 81 vertical spacing, 189 void data type, 78 W warning, 65 while, 111, 179 wrapping, 190 write, 223
  • 299. ATTRIBUTIONS 291 Attributions Collection: Programming Fundamentals - A Modular Structured Approach using C++ Edited by: Kenneth Leroy Busbee URL: http://cnx.org/content/col10621/1.17/ License: http://creativecommons.org/licenses/by/2.0/ Module: Preface - Fundamentals I using C++ Used here as: Preface By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19049/1.14/ Pages: 1-3 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Author Acknowledgements - Fundamentals I using C++ Used here as: Author Acknowledgements By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19055/1.4/ Page: 5 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Orientation and Syllabus - Fundamentals I using C++ Used here as: Orientation and Syllabus By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19684/1.8/ Pages: 7-9 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Systems Development Life Cycle By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18684/1.5/ Pages: 11-13 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Bloodshed Dev-C++ 5 Compiler/IDE By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18785/1.14/ Pages: 13-16 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Modularization and C++ Program Layout By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18861/1.11/ Pages: 16-20 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/
  • 300. 292 ATTRIBUTIONS Module: Practice 1: Introduction to Programming By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22450/1.2/ Pages: 20-22 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Program Design By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18686/1.4/ Pages: 25-26 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Pseudocode By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18648/1.9/ Pages: 26-27 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Test Data By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18781/1.3/ Pages: 27-29 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 2: Program Planning Design By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22453/1.2/ Pages: 29-31 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Data Types in C++ By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18653/1.11/ Pages: 33-34 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Identier Names By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18692/1.4/ Pages: 35-36 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Constants and Variables By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18719/1.7/ Pages: 36-37 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/
  • 301. ATTRIBUTIONS 293 Module: Data Manipulation By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18705/1.5/ Pages: 37-38 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Assignment Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18725/1.2/ Pages: 38-39 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Arithmetic Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18706/1.3/ Pages: 39-40 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Data Type Conversions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18744/1.6/ Pages: 40-42 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 3: Data Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22455/1.1/ Pages: 42-44 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Integer Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18654/1.5/ Pages: 47-48 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Floating-Point Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18657/1.5/ Pages: 48-49 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: String Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18656/1.5/ Pages: 49-50 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/
  • 302. 294 ATTRIBUTIONS Module: Arithmetic Assignment Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18743/1.6/ Pages: 50-51 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Lvalue and Rvalue By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18058/1.11/ Pages: 51-52 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Integer Division and Modulus By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18717/1.12/ Pages: 53-55 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 4: Often Used Data Types By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22456/1.1/ Pages: 55-56 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Integrated Development Environment By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18920/1.8/ Pages: 59-65 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Standard Input and Output By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18835/1.3/ Pages: 65-68 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Compiler Directives By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18787/1.6/ Pages: 68-69 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 5: Integrated Development Environment By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22457/1.1/ Pages: 69-71 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 303. ATTRIBUTIONS 295 Module: Pseudocode Examples for Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19136/1.6/ Pages: 73-74 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Hierarchy or Structure Chart By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18682/1.3/ Pages: 74-75 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Program Control Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19145/1.8/ Pages: 75-77 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Void Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18655/1.3/ Pages: 77-78 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Documentation and Making Source Code Readable By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18912/1.3/ Pages: 78-82 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 6: Program Control Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22458/1.2/ Pages: 82-86 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Specic Task Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19146/1.3/ Pages: 89-90 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Global vs Local Data Storage By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19147/1.4/ Pages: 90-91 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/
  • 304. 296 ATTRIBUTIONS Module: Using a Header File for User Dened Specic Task Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19346/1.4/ Pages: 91-93 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 7: Specic Task Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22459/1.1/ Pages: 93-94 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Standard Libraries By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19202/1.4/ Pages: 97-98 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Practice 8: Standard Libraries By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22460/1.2/ Pages: 99-100 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Character Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18669/1.5/ Pages: 103-104 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Sizeof Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18736/1.7/ Pages: 104-105 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Typedef - An Alias By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18741/1.4/ Pages: 105-106 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Sequence Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18690/1.7/ Pages: 106-107 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/
  • 305. ATTRIBUTIONS 297 Module: Practice 9: Character Data, Sizeof, Typedef, Sequence By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22461/1.2/ Pages: 107-108 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Structured Programming By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19628/1.6/ Pages: 111-113 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Pseudocode Examples for Control Structures By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18649/1.12/ Pages: 113-114 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Flowcharting By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19623/1.5/ Pages: 115-129 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 10: Introduction to Structured Programming By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19692/1.13/ Pages: 129-130 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: If Then Else By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19679/1.3/ Pages: 133-134 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Boolean Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19544/1.4/ Page: 135 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Relational Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19549/1.10/ Pages: 136-137 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/
  • 306. 298 ATTRIBUTIONS Module: Compound Statement By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19683/1.2/ Pages: 137-138 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 11: Two Way Selection By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19764/1.14/ Pages: 138-140 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Nested If Then Else By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19951/1.5/ Pages: 143-146 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Logical Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19847/1.6/ Pages: 146-148 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Case Control Structure By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19963/1.2/ Pages: 148-152 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Branching Control Structures By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19947/1.2/ Pages: 152-155 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 12: Multiway Selection By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19968/1.10/ Pages: 155-158 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Do While Loop By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20596/1.4/ Pages: 161-164 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 307. ATTRIBUTIONS 299 Module: Flag Concept By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20404/1.5/ Pages: 164-166 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Assignment vs Equality within C++ By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19542/1.6/ Pages: 166-167 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Repeat Until Loop By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20597/1.2/ Pages: 167-168 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 13: Test After Loops By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20642/1.7/ Pages: 168-170 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Increment and Decrement Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20499/1.3/ Pages: 173-175 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: While Loop By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20598/1.6/ Pages: 175-180 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 14: Test Before Loops By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20643/1.9/ Pages: 180-181 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: For Loop By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20600/1.2/ Pages: 183-186 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 308. 300 ATTRIBUTIONS Module: Circular Nature of the Integer Data Type Family By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20743/1.3/ Pages: 187-189 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Formatting Output By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20660/1.3/ Pages: 189-190 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Nested For Loops By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20653/1.5/ Pages: 191-195 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 15: Counting Loops By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20809/1.5/ Pages: 195-196 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: String Class within C++ By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20796/1.5/ Pages: 199-200 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Unary Positive and Negative Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20501/1.1/ Pages: 201-202 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 16: String Class, Unary Postitive and Negative By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20810/1.4/ Pages: 202-204 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Conditional Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20811/1.6/ Pages: 207-208 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 309. ATTRIBUTIONS 301 Module: Recursion vs Iteration By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20814/1.2/ Pages: 208-209 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 17: Conditional Operator and Recursion By: Kenneth Leroy Busbee URL: http://cnx.org/content/m20815/1.5/ Pages: 209-211 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Array Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21315/1.2/ Pages: 213-214 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Array Index Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21316/1.2/ Pages: 214-215 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Displaying Array Members By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21317/1.4/ Pages: 215-217 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 18: Introduction to Arrays By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21321/1.4/ Pages: 217-218 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: File Input and Output By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21623/1.2/ Pages: 221-223 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Arrays and Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21624/1.1/ Pages: 223-224 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 310. 302 ATTRIBUTIONS Module: Loading an Array from a File By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21625/1.1/ Pages: 224-225 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Math Statistics with Arrays By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21626/1.1/ Pages: 225-226 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 19: File I/O and Array Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21630/1.3/ Pages: 226-227 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Finding a Specic Member of an Array By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21627/1.1/ Pages: 229-230 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Sorting an Array By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21628/1.1/ Pages: 230-232 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 20: More Array Functions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21631/1.3/ Pages: 232-233 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Versatile Code with Typedef By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21629/1.1/ Pages: 235-236 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 311. ATTRIBUTIONS 303 Module: Practice 21: More on Typedef By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21632/1.3/ Pages: 236-237 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Address Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22148/1.2/ Pages: 239-240 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Parameter Passing by Reference By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22150/1.3/ Pages: 240-241 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Pointer Data Type By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22151/1.2/ Page: 241 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Indirection Operator By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22152/1.1/ Pages: 242-243 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 22: Pointers By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22153/1.3/ Pages: 243-245 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Multidimensional Arrays By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22203/1.2/ Pages: 247-248 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Conditional Compilation By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22204/1.3/ Pages: 248-249 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 312. 304 ATTRIBUTIONS Module: Practice 23: More Arrays Compiler Directives By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22205/1.2/ Pages: 249-250 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Object Oriented Programming By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22188/1.2/ Pages: 253-254 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Understanding High Performance Computing By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19804/1.6/ Pages: 254-260 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Practice 24: OOP HPC By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22194/1.4/ Pages: 260-262 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Review: Foundation Topics Group: 1-5 By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22418/1.2/ Page: 265 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Review: Modular Programming Group: 6-9 By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22421/1.2/ Page: 266 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Review: Structured Programming Group: 10-16 By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21653/1.5/ Pages: 266-267 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Review: Intermediate Topics Group: 17-21 By: Kenneth Leroy Busbee URL: http://cnx.org/content/m21642/1.4/ Pages: 267-268 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 313. ATTRIBUTIONS 305 Module: Review: Advanced Topics Group: 22-24 By: Kenneth Leroy Busbee URL: http://cnx.org/content/m22215/1.4/ Page: 268 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/ Module: Abbreviated Precedence Chart for C++ Operators By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18168/1.12/ Pages: 269-271 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: C++ Reserved Keywords By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18181/1.5/ Pages: 271-272 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: ASCII Character Set By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18169/1.7/ Pages: 272-273 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Show Hide File Extensions By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18100/1.4/ Page: 273 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Academic or Scholastic Dishonesty By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18096/1.8/ Pages: 273-275 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Successful Learning Skills By: Kenneth Leroy Busbee URL: http://cnx.org/content/m18101/1.9/ Pages: 275-277 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/2.0/ Module: Study Habits that Build the Brain By: Kenneth Leroy Busbee URL: http://cnx.org/content/m19977/1.4/ Page: 278 Copyright: Kenneth Leroy Busbee License: http://creativecommons.org/licenses/by/3.0/
  • 314. Programming Fundamentals - A Modular Structured Approach using C++ Programming Fundamentals - A Modular Structured Approach using C++ is written by Kenneth Leroy Busbee, a faculty member at Houston Community College in Houston, Texas. The materials used in this textbook/collection were developed by the author and others as independent modules for publication within the Connexions environment. Programming fundamentals are often divided into three college courses: Mod- ular/Structured, Object Oriented and Data Structures. This textbook/collection covers the rst of those three courses. About Connexions Since 1999, Connexions has been pioneering a global system where anyone can create course materials and make them fully accessible and easily reusable free of charge. We are a Web-based authoring, teaching and learning environment open to anyone interested in education, including students, teachers, professors and lifelong learners. We connect ideas and facilitate educational communities. Connexions's modular, interactive courses are in use worldwide by universities, community colleges, K-12 schools, distance learners, and lifelong learners. Connexions materials are in many languages, including English, Spanish, Chinese, Japanese, Italian, Vietnamese, French, Portuguese, and Thai. Connexions is part of an exciting new information distribution system that allows for Print on Demand Books. Connexions has partnered with innovative on-demand publisher QOOP to accelerate the delivery of printed course materials and textbooks into classrooms worldwide at lower prices than traditional academic publishers.