100% found this document useful (4 votes)
55 views

Get Programming Fundamentals A Modular Structured Approach Using C Kenneth Leroy Busbee Free All Chapters

ebook

Uploaded by

wenigehrenek
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (4 votes)
55 views

Get Programming Fundamentals A Modular Structured Approach Using C Kenneth Leroy Busbee Free All Chapters

ebook

Uploaded by

wenigehrenek
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 84

Full download ebook at ebookname.

com

Programming Fundamentals A Modular Structured


Approach Using C Kenneth Leroy Busbee

https://ebookname.com/product/programming-fundamentals-a-
modular-structured-approach-using-c-kenneth-leroy-busbee/

OR CLICK BUTTON

DOWLOAD NOW

Download more ebook from https://ebookname.com


More products digital (pdf, epub, mobi) instant
download maybe you interests ...

C Programming A Modern Approach 2nd Edition K. N. King

https://ebookname.com/product/c-programming-a-modern-
approach-2nd-edition-k-n-king/

Research Methods A Modular Approach 2nd Edition Sherri


L. Jackson

https://ebookname.com/product/research-methods-a-modular-
approach-2nd-edition-sherri-l-jackson/

Object Oriented Programming Using C Fourth Edition


Joyce Farrell

https://ebookname.com/product/object-oriented-programming-using-
c-fourth-edition-joyce-farrell/

Programming Principles and Practice Using C 1st Edition


Bjarne Stroustrup

https://ebookname.com/product/programming-principles-and-
practice-using-c-1st-edition-bjarne-stroustrup/
Fundamentals of Structured Program Design 2nd Edition
Dan Robinson

https://ebookname.com/product/fundamentals-of-structured-program-
design-2nd-edition-dan-robinson/

How to Prove It A Structured Approach 2nd Edition


Daniel J. Velleman

https://ebookname.com/product/how-to-prove-it-a-structured-
approach-2nd-edition-daniel-j-velleman/

Programming Firefox Building Rich Internet Applications


with XUL 1st Edition Kenneth C. Feldt

https://ebookname.com/product/programming-firefox-building-rich-
internet-applications-with-xul-1st-edition-kenneth-c-feldt/

Introducing Functional Programming Using C Leveraging a


New Perspective for OOP Developers 1st Edition Vaskaran
Sarcar

https://ebookname.com/product/introducing-functional-programming-
using-c-leveraging-a-new-perspective-for-oop-developers-1st-
edition-vaskaran-sarcar/

Fundamentals of Python First Programs 1st Edition


Kenneth A. Lambert

https://ebookname.com/product/fundamentals-of-python-first-
programs-1st-edition-kenneth-a-lambert/
Programming Fundamentals - A Modular
Structured Approach using C++

By:
Kenneth Leroy Busbee
Programming Fundamentals - A Modular
Structured Approach using C++

By:
Kenneth Leroy Busbee

Online:
< http://cnx.org/content/col10621/1.22/ >

CONNEXIONS

Rice University, Houston, Texas


