100% found this document useful (5 votes)
60 views

Brief C++: Late Objects, 3rd Edition 2024 scribd download

Brief

Uploaded by

aniakohakym
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (5 votes)
60 views

Brief C++: Late Objects, 3rd Edition 2024 scribd download

Brief

Uploaded by

aniakohakym
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Download Full Version ebookmass - Visit ebookmass.

com

Brief C++: Late Objects, 3rd Edition

https://ebookmass.com/product/brief-c-late-objects-3rd-
edition/

OR CLICK HERE

DOWLOAD NOW

Discover More Ebook - Explore Now at ebookmass.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

C++20 for Programmers: An Objects-Natural Approach, 3rd


Edition Paul Deitel & Harvey Deitel

https://ebookmass.com/product/c20-for-programmers-an-objects-natural-
approach-3rd-edition-paul-deitel-harvey-deitel/

ebookmass.com

Data Structures and Other Objects Using C++ 4th Edition


Edition Michael Main

https://ebookmass.com/product/data-structures-and-other-objects-
using-c-4th-edition-edition-michael-main/

ebookmass.com

Beginning Java Objects: From Concepts to Code, 3rd edition


Jacquie Barker

https://ebookmass.com/product/beginning-java-objects-from-concepts-to-
code-3rd-edition-jacquie-barker/

ebookmass.com

The Woman in the Library Sulari Gentill

https://ebookmass.com/product/the-woman-in-the-library-sulari-
gentill-3/

ebookmass.com
eTextbook 978-1305880412 New Perspectives Microsoft Office
365 & Excel 2016: Intermediate

https://ebookmass.com/product/etextbook-978-1305880412-new-
perspectives-microsoft-office-365-excel-2016-intermediate/

ebookmass.com

Health Psychology 10th Edition, (Ebook PDF)

https://ebookmass.com/product/health-psychology-10th-edition-ebook-
pdf/

ebookmass.com

The Oxford History of the Third Reich 2nd Edition Earl Ray
Beck Professor Of History Robert Gellately

https://ebookmass.com/product/the-oxford-history-of-the-third-
reich-2nd-edition-earl-ray-beck-professor-of-history-robert-gellately/

ebookmass.com

View from Above (Hunting Grounds Book 4) Nichole Severn

https://ebookmass.com/product/view-from-above-hunting-grounds-
book-4-nichole-severn/

ebookmass.com

Herbs, Spices and Medicinal Plants : Processing, Health


Benefits and Safety Mohammad B. Hossain

https://ebookmass.com/product/herbs-spices-and-medicinal-plants-
processing-health-benefits-and-safety-mohammad-b-hossain/

ebookmass.com
The Geography of Trade Liberalization: Peru’s Free Trade
Continuity in Comparative Perspective Omar Awapara

https://ebookmass.com/product/the-geography-of-trade-liberalization-
perus-free-trade-continuity-in-comparative-perspective-omar-awapara/

ebookmass.com
BriefC++
Cay Horstmann

Late Objects
3/e
vi Preface

• Selecting Test Cases


• Hand-Tracing
• Storyboards
• Solve a Simpler Problem First
• Reusable Functions
• Stepwise Refinement
• Adapting Algorithms
• Discovering Algorithms by Manipulating Physical Objects
• Draw a Picture (pointer diagrams)
• Tracing Objects (identifying state and behavior)
• Discovering Classes
A visual approach motivates the reader and eases navigation.
Photographs present visual analogies that explain
the nature and behavior of computer concepts.
Step-by-step figures illustrate complex program
operations. Syntax boxes and example tables pres-
ent a variety of typical and special cases in a com-
pact format. It is easy to get the “lay of the land” by
browsing the visuals, before focusing on the textual
material.
Focus on the essentials while being
© Terraxplorer/iStockphoto.
technically accurate.
An encyclopedic coverage is not helpful for a Visual features help the reader
beginning programmer, but neither is the oppo- with navigation.
site—reducing the material to a list of simplistic
bullet points. In this book, the essentials are presented in digestible chunks, with sep-
arate notes that go deeper into good practices or language features when the reader is
ready for the additional information. You will not find artificial over-simplifications
that give an illusion of knowledge.
Reinforce sound engineering practices.
A multitude of useful tips on software quality and common errors encourage the
development of good programming habits. The focus is on test-driven development,
encouraging students to test their programs systematically.
Engage with optional engineering and business exercises.
End-of-chapter exercises are enhanced with problems from scientific and business
domains. Designed to engage students, the exercises illustrate the value of program-
ming in applied fields.
Preface vii

New to This Edition


Updated for Modern Versions of C++
A number of features of the C++ 2011 and C++ 2014 standards are described either as
recommended “best practice” or as Special Topics.

New and Reorganized Topics


The book now supports two pathways into object-oriented programming and inher-
itance. Pointers and structures can be covered before introducing classes. Alterna-
tively, pointers can be deferred until after the implementation of classes.
A sequence of Worked Examples and exercises introduces “media computa-
tion”—generating and modifying images, sounds, and animations.

Lower-Cost, Interactive Format


