Nothing Special   »   [go: up one dir, main page]

Full Download Starting Out With C++ From Control Structures To Objects 8th Edition Gaddis Solutions Manual All Chapter 2024 PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

Starting Out with C++ from Control

Structures to Objects 8th Edition


Gaddis Solutions Manual
Go to download the full and correct content document:
https://testbankfan.com/product/starting-out-with-c-from-control-structures-to-objects-
8th-edition-gaddis-solutions-manual/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Starting Out with C++ from Control Structures to


Objects 8th Edition Gaddis Test Bank

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-to-objects-8th-edition-gaddis-test-bank/

Starting Out With C++ From Control Structures To


Objects 9th Edition Gaddis Solutions Manual

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-to-objects-9th-edition-gaddis-solutions-manual/

Starting Out With C++ From Control Structures To


Objects 7th Edition Gaddis Solutions Manual

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-to-objects-7th-edition-gaddis-solutions-manual/

Starting Out with C++ From Control Structures through


Objects Brief Version 8th Edition Gaddis Test Bank

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-through-objects-brief-version-8th-edition-gaddis-test-
bank/
Starting Out with C++ From Control Structures through
Objects Brief Version 9th Edition Gaddis Solutions
Manual

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-through-objects-brief-version-9th-edition-gaddis-
solutions-manual/

Starting Out With C++ From Control Structures Through


Objects 7th Edition Tony Gaddis Test Bank

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-through-objects-7th-edition-tony-gaddis-test-bank/

Starting Out with C++ From Control Structures through


Objects Brief Version 9th Edition Gaddis Test Bank

https://testbankfan.com/product/starting-out-with-c-from-control-
structures-through-objects-brief-version-9th-edition-gaddis-test-
bank/

Starting Out with Java From Control Structures through


Objects 7th Edition Gaddis Solutions Manual

https://testbankfan.com/product/starting-out-with-java-from-
control-structures-through-objects-7th-edition-gaddis-solutions-
manual/

Starting Out With Java From Control Structures Through


Objects 6th Edition Gaddis Solutions Manual

https://testbankfan.com/product/starting-out-with-java-from-
control-structures-through-objects-6th-edition-gaddis-solutions-
manual/
LESSO N S E T

7 Arrays

PURPOSE 1. To introduce and allow students to work with arrays


2. To introduce the typedef statement
3. To work with and manipulate multidimensional arrays

PROCEDURE 1. Students should read the Pre-lab Reading Assignment before coming to lab.
2. Students should complete the Pre-lab Writing Assignment before coming to lab.
3. In the lab, students should complete labs assigned to them by the instructor.

Approximate Check
completion Page when
Contents Pre-requisites time number done
Pre-lab Reading Assignment 20 min. 114
Pre-lab Writing Assignment Pre-lab reading 10 min. 122
LESSON 7A
Lab 7.1
Working with One- Basic understanding of 30 min. 123
Dimensional Arrays one-dimensional arrays
Lab 7.2
Strings as Arrays of Basic understanding of 20 min. 126
Characters arrays of characters
LESSON 7B
Lab 7.3
Working with Two- Understanding of multi- 30 min. 129
Dimensional Arrays dimensional arrays
Lab 7.4
Student Generated Code Basic understanding 30 min. 134
Assignments of arrays

113
114 LESSON SET 7 Arrays

PRE - L AB RE A D I N G AS S I GNMEN T
One-Dimensional Arrays
So far we have talked about a variable as a single location in the computer’s
memory. It is possible to have a collection of memory locations, all of which
have the same data type, grouped together under one name. Such a collection
is called an array. Like every variable, an array must be defined so that the com-
puter can “reserve” the appropriate amount of memory. This amount is based upon
the type of data to be stored and the number of locations, i.e., size of the array,
each of which is given in the definition.

Example: Given a list of ages (from a file or input from the keyboard), find
and display the number of people for each age.

The programmer does not know the ages to be read but needs a space for the
total number of occurrences of each “legitimate age.” Assuming that ages 1,
2, . . . , 100 are possible, the following array definition can be used.
const int TOTALYEARS = 100;