This selection and arrangement of content as a collection is copyrighted by Kenneth Leroy Busbee. It is licensed
under the Creative Commons Attribution 3.0 license (http://creativecommons.org/licenses/by/3.0/).
Collection structure revised: January 10, 2013
PDF generated: January 10, 2013
For copyright and attribution information for the modules contained in this collection, see p. 318.
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Author Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Orientation and Syllabus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Sharing/Rating Connexions Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1 1. Introduction to Programming
1.1 Systems Development Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 Bloodshed Dev-C++ 5 Compiler/IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3 Modularization and C++ Program Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4 Practice 1: Introduction to Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2 2. Program Planning & Design


2.1 Program Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Pseudocode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3 Test Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4 Practice 2: Program Planning & Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3 3. Data & Operators


3.1 Data Types in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2 Identier Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3 Constants and Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5 Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.6 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.7 Data Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.8 Practice 3: Data & Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4 4. Often Used Data Types


4.1 Integer Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Floating-Point Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.3 String Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.4 Arithmetic Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.5 Lvalue and Rvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.6 Integer Division and Modulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.7 Practice 4: Often Used Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5 5. Integrated Development Environment


5.1 Integrated Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2 Standard Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3 Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.4 Practice 5: Integrated Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

6 6. Program Control Functions


6.1 Pseudocode Examples for Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2 Hierarchy or Structure Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.3 Program Control Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
iv

6.4 Void Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83


6.5 Documentation and Making Source Code Readable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.6 Practice 6: Program Control Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

7 7. Specic Task Functions


7.1 Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.2 Global vs Local Data Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.3 Using a Header File for User Dened Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.4 Practice 7: Specic Task Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

8 8. Standard Libraries
8.1 Standard Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.2 Practice 8: Standard Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

9 9. Character Data, Sizeof, Typedef, Sequence


9.1 Character Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
9.2 Sizeof Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
9.3 Typedef - An Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.4 Sequence Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
9.5 Practice 9: Character Data, Sizeof, Typedef, Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

10 10. Introduction to Structured Programming


10.1 Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
10.2 Pseudocode Examples for Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
10.3 Flowcharting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
10.4 Practice 10: Introduction to Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

11 11. Two Way Selection


11.1 If Then Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
11.2 Boolean Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.3 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
11.4 Compound Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
11.5 Practice 11: Two Way Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

12 12. Multiway Selection


12.1 Nested If Then Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
12.2 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
12.3 Case Control Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
12.4 Branching Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
12.5 Practice 12: Multiway Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

13 13. Test After Loops


13.1 Do While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
13.2 Flag Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
13.3 Assignment vs Equality within C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
13.4 Repeat Until Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
13.5 Practice 13: Test After Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


v

14 14. Test Before Loops


14.1 Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
14.2 While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
14.3 Practice 14: Test Before Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

15 15. Counting Loops


15.1 For Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
15.2 Circular Nature of the Integer Data Type Family . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
15.3 Formatting Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 203
15.4 Nested For Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
15.5 Practice 15: Counting Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

16 16. String Class, Unary Positive and Negative


16.1 String Class within C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
16.2 Unary Positive and Negative Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
16.3 Practice 16: String Class, Unary Positive and Negative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

17 17. Conditional Operator and Recursion


17.1 Conditional Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
17.2 Recursion vs Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
17.3 Practice 17: Conditional Operator and Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 224
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

18 18. Introduction to Arrays


18.1 Array Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
18.2 Array Index Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
18.3 Displaying Array Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
18.4 Practice 18: Introduction to Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

19 19. File I/O and Array Functions


19.1 File Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
19.2 Arrays and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
19.3 Loading an Array from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
19.4 Math Statistics with Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
19.5 Practice 19: File I/O and Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

20 20. More Array Functions


20.1 Finding a Specic Member of an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
20.2 Sorting an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
20.3 Practice 20: More Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

21 21. More on Typedef


21.1 Versatile Code with Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
21.2 Practice 21: More on Typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

22 22. Pointers
22.1 Address Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
22.2 Parameter Passing by Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


vi

22.3 Pointer Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261


22.4 Indirection Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
22.5 Practice 22: Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

23 23. More Arrays & Compiler Directives


23.1 Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
23.2 Conditional Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
23.3 Practice 23: More Arrays & Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

24 24. OOP & HPC


24.1 Object Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
24.2 Understanding High Performance Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
24.3 Practice 24: OOP & HPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

25 Review Materials
25.1 Review: Foundation Topics Group: 1-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
25.2 Review: Modular Programming Group: 6-9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
25.3 Review: Structured Programming Group: 10-16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
25.4 Review: Intermediate Topics Group: 17-21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
25.5 Review: Advanced Topics Group: 22-24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
26 Appendix
26.1 Abbreviated Precedence Chart for C++ Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
26.2 C++ Reserved Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
26.3 ASCII Character Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
26.4 Show Hide File Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
26.5 Academic or Scholastic Dishonesty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
26.6 Successful Learning Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
26.7 Study Habits that Build the Brain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Attributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


Preface 1

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.
On January 10, 2013 Version 1.22 was created with the modules that make up the collection "xed" to
the their current versions. This will allow Version 1.22 to remain static with the modules as of that date.
The collection is going to be revised with a dierent organization of chapters along with updated modules
to handle C++, Java and C# programming languages. The next version of the collection will have signicant
changes.

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.
strongly related link. As the yellow decreases the importance decreases.
All three yellow means it is a
Prerequisite links within
Students using this collection for a college course should note that all of the
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

1 This content is available online at <http://cnx.org/content/m19049/1.17/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>

1
2

avoided as the C++ language is used in conjunction with this textbook/collection by the author in teaching
college courses.

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.

Instructor Materials
Encrypted instructor materials are available in a module that is not part of this collection. It's title: Instruc-
tor Materials for: Programming Fundamentals - A Modular Structured Approach using C++ is available
at: http://cnx.org/content/m34529/latest/
2 and the encryption code is only available to educational insti-
tutional faculty that are considering adoption of this collection as a textbook.

About Connexions
Connexions Modular Content
The Connexions Project http://cnx.org
3 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
4 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

2 "Instructor Materials for: Programming Fundamentals - A Modular Structured Approach using C++"
<http://cnx.org/content/m34529/latest/>
3 http://cnx.org/
4 http://creativecommons.org/licenses/by/2.0/

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


3

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.

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

Rating Connexion Modules


A rating feature was added during 2009 for Connexions modules. It will not be useful until more people
rate modules within the Connexions repository. If a module is rated by several people, it can be used as a
measure of quality. Thus, your participation in rating modules is welcomed and helps others determine
the quality of the educational materials being viewed.
In order to rate modules you must have a Connexions account. Three (3) modules have been added to
the preface series of modules for this collection. They explain why and how to create a Connexions account
and how to rate a Connexions module.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


4

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


Author Acknowledgements 5

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.

5 This content is available online at <http://cnx.org/content/m19055/1.5/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>

5
6

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


Orientation and Syllabus 6

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 4

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 118

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.

6 This content is available online at <http://cnx.org/content/m19684/1.12/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>

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


no
The modules in this textbook/collection have had content reviewed and are believed to be sucient, thus
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 and at the Community College of Qatar. 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., 7
th Edition, International Edition,
ISBN: 978-0-13-137714-1
2. Starting Out with C++ Early Objects, by: Tony Gaddis et. al., 6
th Edition, ISBN: 0-321-51238-3
3. Starting Out with C++ Early Objects, by: Tony Gaddis et. al., 5
th Edition, ISBN: 0-321-38348-6
4. 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
7

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:

7 See the le at <http://cnx.org/content/m19684/latest/Connexions_Module_Reading_List_col10621_V2.pdf>

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


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 4

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 118

Table 2

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


10

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


Sharing/Rating Connexions Materials 8

Historical Rating System


At one time within Connexions there was a ve (5) star rating system provided within each Connexions
module. This feature was not often used and was discontinued.

Sharing Connexions Materials


The ve (5) star rating feature was replaced with several ways for users of Connexions materials to share
with others. Available at the top and bottom of each module or collection are:

• Google's +1
• Facebook's Like
• twitter's Tweet
8 This content is available online at <http://cnx.org/content/m33960/1.2/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>

11
12

Figure 1: Sharing Connexions Materials

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


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
The applications usually consist of many programs. An
a major task (referred to as an application).
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.
1 This content is available online at <http://cnx.org/content/m18684/1.6/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>

13
14 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

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


15

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
portability,
work on their lab assignments on any computer that has a USB port. This can give the student
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.
two folders on your hard drive or
You will need about 80MB of storage space. We suggest that you create
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:
2 This content is available online at <http://cnx.org/content/m18785/1.15/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


16 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.

3 http://www.bloodshed.net/dev/devcpp.html
4 See the le at <http://cnx.org/content/m18785/latest/devcpp-4.9.9.2_setup.exe>
5 See the le at <http://cnx.org/content/m18785/latest/Compiler_Test.cpp>

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


17

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
C:\Dev-Cpp\ to DriveLetter:\Dev-Cpp\ (where the
changing the default software location from:
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.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


18 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 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
6 This content is available online at <http://cnx.org/content/m18861/1.13/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


19

// 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)
{

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


20 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
cout  "\n\n";
system("PAUSE");
cout  "\n\n";
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

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


21

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
Summary concept: If you call
dened) are placed near the top of the program before the function main.
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. #include<iostream>  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.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


22 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++.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


23

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.4.1 (Solution on p. 26.)
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.

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.

7 This content is available online at <http://cnx.org/content/m22450/1.4/>.


8 See the le at <http://cnx.org/content/m22450/latest/index.html>

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


24 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
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
• Remove the next 2 lines of comment talking about the main idea
• Author: put your name and erase my name and copyright
• Date: Put today's date
• Remove the next 3 lines of comment dealing with licensing (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 area as appropriate to include at a minimum the four lines of information (lename,
purpose, author and date) as established in this lab assignment.

• 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.

9 See the le at <http://cnx.org/content/m22450/latest/Compiler_Test.cpp>

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


25

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.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


26 CHAPTER 1. 1. INTRODUCTION TO PROGRAMMING
Solutions to Exercises in Chapter 1
Solutions to Practice 1: Introduction to Programming
Solution to Exercise 1.4.1 (p. 23)
Answers:

1. false
2. true
3. false
4. true
5. true

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


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.

1 This content is available online at <http://cnx.org/content/m18686/1.5/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>

27
28 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
2 This content is available online at <http://cnx.org/content/m18648/1.10/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


29

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
3 This content is available online at <http://cnx.org/content/m18781/1.4/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


30 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.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


31

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++).

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


32 CHAPTER 2. 2. PROGRAM PLANNING & DESIGN
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.4.1 (Solution on p. 35.)
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.

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

4 This content is available online at <http://cnx.org/content/m22453/1.3/>.


5 See the le at <http://cnx.org/content/m22453/latest/index.html>
6 See the le at <http://cnx.org/content/m22453/latest/Solution_Lab_01_Pseudocode.txt>
7 See the le at <http://cnx.org/content/m22453/latest/Solution_Lab_01_Test_Data.txt>

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


33

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:


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

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


34 CHAPTER 2. 2. PROGRAM PLANNING & DESIGN
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.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


35

Solutions to Exercises in Chapter 2


Solutions to Practice 2: Program Planning & Design
Solution to Exercise 2.4.1 (p. 32)
Answers:

1. false
2. false
3. false
4. true
5. true

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


36 CHAPTER 2. 2. PROGRAM PLANNING & DESIGN

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


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

1 This content is available online at <http://cnx.org/content/m18653/1.13/>.


2 Behrouz A. Forouzan and Richard F. Gilberg, Computer Science A Structured Approach using C++ Second Edition (United
States of America: Thompson  Brooks/Cole, 2004) 33.
Available for free at Connexions <http://cnx.org/content/col10621/1.22>

37
38 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 Yes


false

Integer Character char Single characters Yes

Integer Integer int Whole numbers Yes

Floating Point Floating Point oat Fractional num- Yes


bers

Complex String string A sequence (sting No


them along) of
characters

Complex Array N/A A collection of ele- No


ments of the same
data type

Complex Pointer N/A A value that No


points to a loca-
tion (an address)
within the data
area

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: data 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.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


39

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
be
your code later as Pig  you get a compiler error. To avoid the problem altogether, we teach students to
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++.

3 This content is available online at <http://cnx.org/content/m18692/1.5/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


40 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;
4 This content is available online at <http://cnx.org/content/m18719/1.8/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


41

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.

5 This content is available online at <http://cnx.org/content/m18705/1.6/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


42 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.

6 This content is available online at <http://cnx.org/content/m18725/1.4/>.

Available for free at Connexions <http://cnx.org/content/col10621/1.22>


Another random document with
no related content on Scribd:
generous emulation of their sons. The worship was closed by these
700 warriors chanting in magnificent chorus the psalm from which
their leader had preached.
To many it seemed significant that here the returned exiles should
spend their first Sunday, and resume their sanctuary services. They
remembered how this same village of Prali had been the scene of a
horrible outrage at the time of their exodus. The Pastor of Prali, M.
Leidet, a singularly pious man, had been discovered by the soldiers
as he was praying under a rock, and being dragged forth, he was
first tortured and mutilated, and then hanged; his last words being,
“Lord Jesus, receive my spirit.” It was surely appropriate, after the
silence of three years and a half, during which the rage of the
persecutor had forbidden the preaching of the glorious Gospel, that
its re-opening should take place in the pulpit of the martyr Leidet.
CHAPTER XVII.

FINAL RE-ESTABLISHMENT IN THE VALLEYS.


Cross the Col Julien—​Seize Bobbio—​Oath of Sibaud—​March to Villaro—​Guerilla
War—​Retreat to La Balsiglia—​Its Strength—​Beauty and Grandeur of San
Martino—​Encampment on the Balsiglia—​Surrounded—​Repulse of the Enemy—​
Depart for the Winter—​Return of French and Piedmontese Army in Spring—​
The Balsiglia Stormed—​Enemy Driven Back—​Final Assault with Cannon—​
Wonderful Deliverance of the Vaudois—​Overtures of Peace.
The Vaudois had entered the land, but they had not yet got
possession of it. They were a mere handful; they would have to face
the large and well-appointed army of Piedmont, aided by the French.
But their great leader to his courage added faith. The “cloud” which
had guided them over the great mountains, with their snows and
abysses, would cover their camp, and lead them forth to battle, and
bring them in with victory. It was not surely that they might die in
the land, that they had been able to make so marvellous a march
back to it. Full of these courageous hopes, the “seven hundred” now
addressed themselves to their great task.
They began to climb the Col Julien, which separates Prali from the
fertile and central valley of the Waldenses, that of Lucerna. As they
toiled up and were now near the summit of the pass, the
Piedmontese soldiers, who had been stationed there, shouted out,
“Come on, ye Barbets; we guard the pass, and there are 3,000 of
us!” They did come on. To force the entrenchments and put to flight
the garrison was the work of a moment. In the evacuated camp the
Vaudois found a store of ammunition and provisions, which to them
was a most seasonable booty. Descending rapidly the slopes and
precipices of the great mountain, they surprised and took the town
of Bobbio, which nestles at its foot. Driving out the Popish
inhabitants to whom it had been made over, they took possession of
their ancient dwellings, and paused a little while to rest after the
march and conflict of the previous days. Here their second Sunday
was passed, and public worship again celebrated, the congregation
chanting their psalm to the clash of arms. On the day following,
repairing to the “Rock of Sibaud,” where their fathers had pledged
their faith to God and to one another, they renewed on the same
sacred spot their ancient oath, swearing with uplifted hands to abide
steadfastly in the profession of the Gospel, to stand by one another,
and never to lay down their arms till they had re-established
themselves and their brethren in those Valleys which they believed
had as really been given to them by the God of heaven as Palestine
had been to the Jews.
Their next march was to Villaro, which is situated half-way
between Bobbio at the head and La Torre at the entrance of the
valley. This town they stormed and took, driving away the new
inhabitants. But here their career of conquest was suddenly checked.
The next day, a strong reinforcement of regular troops coming up,
the Vaudois were under the necessity of abandoning Villaro, and
falling back on Bobbio.[139] The patriot army now became parted
into two bands, and for many weeks had to wage a sort of guerilla
war on the mountains. France on the one side, and Piedmont on the
other, poured in soldiers, in the hope of exterminating this handful of
warriors. The privations and hardships which they endured were as
great as the victories which they won in their daily skirmishes were
marvellous. But though always conquering, their ranks were rapidly
thinning. What though a hundred of the enemy were slain for one
Waldensian who fell? The Piedmontese could recruit their numbers,
the Vaudois could not add to theirs. They had now neither
ammunition nor provisions, save what they took from their enemies;
and, to add to their perplexities, winter was near, which would bury
their mountains beneath its snows, and leave them without food or
shelter. A council of war was held, and it was ultimately resolved to
repair to the Valley of Martino, and entrench themselves on La
Balsiglia.
This brings us to the last heroic stand of the returned exiles. But
first let us sketch the natural strength and grandeur of the spot on
which that stand was made. The Balsiglia is situated at the western
extremity of San Martino, which in point of grandeur yields to few
things in the Waldensian Alps. It is some five miles long by about
two in width, having as its floor the richest meadow-land; and for
walls, mountains superbly hung with terraces, overflowing with
flower and fruitage, and protected above with splintered cliffs and
dark peaks. It is closed at the western extremity by the naked face
of a perpendicular mountain, down which the Germagnasca is seen
to dash in a flood of silver. The meadows and woods that clothe the
bosom of the valley are seamed by a broad line of white, formed by
the torrent, the bed of which is strewn with so many rocks that it
resembles a continuous river of foam.
Than the clothing of the mountains that form the bounding walls
of this valley nothing could be finer. On the right, as one advances
upwards, rises a succession of terraced vineyards, finely diversified
with cornfields and knolls of rock, which are crowned with cottages
or hamlets, looking out from amid their rich embowerings of
chestnut and apple-tree. Above this fruit-bearing zone are the grassy
uplands, the resort of herdsmen, which in their turn give place to the
rocky ridges that, in wavy and serrated lines, run off to the higher
summits, which recede into the clouds.
On the left the mountain-wall is more steep, but equally rich in its
clothing. Swathing its foot is a carpeting of delicious sward. Trees,
vast of girth, part, with their over-arching branches, the bright
sunlight. Higher up are fields of maize and forests of chestnut; and
higher still is seen the rock-loving birch, with its silvery stem and
graceful tresses. Along the splintered rocks above runs a bristling
line of firs, forming mighty chevaux-de-frise.
Towards the head of the valley, near the vast perpendicular cliff
already mentioned, which shuts it in on the west, is seen a glorious
assemblage of mountains. One mighty cone uplifts itself above and
behind another, till the last and highest buries its top in the rolling
masses of cloud, which are seen usually hanging like a canopy above
this part of the valley. These noble aiguilles, four in number, rise
feathery with firs, and remind one of the fretted pinnacles of some
colossal cathedral. This is La Balsiglia. It was on the terraces of this
mountain that Henri Arnaud, with his patriot-warriors, pitched his
camp, amid the dark tempests of winter, and the yet darker
tempests of a furious and armed bigotry. The Balsiglia shoots its
gigantic pyramids heavenward, as if proudly conscious of having
once been the resting-place of the Vaudois ark. It is no castle of
man’s erecting; it had for its builder the Almighty Architect himself.
It only remains, in order to complete this picture of a spot so
famous in the wars of conscience and liberty, to say that behind the
Balsiglia on the west rises the lofty Col du Pis. It is rarely that this
mountain permits to the spectator a view of his full stature, for his
dark sides run up and bury themselves in the clouds. Face to face
with the Col du Pis, stands on the other side of the valley the yet
loftier Mont Guinevert, with, most commonly, a veil of cloud around
him, as if he too were unwilling to permit to the eye of visitor a sight
of his stately proportions. Thus do these two Alps, like twin giants,
guard this famous valley.
view in the village of san laurenzo, angrogna.

It was on the lower terrace of this pyramidal mountain, the


Balsiglia, that Henri Arnaud—​his army now, alas! reduced to 400—​
sat down. Viewed from the level of the valley, the peak seems to
terminate in a point, but on ascending, the top expands into a level
grassy plateau. Steep and smooth as escarped fortress, it is
unscalable on every side save that on which a stream rushes past
from the mountains. The skill of Arnaud enabled him to add to the
natural strength of the Vaudois position the defences of art. They
enclosed themselves within earthen walls and ditches; they erected
covered ways; they dug out some four-score cellars in the rock, to
hold provisions, and they built huts as temporary barracks. Three
springs that gushed out of the rock supplied them with water. They
constructed similar entrenchments on each of the three peaks that
rose above them, so that if the first were taken they could ascend to
the second, and so on to the fourth. On the loftiest summit of the
Balsiglia, which commanded the entire valley, they placed a sentinel,
to watch the movements of the enemy.
Only three days elapsed till four battalions of the French army
arrived, and enclosed the Balsiglia on every side. On the 29th of
October, an assault was made on the Vaudois position, which was
repulsed with great slaughter of the enemy, and the loss of not one
man to the defenders. The snows of early winter had begun to fall,
and the French general thought it best to postpone the task of
capturing the Balsiglia till spring. Destroying all the corn which the
Vaudois had collected and stored in the villages, he began his retreat
from San Martino, and, taking laconic farewell of the Waldenses, he
bade them have patience till Easter, when he would again pay them
a visit.[140]
All through the winter of 1689-90, the Vaudois remained in their
mountain fortress, resting after the marches, battles, and sieges of
the previous months, and preparing for the promised return of the
French. Where Henri Arnaud had pitched his camp, there had he
also raised his altar, and if from that mountain-top was pealed forth
the shout of battle, from it ascended also, morning and night, the
prayer and the psalm. Besides daily devotions, Henri Arnaud
preached two sermons weekly, one on Sunday and another on
Thursday. At stated times he administered the Lord’s Supper. Nor
was the commissariat overlooked. Foraging parties brought in wine,
chestnuts, apples, and other fruits, which the autumn, now far
advanced, had fully ripened. A strong detachment made an incursion
into the French valleys of Pragelas and Queyras, and returned with
salt, butter, some hundred head of sheep, and a few oxen. The
enemy, before departing, had destroyed their stock of grain, and as
the fields were long since reaped, they despaired of being able to
repair their loss. And yet bread to last them all the winter through
had been provided, in a way so marvellous as to convince them that
He who feeds the fowls of the air was caring for them. Ample
magazines of grain lay all around their encampment, although
unknown as yet to them. The snow that year began to fall earlier
than usual, and it covered up the ripened corn, which the Popish
inhabitants had not time to cut when the approach of the Vaudois
compelled them to flee. From this unexpected store-house the
garrison drew as they had need. Little did the Popish peasantry,
when they sowed the seed in spring, dream that Vaudois hands
would reap the harvest.
Corn had been provided for them, and, to Vaudois eyes, provided
almost as miraculously as was the manna for the Israelites, but
where were they to find the means of grinding it into meal? At
almost the foot of the Balsiglia, on the stream of the Germagnasca,
is a little mill. The owner, M. Tron-Poulat, three years before, when
going forth into exile with his brethren, threw the mill-stone into the
river; “for,” said he, “it may yet be needed.” It was needed now, and
search being made for it, it was discovered, drawn out of the
stream, and the mill set a-working. There was another and more
distant mill at the entrance of the valley, to which the garrison had
recourse when the immediate precincts of the Balsiglia were
occupied by the enemy and the nearer mill was not available. Both
mills exist to this day; their roofs of brown slate may be seen by the
visitor, peering up through the luxuriant foliage of the valley, the
wheel motionless, it may be, and the torrent which turned it
shooting idly past in a volley of spray.
With the return of spring, the army of France and Piedmont
reappeared. The Balsiglia was now completely invested, the
combined force amounting to 22,000 in all—10,000 French and
12,000 Piedmontese. The troops were commanded by the celebrated
De Catinat, lieutenant-general of the armies of France. The “four
hundred” Waldenses looked down from their “camp of rock” on the
valley beneath them, and saw it glittering with steel by day and
shining with camp-fires by night. Catinat never doubted that a single
day’s fighting would enable him to capture the place; and that the
victory, which he looked upon as already won, might be duly
celebrated, he ordered four hundred ropes to be sent along with the
army, in order to hang at once the four hundred Waldenses; and he
had commanded the inhabitants of Pinerolo to prepare feux-de-joie
to grace his return from the campaign. The head-quarters of the
French were at Great Passet—​so called in contradistinction to Little
Passet, situated a mile lower in the valley. Great Passet counts some
thirty roofs, and is placed on an immense ledge of rock that juts out
from the foot of Mont Guinevert, some 800 feet above the stream,
and right opposite the Balsiglia. On the flanks of this rocky ledge are
still to be seen the ruts worn by the cannon and baggage-waggons
of the French army. There can be no doubt that these marks are the
memorials of the siege, for no other wheeled vehicles ever were
seen in these mountains.[141]
Having reconnoitred, Catinat ordered the assault (1st May, 1690).
Only on that side of Balsiglia where a stream trickles down from the
mountains, and which offers a gradual slope, instead of a wall of
rock as everywhere else, could the attack be made with any chance
of success. But this point Henri Arnaud had taken care to fortify with
strong palisades. Five hundred picked men, supported by seven
thousand musketeers, advanced to storm the fortress.[142] They
rushed forward with ardour; they threw themselves upon the
palisades; but they found it impossible to tear them down, formed
as they were of great trunks, fastened by mighty boulders. Massed
behind the defence were the Vaudois, the younger men loading the
muskets, and the veterans taking steady aim, while the besiegers
were falling in dozens at every volley. The assailants beginning to
waver, the Waldensians made a fierce sally, sword in hand, and cut
in pieces those whom the musket had spared. Of the five hundred
picked soldiers only some score lived to rejoin the main body, which
had been spectators from the valley of their total rout. Incredible as
it may appear, we are nevertheless assured of it as a fact, that not a
Vaudois was killed or wounded: not a bullet had touched one of
them. The fireworks which Catinat had been so provident as to bid
the men of Pinerolo get ready to celebrate his victory were not
needed that night.
Despairing of reducing the fortress by other means, the French
now brought up cannon, and it was not till the 14th of May that all
was ready, and that the last and grand assault was made. Across the
ravine in which the conflict we have just described took place, an
immense knoll juts out, at an equal level with the lower
entrenchments of the Waldenses. To this rock the cannons were
hoisted up to play upon the fortress.[143] Never before had the
sound of artillery shaken the rocks of San Martino. It was the
morning of Whit-Sunday, and the Waldenses were preparing to
celebrate the Lord’s Supper, when the first boom from the enemy’s
battery broke upon their ear.[144] All day the cannonading continued,
and its dreadful noises, re-echoed from rock to rock, and rolled
upwards to the summits of the Col du Pis and the Mont Guinevert,
were still further heightened by the thousands of musketeers who
were stationed all round the Balsiglia. When night closed in the
ramparts of the Waldenses were in ruins, and it was seen that it
would not be possible longer to maintain the defence. What was to
be done? The cannonading had ceased for the moment, but
assuredly the dawn would see the attack renewed.
Never before had destruction appeared to impend so inevitably
over the Vaudois. To remain where they were was certain death, yet
whither could they flee? Behind them rose the unscalable precipices
of the Col du Pis, and beneath them lay the valley swarming with
foes. If they should wait till the morning broke it would be
impossible to pass the enemy without being seen; and even now,
although it was night, the numerous camp-fires that blazed beneath
them made it almost as bright as day. But the hour of their extremity
was the time of God’s opportunity. Often before it had been seen to
be so, but perhaps never so strikingly as now. While they looked this
way and that way, but could discover no escape from the net that
enclosed them, the mist began to gather on the summits of the
mountains around them. They knew the old mantle that was wont to
be cast around their fathers in the hour of peril. It crept lower and
yet lower on the great mountains. Now it touched the supreme peak
of the Balsiglia.
Will it mock their hopes? Will it only touch, but not cover, their
mountain camp? Again it is in motion; downward roll its white fleecy
billows, and now it hangs in sheltering folds around the war-battered
fortress and its handful of heroic defenders. They dared not as yet
attempt escape, for still the watch-fires burned brightly in the valley.
But it was only for a few minutes longer. The mist kept its downward
course, and now all was dark. A Tartarean gloom filled the gorge of
San Martino.
At this moment, as the garrison stood mute, pondering
whereunto these things would grow, Captain Poulat, a native of
these parts, broke silence. He bade them be of good courage, for he
knew the paths, and would conduct them past the French and
Piedmontese lines, by a track known only to himself. Crawling on
their hands and knees, and passing close to the French sentinels, yet
hidden from them by the mist, they descended frightful precipices,
and made their escape. “He who has not seen such paths,” says
Arnaud in his Rentrée Glorieuse, “cannot conceive the danger of
them, and will be inclined to consider my account of the march a
mere fiction. But it is strictly true; and I must add, the place is so
frightful that even some of the Vaudois themselves were terror-
struck when they saw by daylight the nature of the spot they had
passed in the dark.” When the day broke, every eye in the plain
below was turned to the Balsiglia. That day the four hundred ropes
which Catinat had brought with him were to be put in requisition,
and the feux-de-joie so long prepared were to be lighted at Pinerolo.
What was their amazement to find the Balsiglia abandoned! The
Vaudois had escaped and were gone, and might be seen upon the
distant mountains, climbing the snows, far out of the reach of their
would-be captors. Well might they sing—
“Our soul is escaped as a bird out of the snare of the fowlers.
The snare is broken, and we are escaped.”
There followed several days, during which they wandered from
hill to hill, or lay hid in woods, suffering great privations, and
encountering numerous perils. At last they succeeded in reaching
the Pra del Tor. To their amazement and joy, on arriving at this
celebrated and hallowed spot, they found deputies from their prince,
the Duke of Savoy, waiting them with an overture of peace. The
Vaudois were as men that dreamed. An overture of peace! How was
this? A coalition, including Germany, Great Britain, Holland, and
Spain, had been formed to check the ambition of France, and three
days had been given to Victor Amadeus to say to which side he
would join himself—​the Leaguers or Louis XIV. He resolved to break
with Louis and take part with the coalition. In this case, to whom
could he so well commit the keys of the Alps as to his trusty
Vaudois? Hence the overture that met them in the Pra del Tor. Ever
ready to rally round the throne of their prince the moment the hand
of persecution was withdrawn, the Vaudois closed with the peace
offered them. Their towns and lands were restored; their churches
were reopened for Protestant worship; their brethren still in prison at
Turin were liberated, and the colonists of their countrymen in
Germany had passports to return to their homes; and thus, after a
dreary interval of three and a half years, the Valleys were again
peopled with their ancient race, and resounded with their ancient
songs. So closed that famous period of their history, which, in
respect of the wonders, we might say the miracles, that attended it,
we can compare only to the march of the chosen people through the
wilderness to the Land of Promise.
church of chabas, the oldest in the valleys.
CHAPTER XVIII.

CONDITION OF THE WALDENSES FROM 1690.


Annoyances—​Burdens—​Foreign Contributions—​French Revolution—​Spiritual
Revivals—​Felix Neff—​Dr. Gilly—​General Beckwith—​Oppressed Condition
previous to 1840—​Edict of Carlo Alberto—​Freedom of Conscience—​The
Vaudois Church, the Door by which Religious Liberty Entered Italy—​Their
Lamp Kindled at Rome.
With this second planting of the Vaudois in their Valleys, the period
of their great persecutions may be said to have come to an end.
Their security was not complete, nor their measure of liberty entire.
They were still subject to petty oppressions; enemies were never
wanting to whisper things to their prejudice; little parties of Jesuits
would from time to time appear in their Valleys, the forerunners, as
they commonly found them, of some new and hostile edict; they
lived in continual apprehension of having the few privileges which
had been conceded to them swept away; and on one occasion they
were actually threatened with a second expatriation. They knew,
moreover, that Rome, the real author of all their calamities and
woes, still meditated their extermination, and that she had entered a
formal protest against their rehabilitation, and given the duke
distinctly to understand that to be the friend of the Vaudois was to
be the enemy of the Pope.[145] Nevertheless their condition was
tolerable compared with the frightful tempests which had darkened
their sky in previous eras.
The Waldenses had everything to begin anew. Their numbers
were thinned; they were bowed down by poverty; but they had vast
recuperative power; and their brethren in England and Germany
hastened to aid them in reorganising their Church, and bringing once
more into play that whole civil and ecclesiastical economy which the
“exile” had so rudely broken in pieces. William III. of England
incorporated a Vaudois regiment at his own expense, which he
placed at the service of the duke, and to this regiment it was mainly
owing that the duke was not utterly overwhelmed in his wars with
his former ally, Louis XIV. At one point of the campaign, when hard
pressed, Victor Amadeus had to sue for the protection of the
Vaudois, on almost the very spot where the deputies of Gianavello
had sued to him for peace, but had sued in vain.
In 1692 there were twelve churches in the Valleys; but the people
were unable to maintain a pastor to each. They were ground down
by military imposts. Moreover, a peremptory demand was made
upon them for payment of the arrears of taxes which had accrued in
respect of their lands during the three years they had been absent,
and when to them there was neither seedtime nor harvest. Anything
more extortionate could not be imagined. In their extremity, Mary of
England, the consort of William III., granted them a “Royal Subsidy,”
to provide pastors and schoolmasters, and this grant was increased
with the increased number of parishes, till it reached the annual sum
of £550. A collection which was made in Great Britain at a
subsequent period (1770) permitted an augmentation of the salaries
of the pastors. This latter fund bore the name of the “National
Subsidy,” to distinguish it from the former, the “Royal Subsidy.” The
States-General of Holland followed in the wake of the English
sovereign, and made collections for salaries to schoolmasters,
gratuities to superannuated pastors, and for the founding of a Latin
school. Nor must we omit to state that the Protestant cantons of
Switzerland appropriated bursaries to students from the Valleys at
their academies—​one at Basle, five at Lausanne, and two at Geneva.
[146]

The policy of the Court of Turin towards the Waldenses changed


with the shiftings in the great current of European politics. At one
unfavourable moment, when the influence of the Vatican was in the
ascendant, Henri Arnaud, who had so gloriously led back the Israel
of the Alps to their ancient inheritance, was banished from the
Valleys, along with others, his companions in patriotism and virtue,
as now in exile. England, through William, sought to draw the hero
to her own shore, but Arnaud retired to Schoenberg, where he spent
his last years in the humble and affectionate discharge of the duties
of a pastor among his expatriated countrymen, whose steps he
guided to the heavenly abodes, as he had done those of their
brethren to their earthly land. He died in 1721, at the age of four-
score years.
The century passed without any very noticeable event. The
spiritual condition of the Vaudois languished. The year 1789 brought
with it astounding changes. The French Revolution rung out the knell
of the old times, and introduced, amidst those earthquake-shocks
that convulsed nations, and laid thrones and altars prostrate, a new
political age. The Vaudois once again passed under the dominion of
France. There followed an enlargement of their civil rights, and an
amelioration of their social condition; but, unhappily, with the
friendship of France came the poison of its literature, and
Voltairianism threatened to inflict more deadly injury on the Church
of the Alps than all the persecutions of the previous centuries. At the
Restoration the Waldenses were given back to their former
sovereign, and with their return to the House of Savoy they returned
to their ancient restrictions, though the hand of bloody persecution
could no more be stretched out.
The time was now drawing near when this venerable people was
to obtain a final emancipation. That great deliverance rose on them,
as day rises on the earth, by slow stages. The visit paid them by the
apostolic Felix Neff, in 1808, was the first dawning of their new day.
With him a breath from heaven, it was felt, had passed over the dry
bones. The next stage in their resurrection was the visit of Dr.
William Stephen Gilly, in 1828. He cherished, he tells us, the
conviction that “this is the spot from which it is likely that the great
Sower will again cast his seed, when it shall please him to permit the
pure Church of Christ to resume her seat in those Italian States from
which Pontifical intrigues have dislodged her.”[147] The result of Dr.
Gilly’s visit was the erection of a college at La Torre, for the
instruction of youth and the training of ministers, and an hospital for
the sick; besides awakening great interest on their behalf in
England.[148]
After Dr. Gilly there stood up another to befriend the Waldenses,
and prepare them for their coming day of deliverance. The career of
General Beckwith is invested with a romance not unlike that which
belongs to the life of Ignatius Loyola. Beckwith was a young soldier,
and as brave, and chivalrous, and ambitious of glory as Loyola. He
had passed unhurt through battle and siege. He fought at Waterloo
till the enemy was in full retreat, and the sun was going down. But a
flying soldier discharged his musket at a venture, and the leg of the
young officer was hopelessly shattered by the bullet. Beckwith, like
Loyola, passed months upon a bed of pain, during which he drew
forth from his portmanteau his neglected Bible, and began to read
and study it. He had lain down, like Loyola, a knight of the sword,
and like him he rose up a knight of the Cross, but in a truer sense.
One day in 1827 he paid a visit to Apsley House, and while he
waited for the duke, he took up a volume which was lying on the
table. It was Dr. Gilly’s narrative of his visit to the Waldenses.
Beckwith felt himself drawn irresistibly to a people with whose
wonderful history this book made him acquainted for the first time.
From that hour his life was consecrated to them. He lived among
them as a father—​as a king. He devoted his fortune to them. He
built schools, and churches, and parsonages. He provided improved
schoolbooks, and suggested better modes of teaching. He strove
above all things to quicken their spiritual life. He taught them how to
respond to the exigencies of modern times. He specially inculcated
upon them that the field was wider than their Valleys; and that they
would one day be called to arise and to walk through Italy, in the
length of it and in the breadth of it. He was their advocate at the
court of Turin; and when he had obtained for them the possession of
a burying-ground outside their Valleys, he exclaimed, “Now they
have got infeftment of Piedmont, as the patriarchs did of Canaan,
and soon all the land will be theirs.”[149]
But despite the efforts of Gilly and Beckwith, and the growing
spirit of toleration, the Waldenses continued to groan under a load of
political and social disabilities. They were still a proscribed race.
The once goodly limits of their Valleys had, in later times, been
greatly contracted, and like the iron cell in the story, their territory
was almost yearly tightening its circle round them. They could not
own, or even farm, a foot-breadth of land, or practise any industry,
beyond their own boundary. They could not bury their dead save in
their Valleys; and when it chanced that any of their people died at
Turin or elsewhere, their corpses had to be carried all the way to
their own graveyards. They were not permitted to erect a tombstone
above their dead, or even to enclose their burial-grounds with a wall.
They were shut out from all the learned and liberal professions—​
they could not be bankers, physicians, or lawyers. No avocation was
left them but that of tending their herds and pruning their vines.
When any of them emigrated to Turin, or other Piedmontese town,
they were not permitted to be anything but domestic servants.
There was no printing-press in their Valleys—​they were forbidden to
have one; and the few books they possessed, mostly Bibles,
catechisms, and hymn-books, were printed abroad, chiefly in Great
Britain; and when they arrived at La Torre, the Moderator had to
sign before the Reviser-in-Chief an engagement that not one of
these books should be sold, or even lent, to a Roman Catholic.[150]
tomb of general beckwith.

They were forbidden to evangelise or make converts. But though


fettered on the one side they were not equally protected on the
other, for the priests had full liberty to enter their Valleys, and
proselytise; and if a boy of twelve or a girl of ten professed
willingness to enter the Roman Church, they were to be taken from
their parents, that they might with the more freedom carry out their
intention. They could not marry save among their own people. They
could not erect a sanctuary save on the soil of their own territory.
They could take no degree at any of the colleges of Piedmont. In
short, the duties, rights, and privileges that constitute life they were
denied. They were reduced as nearly as was practicable to simple
existence, with this one great exception—​which was granted them
not as a right, but as a favour—​namely, the liberty of Protestant
worship within their territorial limits.
The Revolution of 1848, with trumpet-peal, sounded the
overthrow of all these restrictions. They fell in one day. The final end
of Providence in preserving that people during long centuries of
fearful persecutions now began to be seen. The Waldensian Church
became the door by which freedom of conscience entered Italy.
When the hour came for framing a new constitution for Piedmont, it
was found desirable to give standing-room in that constitution to the
Waldenses, and this necessitated the introduction into the edict of
the great principle of freedom of worship as a right. The Waldenses
had contended for that principle for ages—​they had maintained and
vindicated it by their sufferings and martyrdoms; and therefore they
were necessitated to demand, and the Piedmontese Government to
grant, this great principle. It was the only one of the many new
constitutions framed for Italy at that same time in which freedom of
conscience was enacted. Nor would it have found a place in the
Piedmontese constitution, but for the circumstance that here were
the Waldenses, and that their great distinctive principle demanded
legal recognition, otherwise they would remain outside the
constitution. The Vaudois alone had fought the battle, but all their
countrymen shared with them the fruits of the great victory. When
the news of the Statuto of Carlo Alberto reached La Torre there were
greetings on the streets, psalms in the churches, and blazing
bonfires at night on the crest of the snowy Alps.
At the door of her Valleys, with lamp in hand, its oil unspent and
its light unextinguished, is seen, at the era of 1848, the Church of
the Alps, prepared to obey the summons of her heavenly King, who
has passed by in earthquake and whirlwind, casting down the
thrones that of old oppressed her, and opening the doors of her
ancient prison. She is now to go forth and be “The Light of all
Italy,”[151] as Dr. Gilly, thirty years before, had foretold she would at
no distant day become. Happily not all Italy as yet, but only
Piedmont, was opened to her. She addressed herself with zeal to the
work of erecting churches and forming congregations in Turin and
other towns of Piedmont. Long a stranger to evangelistic work, the
Vaudois Church had time and opportunity thus given her to acquire
the mental courage and practical habits needed in the novel
circumstances in which she was now placed. She prepared
evangelists, collected funds, organised colleges and congregations,
and in various other ways perfected her machinery in anticipation of
the wider field that Providence was about to open to her.
It is now the year 1859, and the drama which had stood still since
1849 begins once more to advance. In that year France declared war
against the Austrian occupation of the Italian peninsula. The tempest
of battle passes from the banks of the Po to those of the Adige,
along the plain of Lombardy, rapid, terrible, and decisive as the
thunder-cloud of the Alps, and the Tedeschi retreat before the
victorious arms of the French. The blood of the three great battles of
the campaign was scarcely dry before Austrian Lombardy, Modena,
Parma, Tuscany, and part of the Pontifical States had annexed
themselves to Piedmont, and their inhabitants had become fellow-
citizens of the Waldenses. With scarcely a pause there followed the
brilliant campaign of Garibaldi in Sicily and Naples, and these rich
and ample territories were also added to the now magnificent
kingdom of Victor Emmanuel. The whole of Italy, from the Alps to
Etna, the “States of the Church” excepted, now became the field of
the Waldensian Church. Nor was this the end of the drama. Another
ten years pass away: France again sends forth her armies to battle,
believing that she can command victory as aforetime. The result of
the brief but terrible campaign of 1870, in which the French Empire
disappeared and the German uprose, was the opening of the gates
of Rome. And let us mark—​for in the little incident we hear the voice
of ten centuries—​in the first rank of the soldiers whose cannon had
burst open the old gates, there enters a Vaudois colporteur with a
bundle of Bibles. The Waldenses now kindle their lamp at Rome, and
the purpose of the ages stands revealed!

THE END.
cassell, petter, galpin & co., belle sauvage works, london, e.c.
FOOTNOTES:
[1] Petrus Damianus, Opusc., p. 5. Allix, Churches of Piedmont, p.
113. M’Crie, Hist. of Reform. in Italy, p. 2.
[2] Recent German criticism refers the Nobla Leyçon to a later
date, but still one anterior to the Reformation.
[3] The new and elegant temple of the Waldenses now rises near
the foot of the Castelluzzo.
[4] This short description of the Waldensian valleys is drawn from
the author’s personal observations.
[5] This disproves the charge of Manicheism brought against
them by their enemies.
[6] Sir Samuel Morland gives the Nobla Leyçon in full in his
History of the Churches of the Waldenses. Allix (chap. 18) gives a
summary of it.
[7] The Nobla Leyçon has the following passage:—“If there be an
honest man, who desires to love God and fear Jesus Christ, who
will neither slander, nor swear, nor lie, nor commit adultery, nor
kill, nor steal, nor avenge himself of his enemies, they presently
say of such a one he is a Vaudés, and worthy of death.”
[8] See a list of numerous heresies and blasphemies charged
upon the Waldenses by the Inquisitor Reynerius, who wrote about
the year 1250, and extracted by Allix (chap. 22).
[9] The Romaunt Version of the Gospel according to John, from
MS. preserved in Trinity College, Dublin, and in the Bibliothèque
du Roi, Paris. By William Stephen Gilly, D.D., Canon of Durham,
and Vicar of Norham. Lond., 1848.
[10] Stranski, apud, Lenfant’s Concile de Constance, quoted by
Count Valerian Krasinski in his History of the Rise, Progress, and
Decline of the Reformation in Poland, vol. i., p. 53; Lond., 1838.
Illyricus Flaccius, in his Catalogus Testium Veritatis (Amstelodami,
1679), says: “Pars Valdensium in Germaniam transiit atque apud
Bohemos, in Polonia ac Livonia sedem fixit.” Leger says that the
Waldenses had, about the year 1210, Churches in Slavonia,
Sarmatia, and Livonia. (Histoire Générale des Eglises Evangéliques
des Vallées du Piedmont ou Vaudois, vol. ii., pp. 336, 337; 1669.)
[11] M’Crie, Hist. Ref. in Italy, p. 4.
[12] Compare Antoine Monastier, History of the Vaudois Church,
p. 121 (Lond., 1848), with Alexis Muston, Israel of the Alps, p. 8
(Lond., 1852).
[13] Monastier, Hist. Vaudois Church, p. 123.
[14] Monastier, p. 123.
[15] Ibid.
[16] Monastier, p. 123.
[17] Histoire Générale des Eglises Evangéliques des Vallées de
Piedmont, ou Vaudoises. Par Jean Leger. Part ii., pp. 6, 7. Leyden,
1669. Monastier, pp. 123, 124.
[18] The bull is given in full in Leger, who also says that he had
made a faithful copy of it, and lodged it with other documents in
the University Library of Cambridge. (Hist. Gén. des Eglises Vaud.,
part ii., pp. 7-15.)
[19] Muston, Israel of the Alps, p. 10.
[20] Leger, livr. ii., p. 7.
[21] Leger, livr. ii., p. 26
[22] Monastier, p. 128.
[23] Muston, p. 20.
[24] Muston, part ii., p. 234.
[25] Monastier, p. 129.
[26] Monastier, p. 130.
[27] Monastier, pp. 133-4.
[28] Monastier, p. 134.
[29] The Author was shown this pool when he visited the chasm.
None of the Waldensian valleys is better illustrated by the sad, yet
glorious, scenes of their martyrdom than this Valley of Angrogna.
Every rock in it has its story. As you pass through it you are
shown the spot where young children were dashed against the
stones—​the spot where men and women, stripped naked, were
rolled up as balls, and precipitated down the mountain, and
where, caught by the stump of tree, or projecting angle of rock,
they hung transfixed, enduring for days the agony of a living
death. You are shown the entrance of caves, into which some
hundreds of the Vaudois having fled, their enemies, lighting a fire
at the mouth of their hiding place, ruthlessly killed them all. Time
would fail to tell even a tithe of what has been done and suffered
in this famous pass.
[30] Muston, p. 11.
[31] Leger, livr. ii., p. 26.
[32] Ibid.
[33] Leger and Gilles say that it was Philip VII. who put an end to
this war. Monastier says they “are mistaken, for this prince was
then in France, and did not begin to reign till 1496.” This peace
was granted in 1489.
[34] Monastier, Hist. of the Vaudois, p. 138.
[35] Monastier, Hist. of the Vaudois, p. 138.
[36] Gilles, p. 30. Monastier, p. 141.
[37] Ruchat, tom. iii., pp. 176, 557.
[38] Hist. of the Vaud., p. 146.
[39] It is entitled, says Leger, “A Brief Confession of Faith made
by the Pastors and Heads of Families of the Valleys of Piedmont.”
“It is preserved,” he adds, “with other documents, in the Library
of the University of Cambridge.” (Hist. des Vaud., livr. i., p. 95.)
[40] Gilles, p. 40. Monastier, p. 146.
[41] George Morel states, in his Memoirs, that at this time there
were more than 800,000 persons of the religion of the Vaudois.
(Leger, Hist. des Vaudois, livr. ii., p. 27.) He includes, of course, in
this estimate the Vaudois in the Valleys, on the plain of Piedmont,
in Naples and Calabria, in the South of France, and in the
countries of Germany.
[42] Leger, livr. ii., p. 27.
[43] Monastier, p. 153.
[44] Leger, livr. ii., p. 29.
[45] Leger, livr. ii., p. 29. Monastier, p. 168,
[46] Leger, livr. ii., p. 28.
[47] Muston, Israel of the Alps, chap. 8.
[48] Leger, livr. ii., p. 29.
[49] Monastier, chap. 19, p. 172. Muston, chap. 10., p. 52.
[50] Leger, livr. ii., p. 29.
[51] “First, we do protest before the Almighty and All-just God,
before whose tribunal we must all one day appear, that we intend
to live and die in the holy faith, piety, and religion of our Lord
Jesus Christ, and that we do abhor all heresies that have been,
and are, condemned by the Word of God. We do embrace the
most holy doctrine of the prophets and apostles, as likewise of
the Nicene and Athanasian Creeds; we do subscribe to the four
Councils, and to all the ancient Fathers, in all such things as are
not repugnant to the analogy of faith.” (Leger, livr. ii., pp. 30-1.)
[52] See in Leger (livr. ii., pp. 30-1) the petition of the Vaudois
presented “Au Sérènissime et très-Puissant Prince, Philibert
Emmanuel, Duc de Savoye, Prince de Piémont, nôtre très-Clement
Seigneur” (To the Serene and most Mighty Prince, Philibert
Emmanuel, Duke of Savoy, Prince of Piedmont, our most Gracious
Lord).
[53] See in Leger (livr. ii., p. 32), “A la très-Vertueuse et très-
Excellente Dame, Madame Marguerite de France, Duchesse de
Savoye et de Berry”—“the petition of her poor and humble
subjects, the inhabitants of the Valleys of Lucerna and Angrogna,
and Perosa and San Martino, and all those of the plain who call
purely upon the name of the Lord Jesus.”
[54] Muston, p. 68.
[55] Muston, p. 72.
[56] Muston, p. 69. Monastier, p. 178.
[57] Muston, p. 70. Monastier, pp. 176-7.
[58] Muston, p. 71. Monastier, pp. 177-8.
[59] Muston, p. 72. Monastier, p. 182.
[60] Letter of Scipio Lentullus, Pastor of San Giovanni. (Leger,
Hist. des Eglises Vaud., livr. ii., p. 35.)
[61] So says the Pastor of Giovanni, Scipio Lentullus, in the letter
already referred to. (Leger, livr. ii., p. 35.)
[62] Letter of Scipio Lentullus. (Leger, livr. ii., p. 35.) Muston, pp.
73-4.
[63] Leger, livr. ii., p. 35. Monastier, pp. 184-5.
[64] Leger, livr. ii., p. 35.
[65] Muston, p. 77. Monastier, pp. 186-7.
[66] Muston, p. 78.
[67] Monastier, p. 188. Muston, p. 78.
[68] Muston, pp. 78-9.
[69] Monastier, p. 190. Muston, p. 80.
[70] Monastier, p. 191.
[71] Leger, part ii., p. 36. Gilles, chap. 25.
[72] Ibid., part ii., p. 37.
[73] Muston, p. 83.
[74] Ibid. Monastier, p. 194.
[75] Leger, part ii., p. 37. Muston, p. 85.
[76] The Articles of Capitulation are given in full in Leger, part ii.,
pp. 38-40.
[77] Leger, part ii., p. 41.
[78] Muston, p. 37.
[79] Leger, part ii., p. 333.
[80] M’Crie, Italy, pp. 7, 8.
[81] Muston, Israel of the Alps, p. 38.
[82] Perrin, Histoire des Vaudois, p. 197. Monastier, pp. 203-4.
[83] Muston, p. 38. Monastier and M’Crie say that the application
for a pastor was made to Geneva, and that Paschale set out for
Calabria, accompanied by another minister and two
schoolmasters. It is probable that the application was made to
Geneva through the intermediation of the home Church.
[84] M’Crie, p. 324.
[85] Monastier, p. 205.
[86] M’Crie, p. 325.
[87] M’Crie, pp. 325-7.
[88] Ibid., pp. 326-7.
[89] Leger, part ii., p. 333. M’Crie, p. 303. Muston, p. 41.
[90] Monastier, p. 206.
[91] M’Crie, p. 304.
[92] Pantaleon, Rerum in Eccles. Gest. Hist., ff. 337-8. De Porta,
tom. ii., pp. 309, 312—ex M’Crie, pp. 305-6.
[93] Crespin, Hist. des Martyrs, pp. 506-16. Leger, part i., p. 204,
and part ii., p. 335.
[94] Sextus Propertius (Cranstoun’s translation), p. 119.
[95] Muston, chap. 16. Monastier, chap. 21.
[96] See the letter in full in Leger, part i., pp. 41-5.
[97] Muston, p. 98.
[98] Monastier, p. 222.
[99] Muston, p. 111.
[100] Monastier, p. 241.
[101] Muston, pp. 112-3. Antoine Leger was uncle of Leger the
historian. He had been tutor for many years in the family of the
Ambassador of Holland at Constantinople.
[102] Monastier, chap. 18. Muston pp. 242-3.
[103] Muston, p. 126.
[104] Muston, p. 129.
[105] Leger, part ii., chap. 6, pp. 72-3.
[106] Muston, p. 130.
[107] Leger, part ii., chap. 8, p. 94.
[108] Monastier, p. 265.
[109] Leger, part ii., pp. 95-6.
[110] Ibid., part iv., p. 108.
[111] Monastier, p. 267.
[112] Muston, p. 135.
[113] Leger, part ii., pp. 108-9.
[114] Leger, part ii., p. 110.
[115] So says Leger, who was an eye-witness of these horrors.
[116] Monastier, p. 270.
[117] Leger, part ii., p. 113.
[118] Leger, part ii., p. 111.
[119] Leger, part ii., p. 112.
[120] The book is that from which we have so largely quoted,
entitled Histoire Générale des Eglises Evangéliques des Vallées de
Piémont ou Vaudoises. Par Jean Leger, Pasteur et Modérateur des
Eglises des Vallées, et depuis la violence de la Persécution, appelé
à l’Eglise Wallonne de Leyde. A. Leyde, 1669.
[121] Leger, part ii., p. 113.
[122] The sum collected in England was, in round numbers,
£38,000. Of this, £16,000 was invested, on the security of the
State, to pension pastors, schoolmasters, and students in the
Valleys. This latter sum was appropriated by Charles II., on the
pretext that he was not bound to implement the engagements of
a usurper.
[123] The History of the Evangelical Churches of the Valleys of
Piedmont: containing a most exact Geographical Description of
the place, and a faithful Account of the Doctrine, Life, and
Persecutions of the ancient Inhabitants, together with a most
naked and punctual Relation of the late bloody Massacre, 1655.
By Samuel Morland, Esq., His Highness’ Commissioner
Extraordinary for the Affairs of the said Valleys. London, 1658.
[124] Leger, part ii., chap. 11, p. 186.
[125] Leger, part ii., pp. 186-7.
[126] Leger, part ii., p. 187. Muston, pp. 146-7.
[127] Leger, part ii., p. 188. Muston, pp. 148-9.
[128] Leger, part ii., p. 189. Monastier, p. 277.
[129] Leger, part ii., p. 189.
[130] Leger, part ii., p. 275.
[131] Monastier, p. 311.
[132] Monastier, p. 317. Muston, p. 199.
[133] Muston, p. 200.
[134] Muston, p. 202.
[135] Monastier, p. 320.
[136] Monastier, p. 336.
[137] So named by the author of the Rentrée, from the village at
its foot, but which without doubt, says Monastier (p. 349), “is
either the Col Joli (7,240 feet high) or the Col de la Fénêtre, or
Portetta, as it was named to Mr. Brockedon, who has visited these
countries, and followed the same road as the Vaudois.”
[138] Monastier, p. 352.
[139] Monastier, p. 356.
[140] Monastier, pp. 364-5.
[141] The Author was conducted over the ground, and had all the
memorials of the siege pointed out to him by two most
trustworthy and intelligent guides—​M. Turin, then Pastor of Macel,
whose ancestors had figured in the “Glorious Return;” and the
late M. Tron, Syndic of the Commune. The ancestors of M. Tron
had returned with Henri Arnaud, and recovered their lands in the
Valley of San Martino, and here had the family of M. Tron lived
ever since, and the precise spots where the more memorable
events of the war had taken place had been handed down from
father to son.
[142] Monastier, pp. 369, 370.
[143] Cannon-balls are occasionally picked up in the
neighbourhood of the Balsiglia. In 1857 the Author was shown
one in the Presbytère of Pomaretto, which had been dug up a
little before.
[144] Monastier, p. 371.
[145] Monastier, p. 389. The Pope, Innocent XII., declared (19th
August, 1694) the edict of the duke re-establishing the Vaudois
null and void, and enjoined his inquisitors to pay no attention to it
in their pursuit of the heretics.
[146] Muston, pp. 220-1. Monastier, pp. 388-9.
[147] Waldensian Researches, by William Stephen Gilly, M.A.,
Prebendary of Durham; p. 158; Lond., 1831.
[148] So deep was the previous ignorance respecting this people,
that Sharon Turner, speaking of the Waldenses in his History of
England, placed them on the shores of Lake Leman, confounding
the Valleys of the Vaudois with the Canton de Vaud.
[149] The Author may be permitted to bear his personal
testimony to the labours of General Beckwith for the Waldenses,
and through them for the evangelisation of Italy. On occasion of

You might also like