This third edition is published as a lower-cost Enhanced E-Text that supports active
learning through a wealth of interactive activities. These activities engage and prepare
students for independent programming and the Review Exercises, Practice Exercises,
and Programming Projects at the end of each E-Text chapter. The Enhanced E-Text
may also be bundled with an Abridged Print Companion, which is a bound book that
contains the entire text for reference, but without exercises or practice material.
Interactive learning solutions are expanding every day, so to learn more about
these options or to explore other options to suit your needs, please contact your
Wiley account manager (www.wiley.com/go/whosmyrep) or visit the product information
page for this text on wiley.com (http://wiley.com/college/sc/horstmann).
The Enhanced E-Text is designed to enable student practice without the instructor
assigning the interactivities or recording their scores. If you are interested in assign-
ing and grading students’ work on them, ask your Wiley Account Manager about the
online course option implemented in the Engage Learning Management System. The
Engage course supports the assignment and automatic grading of the interactivities.
Engage access includes access to the Enhanced E-Text.

Features in the Enhanced E-Text


The interactive Enhanced E-Text guides students from the basics to writing complex
pro­grams. After they read a bit, they can try all of the interactive exercises for that
section. Active reading is an engaging way for students to ensure that students are
prepared before going to class.
There five types of interactivities:
Code Walkthrough Code Walkthrough activities ask students to trace through a
segment of code, choosing which line will be executed next and entering the new
values of variables changed by the code’s execution. This activity simulates the hand-
tracing problem solving technique taught in Chapters 3 and 4—but with immediate
feedback.
viii Preface

Example Table Example table activities make the student the active participant in
building up tables of code examples similar to those found in the book. The tables
come in many different forms. Some tables ask the student to determine the output of
a line of code, or the value of an expression, or to provide code for certain tasks. This
activity helps students assess their understanding of the reading—while it is easy to
go back and review.
Algorithm Animation An algorithm animation shows the essential steps of an
algorithm. However, instead of passively watching, students get to predict each step.
When finished, students can start over with a different set of inputs. This is a surpris-
ingly effective way of learning and remembering algorithms.
Rearrange Code Rearrange code activities ask the student to arrange lines of code
by dragging them from the list on the right to the area at left so that the resulting code
fulfills the task described in the problem. This activity builds facility with coding
structure and implementing common algorithms.
Object Diagram Object diagram activities ask the student to create a memory
diagram to illustrate how variables and objects are initialized and updated as sample
code executes. The activity depicts variables, objects, and references in the same way
as the figures in the book. After an activity is completed, pressing “Play” replays the
animation. This activity goes beyond hand-tracing to illuminate what is happening in
memory as code executes.
Code Completion Code completion activities ask the student to finish a partially-
completed program, then paste the solution into CodeCheck (a Wiley-based online
code evaluator) to learn whether it produces the desired result. Tester classes on the
CodeCheck site run and report whether the code passed the tests. This activity serves
as a skill-building lab to better prepare the student for writing programs from scratch.

A Tour of the Book


This book is intended for a two-semester introduction to programming that may also
include algorithms and data structures. The organization of chapters offers the same
flexibility as the previous edition; dependencies among the chapters are also shown
in Figure 1.

Part A: Fundamentals (Chapters 1–8)


The first six chapters follow a traditional approach to basic programming concepts.
Students learn about control structures, stepwise refinement, and arrays. Objects are
used only for input/output and string processing. Input/output is first covered in
Chapter 2, which may be followed by an introduction to reading and writing text
files in Section 8.1.
In a course for engineers with a need for systems and embedded programming,
you will want to cover Chapter 7 on pointers. Sections 7.1 and 7.4 are sufficient for
using pointers with polymorphism in Chapter 10.
File processing is the subject of Chapter 8. Section 8.1 can be covered sooner for
an intro­duction to reading and writing text files. The remainder of the chapter gives
addi­tional material for practical applications.
Preface ix

Part B: Object-Oriented Design (Chapters 9–10)


After students have gained a solid foundation, they are ready to tackle the implemen-
tation of classes. Chapters 9 and 10 introduce the object-oriented features of C++.
Chapter 9 introduces class design and implementation. Chapter 10 covers inheritance
and polymorphism. By the end of these chapters, students will be able to implement
programs with multiple interacting classes.
Any subset of these chapters can be incorporated into a custom print version of
this text; ask your Wiley sales representative for details, or visit customselect.wiley.com
to create your custom order.

Appendices
Appendices A and B summarize C++ reserved words and operators. Appendix C
lists character escape sequences and ASCII character code values. Appendix D docu-
ments all of the library functions and classes used in this book.
Appendix E contains a programming style guide. Using a style guide for program­
ming assignments benefits students by directing them toward good habits and reduc-
ing gratuitous choice. The style guide is available in electronic form on the book’s
companion web site so that instructors can modify it to reflect their preferred style.
Appendix F, available in the E-Text, introduces common number systems used in
computing.

Fundamentals
1. Introduction
Object-Oriented Design

2. Fundamental
Data Types

3. Decisions

4. Loops

A gentle
introduction to recursion
5. Functions is optional.
Section 8.1
contains the core
material
6. Arrays
6. Iteration
and Vectors

7. Pointers 8. Streams 9. Classes

Sections 10. Inheritance


7.1 and 7.4 are
required

Figure 1 Chapter Dependencies


x Preface

Web Resources
This book is complemented by a complete suite of online resources. Go to www.wiley.
com/go/bclo3 to visit the online companion sites, which include

• Source code for all example programs in the book and its Worked Examples, plus
additional example programs.
• Worked Examples that apply the problem-solving steps in the book to other
realistic examples.
• Lecture presentation slides (for instructors only).
• Solutions to all review and programming exercises (for instructors only).
• A test bank that focuses on skills, not just terminology (for instructors only). This
extensive set of multiple-choice questions can be used with a word processor or
imported into a course management system.
• “CodeCheck” assignments that allow students to work on programming prob-
lems presented in an innovative online service and receive immediate feedback.
Instructors can assign exercises that have already been prepared, or easily add
their own. Visit http://codecheck.it to learn more.

Pointers in the print


companion describe what
students will find in their WORKED EXAMPLE 2.1
Computing Travel Time
E-Text or online.
Learn how to develop a hand calculation to compute the time that
a robot requires to retrieve an item from rocky terrain. See your
.
E-Text or visit wiley.com/go/bclo3
Courtesy of NASA.

EXAMPLE CODE See how_to_1/scores_vector in your companion code for a solution using vectors instead of arrays.
Walkthrough xi

A Walkthrough of the Learning Aids


The pedagogical elements in this book work together to focus on and reinforce key
concepts and fundamental principles of programming, with additional tips and detail
organized to support and deepen these fundamentals. In addition to traditional
features, such as chapter objectives and a wealth of exercises, each chapter contains
elements geared to today’s visual learner.

106 Chapter 4 Loops

4.3 The for Loop


Throughout each chapter,
It often happens that you want to execute a sequence of
margin notes show where The for loop is
used when a statements a given number of times. You can use a while
value runs from a loop that is controlled by a counter, as in the following
new concepts are introduced starting point to an
ending point with a
example:
and provide an outline of key ideas. constant increment
or decrement.
counter = 1; // Initialize the counter
while (counter <= 10) // Check the counter
{
cout << counter << endl;
counter++; // Update the counter
}

Because this loop type is so common, there is a special


form for it, called the for loop (see Syntax 4.2).
for (counter = 1; counter <= 10; counter++)
{
© Enrico Fianchini/iStockphoto.
cout << counter << endl;
}
You can visualize the
Some people call this loop count-controlled. In contrast, for loop as an orderly
the while loop of the preceding section can be called an sequence of steps.
event-controlled loop because it executes until an event
occurs (for example, when the balance reaches the target). Another commonly-used
Annotated syntax boxes term for a count-controlled loop is definite. You know from the outset that the loop
body will be executed a definite number of times––ten times in our example. In con-
provide a quick, visual overview trast, you do not know how many iterations it takes to accumulate a target balance.
Such a loop is called indefinite.
of new language constructs.
Syntax 4.2 for Statement

These three
expressions should be related.
See Programming Tip 4.1.

Annotations explain This initialization The loop is This update is


required components happens once
before the loop starts.
executed while
this condition is true.
executed after
each iteration.
and point to more information for (int i = 5; i <= 10; i++)

on common errors or best practices The variable i is


{
sum = sum + i;
This loop executes 6 times.
associated with the syntax. defined only in this
for loop.
}
See Programming Tip 4.3.

The for loop neatly groups the initialization, condition, and update expressions
together. However, it is important to realize that these expressions are not executed
together (see Figure 3).

Analogies to everyday objects are


used to explain the nature and behavior
of concepts such as variables, data
Like a variable in a computer types, loops, and more.
program, a parking space has
an identifier and contents.
xii Walkthrough

Memorable photos reinforce


analogies and help students
remember the concepts. pie(fruit) pie(fruit)

A recipe for a fruit pie may say to use any kind of fruit.
Here, “fruit” is an example of a parameter variable.
Apples and cherries are examples of arguments.

Problem Solving sections teach


techniques for generating ideas and
6.5 Problem Solving: Discovering Algorithms by Manipulating Physical Objects 277
evaluating proposed solutions, often
using pencil and paper or other Now how does that help us with our problem, switching the first and the second
half of the array?
artifacts. These sections emphasize Let’s put the first coin into place, by swapping it with the fifth coin. However, as
C++ programmers, we will say that we swap the coins in positions 0 and 4:
that most of the planning and problem
solving that makes students successful
happens away from the computer.

Next, we swap the coins in positions 1 and 5:

HOW TO 1.1
Describing an Algorithm with Pseudocode
This is the first of many “How To” sections in this book that give you step-by-step proce-
dures for carrying out important tasks in developing computer programs.
Before you are ready to write a program in C++, you need to develop an algorithm—a
method for arriving at a solution for a particular problem. Describe the algorithm in pseudo-
code––a sequence of precise steps formulated in English. To illustrate, we’ll devise an algo-
rithm for this problem:
How To guides give step-by-step
Problem Statement You have the choice of buying one guidance for common programming
of two cars. One is more fuel efficient than the other, but also
more expensive. You know the price and fuel efficiency (in miles tasks, emphasizing planning and
per gallon, mpg) of both cars. You plan to keep the car for ten
years. Assume a price of $4 per gallon of gas and usage of 15,000 testing. They answer the beginner’s
miles per year. You will pay cash for the car and not worry about
financing costs. Which car is the better deal? © dlewis33/Getty Images. question, “Now what do I do?” and
Step 1 Determine the inputs and outputs. integrate key concepts into a
In our sample problem, we have these inputs: problem-solving sequence.
• purchase price1 and fuel efficiency1, the price and fuel efficiency (in mpg) of the first car
• purchase price2 and fuel efficiency2, the price and fuel efficiency of the second car

WORKED EXAMPLE 1.1


Writing an Algorithm for Tiling a Floor

Problem Statement Your task is to tile a rectangular bathroom floor with alternating Worked Examples apply
black and white tiles measuring 4 × 4 inches. The floor dimensions, measured in inches, are
multiples of 4. the steps in the How To to
Step 1 Determine the inputs and outputs.
a different example, showing
The inputs are the floor dimensions (length × width), how they can be used to
measured in inches. The output is a tiled floor.
Step 2 Break down the problem into smaller tasks.
plan, implement, and test
A natural subtask is to lay one row of tiles. If you can a solution to another
solve that task, then you can solve the problem by lay-
ing one row next to the other, starting from a wall, until programming problem.
you reach the opposite wall.
How do you lay a row? Start with a tile at one wall.
If it is Names
Table 3 Variable white, putin
a black
C++ one next to it. If it is black, put
a white one next to it. Keep going until you reach the
Variable Name wall. The row will contain width / 4 tiles.
opposite Comment © rban/iStockphoto.

Step 3 Describe each subtask in pseudocode.


can_volume1 Variable names consist of letters, numbers, and the underscore
character.
x In mathematics, you use short variable names such as x or y. This is
legal in C++, but not very common, because it can make programs
harder to understand (see Programming Tip 2.1). Example tables support beginners
!
Can_volume Caution: Variable names are case sensitive. This variable name is with multiple, concrete examples.
different from can_volume.
These tables point out common
6pack Error: Variable names cannot start with a number.

can volume Error: Variable names cannot contain spaces.


errors and present another quick
double Error: You cannot use a reserved word as a variable name. reference to the section’s topic.
ltr/fl.oz Error: You cannot use symbols such as . or /
Walkthrough xiii

Consider the function call illustrated in Figure 3:


double result1 = cube_volume(2); Progressive figures trace code
• The parameter variable side_length of the cube_volume function is created. ❶
• The parameter variable is initialized with the value of the argument that was
segments to help students visualize
passed in the call. In our case, side_length is set to 2. ❷ the program flow. Color is used
• The function computes the expression side_length * side_length * side_length,
which has the value 8. That value is stored in the variable volume. ❸ consistently to make variables and
• The function returns. All of its variables are removed. The return value is trans-
ferred to the caller, that is, the function calling the cube_volume function. ❹
other elements easily recognizable.

1 Function call result1 =


double result1 = cube_volume(2);

1 Initialize counter
side_length = for (counter = 1; counter <= 10; counter++)
{
cout << counter << endl;
2 Initializing function parameter variable counter = 1 }
result1 =
double result1 = cube_volume(2);
2 Check condition
side_length = for (counter = 1; counter <= 10; counter++)
2
{
cout << counter << endl;
counter = 1 }
3 About to return to the caller result1 =

3 Execute loop body


for (counter = 1; counter <= 10; counter++)
side_length = 2 {
double volume = side_length * side_length * side_length;
return volume; cout << counter << endl;
volume = 8 counter = 1 }

4 After function call result1 = 8 4 Update counter


for (counter = 1; counter <= 10; counter++)
double result1 = cube_volume(2); {
cout << counter << endl;
counter = 2 }
Figure 3 Parameter Passing

5 Check condition again


for (counter = 1; counter <= 10; counter++)
{
cout << counter << endl;
counter = 2 }

Figure 3 Execution of a for Loop


Optional engineering exercises
engage students with applications
from technical fields. Engineering P7.12 Write a program that simulates the control
software for a “people mover” system, a set of
driverless trains that move in two concentric
circular tracks. A set of switches allows trains
to switch tracks.
In your program, the outer and inner tracks
should each be divided into ten segments.
Each track segment can contain a train that
moves either clockwise or counterclockwise.
sec02/cube.cpp A train moves to an adjacent segment in its track or, if that segment is occupied, to
the adjacent segment in the other track.
1 #include <iostream>
2 Define a Segment structure. Each segment has a pointer to the next and previous
3 using namespace std; segments in its track, a pointer to the next and previous segments in the other track,
4
5 /**
6 Computes the volume of a cube.
7 @param side_length the side length of the cube
8 @return the volume
9 */
10 double cube_volume(double side_length)
11 {
12 double volume = side_length * side_length * side_length;
13 return volume;
14 }
15
16 int main()
Program listings are carefully
17
18
{
double result1 = cube_volume(2); designed for easy reading,
double result2 = cube_volume(10);
19
20 cout << "A cube with side length 2 has volume " << result1 << endl; going well beyond simple
21 cout << "A cube with side length 10 has volume " << result2 << endl;
22 color coding. Functions are set
23 return 0;
24 } off by a subtle outline.
Program Run
A cube with side length 2 has volume 8
A cube with side length 10 has volume 1000

EXAMPLE CODE See sec04 of your companion code for another implementation of the earthquake program that you
Additional example programs
saw in Section 3.3. Note that the get_description function has multiple return statements.
are provided with the companion
code for students to read, run,
and modify.
xiv Walkthrough

Common Errors describe the kinds Common Error 2.1


Using Undefined Variables
of errors that students often make, You must define a variable before you use it for the first time. For example, the following
with an explanation of why the errors sequence of statements would not be legal:
double can_volume = 12 * liter_per_ounce;
occur, and what to do about them. double liter_per_ounce = 0.0296;
In your program, the statements are compiled in order. When the compiler reaches the first
statement, it does not know that liter_per_ounce will be defined in the next line, and it reports
an error.

Programming Tip 3.6


Hand-Tracing
A very useful technique for understanding whether a program
works correctly is called hand-tracing. You simulate the pro-
gram’s activity on a sheet of paper. You can use this method with
pseudocode or C++ code.
Get an index card, a cocktail napkin, or whatever sheet of
Programming Tips explain paper is within reach. Make a column for each variable. Have the
program code ready. Use a marker, such as a paper clip, to mark
good programming practices, the current statement. In your mind, execute statements one at a
time. Every time the value of a variable changes, cross out the old
and encourage students to be value and write the new value below the old one.
© thomasd007/iStockphoto.

For example, let’s trace the tax program with the data from the
more productive with tips and program run in Section 3.4. In lines 13 and 14, tax1 and tax2 are
Hand-tracing helps you
understand whether a
initialized to 0. program works correctly.
techniques such as hand-tracing. 6 int main()
7 {
8 const double RATE1 = 0.10; marital
9 const double RATE2 = 0.25; tax1 tax2 income status
10 const double RATE1_SINGLE_LIMIT = 32000;
11 const double RATE1_MARRIED_LIMIT = 64000; 0 0
12
13 double tax1 = 0;
14 double tax2 = 0;
15

In lines 18 and 22, income and marital_status are initialized by input statements.
16 double income;
17 cout << "Please enter your income: ";
18 cin >> income; marital
19 tax1 tax2 income status
20 cout << "Please enter s for single, m for married: ";
21 string marital_status; 0 0 80000 m
22 cin >> marital_status;
23

Because marital_status is not "s", we move to the else


branch of the outer if statement (line 36).
24 if (marital_status == "s")
25 {
26 if (income <= RATE1_SINGLE_LIMIT)
27
28
{ Special Topic 6.5
tax1 = RATE1 * income;
29
30
}
else The Range-Based for Loop
31 {
32 C++ 11 introduces a convenient syntax for visiting all elements in a “range” or sequence of ele-
tax1 = RATE1 * RATE1_SINGLE_LIMIT;
ments. This loop displays all elements in a vector:
vector<int> values = {1, 4, 9, 16, 25, 36};
for (int v : values)
{
cout << v << " ";
}

Special Topics present optional In each iteration of the loop, v is set to an element of the vector. Note that you do not use an
index variable. The value of v is the element, not the index of the element.
topics and provide additional If you want to modify elements, declare the loop variable as a reference:
for (int& v : values)
explanation of others. {
v++;
}
This loop increments all elements of the vector.
You can use the reserved word auto, which was introduced in Special Topic 2.3, for the type
of the element variable:
for (auto v : values) { cout << v << " "; }
The range-based for loop also works for arrays:
int primes[] = { 2, 3, 5, 7, 11, 13 };
for (int p : primes)
{
cout << p << " ";
}
Computing & Society 7.1 Embedded Systems The range-based for loop is a convenient shortcut for visiting or updating all elements of a
vector or an array. This book doesn’t use it because one can achieve the same result by looping
An embedded sys- would feel comfortable upgrading the duced in large volumes. Thus, the pro-
tem is a computer software in their washing machines grammer of an embedded system has
over index values. But if you like the more concise form, and use C++ 11 or later, you should
system that controls a device. The or automobile engines. If you ever a much larger economic incentive to certainly consider using it.
device contains a processor and other handed in a programming assignment conserve resources than the desktop
EXAMPLE CODE See special_topic_5 of your companion code for a program that demonstrates the range-based
hardware and is controlled by a com- that you believed to be correct, only to software programmer. Unfortunately, for loop.
puter program. Unlike a personal have the instructor or grader find bugs trying to conserve resources usually
computer, which has been designed in it, then you know how hard it is to makes it harder to write programs that
to be flexible and run many different write software that can reliably do its work correctly.
computer programs, the hardware task for many years without a chance C and C++ are commonly used
and software of an embedded system of changing it. Quality standards are languages for developing embedded
are tailored to a specific device. Com- especially important in devices whose systems.
puter controlled devices are becom- failure would destroy property or
ing increasingly common, ranging endanger human life. Many personal
from washing machines to medical computer purchasers buy computers Computing & Society presents social
equipment, cell phones, automobile that are fast and have a lot of stor-
engines, and spacecraft.
Several challenges are specific to
age, because the investment is paid
back over time when many programs
and historical topics on computing—for
programming embedded systems.
Most importantly, a much higher stan-
are run on the same equipment. But
the hardware for an embedded device
interest and to fulfill the “historical and
dard of quality control applies. Ven-
dors are often unconcerned about
is not shared––it is dedicated to one
device. A separate processor, memory,
social context” requirements of the
bugs in personal computer software,
because they can always make you
and so on, are built for every copy of
the device. If it is possible to shave a ACM/IEEE curriculum guidelines.
install a patch or upgrade to the next few pennies off the manufacturing © Courtesy of Professor Prabal Dutta.
version. But in an embedded system, cost of every unit, the savings can add
that is not an option. Few consumers up quickly for devices that are pro- The Controller of an Embedded System
Walkthrough xv

Interactive activities in the E-Text


engage students in active reading as they…

Trace through a code segment

Build an example table

Explore common algorithms

Arrange code to fulfill a task

Complete a program and Create a memory diagram


get immediate feedback
Acknowledgments xvii

Acknowledgments
Many thanks to Don Fowley, Graig Donini, Dan Sayre, Ryann Dannelly, David
Dietz, Laura Abrams, and Billy Ray at John Wiley & Sons for their help with this
project. An especially deep acknowledgment and thanks goes to Cindy Johnson for
her hard work, sound judgment, and amazing attention to detail.
I am grateful to Mark Atkins, Ivy Technical College, Katie Livsie, Gaston College,
Larry Morell, Arkansas Tech University, and Rama Olson, Gaston College, for
their contributions to the supplemental material. Special thanks to Stephen Gilbert,
Orange Coast Community College, for his help with the interactive exercises.
Every new edition builds on the suggestions and experiences of new and prior
reviewers, contributors, and users. We are very grateful to the individuals who pro-
vided feedback, reviewed the manuscript, made valuable suggestions and contribu-
tions, and brought errors and omissions to my attention. They include:
Charles D. Allison, Utah Valley State College
Fred Annexstein, University of Cincinnati
Mark Atkins, Ivy Technical College
Stefano Basagni, Northeastern University
Noah D. Barnette, Virginia Tech
Susan Bickford, Tallahassee Community College
Ronald D. Bowman, University of Alabama, Huntsville
Robert Burton, Brigham Young University
Peter Breznay, University of Wisconsin, Green Bay
Richard Cacace, Pensacola Junior College, Pensacola
Kuang-Nan Chang, Eastern Kentucky University
Joseph DeLibero, Arizona State University
Subramaniam Dharmarajan, Arizona State University
Mary Dorf, University of Michigan
Marty Dulberg, North Carolina State University
William E. Duncan, Louisiana State University
John Estell, Ohio Northern University
Waleed Farag, Indiana University of Pennsylvania
Evan Gallagher, Polytechnic Institute of New York University
Stephen Gilbert, Orange Coast Community College
Kenneth Gitlitz, New Hampshire Technical Institute
Daniel Grigoletti, DeVry Institute of Technology, Tinley Park
Barbara Guillott, Louisiana State University
Charles Halsey, Richland College
Jon Hanrath, Illinois Institute of Technology
Neil Harrison, Utah Valley University
Jurgen Hecht, University of Ontario
Steve Hodges, Cabrillo College
xviii Acknowledgments

Jackie Jarboe, Boise State University


Debbie Kaneko, Old Dominion University
Mir Behrad Khamesee, University of Waterloo
Sung-Sik Kwon, North Carolina Central University
Lorrie Lehman, University of North Carolina, Charlotte
Cynthia Lester, Tuskegee University
Yanjun Li, Fordham University
W. James MacLean, University of Toronto
LindaLee Massoud, Mott Community College
Adelaida Medlock, Drexel University
Charles W. Mellard, DeVry Institute of Technology, Irving
Larry Morell, Arkansas Tech University
Ethan V. Munson, University of Wisconsin, Milwaukee
Arun Ravindran, University of North Carolina at Charlotte
Philip Regalbuto, Trident Technical College
Don Retzlaff, University of North Texas
Jeff Ringenberg, University of Michigan, Ann Arbor
John P. Russo, Wentworth Institute of Technology
Kurt Schmidt, Drexel University
Brent Seales, University of Kentucky
William Shay, University of Wisconsin, Green Bay
Michele A. Starkey, Mount Saint Mary College
William Stockwell, University of Central Oklahoma
Jonathan Tolstedt, North Dakota State University
Boyd Trolinger, Butte College
Muharrem Uyar, City College of New York
Mahendra Velauthapillai, Georgetown University
Kerstin Voigt, California State University, San Bernardino
David P. Voorhees, Le Moyne College
Salih Yurttas, Texas A&M University

A special thank you to all of our class testers:


Pani Chakrapani and the students of the University of Redlands
Jim Mackowiak and the students of Long Beach City College, LAC
Suresh Muknahallipatna and the students of the University of Wyoming
Murlidharan Nair and the students of the Indiana University of South Bend
Harriette Roadman and the students of New River Community College
David Topham and the students of Ohlone College
Dennie Van Tassel and the students of Gavilan College
CONTENTS
PREFACE v CE2 Using Uninitialized Variables 33
SPECIAL FEATURES xxiv PT1 Choose Descriptive Variable Names 33
PT2 Do Not Use Magic Numbers 34
QUICK REFERENCE xxviii
ST1 Numeric Types in C++ 34
ST2 Numeric Ranges and Precisions 35
1 INTRODUCTION 1 ST3 Defining Variables with auto 35

1.1 What Is Programming?   2 2.2 Arithmetic  36


Arithmetic Operators  36
1.2 The Anatomy of a Computer   3
Increment and Decrement   36
C&S Computers Are Everywhere 5
Integer Division and Remainder   36
1.3 Machine Code and Programming Converting Floating-Point Numbers to
Languages  5 Integers  37
C&S Standards Organizations 7 Powers and Roots   38
CE3 Unintended Integer Division 39
1.4 Becoming Familiar with Your
CE4 Unbalanced Parentheses 40
Programming Environment   7
CE5 Forgetting Header Files 40
PT1 Backup Copies 10
CE6 Roundoff Errors 41
1.5 Analyzing Your First Program   11
PT3 Spaces in Expressions 42
CE1 Omitting Semicolons 13
ST4 Casts 42
ST1 Escape Sequences 13
ST5 Combining Assignment and Arithmetic 42
1.6 Errors  14 C&S The Pentium Floating-Point Bug 43
CE2 Misspelling Words 15
2.3 Input and Output   44
1.7 PROBLEM SOLVING Algorithm Design   16 Input  44
The Algorithm Concept   16 Formatted Output  45
An Algorithm for Solving an Investment
Problem  17
2.4 PROBLEM SOLVING First Do It By Hand   47
Pseudocode  18 WE1 Computing Travel Time 48
From Algorithms to Programs   19 HT1 Carrying out Computations 48
HT1 Describing an Algorithm with WE2 Computing the Cost of Stamps 51
Pseudocode 19 2.5 Strings  51
WE1 Writing an Algorithm for Tiling a Floor 21 The string Type  51
Concatenation  52
2 FUNDAMENTAL DATA String Input  52
String Functions  52
TYPES 25
C&S International Alphabets and Unicode 55
2.1 Variables  26
Variable Definitions  26 3 DECISIONS 59
Number Types  28
Variable Names    29 3.1 The if Statement   60
The Assignment Statement   30 CE1 A Semicolon After the if Condition 63
Constants  31 PT1 Brace Layout 63
Comments  31
PT2 Always Use Braces 64
CE1 Using Undefined Variables 33
PT3 Tabs 64

xix
xx Contents

PT4 Avoid Duplication in Branches 65 4.4 The do Loop   111


ST1 The Conditional Operator 65 PT4 Flowcharts for Loops 111
3.2 Comparing Numbers and Strings   66 4.5 Processing Input   112
CE2 Confusing = and == 68 Sentinel Values  112
CE3 Exact Comparison of Floating-Point Reading Until Input Fails   114
Numbers 68 ST1 Clearing the Failure State 115
PT5 Compile with Zero Warnings 69 ST2 The Loop-and-a-Half Problem and the
ST2 Lexicographic Ordering of Strings 69 break Statement 116
HT1 Implementing an if Statement 70 ST3 Redirection of Input and Output 116
WE1 Extracting the Middle 72 4.6 PROBLEM SOLVING Storyboards  117
C&S Dysfunctional Computerized Systems 72
4.7 Common Loop Algorithms   119
3.3 Multiple Alternatives   73
Sum and Average Value   119
ST3 The switch Statement 75 Counting Matches  120
3.4 Nested Branches   76 Finding the First Match   120
CE4 The Dangling else Problem 79 Prompting Until a Match is Found   121
PT6 Hand-Tracing 79 Maximum and Minimum   121
Comparing Adjacent Values   122
3.5 PROBLEM SOLVING Flowcharts  81
HT1 Writing a Loop 123
3.6 PROBLEM SOLVING Test Cases   83 WE1 Credit Card Processing 126
PT7 Make a Schedule and Make Time for
Unexpected Problems 84 4.8 Nested Loops   126
WE2 Manipulating the Pixels in an Image 129
3.7 Boolean Variables and Operators   85
CE5 Combining Multiple Relational Operators 88
4.9 PROBLEM SOLVING Solve a Simpler
CE6 Confusing && and || Conditions 88
Problem First   130
ST4 Short-Circuit Evaluation of Boolean 4.10 Random Numbers and Simulations   134
Operators 89 Generating Random Numbers   134
ST5 De Morgan’s Law 89 Simulating Die Tosses   135
3.8 APPLICATION Input Validation   90 The Monte Carlo Method   136
C&S Artificial Intelligence 92 C&S Digital Piracy 138

4 LOOPS 95 5 FUNCTIONS 141

4.1 The while Loop   96 5.1 Functions as Black Boxes   142


CE1 Infinite Loops 100 5.2 Implementing Functions   143
CE2 Don’t Think “Are We There Yet?” 101 PT1 Function Comments 146
CE3 Off-by-One Errors 101 5.3 Parameter Passing   146
C&S The First Bug 102 PT2 Do Not Modify Parameter Variables 148
4.2 PROBLEM SOLVING Hand-Tracing  103 5.4 Return Values   148
4.3 The for Loop   106 CE1 Missing Return Value 149
PT1 Use for Loops for Their Intended ST1 Function Declarations 150
Purpose Only 109 HT1 Implementing a Function 151
PT2 Choose Loop Bounds That Match WE1 Generating Random Passwords 152
Your Task 110 WE2 Using a Debugger 152
PT3 Count Iterations 110
5.5 Functions Without Return Values   153
Contents xxi

5.6 PROBLEM SOLVING Reusable Functions   154 6.4 PROBLEM SOLVING Adapting
5.7 PROBLEM SOLVING Stepwise Algorithms  198
Refinement  156 HT1 Working with Arrays 200

PT3 Keep Functions Short 161 WE1 Rolling the Dice 203

PT4 Tracing Functions 161 6.5 PROBLEM SOLVING Discovering Algorithms by


PT5 Stubs 162 Manipulating Physical Objects   203
WE3 Calculating a Course Grade 163 6.6 Two-Dimensional Arrays   206
5.8 Variable Scope and Global Variables   163 Defining Two-Dimensional Arrays   207
PT6 Avoid Global Variables 165 Accessing Elements  207
5.9 Reference Parameters   165 Locating Neighboring Elements   208
Computing Row and Column Totals   208
PT7 Prefer Return Values to Reference
Parameters 169 Two-Dimensional Array Parameters   210
CE2 Omitting the Column Size of a Two-
ST2 Constant References 170
Dimensional Array Parameter 212
5.10 Recursive Functions (Optional)   170 WE2 A World Population Table 213
HT2 Thinking Recursively 173
6.7 Vectors  213
C&S The Explosive Growth of Personal
Computers 174 Defining Vectors  214
Growing and Shrinking Vectors   215
Vectors and Functions   216
6 ARRAYS AND VECTORS 179 Vector Algorithms  216
Two-Dimensional Vectors  218
6.1 Arrays  180
PT2 Prefer Vectors over Arrays 219
Defining Arrays  180 ST5 The Range-Based for Loop 219
Accessing Array Elements   182
Partially Filled Arrays   183
CE1 Bounds Errors 184 7 POINTERS AND
PT1 Use Arrays for Sequences of Related STRUCTURES 223
Values 184
C&S Computer Viruses 185 7.1 Defining and Using Pointers   224
Defining Pointers  224
6.2 Common Array Algorithms   185
Accessing Variables Through Pointers   225
Filling  186 Initializing Pointers  227
Copying   186
CE1 Confusing Pointers with the Data to Which
Sum and Average Value   186 They Point 228
Maximum and Minimum   187
PT1 Use a Separate Definition for Each Pointer
Element Separators  187 Variable 229
Counting Matches  187
ST1 Pointers and References 229
Linear Search  188
Removing an Element   188 7.2 Arrays and Pointers   230
Inserting an Element   189 Arrays as Pointers    230
Swapping Elements  190 Pointer Arithmetic  230
Reading Input  191 Array Parameter Variables Are Pointers   232
ST1 Sorting with the C++ Library 192 ST2 Using a Pointer to Step Through
ST2 A Sorting Algorithm 192 an Array 233
ST3 Binary Search 193 CE2 Returning a Pointer to a Local Variable 234
PT2 Program Clearly, Not Cleverly 234
6.3 Arrays and Functions   194
ST3 Constant Pointers 235
ST4 Constant Array Parameters 198
xxii Contents

7.3 C and C++ Strings   235 8.5 Command Line Arguments   274
The char Type  235 C&S Encryption Algorithms 277
C Strings  236 HT1 Processing Text Files 278
Character Arrays  237 WE1 Looking for for Duplicates 281
Converting Between C and C++ Strings   237
8.6 Random Access and Binary Files   281
C++ Strings and the [] Operator  238
Random Access  281
ST4 Working with C Strings 238
Binary Files  282
7.4 Dynamic Memory Allocation   240 Processing Image Files   282
CE3 Dangling Pointers 242 C&S Databases and Privacy 286
CE4 Memory Leaks 243

7.5 Arrays and Vectors of Pointers   243 9 CLASSES 289


7.6 PROBLEM SOLVING Draw a Picture   246
HT1 Working with Pointers 248 9.1 Object-Oriented Programming   290
WE1 Producing a Mass Mailing 249 9.2 Implementing a Simple Class   292
C&S Embedded Systems 250 9.3 Specifying the Public Interface of
7.7 Structures  250 a Class   294
Structured Types  250 CE1 Forgetting a Semicolon 296
Structure Assignment and Comparison   251 9.4 Designing the Data Representation   297
Functions and Structures   252
9.5 Member Functions   299
Arrays of Structures   252
Structures with Array Members   253 Implementing Member Functions   299
Nested Structures  253 Implicit and Explicit Parameters   299
Calling a Member Function from a
7.8 Pointers and Structures   254 Member Function  301
Pointers to Structures   254 PT1 All Data Members Should Be Private; Most
Structures with Pointer Members   255 Member Functions Should Be Public 303
ST5 Smart Pointers 256 PT2 const Correctness 303

9.6 Constructors  304
8 STREAMS 259 CE2 Trying to Call a Constructor 306
ST1 Overloading 306
8.1 Reading and Writing Text Files   260 ST2 Initializer Lists 307
Opening a Stream   260 ST3 Universal and Uniform Initialization
Reading from a File   261 Syntax 308
Writing to a File   262
9.7 PROBLEM SOLVING Tracing Objects   308
A File Processing Example   262
HT1 Implementing a Class 310
8.2 Reading Text Input   265 WE1 Implementing a Bank Account Class 314
Reading Words  265 C&S Electronic Voting Machines 314
Reading Characters  266
9.8 PROBLEM SOLVING Discovering
Reading Lines  267
Classes  315
CE1 Mixing >> and getline Input 268
PT3 Make Parallel Vectors into Vectors of
ST1 Stream Failure Checking 269
Objects 317
8.3 Writing Text Output   270
9.9 Separate Compilation   318
ST2 Unicode, UTF-8, and C++ Strings 272
9.10 Pointers to Objects   322
8.4 Parsing and Formatting Strings   273
Dynamically Allocating Objects   322
The -> Operator  323
The this Pointer  324
Contents xxiii

9.11 PROBLEM SOLVING Patterns for Appendix A RESERVED WORD SUMMARY   A-1
Object Data   324 Appendix B OPERATOR SUMMARY  A-3
Keeping a Total   324 Appendix C CHARACTER CODES  A-5
Counting Events  325
Appendix D C++ LIBRARY SUMMARY   A-8
Collecting Values  326
Managing Properties of an Object   326 Appendix E C++ LANGUAGE CODING
Modeling Objects with Distinct States   327 GUIDELINES  A-11
Describing the Position of an Object   328 Appendix F NUMBER SYSTEMS AND BIT AND SHIFT
C&S Open Source and Free Software 329 OPERATIONS (E-TEXT ONLY)

10 INHERITANCE 333 GLOSSARY  G-1


INDEX  I-1
10.1 Inheritance Hierarchies   334 CREDITS  C-1
10.2 Implementing Derived Classes   338
CE1 Private Inheritance 341
CE2 Replicating Base-Class Members 341
PT1 Use a Single Class for Variation in Values,
ALPHABETICAL LIST OF SYNTAX BOXES
Inheritance for Variation in Behavior 342 Assignment  30
ST1 Calling the Base-Class Constructor 342 C++ Program  12
10.3 Overriding Member Functions   343 Class Definition   295
Comparisons  67
CE3 Forgetting the Base-Class Name 345
Constructor with Base-Class Initializer   342
10.4 Virtual Functions and Polymorphism   346 Defining an Array   181
The Slicing Problem   346 Defining a Structure   251
Pointers to Base and Derived Classes   347 Defining a Vector   213
Virtual Functions  348 Derived-Class Definition  340
Polymorphism  349 Dynamic Memory Allocation   240
PT2 Don’t Use Type Tags 352 for Statement  106
CE4 Slicing an Object 352 Function Definition  145
CE5 Failing to Override a Virtual Function 353 if Statement  61
ST2 Virtual Self-Calls 354 Input Statement  44
HT1 Developing an Inheritance Hierarchy 354 Member Function Definition   301
WE1 Implementing an Employee Hierarchy for Output Statement  13
Payroll Processing 359
Pointer Syntax  226
C&S Who Controls the Internet? 360
Two-Dimensional Array Definition   207
Variable Definition  27
while Statement  97
Working with File Streams   262
xxiv Special Features

How Tos
C H AP TE R Common and
Errors
Worked Examples
© Steve Simzer/iStockphoto.

© Tom Horyn/iStockphoto.

1 Introduction © Scott Harms/iStockphoto.


Omitting Semicolons 13 Describing an Algorithm
Misspelling Words 15 with Pseudocode 19
Writing an Algorithm for
Tiling a Floor 21

2 Fundamental Using Undefined Variables 33 Computing Travel Time 48


Using Uninitialized Variables 33 Carrying out Computations 48
Data Types
Unintended Integer Division 39 Computing the Cost of Stamps 51
Unbalanced Parentheses 40
Forgetting Header Files 40
Roundoff Errors 41

3 Decisions A Semicolon After the if Implementing an if Statement 70


Condition 63 Extracting the Middle 72
Confusing = and == 68
Exact Comparison of
Floating-Point Numbers 68
The Dangling else Problem 79
Combining Multiple
Relational Operators 88
Confusing && and || Conditions 88

4 Loops Infinite Loops 100 Writing a Loop 123


Don’t Think “Are We There Yet?” 101 Credit Card Processing 126
Off-by-One Errors 101 Manipulating the Pixels
in an Image 129

5 Functions Missing Return Value 149 Implementing a Function 151


Generating Random Passwords 152
Using a Debugger 152
Calculating a Course Grade 163
Thinking Recursively 173
Special Features xxv

Programming Computing &


Special Topics
Tips Society
© MacDaddy/Dreamstime.com. © Nathan Winter/iStockphoto. © Mishella/Dreamstime.com.
Backup Copies 10 Escape Sequences 13 Computers Are Everywhere 5
Standards Organizations 7

Choose Descriptive Numeric Types in C++ 34 The Pentium Floating-Point Bug 43


Variable Names 33 Numeric Ranges and Precisions 35 International Alphabets
Do Not Use Magic Numbers 34 Defining Variables with auto 35 and Unicode 55
Spaces in Expressions 42 Casts 42
Combining Assignment and
Arithmetic 42

Brace Layout 63 The Conditional Operator 65 Dysfunctional Computerized


Always Use Braces 64 Lexicographic Ordering Systems 72
Tabs 64 of Strings 69 Artificial Intelligence 92
Avoid Duplication in Branches 65 The switch Statement 75
Compile with Zero Warnings 69 Short-Circuit Evaluation of
Boolean Operators 89
Hand-Tracing 79
De Morgan’s Law 89
Make a Schedule and Make Time
for Unexpected Problems 84

Use for Loops for Their Clearing the Failure State 115 The First Bug 102
Intended Purpose Only 109 The Loop-and-a-Half Problem Digital Piracy 138
Choose Loop Bounds That and the break Statement 116
Match Your Task 110 Redirection of Input and Output 116
Count Iterations 110
Flowcharts for Loops 111

Function Comments 146 Function Declarations 150 The Explosive Growth of


Do Not Modify Parameter Constant References 170 Personal Computers 174
Variables 148
Keep Functions Short 161
Tracing Functions 161
Stubs 162
Avoid Global Variables 165
Prefer Return Values to
Reference Parameters 169
xxvi Special Features

How Tos
C H AP TE R Common and
Errors
Worked Examples
© Steve Simzer/iStockphoto.

© Tom Horyn/iStockphoto.

6 Arrays and Vectors © Scott Harms/iStockphoto.


Bounds Errors 184 Working with Arrays 200
Omitting the Column Size of Rolling the Dice 203
a Two-Dimensional A World Population Table 213
Array Parameter 212

7 Pointers and Structures Confusing Pointers with the Working with Pointers 248
Data to Which They Point 228 Producing a Mass Mailing 249
Returning a Pointer to a
Local Variable 234
Dangling Pointers 242
Memory Leaks 243

8 Streams Mixing >> and getline Input 268 Processing Text Files 278
Looking for for Duplicates 281

9 Classes Forgetting a Semicolon 296 Implementing a Class 310


Trying to Call a Constructor 306 Implementing a Bank
Account Class 314

10 Inheritance Private Inheritance 341 Developing an Inheritance


Replicating Base-Class Hierarchy 354
Members 341 Implementing an Employee
Forgetting the Base-Class Name 345 Hierarchy for Payroll
Processing 359
Slicing an Object 352
Failing to Override a
Virtual Function 353
Special Features xxvii

Programming Computing &


Special Topics
Tips Society
© MacDaddy/Dreamstime.com. © Nathan Winter/iStockphoto. © Mishella/Dreamstime.com.
Use Arrays for Sequences Sorting with the C++ Library 192 Computer Viruses 185
of Related Values 184 A Sorting Algorithm 192
Prefer Vectors over Arrays 219 Binary Search 193
Constant Array Parameters 198
The Range-Based for Loop 219

Use a Separate Definition Pointers and References 229 Embedded Systems 250
for Each Pointer Variable 229 Using a Pointer to Step
Program Clearly, Not Cleverly 234 Through an Array 233
Constant Pointers 235
Working with C Strings 238
Smart Pointers 256

Stream Failure Checking 269 Encryption Algorithms 277


Unicode, UTF-8, and Databases and Privacy 286
C++ Strings 272

All Data Members Should Be Private; Overloading 306 Electronic Voting Machines 314
Most Member Functions Initializer Lists 307 Open Source and
Should Be Public 303 Universal and Uniform Free Software 329
const Correctness 303 Initialization Syntax 308
Make Parallel Vectors into
Vectors of Objects 317

Use a Single Class for Variation in Calling the Base-Class Who Controls the Internet? 360
Values, Inheritance for Variation Constructor 342
in Behavior 342 Virtual Self-Calls 354
Variable and Constant Definitions Conditional Statement
Type Name Initial value Condition

int cans_per_pack = 6; if (floor >= 13)


{ Executed when
actual_floor = floor - 1; condition is true
const double CAN_VOLUME = 0.335;
}
else if (floor >= 0) Second condition (optional)
{
Mathematical Operations actual_floor = floor;
}
#include <cmath> else
pow(x, y) Raising to a power x y { Executed when all
sqrt(x) Square root x cout << "Floor negative" << endl; conditions are false
} (optional)
log10(x) Decimal log log10(x)
abs(x) Absolute value |x|
String Operations
sin(x)
cos(x) Sine, cosine, tangent of x (x in radians) #include <string>
string s = "Hello";
tan(x) int n = s.length(); // 5
string t = s.substr(1, 3); // "ell"
string c = s.substr(2, 1); // "l"
Selected Operators and Their Precedence char ch = s[2]; // 'l'
(See Appendix B for the complete list.) for (int i = 0; i < s.length(); i++)
{
[] Array element access string c = s.substr(i, 1);
++ -- ! Increment, decrement, Boolean not or char ch = s[i];
* / % Multiplication, division, remainder Process c or ch
}
+ - Addition, subtraction
< <= > >= Comparisons
== != Equal, not equal Function Definitions
&& Boolean and Return type Parameter type and name
|| Boolean or
double cube_volume(double side_length)
= Assignment {
double vol = side_length * side_length * side_length;
return vol;
Loop Statements } Exits function and returns result.
Reference parameter
Condition
void deposit(double& balance, double amount)
while (balance < TARGET) {
{ balance = balance + amount;
year++; Executed }
while condition Modifies supplied argument
balance = balance * (1 + rate / 100);
} is true Arrays
Initialization Condition Update Element type Length
for (int i = 0; i < 10; i++) int numbers[5];
{ int squares[] = { 0, 1, 4, 9, 16 };
cout << i << endl; int magic_square[4][4] =
} {
{ 16, 3, 2, 13 },
{ 5, 10, 11, 8 },
Loop body executed { 9, 6, 7, 12 },
do at least once { 4, 15, 14, 1 }
{ };
cout << "Enter a positive integer: ";
cin >> input; for (int i = 0; i < size; i++)
} {
while (input <= 0); Process numbers[i]
}
Vectors Range-based for Loop
#include <vector> An array, vector, or other container (C++ 11)
Element type Initial values (C++ 11)
for (int v : values)
vector<int> values = { 0, 1, 4, 9, 16 }; {
cout << v << endl;
Initially empty }
vector<string> names;
Add elements to the end
names.push_back("Ann");
names.push_back("Cindy"); // names.size() is now 2
Output Manipulators
names.pop_back(); // Removes last element #include <iomanip>

names[0] = "Beth"; // Use [] for element access endl Output new line
fixed Fixed format for floating-point
setprecision(n) Number of digits after decimal point
Pointers for fixed format
int n = 10; setw(n) Field width for the next item
int* p = &n; // p set to address of n left Left alignment (use for strings)
*p = 11; // n is now 11 right Right alignment (default)
20300 setfill(ch) Fill character (default: space)
n = 11 Memory address

p = 20300
Class Definition
int a[5] = { 0, 1, 4, 9, 16 }; class BankAccount
p = a; // p points to start of a {
*p = 11; // a[0] is now 11 public:
Constructor declaration
p++; // p points to a[1] BankAccount(double amount);
void deposit(double amount); Member function declaration
p[2] = 11; // a[3] is now 11
double get_balance() const;
Accessor member function
...
a = 11 20400 private: Data member
1 double balance;
4 };
11
void BankAccount::deposit(double amount) Member function
16
{ definition
balance = balance + amount;
p = 20404 }

Input and Output Inheritance


#include <iostream> Derived class Base class
cin >> x; // x can be int, double, string
cout << x; class CheckingAccount : public BankAccount
{
while (cin >> x) { Process x } public: Member function
if (cin.fail()) // Previous input failed void deposit(double amount); overrides base class
private:
Added data member
int transactions;
}; in derived class
#include <fstream>
string filename = ...;
ifstream in(filename); void CheckingAccount::deposit(double amount)
ofstream out("output.txt"); { Calls base class
BankAccount::deposit(amount); member function
string line; getline(in, line); transactions++;
char ch; in.get(ch); }
CHAPTER 1
INTRODUCTION

CHAPTER GOALS

To learn about the architecture of


computers
To learn about machine languages and
higher-level programming languages © JanPietruszka/iStockphoto.
To become familiar with your compiler
To compile and run your first C++ program
To recognize compile-time and run-time errors
To describe an algorithm with pseudocode
To understand the activity of programming

CHAPTER CONTENTS

1.1 WHAT IS PROGRAMMING? 2 1.6 ERRORS 14


CE 2 Misspelling Words 15
1.2 THE ANATOMY OF A COMPUTER 3
C&S Computers Are Everywhere 5 1.7 PROBLEM SOLVING: ALGORITHM
DESIGN 16
1.3 MACHINE CODE AND PROGRAMMING
HT 1 Describing an Algorithm with
LANGUAGES 5
Pseudocode 19
C&S Standards Organizations 7
WE1 Writing an Algorithm for Tiling a Floor 21
1.4 BECOMING FAMILIAR WITH YOUR
PROGRAMMING ENVIRONMENT 7
PT 1 Backup Copies 10

1.5 ANALYZING YOUR FIRST


PROGRAM 11
SYN C++ Program 12
SYN Output Statement 13
CE 1 Omitting Semicolons 13
ST 1 Escape Sequences 13

1
Just as you gather tools, study a project, and make a plan for
tackling it, in this chapter you will gather up the basics you
need to start learning to program. After a brief introduction
to computer hardware, software, and programming in
general, you will learn how to write and run your first
C++ program. You will also learn how to diagnose and
fix programming errors, and how to use pseudocode to
describe an algorithm—a step-by-step description of how
to solve a problem—as you plan your programs.

JanPietruszka/iStockphoto.

1.1 What Is Programming?


Computers
You have probably used a computer for work or fun. Many people use computers for
execute very basic everyday tasks such as electronic banking or writing a term paper. Computers are
instructions in rapid good for such tasks. They can handle repetitive chores, such as totaling up numbers
succession.
or placing words on a page, without getting bored or exhausted.
The flexibility of a computer is quite an amazing phenomenon. The same machine
can balance your checkbook, print your term paper, and play a game. In contrast,
other machines carry out a much nar­rower range of tasks; a car drives and a toaster
toasts. Computers can carry out a wide range of tasks because they execute different
programs, each of which directs the computer to work on a specific task.
A computer program
The computer itself is a machine that stores data (numbers, words, pictures), inter-
is a sequence acts with devices (the monitor, the sound system, the printer), and executes programs.
of instructions A computer program tells a computer, in minute detail, the sequence of steps that are
and decisions.
needed to fulfill a task. The physical computer and peripheral devices are collectively
called the hardware. The programs the computer executes are called the software.
Today’s computer programs are so sophisticated that it is hard to believe that they
are composed of extremely primitive operations. A typical operation may be one of
the following:
• Put a red dot at this screen position.
• Add up these two numbers.
• If this value is negative, continue the program at a certain instruction.
The computer user has the illusion of smooth interaction because a program contains
a huge number of such operations, and because the computer can execute them at
great speed.
Programming is the
The act of designing and implementing computer programs is called program-
act of designing ming. In this book, you will learn how to program a computer—that is, how to direct
and implementing the computer to execute tasks.
computer programs.
To write a computer game with motion and sound effects or a word processor
that supports fancy fonts and pictures is a complex task that requires a team of many
highly skilled programmers. Your first programming efforts will be more mundane.
The concepts and skills you learn in this book form an important foundation, and
you should not be disappointed if your first programs do not rival the sophis­ticated
software that is familiar to you. Actually, you will find that there is an immense thrill
even in sim­ple programming tasks. It is an amazing experience to see the computer
precisely and quickly carry out a task that would take you hours of drudgery, to

2
1.2 The Anatomy of a Computer 3

make small changes in a program that lead to immediate improvements, and to see the
computer become an extension of your mental powers.

1.2 The Anatomy of a Computer


To understand the programming process, you need to have a rudimentary under-
standing of the building blocks that make up a computer. We will look at a personal
computer. Larger computers have faster, larger, or more powerful components, but
they have fundamentally the same design.
At the heart of the computer lies the central processing unit (CPU) (see Figure 1).
It consists of a sin­gle chip, or a small number of chips. A computer chip (integrated
circuit) is a component with a plastic or metal housing, metal connectors, and inside
wiring made principally from silicon. For a CPU chip, the inside wiring is enor-
mously complicated. For example, the Pentium chip (a popular CPU for personal
computers at the time of this writing) is composed of several million structural ele-
The central
ments, called transistors.
processing unit (CPU) The CPU performs program control and
performs program data processing. That is, the CPU locates and
control and
data processing.
executes the program instructions; it carries out
arithmetic operations such as addition, sub-
traction, multiplication, and division; it fetches
data from external memory or devices and
stores data back.
Storage devices
There are two kinds of storage. Primary
include memory and storage, or memory, is made from electronic
secondary storage. circuits that can store data, provided they are
supplied with electric power. Secondary stor-
age, usually a hard disk (see Figure 2) or a
solid-state drive, provides slower and less © Amorphis/iStockphoto.
expensive storage that persists without electric-
ity. A hard disk consists of rotating platters, Figure 1 Central Processing Unit
which are coated with a mag­netic material. A
solid-state drive uses electronic components that can retain information without
power, and without moving parts.

Figure 2
A Hard Disk © PhotoDisc, Inc./Getty Images.
Exploring the Variety of Random
Documents with Different Content
surpassèrent tous les autres sujets de Charles dans la guerre et
dans les arts.
René fut plutôt un bon père qu’un grand roi; malgré les malheurs
qui assaillirent son long règne, il n’y eut pas à cette époque de sujets
plus heureux que les siens. Ils le prirent pour modèle, imitèrent ses
mœurs simples et bonnes. Jusque-là comprimée, leur gaîté se
déploya et se répandit du palais du souverain jusque dans les
chaumières des artisans. Toutes les haines, toutes les divisions
disparurent et la nation ne forma qu’une seule famille. Depuis, bien
des troubles l’ont agitée, mais l’impression laissée par ce règne si
paternel ne s’est jamais effacée entièrement. Si l’amour de sa
liberté, qui lui a fait prendre les armes chaque fois qu’elle l’a crue
menacée, a laissé, tout d’abord, dans les mœurs une grande
susceptibilité et une apparence de rudesse, on ne peut nier que
l’éducation et l’instruction ne les aient ensuite sensiblement
adoucies.
Sous la monarchie, l’autorité paternelle était plus entière en
Provence que dans les autres provinces françaises. Le chef de
famille exerçait une véritable charge publique, son pouvoir était la
base de l’état social. Il gouvernait ses enfants aussi bien que toute la
parenté. Les membres de la famille le consultaient dans toutes les
grandes circonstances: il les convoquait et tenait conseil avec eux,
rien ne se faisait sans son approbation. A sa mort, l’aîné des enfants
mâles héritait de ses droits. Les généalogies, les titres, les
délibérations, les actes de mariage, de partage, les limites des
propriétés, l’inventaire des meubles, enfin tout ce qui pouvait avoir
un intérêt familial, se trouvait consigné dans un grand registre
appelé le Livre de raison. Ce livre, ainsi que les papiers, bijoux et
argent, était enfermé dans un coffre en bois sculpté, dont le chef
seul avait la clef. C’était le bréviaire de la maison; on avait pour lui
un grand respect, on le consultait comme un oracle: il réglait la
conduite à tenir. Devant cette sorte de Code, combien de procès et
de dissensions avaient expiré! il faisait loi, chacun s’inclinait devant
son texte. Le père vivant, c’était lui qui en signait tous les articles,
écrits sous sa dictée par le fils aîné.
Depuis la Révolution, l’usage des Livres de raison a disparu et la
puissance du père de famille a perdu une grande partie de son
absolutisme. Les idées nouvelles ont apporté de si profonds
changements dans la vie du foyer qu’elle n’a plus que de lointains
rapports avec ce qu’elle était autrefois.
Les femmes ne parlaient à leurs maris qu’avec respect et
soumission. Elles sortaient peu et ne se mêlaient que des affaires
intérieures. A cet égard, elles avaient tous les droits et exerçaient
une autorité souveraine. Quant aux affaires du dehors, on les
consultait peu et elles n’y prenaient aucune part. Il n’est pas difficile
de reconnaître dans ce rôle effacé une importation des premiers
conquérants de la Gaule méridionale et l’application du droit romain,
qui avait fait de l’épouse une sorte de vassale. La compagne et
l’égale de l’homme, qui a toujours partagé ses labeurs et ses peines,
au lieu de partager son autorité était élevée dans les principes de
l’obéissance passive et dans une obstruction des facultés
intellectuelles qui ne lui laissait même pas le mérite de la
soumission. Abandonnée sans défense aux mains de l’homme, son
sort dépendait entièrement de l’affection et de la bienveillance, ou
des sentiments contraires qu’elle pouvait provoquer chez lui. Cette
situation, indigne de notre époque, s’est largement modifiée et tend
de nos jours à une transformation totale qui établira l’égalité entre
les sexes, et relèvera la dignité de l’un sans compromettre les
intérêts de l’autre.
L’emploi du temps était ainsi réglé: on se levait avec le jour, on
déjeunait à huit heures avec une tasse de lait coupé d’une infusion
de sauge; plus tard, on y substitua le cacao, puis le chocolat et aussi
le café. Le dîner avait lieu à midi. Il se composait d’un potage au
mouton bouilli, ou d’une soupe au poisson appelée Bouillabaisse,
puis de légumes. Le dimanche était marqué par un petit extra; on
ajoutait au repas une entrée ou une tourte faite en famille. Pour
dessert, des fruits de saison, du fromage ou des confitures. A quatre
heures, on donnait à goûter aux enfants, soit, en été, une tranche de
pastèque ou de melon ou une tartine de Coudounat. A huit heures,
on servait le souper, qui se composait d’une carbonade, les jours
gras, de poissons frits ou bouillis, les jours maigres, de rôti et de
salade, le dimanche. Les hommes seuls buvaient du vin; il n’était
permis aux jeunes garçons d’user de cette boisson qu’après avoir
atteint l’âge de douze ans, c’est-à-dire après avoir fait leur première
communion.
Pendant les soirées d’hiver, le père de famille se faisait apporter
le Livre de raison et le fils aîné en donnait lecture. Dans toutes les
maisons un peu aisées, il y avait une grande pièce destinée aux
réunions familiales. Ce n’est qu’à partir du règne du roi René qu’on y
construisit une grande cheminée, dont le manteau très élevé
permettait à chacun de prendre place sur les côtés où des bancs
étaient disposés. Plus tard, sous François Ier, l’usage du jeu de
cartes se répandit, et c’était surtout après le repas du soir et autour
de cette cheminée monumentale qu’on jouait à la Comète, appelée
en provençal la Touco, à l’Esté et à l’Estachin, qui ont quelques
rapports avec l’Écarté. Plus tard encore, ce fut la mode de
l’Impériale et enfin du Piquet. Les femmes jouaient à la Cadrète.
Dans la haute société, on avait les Dés, le Trictrac, les Échecs, les
Dames et le Reversi. A neuf heures et demie, le chef de famille
faisait la prière à haute voix, tous suivaient mentalement: c’était la fin
de la journée. Maintenant, avec la facilité des voyages, les relations
entre les divers peuples se sont multipliées et les usages locaux, les
mœurs et les coutumes ont totalement changé. La vie familiale,
comme la vie publique, s’est unifiée. Il y a même une tendance
assez marquée dans le Midi à accepter sans réserve tout ce qui se
fait à Paris, tant au point de vue moral et intellectuel qu’au point de
vue physique. Il faut y voir un résultat de la pression exercée sur les
populations méridionales par une centralisation politique et
administrative poussée jusqu’à ses dernières limites, imposée par la
Convention et l’Empire, continuée depuis, et fatale à l’esprit
d’initiative aussi bien qu’à l’intelligence et au courage. Cette lutte
inégale contre une administration armée de la loi devait fatalement
greffer sur le caractère des habitants une passivité absolument
contraire à leur nature primitive. Cependant, leur cerveau est loin
d’être atrophié; il est resté ouvert aux nobles sentiments, à la
science, aux progrès modernes, et il serait à souhaiter qu’une sage
décentralisation leur permît une existence plus autonome qui
produirait des résultats féconds. Des pouvoirs plus étendus donnés
aux conseils généraux, surtout au point de vue financier et
économique, seraient le point de départ d’une évolution bienfaisante
et réparatrice. Une noble émulation surgirait de ces sages mesures
dont profiterait la France entière. Le commerce, cette clef d’or des
nations, ne tarderait pas à reprendre l’importance qu’il avait avant
d’être entravé par des barrières fiscales qui éloignent de nos ports
les navires étrangers, lesquels, grâce à l’échange des
marchandises, sont de véritables instruments de travail et de
richesse. L’industrie, les arts et les lettres puiseraient aux sources de
cette liberté une force d’expansion qui leur rendrait tout leur éclat,
avec la brillante renommée qu’ils ont perdue au détriment de tous.

La Vie sociale.—Sous les comtes de Provence, tous les chefs


de famille étaient appelés à prendre part aux affaires publiques, dont
les charges étaient gratuites. La noblesse, le clergé, le tiers-état
avaient leurs représentants aux États provinciaux. A Marseille, le
bourdon des Accoules se faisait entendre et annonçait l’heure de
l’assemblée, que l’on appelait le Conseil et qui se tenait toujours le
dimanche ou un jour férié. Le peuple se rassemblait sur la place du
Palais et se constituait en Parlement. Le podestat ou les consuls
délibéraient avec le corps municipal et paraissaient ensuite sur le
balcon du palais pour exposer au peuple les résolutions prises.
Celui-ci approuvait par des acclamations, ou rejetait par des cris
aigus et des protestations bruyantes. Le Parlement était fini, les
magistrats se rendaient en cortège à l’église et, le soir, présidaient
aux divertissements publics.
Aujourd’hui le peuple n’a que les lois qu’on lui donne; dans ce
temps-là, il avait celles qu’il voulait avoir.
Les affaires et le commerce se traitaient pendant la semaine, soit
à la Chambre dite de commerce, soit sur une place publique et à la
bourse.
La Chambre de commerce de Marseille, dont la fondation
remonte au 3 novembre 1650, se composait de douze membres
choisis parmi les armateurs et les négociants les plus honorables,
les plus actifs et les plus intelligents. Elle ne tarda pas à acquérir une
importance telle que l’État, dont elle servait les intérêts, crut devoir
lui prêter le secours de son autorité. L’exemple de Marseille fut
bientôt suivi par Dunkerque, Paris, Lyon et les villes les plus
importantes du royaume, qui créèrent à son instar des Chambres de
commerce. En 1791, l’Assemblée Nationale les supprima; elles
furent rétablies sous le Consulat, en l’an XI. Depuis, elles subirent
différentes modifications, mais les services qu’elles ont rendus et
qu’elles rendent encore en ont consacré l’utilité.
Parmi les usages locaux relatifs au commerce, on a conservé à
Marseille celui de certaines mesures anciennes, dont nous allons
donner l’énumération ainsi que la conversion exacte en valeurs du
système métrique décimal:
L’ancienne livre de Marseille compte pour 400 grammes;
L’ancienne canne, pour 8 palmes ou 2m,012;
La charge de blé, pour 160 litres; la charge se divise en 4
émines; l’émine, en 2 panaux, à 4 civadiers, à 2 picotins;
Le picotin égale 2lit,50;
La charge d’avoine, 240 litres;
La balle de farine, 122 kilogrammes et demi, poids établi, toile
perdue;
La millerolle, pour le vin et l’huile, équivaut à 64 litres;
La millerolle de vin se divise en 4 escandaux, à 15 pots, à 4
quarts ou pitchounes;
La millerolle d’huile se divise en 4 escandaux, à 40 quarterons.
Pour le tafia et le rhum, on évalue en veltes; la velte vaut 7 litres
60 centilitres.
Il semble qu’une certaine confusion dans les comptes, un
embarras dans les transactions devraient résulter de la coexistence
des anciennes mesures et des nouvelles. Il n’en est rien cependant,
tant les unes et les autres sont bien connues et en elles-mêmes et
dans leurs relations réciproques.

NOTES:
[19] Envies.
[20] Parrain crasseux.
[21] La mariée.
[22] Ce qui peut se traduire ainsi:
POUR UNE DÉCLARATION D’AMOUR

Belle, je vous présente le thym;


Vous savez qu’il est toujours beau,
Mais bien davantage quand il est fleuri.
Je vous aimerai toute ma vie.
DOUTE OU SOUPÇON

Belle, je vous présente la violette.


Vous êtes dans mon cœur toute seulette,
Mais, pour moi, il serait douloureux
Si dans votre cœur il y en avait deux.
PLAINTE

Je vous présente le romarin


Que ce matin je suis allé cueillir
Et que ce soir je vous apporte
Pour vous prouver que je vous aime.
Mais, belle, si vous ne m’aimez plus,
Rendez-moi mon gai romarin.

[23] Ce qui peut se traduire ainsi:


RUPTURE

Moi, je vous présente l’ortie;


Belle, vous ne serez plus mon amie.
Je vois que vous avez trop d’épines.
Mariez-vous avec un chardon.

[24] Gourdon de Genouillac, Histoire du Blason.


III

LA LANGUE PROVENÇALE AU XIXe SIÈCLE

Raynouard.—Fabre d’Olivet.—Diouloufet.—D’Astros.—Jasmin.—Moquin-Tandon,
etc.

Lorsque, à l’exemple des conciles les plus célèbres, la


Constituante décréta, le 14 janvier 1790, que la traduction des lois
serait faite dans les dialectes des provinces, elle n’ignorait pas que
la proscription des idiomes locaux est le moyen le plus puissant de
désagrégation nationale. Des sentiments blessés, de la liberté
outragée naît un foyer d’où peut partir l’étincelle des incendies
religieux et politiques les plus redoutables pour le pays. Cet acte,
non seulement de sagesse, mais aussi de haute politique, lui fut
probablement inspiré par l’exemple de l’Église, ramenée par
l’expérience à un sentiment plus exact de ses intérêts. En effet, cette
variété de langages, loin d’y nuire, aida, au contraire, à la formation
de l’unité religieuse, qui fit et fait encore sa force aujourd’hui.
La Convention fut moins libérale et partant moins clairvoyante.
Dans son désir bien manifeste de pousser à la centralisation du
pouvoir par tous les moyens, elle ne vit pas ou ne voulut pas voir un
danger dans la suppression brutale des idiomes locaux. Elle ne
songea pas que la langue provençale était l’histoire même de la
Provence et que l’on ne supprime pas l’histoire par un décret. Elle fut
cependant obligée de reconnaître son erreur lorsqu’elle fut saisie du
rapport de son Comité de Législation[25], qui concluait au rejet de sa
première décision[26], pour le plus grand bien de la nation et
l’apaisement des esprits, que cette mesure vexatoire avait excités au
plus haut degré.
Si le Consulat, par son décret du 27 prairial an II, imposa l’usage
exclusif de la langue française à tous les représentants de la
puissance nationale, du moins il les autorisait à transcrire en marge
les lois, décrets, arrêtés, dans l’idiome de la province, dont l’usage
oral persista. Ainsi rien ne put prévaloir contre la force irrésistible du
langage populaire et le provençal, né du Roman, devait, sous peu,
être l’objet d’études approfondies et de manifestations philologiques
qui attestèrent une fois de plus son rôle important dans la formation
de la langue française. Son influence sur l’italien, sur l’espagnol et
sur toute la littérature de l’Europe est trop évidente pour être
discutée et les traces qu’il a laissées dans l’histoire de la monarchie
lui donnent la consécration de la langue nationale.
Il était réservé au XIXe siècle de voir s’épanouir la renaissance du
provençal. Toute une pléiade de linguistes, de poètes, de
romanisants et de curieux jeta, par ses recherches et ses travaux,
un jour absolument nouveau sur cette langue qui, à la veille d’être
proscrite, s’affirmait avec une vigueur nouvelle, en dépit des
mesures arbitraires dont elle avait été si souvent frappée.
Parmi les promoteurs du mouvement, il faut citer, comme le
premier en date, au XIXe siècle, Raynouard.

Raynouard.—François-Juste-Marie Raynouard naquit à


Brignoles (Var), en 1761. Il fut assurément l’historien le plus
remarquable du dialecte provençal. Après avoir occupé très
honorablement sa place comme député à la Convention, il fut
poursuivi pour ses opinions, qui l’avaient classé parmi les Girondins.
Emprisonné, puis remis en liberté, il reprit sa robe d’avocat au
barreau de Draguignan. Grâce à son talent, il y fit une petite fortune
qui lui permit, dans ses loisirs, de se livrer à ses études favorites sur
la langue romane et les poésies des troubadours. Sa science et ses
patientes recherches dotèrent son pays d’un véritable monument
littéraire. Ses ouvrages font autorité sur la matière; ils sont devenus
classiques, et c’est à cette source que les érudits, les philologues et
les romanisants sont allés puiser leurs inspirations et se renseigner
sur la valeur des termes, l’orthographe et l’histoire des dialectes du
Midi. Les Templiers, tragédie qu’il donna en 1805, eurent le plus
grand succès. En 1807, il entra à l’Académie, dont il devint le
secrétaire perpétuel la même année. En 1813, comme membre du
Corps Législatif, ce fut lui qui rédigea la fameuse adresse qui
prépara la chute de l’Empire. Il siégea à la Chambre jusqu’en 1814.
Entre 1816 et 1824, il fit paraître successivement un Choix de
poésies originales des troubadours (6 volumes), auquel il joignit une
grammaire romane; et, en 1835, un Nouveau choix de poésies (2
volumes), suivi d’un lexique roman (6 volumes), qui ne fut terminé
qu’en 1844. On a de lui également: Recherches historiques sur les
Templiers (1813), Historique du droit municipal en France (1829) et
un certain nombre de poésies manuscrites.
Raynouard.

Si l’on tient compte des tracasseries auxquelles Raynouard fut en


butte; d’un labeur journalier auquel, soit comme député, soit comme
avocat, il ne pouvait se soustraire; d’une situation peu fortunée (car il
avait donné tout ce qu’il possédait pour sauver son frère d’une ruine
imminente): on avouera qu’il eut une existence bien remplie et le
double mérite de ne négliger aucune de ses occupations, et de se
distinguer dans toutes. En effet, pour se livrer à l’étude approfondie
de la langue romane, dont les éléments dispersés ne se prêtaient
guère aux recherches d’un homme si occupé, il lui fallait les grandes
qualités dont il fit preuve. Très vif dans son attitude et dans ses
paroles, il possédait néanmoins, au plus haut degré, la patience des
chercheurs. Laborieux et profondément érudit, il voulut tout voir par
lui-même, et, lorsqu’il fut convaincu de l’authenticité des textes, de
l’exactitude de ses renseignements, il s’attacha à ce travail
considérable: la reconstitution de la langue romane écrite et parlée
aux temps des troubadours. L’amour qu’il avait voué à sa terre
natale, à sa langue maternelle, aux usages, mœurs et coutumes de
son pays, lui assura le succès là où tout autre, moins bien armé et
moins persévérant, lassé par les difficultés et l’énormité de la tâche,
n’aurait obtenu aucun notable résultat.
Nous ne saurions mieux terminer la biographie de Raynouard
qu’en reproduisant le passage du discours de M. Villemain sur le prix
Monthyon accordé à Jasmin, en 1852, par l’Académie Française:
«... De nos jours, dit-il, l’Académie Française et, pour dire plus
encore, l’Institut national, peuvent-ils oublier que c’est un des leurs,
et des plus illustres, M. Raynouard, érudit, poète et législateur
citoyen, qui a rendu à l’Europe savante et à nous une moitié de
l’ancien esprit français, par la restitution de cette langue romane du
XIIIe siècle, dont les monuments s’étaient comme perdus sous la
gloire du français de Rouen et de Paris, du français de Corneille et
de Molière!...»

Fabre d’Olivet, qui naquit à Ganges (près Nîmes) et fut le


contemporain de Raynouard, voulut, lui aussi, s’inspirer du passé
pour chanter la Provence. Il ne nous appartient pas de juger ici
l’œuvre considérable de Fabre d’Olivet. Nous ne retiendrons parmi
ses nombreuses productions que celles dont la nature intéresse
notre étude. Ses poésies occitaniques, qu’à l’époque on a pu
confondre avec certaines œuvres des troubadours, ont un cachet
particulier. Elles ont classé l’auteur parmi ceux qui ont le mieux
reproduit, avec une précision qui n’exclut ni l’élégance de la phrase
ni l’expression poétique de la pensée, les sujets traités par les
premiers poètes provençaux. Ce mérite valut à Fabre d’Olivet de fort
mauvais compliments; on l’accusa de plagiat, on le traita de
pasticheur, dès qu’on s’aperçut que le public avait été dupe d’une
supercherie. C’était pousser la critique un peu loin. Mais Fabre
d’Olivet avait, par un adroit subterfuge portant sur le titre: le
Troubadour, laissé croire que son volume était la reproduction
imprimée d’un choix de poésies des anciens troubadours, oubliées
ou peu connues à cette époque. L’authenticité en était difficile à
reconnaître. Raynouard lui-même fut un moment dupe de cette
supercherie. Cependant, après une étude attentive de l’ouvrage de
Fabre d’Olivet, il revint sur sa première impression et, ne pouvant s’y
tromper plus longtemps, dénonça le fait au monde littéraire[27]. C’est
alors qu’on se vengea de la surprise en accumulant sur le
Troubadour ou Poésies occitaniques du XIIIe siècle les épithètes les
moins flatteuses. On fut d’autant moins indulgent que l’erreur avait
été plus longue et plus générale. Elle n’avait rien pourtant dont on
dût être surpris. Les précédents travaux de Fabre d’Olivet sur les
anciens écrivains romans et l’imitation parfaite de leurs tournures
poétiques en langue romane étaient bien faits pour amener une
confusion très excusable.
Vers 1806, l’abbé Vigne fit paraître une série de contes en vers
provençaux, qui furent édités à Aix. Ces contes, pleins de saveur,
sont toujours lus avec plaisir.

Honorat (Simon-Juste) occupe une des premières places parmi


les Provençaux qui, par leurs patientes recherches, leur érudition et
les documents qu’ils ont laissés, ont préparé la renaissance du
provençal. Il naquit à Allos (Basses-Alpes), le 3 avril 1783. Comme
médecin, il se signala par son dévouement à soigner les fiévreux de
l’armée d’Italie. Le Gouvernement lui remit une médaille d’or pour
récompenser ses services et, en 1815, lui offrit une sous-préfecture.
Il refusa cette fonction par modestie, et accepta plus tard la place de
directeur des postes à Digne, où il avait exercé jusqu’alors la
médecine. En 1830, il entra dans la vie privée, afin de pouvoir
s’adonner complètement à son œuvre capitale, son Dictionnaire
provençal-français. Dans la préface, nous trouvons cette phrase,
que nous ne pouvons nous empêcher de reproduire:
«Le principal but que j’ai eu en vue, en composant le Dictionnaire
provençal-français, a été de mettre les personnes qui, comme moi,
ont été élevées sous l’influence de la langue provençale, en état de
profiter de cette langue même, pour arriver à la française.»
N’est-ce pas là, en effet, une partie du programme félibréen?
Honorat avait eu l’intuition du mouvement littéraire dont la Provence
allait devenir le théâtre. Son Dictionnaire ne se borne pas à donner
le sens et l’orthographe des mots; c’est une sorte d’encyclopédie
des lettres, des arts, des sciences, des coutumes et des usages de
la Provence. Il abonde en renseignements sur les institutions, les
inventions les plus remarquables, et offre une collection de
proverbes à nulle autre pareille. Toute la sagesse de la nation y est
enseignée, c’est un véritable tableau des mœurs présenté sous une
forme humoristique qui n’exclut pas l’observation et le bon sens.
Frappé d’une attaque d’apoplexie, Honorat est mort avec le regret
de n’avoir pu joindre à cet ouvrage déjà considérable un volume de
biographie et de bibliographie, ainsi qu’une grammaire et un traité de
prononciation et d’orthographe. Il avait passé quarante ans de son
existence à rassembler des documents pour son grand travail, qui
reste, dans son genre, un des monuments les plus précieux. Parmi
les pièces curieuses qu’il put mettre à contribution, il faut citer le
manuscrit de Pierre Puget, savant religieux de l’Ordre des Minimes.
Cet ouvrage, de plus de mille pages, contenait la signification des
mots, leur origine, et leur étymologie en français; en somme, c’était
déjà un véritable dictionnaire provençal[28]. Nul doute qu’après
Honorat bien d’autres n’en aient tiré parti et n’aient exploité une mine
aussi riche.
Après les ouvrages de linguistique, nous voyons la poésie
s’essayer à nouveau dans la fable. Si quelques auteurs s’inspirèrent
des chefs-d’œuvre de La Fontaine et d’Esope, au moins ils surent
donner à leurs œuvres un cachet bien particulier; le thème seul fut
pris au célèbre fabuliste.
Dans ce genre, Diouloufet ne tarda pas à se faire remarquer; sa
Filho trop dalicato et lou Loup et lou Mestre doou meinagi sont d’un
accent sincère et simple, sans recherches ni fioritures et bien
écrites, dans l’esprit du sujet. Mais son œuvre capitale, celle qui fit
sa réputation, est incontestablement son poème leis Magnans (les
Vers à soie), dédié à sa femme, l’Estello de soun vilagi, comme il
l’avait surnommée. Consacré à l’art d’élever les vers à soie, ce
poème offre cette particularité que chacun de ses quatre chants est
terminé par un épisode des Métamorphoses d’Ovide arrangé à la
provençale.

Diouloufet naquit à Eguilles, près Aix, le 19 septembre 1771.


Outre son recueil de fables, dont chacune se termine par un
proverbe provençal, et son poème des Magnans, dont Raynouard
voulut bien revoir les épreuves, il a laissé l’Odo à la pipo et
Philippico contro lou Mistraou et autres, qui ne sont que des
critiques, peu méchantes d’ailleurs, contre la République et ceux qui
le privèrent en 1830 de ses fonctions de bibliothécaire de la ville
d’Aix, pour le punir de son zèle royaliste. Son poème biblique le
Voyage d’Eliézer lui valut le premier prix au concours de la Société
archéologique de Béziers. Enfin, en 1840, il fit paraître Don
Quichotte philosophe, œuvre assez importante en quatre volumes,
et qui obtint plusieurs éditions. Comme Honorat, il mourut à table,
frappé par une attaque d’apoplexie, cette même année 1840.
Royaliste sincère, Diouloufet a marqué ses œuvres du cachet de ses
convictions, ce qui n’enlève à son style ni la bonhomie qui
représentait si bien son caractère ni le charme de la simplicité qui
guidait tous ses actes.

D’Astros, autre fabuliste, né le 15 novembre 1780, à Tourves


(Var), était le père du fameux abbé d’Astros, retenu prisonnier par
Napoléon, qui ne put lui pardonner d’avoir laissé publier la bulle
d’excommunication de Pie VII. A sa sortie de prison, à la chute de
l’Empire, la monarchie le créa cardinal et ensuite archevêque de
Toulouse.
D’Astros, entièrement occupé de médecine, ne put donner à la
poésie provençale que ses rares moments de loisir. Aussi son
œuvre n’est-elle pas considérable; mais elle se fait remarquer par un
esprit très fin, très cultivé, et par une gaieté de bon aloi. Possédant
parfaitement la langue provençale, d’Astros est supérieur à
Diouloufet quant au choix et à la pureté des termes qu’il emploie.
Parmi ses fables, qui ne furent éditées qu’après sa mort, en 1863, il
faut citer comme une des meilleures: les Animaux malades de la
peste. C’est un véritable bijou qu’il a su sertir, comme un poète, de
détails provençaux et bien caractéristiques. L’Esquirou e lou Reinard
(l’Écureuil et le Renard) et Meste Simoun e soun ai (Maître Simon et
son âne) sont d’une originalité, d’une finesse et d’un bonheur
d’expressions qui dénotent chez l’auteur assez d’imagination et de
talent pour qu’il ait pu se passer d’emprunter, comme il l’a fait,
quelques-uns de ses sujets à La Fontaine.
Si l’Occitanie attendit longtemps en vain un digne successeur de
Goudouli, du moins fut-elle amplement dédommagée par l’apparition
de Jasmin.

Jacques Boé, dit Jasmin, naquit à Agen, en février 1799, au


bruit d’un charivari et d’une chanson de carnaval dont son père avait
composé les couplets. Sa famille était des plus humbles. Son aïeul
était réduit, pour vivre, à aller demander son pain de maison en
maison, et le petit Jacques se ressentit souvent de cette misère.
Plus tard, dans ses Souvenirs, il a chanté avec naturel et émotion
ses premières tristesses. N’ayant pu faire que des études
incomplètes, il eut souvent l’occasion de constater l’utilité de
l’instruction qu’il n’avait pu recevoir et qui l’aurait aidé à donner à ses
vers une tournure plus noble, un style plus châtié. Son œuvre se
ressent de ce défaut de culture intellectuelle. Le sens philologique
de certains mots lui échappait, et de là des formes parfois
incorrectes qu’il ne parvenait pas à épurer. Mais il rachetait cette
lacune par de très grandes qualités. Il avait le don de la poésie, le
vrai sens populaire, le naturel et la simplicité dans l’expression. Les
sentiments de son cœur étaient à la hauteur de son mérite littéraire.
On a de lui un volume de poésies diverses, intitulé: los Papillotos
(les Papillotes), en souvenir de son métier de coiffeur. Ses œuvres
marquantes et qui lui ont assuré une réputation incontestée, aussi
bien dans le Nord que dans le Midi, sont: l’Abuglo (l’Aveugle),
Françounetto (Francinette) et Maltro l’Innoucento (Marthe la Folle).
A Bordeaux, où Jasmin récita l’Abuglo, dans une séance
publique de l’Académie de cette ville, il remporta un succès auquel
son talent de lecteur et de chanteur eut presque autant de part que
son inspiration poétique. Voici, à ce sujet, ce qu’écrivait Sainte-
Beuve dans la Revue des Deux Mondes du 1er mai 1837:
«Jasmin lit à merveille; sa figure d’artiste, son brun sourcil, son
geste expressif, sa voix naturelle et d’acteur passionné prêtent
singulièrement à l’effet; quand il arrive au refrain: les Chemins
devraient fleurir, etc... et que, cessant de déclamer, il chante, toutes
les larmes coulent; ceux mêmes qui n’entendent pas le patois
partagent l’impression et pleurent.»
Dans Françounetto, Jasmin eut pour but de réagir contre les
détracteurs du provençal en démontrant l’erreur de ceux qui
prétendaient que cette langue ne pouvait se prêter à une œuvre
durable, qu’elle était condamnée à disparaître fatalement, parce
qu’abandonnée par les salons et les Académies. Piqué au jeu, il
s’est plu à retracer une page d’histoire locale où l’amour, l’envie, la
jalousie, l’ignorance sont tour à tour dépeints de main de maître.
Sainte-Beuve, déjà cité, le recevant à Paris, lui dit: «Jasmin, vous
êtes en progrès; continuez, vous faites partie des poètes rares de
l’époque.» Puis, lui montrant un rayon de sa bibliothèque, qui
contenait leurs œuvres: «Comme eux, vous ne mourrez jamais.»
Quel plus bel éloge le poète pouvait-il recevoir, et quelle réponse
aux prophètes de malheur qui l’avaient condamné à l’oubli sous
prétexte qu’il avait écrit dans une langue qui n’était pas la langue
française!
Françounetto fut déclamé à Toulouse, dans la salle du Musée,
devant quinze cents personnes. «Malgré la longueur du poème,
deux mille cinq cents vers, tout le monde restait encore assis,
lorsque Jasmin eut terminé, espérant s’enivrer encore à cette source
de poésie[29].» La municipalité, ratifiant le vote de l’assemblée qui
voulait donner à l’auteur, par le moyen d’une souscription, un
témoignage de son admiration, y ajouta ensuite le titre de Fils adoptif
de la ville de Toulouse.
On sent qu’il a dépensé dans Maltro l’Innoucento (Marthe la
Folle), étude très fouillée du cœur humain, toutes ses qualités, tout
son génie; il y a mis toute son âme.
Ardent et généreux, il parcourait les grandes villes de France,
chantant ou récitant ses œuvres comme ses ancêtres les
troubadours. Ses biographes assurent qu’il a ainsi gagné plus de
quinze cent mille francs, et cependant il est mort dans un état proche
de la misère. C’est que les produits de ses conférences sur la
langue d’oc et de ses tournées poétiques ont été versés entre les
mains des pauvres, dans la caisse des hospices, ou bien encore ont
servi à la reconstruction d’églises de villages. Par ses conférences, il
a propagé et mis en relief les beautés de cette langue méridionale
condamnée à mort depuis des siècles et qui, plus vivante que
jamais, se parle, s’écrit et se fait écouter jusque dans le Nord. Aussi
peut-on dire de lui qu’il a été l’un des plus grands parmi les
précurseurs des félibres, et que l’épitaphe gravée sur le socle de la
statue qu’on lui a élevée dans sa ville natale est frappante de vérité:
O ma lengua, tout me zou dit,
Lançarai uno estello à toun frount encrumit.

O ma langue, tout me le dit,


Je mettrai une étoile à ton front obscurci.

Vient ensuite Moquin-Tandon, dont le Carya Magalonensis,


édité en 1836, fut l’objet de critiques de tous genres, mais n’en
consacra pas moins la réputation du savant botaniste comme
écrivain languedocien.
Azaïs, son contemporain, se fit remarquer par ses poésies
satiriques sur des thèmes locaux. Les peintures sont énergiques, les
sujets quelquefois rabelaisiens. Dans ce genre de poésies plutôt
scatologiques, on peut citer: lous Homes e los Femnos del temps
passat, lou Lavamen, lou Factotum del curat de Capestang, etc...,
etc... Toutes sont animées d’un souffle comique et d’une franche
gaîté; la lecture en est facile et amusante.
Un peu avant la Révolution de 1848, des dithyrambes enflammés
sur le prolétariat valurent à Peyrotte une certaine popularité. Dans
leis Léproux, la Filla de la mountagna et autres pièces patoises del
Taralié[30], comme il «aimait à se nommer», on trouve un
mouvement vraiment poétique.
Le buste élevé à Peyrotte dans sa ville natale, pour honorer sa
mémoire, est un hommage mérité que la génération actuelle a cru
devoir rendre au poète ouvrier.
C’était également un ouvrier que Mathieu Lacroix, à qui l’on doit
ce poème touchant et sincère: Paouro Martino, dont Casimir
Bousquet, de Marseille, a donné une traduction. C’est à un de ses
compatriotes, aujourd’hui doyen du Félibrige de Paris, M. Gourdoux,
que le maçon de la Grand’Combe en confia le manuscrit, après avoir
été durement chassé par l’administrateur de cette compagnie, qui lui
retirait ainsi son gagne-pain, sous le prétexte invraisemblable qu’un
maçon ne doit pas être poète.
Le marquis de La Fare-Alais, dans son recueil los Castagnados,
se montre tour à tour observateur et conteur fidèle des mœurs et
usages du peuple. Sa poésie est chaude, colorée; l’expression est
juste. Sa verve, comique, n’est jamais grossière; le gentilhomme se
devine au choix délicat des images et des mots. Quels échantillons
donner de ce talent supérieur qui rend le choix embarrassant? Nous
prenons au hasard: la Fieiro de San-Bartoumieù (la Foire de Saint-
Barthélemy) et Scarpon, deux éclats de rire. Dans la Festo dos
Morts (la Fête des Morts), le poète montre la souplesse de son esprit
qui se prête aussi bien aux scènes comiques qu’aux tableaux
mélancoliques et tristes. Le Gripé et la Rouméquo font voyager notre
imagination dans le monde fantastique et légendaire. En somme, cet
auteur a su prendre rang parmi les poètes cévenols dont la
réputation est la meilleure et en même temps la plus durable, car il a
écrit pour tous les temps, et peut être lu par tout le monde.
Dans lou Gangui et les Amours de Vénus ou le Paysan au
théâtre, Fortuné Chailan atteint au plus haut comique avec naturel
et abandon.
La période de 1830 à 1848 est remplie par les noms de L.
Isnardon (Pouésios prouvençalos), de Raymonenq (lou Procurour
enganat), de Désanat (lou Troubadour natiounaou), de Pélabon (lou
Groulié bel esprit), de Bénoni, Mathieu, Gastinel, Garcin, Gautier et
tant d’autres dont l’énumération serait trop longue, qui, tous, ont su
attirer et retenir l’attention de leurs lecteurs, à des titres différents.
Avec Bellot, Bénédit et surtout Roumanille, nous atteignons la
période littéraire du provençal qui précéda l’apparition du Félibrige.

Pierre Bellot fut un des représentants les plus autorisés de


l’esprit vif et de la verve de la vieille Provence. Enfant de Marseille, il
imprima à ses œuvres le cachet essentiellement marseillais du vieux
quartier des Accoules, où il était né. Et cela s’explique d’autant plus
facilement que, n’ayant jamais quitté son pays, il a pu, mieux qu’un
autre, conserver intactes les traditions du passé et la couleur de
notre belle langue. Marchand, il ne voyait le monde que du fond de
sa boutique de la rue des Feuillants, et ne se trouvait en contact,
sous les pins de sa bastide, la Belloto, qu’avec des gens dont la
pensée n’avait d’autre moyen d’expression que l’idiome local. On
peut dire de lui qu’il était du peuple par le cœur et de la petite
bourgeoisie par les habitudes. C’est ainsi que, sans sortir de sa
personnalité modeste, il a pu être un bon poète provençal dont le
naturel et la simplicité sont les principales qualités et font le charme
dominant. Ces qualités, on les retrouve effectivement dans toutes
les poésies de Bellot. On y voit les pins des bastides dans le doux
frémissement de la brise du soir, les tartanes aux blanches voiles se
mirant dans les eaux bleues de la Méditerranée; on y entend
zonzonner les cigales, on y passe avec lui le dimanche dans les
cabanons d’Endoume, au milieu des fortes senteurs de l’aioli et des
vapeurs embaumées de la bouillabaisse. Sa muse est bien notre
Marseillaise, la San Janenque, aux grands yeux noirs, au rire
éclatant, à la bouche mutine, laissant voir entre des lèvres de corail
des dents éclatantes de blancheur; la taille souple et ronde, les
jupons courts, elle ne joue pas la grande dame, elle est bonne fille
et, pour être belle, elle n’a qu’à rester elle-même.
L’œuvre de Bellot forme quatre volumes, dont je n’entreprendrai
pas l’analyse. Je me bornerai à citer parmi les morceaux les plus
remarquables: lou Poète cassaire, qui est bien la meilleure
photographie qui ait jamais été faite du chasseur marseillais, et
l’Ermito de la Madeleno, où le poète se double d’un observateur
aussi intéressant que spirituel. Au théâtre, il a donné Mousu canulo
vo lou fiou ingrat. Enfin, il a montré un véritable talent dans l’épître et
le conte. Voici un extrait de l’épître qu’il adressa à Charles Nodier,
l’un des premiers qui ait rendu justice aux beautés de la langue
provençale:
O tu qu’as illustra nouestro bello patrio
Per teis brillans escrits, tout pastas de génio;
Tu, sublimo Nodier, la perlo deis aoutours,
Qu’as fa souto ta plumo espeli tant des flours!
Un aoutour marsiés, din soun groussier lengagi,
Doou fruit de seis lésirs aougeo ti faire hommagi.
N’aourié pas près ségur aquélo liberta
Se Pierquin de Gembloux l’avié pas excita.
Oh! sense eou, leis escrits dé sa muso groussiéro
N’oourien pas doou pays despassa la barriéro;
Maï Vénén de la part doou saven inspectour,
Bessai l’accordaras un régard proutectour, etc., etc.

Si Bellot avait eu les honneurs de la traduction française, son


nom serait aussi populaire dans le Nord qu’à Marseille même.
Qui ne connaît en Provence celui de Bénédit, rendu célèbre par
son poème Chichois, devenu bien rare aujourd’hui en librairie?
L’auteur s’est attaché à peindre, dans une note plaisante, les mœurs
de certains déclassés. Il l’a fait avec un bonheur d’expression, une
ironie mordante et un talent d’exposition qui font de Chichois une
composition aussi littéraire que le sujet pouvait le comporter et
assurément intéressante à tous égards. Les contes en vers qui
complètent le volume sont d’un comique achevé; on ne peut pas
analyser l’œuvre de Bénédit, il faut la lire.

NOTES:
[25] 2 thermidor an II.
[26] 16 fructidor an II.
[27] Dans le Journal des Savants de juillet 1824.
[28] L’original de cet ouvrage se trouve dans la Bibliothèque
Méjanes, à Aix.
[29] Article de M. Dufour, au Journal de Toulouse, 1840.
[30] Potier.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookmass.com

You might also like