int main()
{
int ageFrequency[TOTALYEARS]; //reserves memory for 100 ints
:
return 0;

Following the rules of variable definition, the data type (integer in this case) is
given first, followed by the name of the array (ageFrequency), and then the total
number of memory locations enclosed in brackets. The number of memory loca-
tions must be an integer expression greater than zero and can be given either as
a named constant (as shown in the above example) or as a literal constant (an
actual number such as 100).
Each element of an array, consisting of a particular memory location within
the group, is accessed by giving the name of the array and a position with the array
(subscript). In C++ the subscript, sometimes referred to as index, is enclosed in
square brackets. The numbering of the subscripts always begins at 0 and ends with
one less than the total number of locations. Thus the elements in the ageFrequency
array defined above are referenced as ageFrequency[0] through ageFrequency[99].

0 1 2 3 4 5 . . . . . . 97 98 99
If in our example we want ages from 1 to 100, the number of occurrences of
age 4 will be placed in subscript 3 since it is the “fourth” location in the array.
This odd way of numbering is often confusing to new programmers; however, it
quickly becomes routine.1

1
Some students actually add one more location and then ignore location 0, letting 1 be the
first location. In the above example such a process would use the following definition: int
agefrequency[101]; and use only the subscripts 1 through 100. Our examples will use
location 0. Your instructor will tell you which method to use.
Pre-lab Reading Assignment 115

Array Initialization
In our example, ageFrequency[0] keeps a count of how many 1s we read in,
ageFrequency[1] keeps count of how many 2s we read in, etc. Thus, keeping
track of how many people of a particular age exist in the data read in requires
reading each age and then adding one to the location holding the count for that
age. Of course it is important that all the counters start at 0. The following shows
the initialization of all the elements of our sample array to 0.

for (int pos = 0; pos < TOTALYEARS; pos++)


// pos acts as the array subscript
{
ageFrequency[pos] = 0;
}

A simple for loop will process the entire array, adding one to the subscript each
time through the loop. Notice that the subscript (pos) starts with 0. Why is the con-
dition pos < TOTALYEARS used instead of pos <= TOTALYEARS? Remember that
the last subscript is one less than the total number of elements in the array.
Hence the subscripts of this array go from 0 to 99.

Array Processing
Arrays are generally processed inside loops so that the input/output processing
of each element of the array can be performed with minimal statements. Our
age frequency program first needs to read in the ages from a file or from the key-
board. For each age read in, the “appropriate” element of the array (the one cor-
responding to that age) needs to be incremented by one. The following examples
show how this can be accomplished:
from a file using infile as a logical name from a keyboard with –99 as sentinel data
cout << "Please input an age from one"
<< "to 100. input -99 to stop"
<< endl;
infile >> currentAge; cin >> currentAge;
while (infile)
while (currentAge != -99)
{ {
ageFrequency[currentAge-1] = ageFrequency[currentAge-1] =
ageFrequency[currentAge-1] + 1; ageFrequency[currentAge-1] + 1;
infile >> currentAge; cout << "Please input an age from "
<< "one to 100. input -99 to stop"
<< endl;
cin >> currentAge;

} }

The while(infile) statement means that while there is more data in the file
infile, the loop will continue to process.
To read from a file or from the keyboard we prime the read,2 which means
the first value is read in before the test condition is checked to see if the loop

2
Priming the read for a while loop means having an input just before the loop condition
(just before the while) and having another one as the last statement in the loop.
116 LESSON SET 7 Arrays

should be executed. When we read an age, we increment the location in the


array that keeps track of the amount of people in the corresponding age group.
Since C++ array indices always start with 0, that location will be at the subscript
one value less than the age we read in.

4 0 14 5 0 6 1 0
0 1 2 3 4 5 ...... 98 99
1 year 2 years 3 years 4 years 5 years 6 years 99 years 100 years

Each element of the array contains the number of people of a given age. The data
shown here is from a random sample run. In writing the information stored in the
array, we want to make sure that only those array elements that have values
greater than 0 are output. The following code will do this.
for (int ageCounter = 0; ageCounter < TOTALYEARS; ageCounter++)

if (ageFrequency[ageCounter] > 0)
cout << "The number of people " << ageCounter + 1 <<" years old is "
<< ageFrequency[ageCounter] << endl;

The for loop goes from 0 to one less than TOTALYEARS (0 to 99). This will test every
element of the array. If a given element has a value greater than 0, it will be
output. What does outputting ageCounter + 1 do? It gives the age we are deal-
ing with at any given time, while the value of ageFrequency[ageCounter] gives
the number of people in that age group.
The complete age frequency program will be given as one of the lab assign-
ments in Lab 7.4.

Arrays as Arguments
Arrays can be passed as arguments (parameters) to functions. Although variables
can be passed by value or reference, arrays are always passed by pointer, which
is similar to pass by reference, since it is not efficient to make a “copy” of all ele-
ments of the array. Pass by pointer is discussed further in Lesson Set 9. This
means that arrays, like pass by reference parameters, can be altered by the call-
ing function. However, they NEVER have the & symbol between the data type and
name, as pass by reference parameters do. Sample Program 7.1 illustrates how
arrays are passed as arguments to functions.

Sample Program 7.1:


// The grade average program
// This program illustrates how one-dimensional arrays are used and how
// they are passed as arguments to functions. It contains two functions.
// The first function is called to allow the user to input a set of grades and
// store them in an array. The second function is called to find the average
// grade.

#include <iostream>
using namespace std;
Pre-lab Reading Assignment 117

const int TOTALGRADES = 50; // TOTALGRADES is the maximum size of the array

// function prototypes

void getData(int array[], int& sizeOfArray);


// the procedure that will read values into the array

float findAverage(const int array[], int sizeOfArray);


// the procedure that will find the average of values
// stored in an array. The word const in front of the
// data type of the array prevents the function from
// altering the array

int main()
{
int grades[TOTALGRADES]; // defines an array that holds up to 50 ints
int numberOfGrades = 0; // the number of grades read in
float average; // the average of all grades read in

getData(grades, numberOfGrades); // getData is called to read the grades into


// the array and store how many grades there
// are in numberOfGrades

average = findAverage(grades, numberOfGrades);

cout << endl << "The average of the " << numberOfGrades
<< " grades read in is " << average << "." << endl << endl;

return 0;
}

//***********************************************************************
// getData
//
// task: This function inputs and stores data in the grades array.
// data in: none (the parameters contain no information needed by the
// getData function)
// data out: an array containing grades and the number of grades
//***********************************************************************

void getData(int array[], int& sizeOfArray)


{
int pos = 0; // array index which starts at 0
int grade; // holds each individual grade read in

cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;

continues
118 LESSON SET 7 Arrays

while (grade != -99)


{
array[pos] = grade; // store grade read in to next array location
pos ++; // increment array index

cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;
}

sizeOfArray = pos; // upon exiting the loop, pos holds the


// number of grades read in, which is sent
// back to the calling function
}

//****************************************************************************
// findAverage
//
// task: This function finds and returns the average of the values
//
// data in: the array containing grades and the array size
// data returned: the average of the grades contained in that array
//****************************************************************************

float findAverage (const int array[], int sizeOfArray)


{
int sum = 0; // holds the sum of all grades in the array

for (int pos = 0; pos < sizeOfArray; pos++)


{
sum = sum + array[pos];
// add grade in array position pos to sum
}

return float(sum)/sizeOfArray;
}

Notice that a set of empty brackets [ ] follows the parameter of an array which
indicates that the data type of this parameter is in fact an array. Notice also that
no brackets appear in the call to the functions that receive the array.

Since arrays in C++ are passed by pointer, which is similar to pass by reference,
it allows the original array to be altered, even though no & is used to designate
this. The getData function is thus able to store new values into the array. There
may be times when we do not want the function to alter the values of the array.
Inserting the word const before the data type on the formal parameter list pre-
vents the function from altering the array even though it is passed by pointer. This
is why in the preceding sample program the findAverage function and header
had the word const in front of the data type of the array.

float findAverage (const int array[], int sizeOfArray); // prototype


float findAverage (const int array[], int sizeOfArray) // function header
Pre-lab Reading Assignment 119

The variable numberOfGrades contains the number of elements in the array to


be processed. In most cases not every element of the array is used, which means
the size of the array given in its definition and the number of actual elements
used are rarely the same. For that reason we often pass the actual number of
ele- ments used in the array as a parameter to a procedure that uses the array.
The variable numberOfGrades is explicitly passed by reference (by using &) to
the getData function where its corresponding formal parameter is called
sizeOfArray.

Prototypes can be written without named parameters. Function headers must


include named parameters.

float findAverage (const int [], int); // prototype without named parameters

The use of brackets in function prototypes and headings can be avoided by


declaring a programmer defined data type. This is done in the global section
with a typedef statement.

Example: typedef int GradeType[50];

This declares a data type, called GradeType, that is an array containing 50 inte-
ger memory locations. Since GradeType is a data type, it can be used in defining
variables. The following defines grades as an integer array with 50 elements.

GradeType grades;

It has become a standard practice (although not a requirement) to use an upper-


case letter to begin the name of a data type. It is also helpful to include the word
“type” in the name to indicate that it is a data type and not a variable.

Sample Program 7.2 shows the revised code (in bold) of Sample Program 7.1 using
typedef.

Sample Program 7.2:


// Grade average program
// This program illustrates how one-dimensional arrays are used and how
// they are passed as arguments to functions. It contains two functions.
// The first function is called to input a set of grades and store them
// in an array. The second function is called to find the average grade.

#include <iostream>
using namespace std;

const int TOTALGRADES = 50; // maximum size of the array

// function prototypes

typedef int GradeType[TOTALGRADES]; // declaration of an integer array data type


// called GradeType

continues
120 LESSON SET 7 Arrays

void getData(GradeType array, int& sizeOfArray);


// the procedure that will read values into the array

float findAverage(const GradeType array, int sizeOfArray);


// the procedure that will find the average of values
// stored in an array. The word const in front of the
// data type of the array prevents the function from
// altering the array

int main()
{
GradeType grades; // defines an array that holds up to 50 ints
int numberOfGrades = 0; // the number of grades read in
float average; // the average of all grades read in

getData(grades, numberOfGrades);// getData is called to read the grades into


// the array and store how many grades there
// are in numberOfGrades

average = findAverage(grades, numberOfGrades);

cout << endl << "The average of the " << numberOfGrade
<< " grades read in is " << average << "." << endl << endl;

return 0;
}

//***********************************************************************
// getData
//
// task: This function inputs and stores data in the grades array.
// data in: none
// data out: an array containing grades and the number of grades
//***********************************************************************

void getData(GradeType array, int& sizeOfArray)


{
int pos = 0; // array index which starts at 0
int grade; // holds each individual grade read in

cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;

while (grade != -99)


{
array[pos] = grade; // store grade read in to next array location
pos ++; // increment array index

cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;
}
Pre-lab Reading Assignment 121

sizeOfArray = pos; // upon exiting the loop, pos holds the


// number of grades read in, which is sent
// back to the calling function
}

//****************************************************************************
// findAverage
//
// task: This function finds and returns the average of the values
//
// data in: the array containing grades and the array size
// data returned: the average of the grades contained in that array
//****************************************************************************

float findAverage (const GradeType array, int sizeOfArray)


{
int sum = 0; // holds the sum of all grades in the array

for (int pos = 0; pos < sizeOfArray; pos++)


{
sum = sum + array[pos];
// add grade in array position pos to sum
}

return float(sum)/sizeOfArray;
}

This method of using typedef to eliminate brackets in function prototypes and


headings is especially useful for multi-dimensional arrays such as those intro-
duced in the next section.

Two-Dimensional Arrays
Data is often contained in a table of rows and columns that can be implement-
ed with a two-dimensional array. Suppose we want to read data representing
profits (in thousands) for a particular year and quarter.
Quarter 1 Quarter 2 Quarter 3 Quarter 4
72 80 10 100
82 90 43 42
10 87 48 53
This can be done using a two-dimensional array.

Example:
const NO_OF_ROWS = 3;
const NO_OF_COLS = 4;

typedef float ProfitType[NO_OF_ROWS][NO_OF_COLS]; //declares a new data type


//which is a 2 dimensional
//array of floats

continues
122 LESSON SET 7 Arrays

int main()
{
ProfitType profit; // defines profit as a 2 dimensional array

for (int row_pos = 0; row_pos < NO_OF_ROWS; row_pos++)


for (int col_pos = 0; col_pos < NO_OF_COLS; col_pos++)
{
cout << "Please input a profit" << endl;
cin >> profit[row_pos][col_pos];
}
return 0;
}

A two dimensional array normally uses two loops (one nested inside the other)
to read, process, or output data.
How many times will the code above ask for a profit? It processes the inner
loop NO_OF_ROWS * NO_OF_COLS times, which is 12 times in this case.

Multi-Dimensional Arrays
C++ arrays can have any number of dimensions (although more than three is rarely
used). To input, process or output every item in an n-dimensional array, you
need n nested loops.

Arrays of Strings
Any variable defined as char holds only one character. To hold more than one
character in a single variable, that variable needs to be an array of characters. A
string (a group of characters that usually form meaningful names or words) is
really just an array of characters. A complete lesson on characters and strings
is given in Lesson Set 10.

PRE - L AB W RI TI N G AS S I GNMEN T

Fill-in-the-Blank Questions
1. The first subscript of every array in C++ is and the last is
less than the total number of locations in the array.
2. The amount of memory allocated to an array is based on the
and the of locations
or size of the array.
3. Array initialization and processing is usually done inside a
.
4. The statement can be used to declare an array type and
is often used for multidimensional array declarations so that when passing
arrays as parameters, brackets do not have to be used.
5. Multi-dimensional arrays are usually processed within
loops.
6. Arrays used as arguments are always passed by .
Lesson 7A 123

7. In passing an array as a parameter to a function that processes it, it is often


necessary to pass a parameter that holds the of
used in the array.
8. A string is an array of .
9. Upon exiting a loop that reads values into an array, the variable used as
a(n) to the array will contain the size of that array.
10. An n-dimensional array will be processed within nested
loops when accessing all members of the array.

L ES S ON 7 A

LAB 7.1 Working with One-Dimensional Arrays


Retrieve program testscore.cpp from the Lab 7 folder. The code is as follows:

// This program will read in a group of test scores (positive integers from 1 to 100)
// from the keyboard and then calculate and output the average score
// as well as the highest and lowest score. There will be a maximum of 100 scores.

// PLACE YOUR NAME HERE

#include <iostream>
using namespace std;

typedef int GradeType[100]; // declares a new data type:


// an integer array of 100 elements

float findAverage (const GradeType, int); // finds average of all grades


int findHighest (const GradeType, int); // finds highest of all grades
int findLowest (const GradeType, int); // finds lowest of all grades

int main()

{
GradeType grades; // the array holding the grades.
int numberOfGrades; // the number of grades read.
int pos; // index to the array.

float avgOfGrades; // contains the average of the grades.


int highestGrade; // contains the highest grade.
int lowestGrade; // contains the lowest grade.

// Read in the values into the array

pos = 0;
cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;

continues
124 LESSON SET 7 Arrays

cin >> grades[pos];

while (grades[pos] != -99)


{

// Fill in the code to read the grades

numberOfGrades = ; // Fill blank with appropriate identifier

// call to the function to find average

avgOfGrades = findAverage(grades, numberOfGrades);

cout << endl << "The average of all the grades is " << avgOfGrades << endl;

// Fill in the call to the function that calculates highest grade

cout << endl << "The highest grade is " << highestGrade << endl;

// Fill in the call to the function that calculates lowest grade


// Fill in code to write the lowest to the screen

return 0;
}

//********************************************************************************
// findAverage
//
// task: This function receives an array of integers and its size.
// It finds and returns the average of the numbers in the array
// data in: array of floating point numbers
// data returned: average of the numbers in the array
//
//********************************************************************************

float findAverage (const GradeType array, int size)

float sum = 0; // holds the sum of all the numbers

for (int pos = 0; pos < size; pos++)

sum = sum + array[pos];

return (sum / size); //returns the average

}
Lesson 7A 125

//****************************************************************************
// findHighest
//
// task: This function receives an array of integers and its size.
// It finds and returns the highest value of the numbers in the array
// data in: array of floating point numbers
// data returned: highest value of the numbers in the array
//
//****************************************************************************

int findHighest (const GradeType array, int size)

/ Fill in the code for this function

//****************************************************************************
// findLowest
//
// task: This function receives an array of integers and its size.
// It finds and returns the lowest value of the numbers in the array
// data in: array of floating point numbers
// data returned: lowest value of the numbers in the array
//
//****************************************************************************

int findLowest (const GradeType array, int size)

{
// Fill in the code for this function

Exercise 1: Complete this program as directed.


Exercise 2: Run the program with the following data: 90 45 73 62 -99
and record the output here:

Exercise 3: Modify your program from Exercise 1 so that it reads the informa-
tion from the gradfile.txt file, reading until the end of file is encoun-
tered. You will need to first retrieve this file from the Lab 7 folder and
place it in the same folder as your C++ source code. Run the program.
126 LESSON SET 7 Arrays

Lab 7.2 Strings as Arrays of Characters


Retrieve program student.cpp from the Lab 7 folder.

// This program will input an undetermined number of student names


// and a number of grades for each student. The number of grades is
// given by the user. The grades are stored in an array.
// Two functions are called for each student.
// One function will give the numeric average of their grades.
// The other function will give a letter grade to that average.
// Grades are assigned on a 10 point spread.
// 90-100 A 80-89 B 70-79 C 60-69 D Below 60 F

// PLACE YOUR NAME HERE

#include <iostream>
#include <iomanip>
using namespace std;

const int MAXGRADE = 25; // maximum number of grades per student


const int MAXCHAR = 30; // maximum characters used in a name

typedef char StringType30[MAXCHAR + 1];// character array data type for names
// having 30 characters or less.
typedef float GradeType[MAXGRADE]; // one dimensional integer array data type

float findGradeAvg(GradeType, int); // finds grade average by taking array of


// grades and number of grades as parameters

char findLetterGrade(float); // finds letter grade from average given


// to it as a parameter

int main()

{
StringType30 firstname, lastname;// two arrays of characters defined
int numOfGrades; // holds the number of grades
GradeType grades; // grades defined as a one dimensional array
float average; // holds the average of a student's grade
char moreInput; // determines if there is more input

cout << setprecision(2) << fixed << showpoint;

// Input the number of grades for each student

cout << "Please input the number of grades each student will receive." << endl
<< "This must be a number between 1 and " << MAXGRADE << " inclusive”
<< endl;

cin >> numOfGrades;


Lesson 7A 127

while (numOfGrades > MAXGRADE || numOfGrades < 1)


{
cout << "Please input the number of grades for each student." << endl
<< "This must be a number between 1 and " << MAXGRADE
<< " inclusive\n";

cin >> numOfGrades;

// Input names and grades for each student

cout << "Please input a y if you want to input more students"


<< " any other character will stop the input" << endl;
cin >> moreInput;

while (moreInput == 'y' || moreInput == 'Y')

{
cout << "Please input the first name of the student" << endl;
cin >> firstname;
cout << endl << "Please input the last name of the student" << endl;
cin >> lastname;

for (int count = 0; count < numOfGrades; count++)

cout << endl << "Please input a grade" << endl;

// Fill in the input statement to place grade in the array

cout << firstname << " " << lastname << " has an average of ";

// Fill in code to get and print average of student to screen


// Fill in call to get and print letter grade of student to screen

cout << endl << endl << endl;


cout << "Please input a y if you want to input more students"
<< " any other character will stop the input" << endl;
cin >> moreInput;

return 0;
}

continues
128 LESSON SET 7 Arrays

//***********************************************************************
// findGradeAvg
//
// task: This function finds the average of the
// numbers stored in an array.
//
// data in: an array of integer numbers
// data returned: the average of all numbers in the array
//
//***********************************************************************

float findGradeAvg(GradeType array, int numGrades)

{
// Fill in the code for this function
}

//***********************************************************************
// findLetterGrade
//
// task: This function finds the letter grade for the number
// passed to it by the calling function
//
// data in: a floating point number
// data returned: the grade (based on a 10 point spread) based on the number
// passed to the function
//
//***********************************************************************

char findLetterGrade(float numGrade)

{
// Fill in the code for this function

Exercise 1: Complete the program by filling in the code. (Areas in bold)


Run the program with 3 grades per student using the sample data below.
Mary Brown 100 90 90
George Smith 90 30 50
Dale Barnes 80 78 82
Sally Dolittle 70 65 80
Conrad Bailer 60 58 71
You should get the following results:
Mary Brown has an average of 93.33 which gives the letter grade of A
George Smith has an average of 56.67 which gives the letter grade of F
Dale Barnes has an average of 80.00 which gives the letter grade of B
Sally Dolittle has an average of 71.67 which gives the letter grade of C
Conrad Bailer has an average of 63.00 which gives the letter grade of D
Lesson 7B 129

L ES S ON 7 B
LAB 7.3 Working with Two-Dimensional Arrays
Look at the following table containing prices of certain items:
12.78 23.78 45.67 12.67
7.83 4.89 5.99 56.84
13.67 34.84 16.71 50.89
These numbers can be read into a two-dimensional array.
Retrieve price.cpp from the Lab 7 folder. The code is as follows:

// This program will read in prices and store them into a two-dimensional array.
// It will print those prices in a table form.

// PLACE YOUR NAME HERE

#include <iostream>
#include <iomanip>
using namespace std;

const MAXROWS = 10;


const MAXCOLS = 10;

typedef float PriceType[MAXROWS][MAXCOLS]; // creates a new data type


// of a 2D array of floats

void getPrices(PriceType, int&, int&); // gets the prices into the array
void printPrices(PriceType, int, int); // prints data as a table

int main()

{
int rowsUsed; // holds the number of rows used
int colsUsed; // holds the number of columns used
PriceType priceTable; // a 2D array holding the prices

getPrices(priceTable, rowsUsed, colsUsed); // calls getPrices to fill the array


printPrices(priceTable, rowsUsed, colsUsed);// calls printPrices to display array

return 0;
}

continues
130 LESSON SET 7 Arrays

//*******************************************************************************
// getPrices
//
// task: This procedure asks the user to input the number of rows and
// columns. It then asks the user to input (rows * columns) number of
// prices. The data is placed in the array.
// data in: none
// data out: an array filled with numbers and the number of rows
// and columns used.
//
//*******************************************************************************

void getPrices(PriceType table, int& numOfRows, int& numOfCols)


{

cout << "Please input the number of rows from 1 to "<< MAXROWS << endl;
cin >> numOfRows;

cout << "Please input the number of columns from 1 to "<< MAXCOLS << endl;
cin >> numOfCols;

for (int row = 0; row < numOfRows; row++)


{
for (int col = 0; col < numOfCols; col++)

// Fill in the code to read and store the next value in the array
}
}

//***************************************************************************
// printPrices
//
// task: This procedure prints the table of prices
// data in: an array of floating point numbers and the number of rows
// and columns used.
// data out: none
//
//****************************************************************************

void printPrices(PriceType table, int numOfRows, int numOfCols)


{

cout << fixed << showpoint << setprecision(2);

for (int row = 0; row < numOfRows; row++)


{
for (int col = 0; col < numOfCols; col++)

// Fill in the code to print the table


}
}
Lesson 7B 131

Exercise 1: Fill in the code to complete both functions getPrices and


printPrices, then run the program with the following data:

Exercise 2: Why does getPrices have the parameters numOfRows and


numOfCols passed by reference whereas printPrices has those parameters
passed by value?
Exercise 3: The following code is a function that returns the highest price in
the array. After studying it very carefully, place the function in the above
program and have the program print out the highest value.
float findHighestPrice(PriceType table, int numOfRows, int numOfCols)
// This function returns the highest price in the array
{

float highestPrice;

highestPrice = table[0][0]; // make first element the highest price

for (int row = 0; row < numOfRows; row++)


for (int col = 0; col < numOfCols; col++)
if ( highestPrice < table[row][col] )

highestPrice = table[row][col];

return highestPrice;
}

continues
132 LESSON SET 7 Arrays

NOTE: This is a value returning function. Be sure to include its prototype


in the global section.
Exercise 4: Create another value returning function that finds the lowest price
in the array and have the program print that value.
Exercise 5: After completing all the exercises above, run the program again
with the values from Exercise 1 and record your results.
Exercise 6: (Optional) Look at the following table that contains quarterly sales
transactions for three years of a small company. Each of the quarterly
transactions are integers (number of sales) and the year is also an integer.
YEAR Quarter 1 Quarter 2 Quarter 3 Quarter 4
2000 72 80 60 100
2001 82 90 43 98
2002 64 78 58 84
We could use a two-dimensional array consisting of 3 rows and 5 columns.
Even though there are only four quarters we need 5 columns (the first
column holds the year).
Retrieve quartsal.cpp from the Lab 7 folder. The code is as follows:

// This program will read in the quarterly sales transactions for a given number
// of years. It will print the year and transactions in a table format.
// It will calculate year and quarter total transactions.

// PLACE YOUR NAME HERE

#include <iostream>
#include <iomanip>
using namespace std;

const MAXYEAR = 10;


const MAXCOL = 5;

typedef int SalesType[MAXYEAR][MAXCOL]; // creates a new 2D integer data type

void getSales(SalesType, int&); // places sales figures into the array


void printSales(SalesType, int); // prints data as a table
void printTableHeading(); // prints table heading

int main()

{
int yearsUsed; // holds the number of years used

SalesType sales; // 2D array holding


// the sales transactions

getSales(sales, yearsUsed); // calls getSales to put data in array


Another random document with
no related content on Scribd:
Le roi Agramant se rend à leur avis, bien que ce parti lui semble
cruel et dur. Il se dirige vers Arles, par le chemin qui lui paraît le plus
sûr, et il semble qu’il ait des ailes. Il a de bons guides, et l’obscurité
favorise grandement son départ. Vingt mille Africains et Espagnols
purent ainsi échapper à Renaud.
Quant à ceux qui furent occis par lui, par ses frères, par les deux
fils du sire de Vienne, par les sept cents hommes d’armes obéissant
à Renaud, par Sansonnet, ou qui, dans leur fuite, se noyèrent dans
la Seine, celui qui pourrait les compter compterait aussi les feuilles
que Zéphire et Flore font éclore en avril.
D’aucuns pensent que Maugis prit une grande part à la victoire
de cette nuit, non pas en arrosant la campagne du sang sarrasin, ni
par le nombre des ennemis qu’il occit de sa propre main, mais en
faisant sortir, par son art, les esprits infernaux des grottes du Tartare,
et cela en si grande quantité, qu’un royaume deux fois grand comme
la France n’aurait pu lever autant de bannières ni de lances.
On ajoute qu’il fit entendre tant d’instruments métalliques, tant de
tambours, tant de bruits divers, tant de hennissements de chevaux,
tant de cris et de tumulte de fantassins, que plaines, monts et
vallées devaient en retentir jusqu’aux contrées les plus lointaines, et
que les Maures en éprouvèrent une telle peur, qu’ils s’empressèrent
de prendre la fuite.
Le roi d’Afrique n’oublia pas que Roger était blessé et qu’il gisait
encore gravement malade sur son lit. Il s’enquit d’un destrier à
l’allure la plus douce qu’il put trouver, fit placer le blessé dessus, et
après l’avoir mis en sûreté, il le fit porter sur son navire et conduire
doucement jusqu’à Arles, où il avait donné rendez-vous à tous ses
gens.
Ceux qui s’enfuirent devant Renaud et Charles — et ils furent, je
crois, cent mille ou à peu près — cherchèrent, à travers champs,
bois, montagnes et vallons, à échapper aux mains des populations
franques. Mais la plupart trouvèrent tout chemin fermé, et rougirent
de leur sang l’herbe verte et les routes blanches. Il n’en arriva point
ainsi du roi de Séricane, qui avait sa tente loin des autres.
En apprenant que c’est le sire de Montauban qui a assailli ainsi le
camp, il ressent en son cœur une telle allégresse, qu’il en saute çà
et là de joie. Il remercie le souverain Auteur de lui avoir fourni
l’occasion si rare de s’emparer cette nuit de Bayard, ce coursier qui
n’a pas son pareil.
Il y avait longtemps — je crois que vous l’avez déjà lu ailleurs —
que ce roi désirait avoir la bonne Durandal à son côté, et chevaucher
ce coursier accompli. Il était jadis venu en France pour cela à la tête
de cent mille hommes d’armes. Il avait alors défié Renaud au
combat, pour la possession de ce cheval.
Et il s’était rendu sur le rivage de la mer où la bataille devait avoir
lieu ; mais Maugis en faisant partir malgré lui son cousin qu’il avait
embarqué sur un navire, était venu tout déranger. Il serait trop long
de dire toute l’histoire. Depuis ce jour, Gradasse avait tenu le gentil
paladin pour lâche et couard.
Maintenant que Gradasse apprend que c’est Renaud qui a
assailli le camp, il s’en réjouit. Il revêt ses armes, il monte sur son
cheval et s’en va cherchant son ennemi à travers l’obscurité. Autant
de guerriers il rencontre, autant il en couche à terre, frappant
indifféremment de sa bonne lance les gens de France ou de Libye.
Il va de çà de là, cherchant Renaud, l’appelant de sa voix la plus
forte, et se portant toujours vers les endroits où il voit le plus de
morts amoncelés. Enfin ils se trouvent en face l’un de l’autre l’épée à
la main, car leurs lances avaient été brisées en mille morceaux, et
les éclats en avaient volé jusqu’au char constellé de la Nuit.
Quand Gradasse reconnaît le vaillant paladin, non à son
enseigne, mais aux coups terribles qu’il porte, ainsi qu’à Bayard qui
semble à lui seul être maître de tout le camp, il se met sans retard à
lui reprocher — conduite indigne de lui — de ne s’être pas présenté
sur le champ du combat, au jour fixé, pour vider leur différend.
Il ajoute : « — Tu espérais sans doute, en te cachant ce jour-là,
que nous ne nous rencontrerions plus jamais en ce monde ; or, tu
vois que je t’ai rejoint. Quand même tu descendrais sur les rives les
plus extrêmes du Styx, quand même tu monterais au Ciel, sois
certain que je t’y suivrais, si tu emmenais avec toi ton destrier au
séjour de la lumière, ou là-bas dans le monde aveugle.
« Si tu n’as pas le cœur de te mesurer avec moi, et si tu
comprends que tu n’es pas de force égale ; si tu estimes la vie plus
que l’honneur, tu peux sans péril te tirer d’affaire, en me laissant de
bonne grâce ton coursier. Tu pourras vivre ensuite, si vivre t’est
cher ; mais tu vivras à pied, car tu ne mérites pas de posséder un
cheval, toi qui déshonores à ce point la chevalerie. — »
Ces paroles avaient été dites en présence de Richardet et de
Guidon le sauvage. Tous deux tirent en même temps leur épée pour
châtier le Sérican. Mais Renaud s’oppose à leur intervention, et ne
souffre point qu’ils lui fassent cet affront. Il dit : « — Ne suis-je donc
pas bon pour répondre à qui m’outrage, sans avoir besoin de vous ?
— »
Puis, se retournant vers le païen, il dit : « — Écoute, Gradasse ;
je veux, si tu consens à m’entendre, te prouver clairement que je
suis allé sur le bord de la mer pour te rejoindre. Puis, je te
soutiendrai les armes à la main, que je t’ai dit vrai de tout point, et
que tu en auras menti chaque fois que tu diras que j’ai manqué aux
lois de la chevalerie.
« Mais je te prie instamment, avant que nous nous livrions au
combat, d’écouter jusqu’au bout mes justes et vraies excuses, afin
que tu ne m’adresses plus des reproches non mérités. Ensuite,
j’entends que nous nous disputions Bayard à pied, seul à seul, en un
lieu solitaire, comme tu l’as toi-même désiré. — »
Le roi de Séricane était courtois, comme tout cœur magnanime
l’est d’ordinaire. Il fut satisfait d’entendre la pleine justification du
paladin. Il vint avec lui sur la rive du fleuve, et là, Renaud,
simplement, lui raconta sa véridique histoire et prit tout le ciel à
témoin.
Puis il fit appeler le fils de Bauves, lequel était parfaitement au
courant de l’affaire. Celui-ci raconta de nouveau, en présence des
deux champions, comment il avait usé d’un enchantement, sans en
dire ni plus ni moins. Renaud reprit alors : « — Ce que je t’ai prouvé
par témoin, je veux t’en donner maintenant par les armes, et quand il
te plaira, une preuve encore plus évidente. — »
Le roi Gradasse qui ne voulait pas, pour une nouvelle querelle,
abandonner la première, accepta sans contester les excuses de
Renaud, bien que doutant encore si elles étaient vraies ou fausses.
Les deux adversaires ne fixèrent plus le lieu du combat sur le doux
rivage de Barcelone, comme ils l’avaient fait la première fois, mais ils
convinrent de se rencontrer le lendemain matin, près d’une fontaine
voisine,
Où Renaud ferait amener le cheval, lequel serait placé à égale
distance des combattants. Si le roi tuait Renaud, ou s’il le faisait
prisonnier, il devait prendre le destrier sans autre empêchement.
Mais si Gradasse trouvait la mort dans le combat, ou si, ne pouvant
plus se défendre, il se rendait prisonnier, Renaud lui reprendrait
Durandal.
Avec plus d’étonnement et de douleur que je n’ai dit, Renaud
avait appris de la belle Fleur-de-Lys que son cousin était hors de sa
raison. Il avait appris également ce qu’il était advenu au sujet de ses
armes, et le conflit qui s’en était suivi. Il savait enfin que c’était
Gradasse qui possédait cette épée que Roland avait illustrée par
mille et mille exploits.
Après que les deux chevaliers se furent mis d’accord, le roi
Gradasse rejoignit ses serviteurs, bien qu’il eût été engagé par le
paladin à venir loger chez lui. Dès qu’il fut jour, le païen s’arma, et
Renaud en fit autant. Tous deux arrivèrent à la fontaine près de
laquelle ils devaient combattre pour Bayard et Durandal.
Tous les amis de Renaud paraissaient redouter beaucoup l’issue
de la bataille qu’il devait soutenir seul à seul contre Gradasse, et ils
s’en lamentaient d’avance. Gradasse possédait une grande
hardiesse, une force prodigieuse et une expérience consommée.
Maintenant qu’il avait au côté l’épée du fils du grand Milon, chacun
tremblait de crainte pour Renaud.
Plus que tous les autres, le frère de Vivien redoutait ce combat. Il
se serait encore volontiers entremis pour le faire manquer, mais il
craignait d’encourir l’inimitié du sire de Montauban, qui lui en voulait
encore d’avoir empêché la première rencontre en l’enlevant sur un
navire.
Mais, tandis que tous les siens sont plongés dans le doute, la
crainte ou la douleur, Renaud s’en va calme et joyeux de se
disculper d’un soupçon injuste qui lui avait semblé si dur, et de
pouvoir imposer silence à ceux de Poitiers et de Hautefeuille. Il s’en
va plein de confiance et sûr en son cœur de remporter l’honneur du
triomphe.
Quand les deux champions furent arrivés quasi en même temps
à la claire fontaine, ils se saluèrent et s’accueillirent l’un et l’autre
avec un visage aussi serein, aussi bienveillant, que si Gradasse eût
été le parent ou l’ami du chevalier de la maison de Clermont. Mais je
veux remettre à une autre fois de raconter comment ils en vinrent
aux mains.
CHANT XXXII.

Argument. — Mesures prises par Agramant pour renforcer son


armée. — Bradamante, jalouse de Roger à cause de Marphise,
quitte son château et arrive à la Roche-Tristan. Là, elle est
obligée de combattre contre trois princes, et leur fait vider les
arçons.

Je me souviens que je devais vous entretenir — je vous l’avais


promis, puis cela m’est sorti de la mémoire — d’un soupçon qui avait
rendu la belle dame de Roger si dolente, soupçon bien plus
déplaisant et plus cruel, et mordant d’une dent bien plus aiguë et
bien plus vénéneuse que ce qu’elle avait entendu de Richardet, et
qui lui était entré dans la poitrine, pour lui dévorer le cœur.
Je devais en parler, et j’ai entrepris un autre sujet, Renaud étant
survenu au beau milieu de mon récit. Puis j’ai eu fort à faire avec
Guidon qui s’est aussi trouvé sur mon chemin. J’ai passé d’une
chose à l’autre, de sorte que je ne me suis plus souvenu de
Bradamante. Il m’en souvient maintenant, et je veux vous en parler,
avant que je vous entretienne de Renaud et de Gradasse.
Mais avant que j’entame ce récit, il faut encore que je vous parle
un peu d’Agramant qui avait rallié dans Arles ce qui lui restait de son
armée après le grand désastre nocturne. Cette cité était tout à fait
convenable pour rassembler ses forces éparses ; elle a l’Afrique en
face d’elle, et l’Espagne pour voisine. De plus elle est assise sur le
fleuve, non loin de la mer.
Marsile envoie des ordres dans tout son royaume pour lever des
gens à pied et à cheval, bons ou mauvais. De force ou de bonne
volonté, tout navire apte au combat doit s’armer à Barcelone.
Chaque jour, Agramant rassemble son conseil, et n’épargne ni ses
soins ni sa peine. Toutes les cités d’Afrique sont pressurées
d’exactions de toutes sortes.
Il a fait offrir à Rodomont pour qu’il revienne — mais sans pouvoir
l’obtenir — une de ses cousines, fille d’Almont, avec le beau
royaume d’Oran pour dot. L’altier chevalier ne veut pas quitter le
pont où il a accumulé les armes et les selles vides de tant de
guerriers vaincus par lui, que le rocher en est tout couvert.
Marphise ne voulut pas imiter Rodomont. Dès qu’elle apprit
qu’Agramant avait été défait par Charles, que ses gens étaient
morts, taillés en pièces, ou prisonniers, et que bien peu d’entre eux
avaient pu se réfugier dans Arles, elle s’était mise en chemin sans
attendre d’être appelée. Elle était venue au secours de son roi, et lui
avait apporté sa personne et tout ce qu’elle possédait.
Elle avait amené aussi Brunel, auquel elle n’avait fait aucun mal,
et elle le remit d’elle-même à Agramant. Pendant dix jours et dix
nuits, elle l’avait tenu dans la crainte d’être pendu. Puis quand elle
avait vu que personne n’essayait de le lui reprendre par la force ou
par la prière, elle n’avait pas voulu souiller ses mains altières d’un
sang si méprisable, et elle l’avait délivré de ses liens.
Elle lui pardonna toutes ses anciennes injures et le traîna avec
elle jusqu’à Arles où elle le remit à Agramant. Vous devez bien
penser quelle joie le roi éprouva en voyant un tel secours lui arriver.
Il voulut que Brunel vît bien quel grand cas il faisait de Marphise. Il
l’avait jadis menacé de le faire pendre ; il le fit cette fois pendre bel et
bien.
Le misérable fut laissé, dans un lieu solitaire et sauvage, en proie
aux corbeaux et aux vautours. La justice de Dieu fit que Roger, qui
l’avait une autre fois sauvé en lui ôtant le lacet du cou, fût malade en
ce moment, et ne pût lui venir en aide. Quand il sut l’aventure, la
chose était déjà faite, de sorte que Brunel resta sans secours.
Cependant Bradamante trouvait bien long le délai de vingt jours à
l’expiration desquels Roger devait revenir vers elle et se convertir à
la Foi. A qui attend la fin de la captivité ou de l’exil, il semble que le
temps, qui doit lui donner la liberté ou lui rendre la joie de revoir la
patrie aimée, marche plus lentement que d’habitude.
Dans cette cruelle attente, elle pensait souvent que Ethon et
Piroïs étaient devenus boiteux [10] , ou que la roue du char d’Apollon
était brisée, tellement il lui semblait qu’il ralentissait sa course
habituelle. Le jour lui paraissait plus long que celui où le juste
Hébreu, grâce à son ardente foi, arrêta le soleil au milieu du ciel ; la
nuit lui semblait plus longue que celle qui produisit Hercule.
Oh ! que de fois elle porta envie aux ours, aux loirs, aux blaireaux
somnolents ! Elle aurait voulu passer tout ce temps à dormir, sans se
réveiller jamais, sans entendre quoi que ce fût, jusqu’à ce que Roger
vînt lui-même la tirer de son lourd sommeil. Non seulement elle ne
peut pas le faire, mais elle ne peut pas même dormir une heure dans
toute la nuit.
De côté et d’autre elle se retourne, foulant la plume
inhospitalière, sans jamais goûter de repos. Souvent elle court ouvrir
sa fenêtre, pour voir si l’épouse de Titon s’apprête à répandre,
devant la lumière du matin, les lis blancs et les roses vermeilles. Et
quand le jour a paru, elle ne désire pas moins ardemment voir les
étoiles briller au ciel.
Lorsqu’il n’y eut plus que quatre ou cinq jours pour que le délai
fût expiré, pleine d’espoir, elle s’attendait d’heure en heure à l’arrivée
d’un messager qui lui dirait : voici Roger qui vient. Elle montait
parfois sur une haute tour d’où l’on découvrait les bois épais et les
fertiles campagnes des environs, ainsi qu’une partie de la route qui
conduit de France à Montauban.
Si elle aperçoit alors au loin une armure reluire au soleil, ou
quelqu’un qui ressemble à un chevalier, elle croit que c’est son
Roger tant attendu, et les cils de ses beaux yeux se rassérènent
soudain. Dans chaque voyageur à pied ou sans armes elle croit voir
un messager envoyé vers elle. Et bien que toujours son attente ait
été déçue, elle ne cesse chaque fois d’espérer encore.
Parfois, croyant aller à sa rencontre, elle s’armait, descendait la
montagne et s’avançait dans la plaine. Ne voyant rien, elle espérait
alors qu’il était arrivé à Montauban par une autre route, et elle
rentrait au château, poussée par le même désir qui l’en avait fait
sortir, mais elle n’y trouvait pas davantage Roger. Cependant le
terme tant attendu par elle arriva.
Puis le terme fut dépassé d’un jour, de deux, de trois, de six, de
huit, de vingt, sans qu’elle vît venir son époux, sans qu’elle en apprît
la moindre nouvelle. Alors elle commença à se lamenter de telle
façon, qu’elle aurait ému de pitié, dans les sombres royaumes, les
Furies à la crinière de serpents. Elle meurtrissait ses beaux yeux
divins, sa blanche poitrine, et arrachait ses beaux cheveux dorés.
« — Il est donc vrai — disait-elle — il me faut chercher qui me
fuit et qui se cache de moi ? Donc, j’en suis réduite à désirer qui me
dédaigne ! Il faut que j’implore qui ne veut pas me répondre ! Je dois
laisser mon cœur à qui me hait, à quelqu’un qui est si convaincu de
ses propres mérites, que l’immortelle Déesse devra descendre elle-
même du ciel pour enflammer d’amour son cœur insensible !
« Le hautain sait que je l’aime et que je l’adore, et il ne me veut ni
pour amante, ni pour esclave ! Le cruel sait que je souffre et que je
meurs pour lui, et il attend que je sois morte pour me venir en aide ;
et afin que je ne lui parle point de mes tourments, afin de ne point
laisser fléchir sa farouche résolution, il se cache de moi, semblable à
l’aspic qui refuse d’écouter le chant de l’homme, de peur de se
laisser apprivoiser.
« Hélas, Amour, arrête celui qui, après avoir ainsi brisé ses liens,
s’enfuit devant mes pas trop lents à le suivre dans sa course ; ou
bien rends-moi telle que j’étais quand tu t’es emparé de moi, alors
que je n’étais la sujette ni de toi ni de personne. Hélas ! combien
vaine est mon espérance de t’inspirer de la pitié par mes prières, toi
qui te plais à tirer des yeux des ruisseaux de larmes, ou qui plutôt en
fais ta nourriture, ta vie !
« Mais dois-je me plaindre d’autre chose, hélas ! que de mon
désir insensé ? Il m’emporte si haut dans les airs, qu’il arrive à des
régions où il se brûle les ailes ; alors, ne pouvant plus me soutenir, il
me laisse tomber du ciel. Et ce n’est point là la fin de mes maux ; car
toujours il recommence, et va se brûler de nouveau ; de sorte que je
suis sans fin précipitée dans l’abîme.
« Je dois me plaindre de moi, bien plus encore que de mon
désir ; n’est-ce pas moi qui lui ai ouvert mon esprit, dont il a chassé
la raison, et où mon pouvoir est au-dessus du sien ? Il m’entraîne de
mal en pis, et je ne puis le contenir, car il n’existe pas de frein
capable de l’arrêter. Je comprends qu’il me mène à la mort, car plus
j’attends, plus mon mal me fait souffrir.
« Et pourquoi même me plaindre de moi ? Quelle autre erreur ai-
je commise si ce n’est de t’aimer ? Faut-il s’étonner que mes sens
de femme, faibles et malades, aient été soudain subjugués ? Devais-
je me défendre du plaisir que me faisaient éprouver la beauté
suprême, les grandes manières et les sages paroles ? Celui-là est
bien malheureux qui cherche à ne pas voir le soleil.
« Outre que c’était ma destinée, le fus entraînée par les paroles
d’autres personnes dignes de foi. Une félicité suprême me fut
montrée comme devant être le prix de cet amour. Si ce fut une
fausse prédiction, si les conseils que me donna Merlin furent
trompeurs, je puis bien me plaindre de lui, mais je ne puis cesser
d’aimer Roger.
« Je puis me plaindre de Merlin et de Mélisse, et je me plaindrai
éternellement de tous les deux. A l’aide des esprits infernaux, ils
m’ont fait voir les fruits qui devaient éclore de ma semence, afin de
m’enchaîner par cette fausse espérance. Je ne vois pas quel était
leur motif, sinon qu’ils étaient sans doute jaloux de ma douce
sécurité, de mon cher repos. — »
La douleur l’envahit si fort, qu’il n’y a plus en elle de place pour
aucun soulagement. Cependant, le souvenir de ce que lui a dit
Roger en partant lui revient à la mémoire et ranime l’espérance en
son cœur. En dépit de toutes les apparences contraires, elle veut
espérer d’heure en heure le voir revenir.
Cet espoir la soutint, les vingt jours étant expirés, un mois
encore, pendant lequel sa douleur fut moins poignante qu’elle ne
l’eût été sans cela. Un jour qu’elle suivait la route par laquelle elle
allait souvent au-devant de Roger, la malheureuse apprit une
nouvelle qui fit s’enfuir l’espérance bien loin d’elle.
Elle fit la rencontre d’un chevalier gascon qui revenait
directement du camp africain, où il avait été fait prisonnier le jour de
la grande bataille livrée devant Paris. Elle l’interrogea longtemps,
jusqu’à ce qu’elle fût arrivée à ses fins. Elle lui demanda des
nouvelles de Roger, et s’en tenant à lui, elle ne sortit plus de ce sujet
de conversation.
Le chevalier lui en donna des nouvelles exactes, car il
connaissait très bien toute cette cour. Il lui raconta le combat que
Roger avait soutenu seul à seul contre le redoutable Mandricard,
comment il l’avait tué, après en avoir reçu une blessure qui le tint
pendant plus d’un mois en danger de mort. Si son histoire s’était
bornée là, il aurait donné la véritable excuse de Roger.
Mais il ajouta qu’il y avait au camp une damoiselle, nommée
Marphise, qui n’était pas moins belle que vaillante et experte à
toutes les armes ; qu’elle aimait Roger et que Roger l’aimait ; qu’on
les voyait rarement lui sans elle et elle sans lui, et que chacun
croyait qu’ils s’étaient donné leur foi ;
Que le mariage devait se célébrer dès que Roger serait guéri, et
que chacun des deux rois, ainsi que tous les chefs païens en
éprouvaient un grand plaisir, car ils connaissaient la valeur
surhumaine de l’un et de l’autre, et ils espéraient qu’il en sortirait une
race d’hommes de guerre la plus vaillante qui fût jamais sur terre.
Le Gascon croyait dire vrai ; car dans l’armée des Maures c’était
l’universelle croyance, et l’on en parlait également partout hors du
camp. Les nombreux témoignages de sympathie que Roger et
Marphise échangeaient, avaient donné lieu à ces rumeurs ; et il suffit
d’une seule bouche pour accréditer une nouvelle bonne ou
mauvaise, et la propager à l’infini.
L’arrivée de Marphise parmi les Maures, en compagnie de Roger,
et sa présence continuelle à ses côtés, avaient tout d’abord donné
naissance à ce bruit. Mais ce qui l’avait encore accru, c’était
qu’après avoir quitté le camp en enlevant Brunel, comme je l’ai
conté, elle y était ensuite revenue sans avoir été rappelée par
personne et seulement pour voir Roger.
Elle était venue au camp non pas une fois, mais souvent, dans le
seul but de visiter Roger qui languissait gravement blessé. Elle y
restait tout le jour, et ne partait que le soir, ce qui donnait encore plus
à parler aux gens, car on la connaissait pour tellement fière, qu’elle
tenait tout le monde pour vil à côté d’elle, tandis qu’elle était humble
et douce pour Roger seul.
Comme le Gascon assurait Bradamante que tout cela était vrai,
celle-ci fut saisie d’une peine si violente, qu’elle faillit tomber à la
renverse. Sans rien répondre, elle fit faire volte-face à son destrier,
le cœur plein de jalousie, de colère et de rage. Ayant perdu toute
espérance, elle rentra furieuse dans son appartement.
Et sans quitter ses armes, elle se jeta tout de son long sur son lit,
le visage enfoui dans les draps qu’elle prit dans sa bouche pour
s’empêcher de crier. Se rappelant ce que le chevalier lui avait dit,
elle tomba dans une telle douleur, que ne pouvant la contenir plus
longtemps, force lui fut de l’exhaler en ces termes :
« — Malheureuse ! à qui dois-je croire désormais ? Tous sont
perfides et cruels, puisque tu es cruel et perfide, ô mon Roger, toi
que je tenais pour si dévoué et si fidèle. Quelle cruauté, quelle
trahison coupable trouveras-tu dans les tragédies, qui ne soit
moindre que la tienne, si tu veux songer à ce que je méritais et à ce
que tu me devais ?
« Pourquoi, Roger, alors qu’il n’existe pas au monde de chevalier
plus hardi, plus beau que toi, ni qui t’égale en vaillance, en belles
manières et en courtoisie ; pourquoi ne fais-tu pas en sorte qu’entre
toutes tes autres vertus si éclatantes, on dise que tu possèdes aussi
la constance, et que tu gardes inviolable la fidélité, cette vertu
devant laquelle toutes les autres cèdent et s’inclinent ?
« Ne sais-tu pas que, sans elle, la vaillance et les nobles
manières ne sont rien ? C’est ainsi que les plus belles choses ne
peuvent se voir là où la lumière ne les éclaire point. Il te fut facile de
tromper une damoiselle dont tu étais le seigneur, l’idole et la divinité,
et à qui tu aurais pu, avec une parole, faire croire que le soleil est
obscur et froid.
« Cruel, de quelle faute auras-tu du remords, si tu ne te repens
point de tuer qui t’aime ? Si tu acceptes si légèrement de manquer à
ta foi, quel est donc le poids qui pourrait peser sur ton cœur ?
Comment traites-tu tes ennemis, si, à moi qui t’aime, tu causes de
pareils tourments ? Je pourrai bien dire qu’il n’y a pas de justice au
ciel, si ma vengeance tarde à t’atteindre.
« L’ingratitude égoïste est, de tous les crimes, celui qui pèse le
plus sur l’homme ; c’est pour cela que le plus beau des anges du ciel
fut précipité dans le plus obscur et le plus profond de l’enfer. Et si
une grande faute exige un grand châtiment lorsqu’elle n’a pas été
lavée par une pénitence nécessaire, prends garde qu’un dur
châtiment ne t’atteigne pour ton ingratitude envers moi, ingratitude
dont tu ne veux pas te repentir.
« Je dois encore, ô cruel, en outre de tous tes méfaits, t’accuser
de vol à mon égard ; ce n’est point parce que tu tiens mon cœur, que
je parle ainsi ; de cela, je consens à t’absoudre ; je veux dire que tu
t’étais donné à moi, et que tu m’as repris ton cœur sans motif.
Rends-le-moi, parjure ! tu sais bien que celui qui détient le bien
d’autrui ne peut être sauvé.
« O Roger, tu m’as délaissée ; moi je ne veux point te délaisser ;
et je le voudrais que je ne le pourrais pas. Mais pour échapper à
mes chagrins, à mon angoisse, je puis et je veux mettre fin à mes
jours. Cela seul m’est douloureux de mourir sans être aimée de toi,
car si Dieu m’avait concédé de mourir alors que je t’étais chère, je
n’aurais jamais connu de mort plus heureuse. — »
Ainsi disant, elle saute de son lit, disposée à mourir, et, tout
enflammée de rage, elle dirige la pointe de son épée sur son sein
gauche. Elle s’aperçoit alors qu’elle est toute couverte de ses armes.
Une pensée meilleure naît dans son esprit et lui parle ainsi tout bas :
« — O dame de si haut lignage, tu veux donc en mettant fin à tes
jours encourir un si grand blâme ?
« Ne vaut-il pas mieux que tu ailles au camp, où une mort
glorieuse peut se rencontrer à toute heure ? Là, s’il advient que tu
tombes devant Roger, il pleurera peut-être encore sur ta mort. Mais
si tu meurs frappée par son épée, ne mourras-tu pas plus contente ?
Il est bien juste que ce soit lui qui t’arrache la vie, puisqu’il te fait
vivre en tant de peine.
« Peut-être encore, avant que tu meures, pourras-tu tirer
vengeance de cette Marphise qui cause ta mort en détournant de toi
Roger par ses amours frauduleuses et déshonnêtes. — » Ces
pensées semblent meilleures à la damoiselle. Aussitôt, elle se fait
faire, pour mettre sur ses armes, une devise qui doit indiquer sa
désespérance et son désir de mourir.
Sa soubreveste était de la couleur de la feuille qui se fane quand
elle tombe de la branche, et que la sève, qui la faisait vivre sur
l’arbre, vient à lui manquer. Elle l’avait fait broder au dehors de
troncs de cyprès flétris, comme lorsque la hache les a frappés. Ce
vêtement convenait très bien à sa douleur.
Elle prit le destrier qu’Astolphe avait coutume de monter, et cette
lance d’or qui faisait vider la selle à tous les cavaliers qu’elle
touchait. Astolphe la lui avait donnée. Je n’ai pas besoin de vous
répéter à quelle occasion, ni où, ni quand, pas plus que de vous
redire de qui il l’avait eue auparavant. Elle la prit, sans toutefois
connaître sa puissance stupéfiante.
Sans écuyer, sans compagnon, elle descendit de la montagne et
prit le plus court chemin vers Paris, devant lequel elle croyait qu’était
le camp sarrasin, car la nouvelle ne s’était pas encore répandue que
le paladin Renaud, avec l’aide de Charles et de Maugis, avait fait
lever le siège de Paris.
Elle avait laissé derrière elle le pays et la cité de Cahors, les
monts où naît la Dordogne, et elle découvrait les environs de
Montferrand et de Clermont, quand elle vit venir sur la même route
qu’elle une dame au doux visage, ayant un écu attaché à l’arçon de
sa selle. Trois chevaliers marchaient à ses côtés.
D’autres dames et des écuyers suivaient à la file et formaient une
troupe nombreuse. En passant à côté de l’un d’eux, la fille d’Aymon
lui demanda qui était cette dame, et celui-ci lui dit : « — Cette dame,
envoyée comme messagère au roi du peuple français, est venue par
mer de l’Ile Perdue, située près du pôle arctique.
« Les uns nomment ce pays l’Ile Perdue, d’autres l’appellent
Islande. La reine de cette île, qui est d’une beauté telle que le ciel
n’en a accordé de pareille qu’à elle, envoie à Charles l’écu que vous
voyez, à la condition expresse de le donner au meilleur chevalier qui
à sa connaissance existe au monde.
« Comme elle s’estime, ce qu’elle est en réalité, la plus belle
dame qui se soit jamais vue, elle voudrait trouver un chevalier qui
surpasse tous les autres en hardiesse et en puissance, car elle a
mis et résolu dans sa pensée de n’avoir pour amant et pour seigneur
que celui qui sera le premier dans le métier des armes.
« Elle espère qu’en France, à la cour fameuse de Charlemagne,
se trouve le chevalier qui, par mille prouesses, a prouvé qu’il est plus
hardi et plus fort que tous les autres. Les trois chevaliers qui font
escorte à la dame sont rois tous les trois, et je vous dirai aussi de
quels pays ; l’un est roi de Suède, l’autre est roi de Gothie ; le
troisième est roi de Norvège. Ils ont peu d’égaux sous les armes, si
tant est qu’ils en aient.
« Leurs royaumes ne sont pas voisins, mais sont les moins
éloignés de l’Ile Perdue, ainsi nommée parce que la mer qui la
baigne est peu connue des navigateurs. Tous les trois étaient
amoureux de la reine, et ils se disputaient à qui l’aurait pour femme.
Pour lui plaire, ils ont accompli des exploits dont on parlera tant que
tournera le ciel.
« Mais elle n’a voulu ni d’eux, ni d’aucun autre qui ne serait pas
tenu pour le premier chevalier du monde dans les armes. « — Je
fais peu de cas — avait-elle coutume de leur dire — des prouesses
que vous avez accomplies en ces lieux. Si l’un de vous l’emportait
sur les deux autres, comme le soleil l’emporte sur les étoiles, je
pourrais le trouver sublime ; mais je ne pense pas cependant qu’il
pût se vanter d’être le meilleur chevalier qui porte aujourd’hui les
armes.
« Je vais envoyer à Charlemagne, que j’estime et que j’honore
comme le plus sage prince qui soit au monde, un riche écu d’or, à la
condition qu’il le donnera au chevalier de sa cour qui aura la plus
grande réputation de vaillance. Que ce chevalier soit son vassal ou
celui d’un autre, je veux m’en rapporter à l’avis de ce roi.
« Quand Charles aura reçu l’écu et l’aura donné à celui qu’il
croira plus hardi et plus fort que tous les autres, qu’il se trouve à sa
cour où ailleurs, si l’un de vous, grâce à sa valeur, peut me rapporter
l’écu, je donnerai à celui-là tout mon amour, je placerai en lui tout
mon désir, et celui-là sera mon mari et mon seigneur. — »
« Ce sont ces paroles qui ont poussé ces trois rois à venir d’une
mer si éloignée jusqu’ici. Ils sont résolus à rapporter l’écu, ou à
mourir de la main de celui qui l’aura. — » Bradamante prêta une
grande attention au récit de l’écuyer, lequel, prenant ensuite les
devants et pressant son cheval, rejoignit ses compagnons.
Bradamante ne galope ni ne court après lui ; elle poursuit
paisiblement son chemin, tout en songeant aux nombreux
événements qui peuvent résulter de ce qu’elle vient d’apprendre.
Elle se dit, en somme, que cet écu va apporter en France la
discorde, et sera le sujet de querelles infinies et d’une immense
inimitié entre les paladins et les autres chevaliers, si Charles veut
désigner quel est le meilleur d’entre eux et lui donner l’écu.
Cette pensée lui oppresse le cœur ; mais ce qui lui pèse le plus,
ce qui la ronge, c’est que Roger lui ait enlevé son amour et l’ait
donné à Marphise. Tout son esprit est tellement concentré sur cette
idée, qu’elle ne fait point attention à son chemin, qu’elle ne se
préoccupe point de savoir où elle va, ni si elle trouvera une hôtellerie
commode pour passer la nuit.
De même qu’un bateau, qu’un coup de vent ou toute autre cause
a détaché de la rive, s’en va sans nocher et sans guide où l’entraîne
le courant du fleuve, ainsi chemine la jeune amante, ayant toute sa
pensée tournée vers son Roger. Elle va au gré de Rabican, car
l’esprit qui doit guider la bride est bien loin d’elle.
Elle lève enfin les yeux, et voit que le soleil a tourné le dos aux
cités de Bocco, et qu’il s’est plongé dans le sein de sa nourrice, delà
le Maroc. Alors elle s’aperçoit qu’il serait imprudent de loger au
milieu des champs, car il souffle un vent froid, et l’air brumeux fait
présager, pour la nuit, de la pluie ou de la neige.
Elle fait presser le pas à son cheval, et elle ne tarde pas à
rencontrer un berger qui se disposait à quitter les champs, après
avoir réuni devant lui tout son troupeau. La dame lui demande avec
beaucoup d’instances de lui enseigner où elle pourra se loger bien
ou mal ; car quelque mal que l’on soit logé, on ne risque jamais
d’être plus mal qu’en plein air, exposé à la pluie.
Le berger lui dit : « — Je ne connais aucun endroit que je puisse
vous indiquer, sinon à quatre ou six lieues plus loin, un château qui
s’appelle la Roche-Tristan. Mais il n’est pas donné à tout le monde
d’y loger, car le chevalier qui désire y prendre logement doit le
conquérir la lance à la main, et le défendre contre tout nouveau
venu.
« Si, quand il arrive un chevalier, la place se trouve vide, le
châtelain le reçoit ; mais il lui fait promettre que, s’il survient un
nouvel arrivant, il sortira pour jouter avec lui ; si personne ne vient, il
n’a point à se déranger, mais si quelqu’un se présente, force lui est
de reprendre ses armes et de combattre. Celui des deux qui est
vaincu cède sa place à l’autre, et va coucher sous le ciel serein.
« Si deux, trois, quatre guerriers, ou un plus grand nombre,
arrivent ensemble les premiers, ils reçoivent paisiblement
l’hospitalité. Mais quiconque vient seul ensuite, trouve un tout autre
accueil, car ceux qui sont déjà installés lui donnent une plus rude
besogne. De même, si un seul chevalier a reçu d’abord l’hospitalité,
les deux, les trois, les quatre et tous les autres qui viennent après, le
forcent à combattre contre chacun d’eux ; de sorte que s’il a du
courage, cela lui est d’un grand secours.
« Ce n’est pas tout ; si une dame ou une damoiselle, seule ou en
compagnie, arrive à cette roche, et puis qu’il en vienne une autre,
c’est à la plus belle qu’est réservée l’hospitalité ; la moins belle doit
rester dehors. — » Bradamante demande où est cette roche, et le
brave berger, sans plus rien dire, lui indique avec la main un endroit
situé à cinq ou six milles loin de là.
Bien que Rabican fût bon trotteur, la dame ne peut le faire
avancer assez vite à travers ces chemins fangeux et défoncés, — la
saison avait été très pluvieuse — pour arriver avant que la nuit noire
n’ait obscurci toute la contrée. Elle trouva la porte close, et elle dit à
celui qui en avait la garde qu’elle voulait loger.
Le gardien répondit que la place était occupée par des dames et
des guerriers qui étaient arrivés avant elle, et qui attendaient autour
du feu que leur souper leur fût servi. « — S’ils ne l’ont pas encore
mangé — dit la dame — je ne crois pas que le cuisinier l’aura fait
cuire pour eux. Va leur dire que je les attends ici, car je connais la
coutume et j’entends l’observer. — »
Le gardien partit et alla porter l’ambassade aux chevaliers qui se
reposaient tout à leur aise, et auxquels cette nouvelle fut fort peu
agréable, attendu qu’elle les forçait de sortir à l’air froid et malsain.
Ajoutez à cela qu’une grande pluie commençait à tomber. Ils se
levèrent pourtant, prirent leurs armes, et, laissant leurs compagnons
dans le château, ils arrivèrent tous ensemble, sans trop se presser, à
l’endroit où la dame les attendait.
C’étaient trois chevaliers d’une telle valeur que peu d’autres
valaient plus qu’eux au monde. C’étaient eux que Bradamante avait
vus le jour même à côté de l’ambassadrice d’Islande, et qui s’étaient
vantés de rapporter de France dans leur pays l’écu d’or. Ayant
pressé plus vigoureusement leurs chevaux, ils étaient arrivés avant
Bradamante.
Peu de chevaliers étaient meilleurs qu’eux sous les armes. Mais
Bradamante espère bien qu’elle sera du nombre de ceux-là, car elle
entend ne point passer la nuit dehors, ni rester à jeun. Les habitants
du château, placés aux fenêtres et dans les galeries, regardaient la
joute à la lumière que projetait la lune malgré de nombreux nuages,
et bien que la pluie fût abondante.
De même que l’amant bien épris, sur le point d’entrer dans la
chambre où il espère commettre de doux larcins, sent son cœur
battre de plaisir quand il entend, après une longue attente, glisser
doucement le verrou, ainsi Bradamante, désireuse de se mesurer
avec les chevaliers, se réjouit en entendant les portes s’ouvrir, et en
voyant les trois guerriers franchir le pont et sortir du château.
Aussitôt qu’elle les a vus franchir le pont et sortir tous les trois à
peu d’intervalle les uns des autres, elle tourne bride pour prendre du
champ, et revient chassant à toute bride son bon cheval, et tenant
en arrêt la lance que lui donna son cousin et avec laquelle on ne
joute jamais en vain, car tout guerrier touché par elle, fût-il Mars lui-
même, doit être forcément jeté hors de selle.
Le roi de Suède, qui s’avança le premier, fut aussi le premier jeté
à terre, tellement fort fut le coup porté sur son casque par la lance
qui ne fut jamais baissée en vain. Le roi de Gothie fournit la seconde
course, et se retrouva en un clin d’œil, les jambes en l’air, loin de
son destrier. Le troisième resta culbuté sens dessus dessous dans
l’eau bourbeuse du fossé.
Après les avoir, en trois coups, fait voltiger les pieds en l’air et la
tête en bas, Bradamante se dirige vers le château où elle doit
recevoir l’hospitalité pendant la nuit ; mais, avant de lui livrer
passage, elle trouve quelqu’un qui lui fait jurer qu’elle sortirait à
chaque fois qu’elle serait appelée à jouter par de nouveaux
arrivants. Le châtelain, qui a été témoin de sa vaillance, la reçoit
avec grand honneur.
Il en est de même de la dame qui était venue le soir même en
compagnie des trois chevaliers, envoyée, ainsi que je l’ai dit, de l’Ile
Perdue en ambassade au roi de France. Elle se lève et, en femme
gracieuse et affable qu’elle était, elle vient au-devant de Bradamante
qui la salue courtoisement, la prend par la main, et la conduit près
du feu.
Bradamante, commençant de se désarmer, avait déjà déposé
son écu et retiré son casque, lorsqu’en ôtant ce dernier, elle fit
tomber une coiffe d’or dans laquelle elle retenait à plat ses longs
cheveux. Ceux-ci tombèrent épars le long de ses épaules qu’ils
couvrirent entièrement, et la firent connaître pour une damoiselle
aussi belle de visage que fière sous les armes.
De même qu’au lever du rideau, la scène apparaît étincelante de
mille lumières qui se reflètent sur les arceaux, les palais
superbement dorés et remplis de statues et de peintures ; ou de
même que le soleil, s’échappant d’une nuée, découvre sa face
limpide et sereine, ainsi la dame, en ôtant son casque, semble
entr’ouvrir le paradis.
Déjà ses beaux cheveux que son frère avait coupés autrefois, ont
repoussé, et bien qu’ils ne fussent pas encore revenus à leur état
primitif, ils étaient assez longs pour qu’elle pût les nouer par derrière
la tête. Le châtelain de la Roche la reconnaît aussitôt pour
Bradamante, car il l’avait vue bien d’autres fois, et plus que jamais il
la comble de prévenances, et lui témoigne son estime.
Ils s’assoient près du feu, et ils repaissent leurs oreilles d’une
conversation agréable et honnête, pendant que l’on prépare une
nourriture plus substantielle pour le reste du corps. La dame
demande à son hôte si cette façon d’exercer l’hospitalité est
ancienne ou nouvelle, quand elle a commencé et qui l’a établie. Le
chevalier lui répond ainsi :
« — Au temps où régnait Pharamond, son fils Clodion eut pour
amie une dame gracieuse et belle, et surpassant par ses manières
distinguées toutes les autres femmes de cette époque antique. Il
l’aimait tellement, qu’il ne la perdait pas plus de vue que Jupiter la
vache Io dont il s’était fait le pasteur, car chez lui la jalousie était
égale à l’amour.

You might also like