Full Download Starting Out With C++ From Control Structures To Objects 8th Edition Gaddis Solutions Manual All Chapter 2024 PDF
Full Download Starting Out With C++ From Control Structures To Objects 8th Edition Gaddis Solutions Manual All Chapter 2024 PDF
Full Download Starting Out With C++ From Control Structures To Objects 8th Edition Gaddis Solutions Manual All Chapter 2024 PDF
https://testbankfan.com/product/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-9th-edition-gaddis-solutions-manual/
https://testbankfan.com/product/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-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/
https://testbankfan.com/product/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-brief-version-9th-edition-gaddis-test-
bank/
https://testbankfan.com/product/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-6th-edition-gaddis-solutions-
manual/
LESSO N S E T
7 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.
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
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.
#include <iostream>
using namespace std;
Pre-lab Reading Assignment 117
const int TOTALGRADES = 50; // TOTALGRADES is the maximum size of the array
// function prototypes
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
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
//***********************************************************************
cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;
continues
118 LESSON SET 7 Arrays
cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;
}
//****************************************************************************
// 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
//****************************************************************************
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 [], int); // prototype without named parameters
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;
Sample Program 7.2 shows the revised code (in bold) of Sample Program 7.1 using
typedef.
#include <iostream>
using namespace std;
// function prototypes
continues
120 LESSON SET 7 Arrays
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
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
//***********************************************************************
cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;
cout << "Please input a grade or type -99 to stop: " << endl;
cin >> grade;
}
Pre-lab Reading Assignment 121
//****************************************************************************
// 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
//****************************************************************************
return float(sum)/sizeOfArray;
}
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;
continues
122 LESSON SET 7 Arrays
int main()
{
ProfitType profit; // defines profit as a 2 dimensional array
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
L ES S ON 7 A
// 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.
#include <iostream>
using namespace std;
int main()
{
GradeType grades; // the array holding the grades.
int numberOfGrades; // the number of grades read.
int pos; // index to the array.
pos = 0;
cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
continues
124 LESSON SET 7 Arrays
cout << endl << "The average of all the grades is " << avgOfGrades << endl;
cout << endl << "The highest grade is " << highestGrade << endl;
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
//
//********************************************************************************
}
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
//
//****************************************************************************
//****************************************************************************
// 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
//
//****************************************************************************
{
// Fill in the code for this function
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
#include <iostream>
#include <iomanip>
using namespace std;
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
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 << "Please input the number of grades each student will receive." << endl
<< "This must be a number between 1 and " << MAXGRADE << " inclusive”
<< endl;
{
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;
cout << firstname << " " << lastname << " has an average of ";
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
//
//***********************************************************************
{
// 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
//
//***********************************************************************
{
// Fill in the code for this function
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.
#include <iostream>
#include <iomanip>
using namespace std;
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
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.
//
//*******************************************************************************
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;
// 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
//
//****************************************************************************
float highestPrice;
highestPrice = table[row][col];
return highestPrice;
}
continues
132 LESSON SET 7 Arrays
// 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.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int yearsUsed; // holds the number of years used