Figure 8.1

void divideInts(int op1, int op2, int& quotient, int& remainder)
{
   assert (op2 != 0);
   quotient = op1 / op2;
   remainder = op1 % op2;
}

 

Figure 8.2

#include <iostream> 			// <<, cout, endl
#include <cassert> 			// assert()
using namespace std;

void divideInts(int op1, int op2, int& quotient, int& remainder);

int main()
{
   cout << " Division Table\n\n";
   int quot, // variables to hold the values
   rem; // sent back from divideInts()
   for (int j = 1; j <= 4; j++)
   {
       	for (int i = 1; i <= 4; i++)
	{
	   divideInts(i, j, quot, rem);
	   cout << i << " divided by " << j
		<< " gives a quotient of " << quot
		<< " and a remainder of " << rem << endl;
	}
   cout << endl;
   }
}
/*** Insert definition of divideInts() from Figure 8.1 here. ***/

 

 

Sample Run for Figure 8.2

Division Table
1 divided by 1 gives a quotient of 1 and a remainder of 0
2 divided by 1 gives a quotient of 2 and a remainder of 0
3 divided by 1 gives a quotient of 3 and a remainder of 0
4 divided by 1 gives a quotient of 4 and a remainder of 0

1 divided by 2 gives a quotient of 0 and a remainder of 1
2 divided by 2 gives a quotient of 1 and a remainder of 0
3 divided by 2 gives a quotient of 1 and a remainder of 1
4 divided by 2 gives a quotient of 2 and a remainder of 0

1 divided by 3 gives a quotient of 0 and a remainder of 1
2 divided by 3 gives a quotient of 0 and a remainder of 2
3 divided by 3 gives a quotient of 1 and a remainder of 0
4 divided by 3 gives a quotient of 1 and a remainder of 1

1 divided by 4 gives a quotient of 0 and a remainder of 1
2 divided by 4 gives a quotient of 0 and a remainder of 2
3 divided by 4 gives a quotient of 0 and a remainder of 3
4 divided by 4 gives a quotient of 1 and a remainder of 0

 

 

Figure 8.3

#include <iostream> 			// cout, cin, <<, >>
#include <string> 			// string, getline
using namespace std;

void decomposeName(const string& fullName, string& firstName,
string& middleName, string& lastName);

int main()
{
   cout << "Enter a full name: ";
   string fullName;
   getline(cin, fullName);
   string fName, mName, lName;
   decomposeName(fullName, fName, mName, lName);
   cout << fName << endl
	<< mName << endl
	<< lName << endl;
}

#include <cassert> 			// assert()
using namespace std;

void decomposeName(const string& fullName, string& firstName,
		   string& middleName, string& lastName)
{
   int firstBlankIndex = fullName.find(' ', 0);
   assert(firstBlankIndex != string::npos);
   firstName = fullName.substr(0, firstBlankIndex);
   int secondBlankIndex = fullName.find(' ', firstBlankIndex + 1);
   assert(secondBlankIndex != string::npos);
   middleName = fullName.substr(firstBlankIndex + 1,
                                secondBlankIndex - firstBlankIndex - 1);
   int fullNameSize = fullName.size();
   lastName = fullName.substr(secondBlankIndex + 1,
   			     fullNameSize - secondBlankIndex - 1);
}
-------------------------
Sample run:

Enter a full name: John Quincy Doe
John
Quincy
Doe

 

 

Figure 8.4

void makeChange(double purchaseAmount, 	// amount of purchase
		double payment, 	// amount of payment
		int& dollars, 		// dollars of change
		int& quarters, 		// quarters of change
		int& dimes, 		// dimes of change
		int& nickels, 		// nickels of change
		int& pennies) 		// pennies of change
{
   int change = int(100.0 * (payment - purchaseAmount) + 0.5);
   if (change > 0)
   {
	dollars = change / 100; 	// 100 pennies per dollar
	change %= 100; 			// compute remaining change
	quarters = change / 25; 	// 25 pennies per quarter
	change %= 25; 			// compute remaining change
	dimes = change / 10; 		// 10 pennies per dime
	change %= 10; 			// compute remaining change
	nickels = change / 5; 		// 5 pennies per nickel
	pennies = change % 5; 		// pennies are all that's left
   }
   else
   {
	cerr << "*** Purchase amount: " << purchaseAmount
	     << " exceeds payment: " << payment << endl;
	dollars = quarters = dimes = nickels = pennies = 0;
   }
}

 

 

Figure 8.5

#include <iostream> 			// cout, cin, <<, >>
#include <string> 			// string
using namespace std;

void makeChange(double purchaseAmount, double payment,
int& dollars, int& quarters, int& dimes,
int& nickels, int& pennies);

int main()
{
   cout << "This program tests a change-making function...\n\n";
   double itemCost, // a purchase
   amountPaid; // what was paid
   int numDollars, // variables for
   numQuarters, // the values
   numDimes, // to be output
   numNickels,
   numPennies;
   for (;;)
   {
	cout << "Enter item cost (negative to quit) and amount paid: ";
	cin >> itemCost;
	if (itemCost < 0) break;
	cin >> amountPaid;
	makeChange(itemCost, amountPaid, numDollars,
	numQuarters, numDimes, numNickels, numPennies);
	cout << "The change from this purchase is:\n"
	     << numDollars << " dollars,\n"
	     << numQuarters << " quarters,\n"
	     << numDimes << " dimes,\n"
	     << numNickels << " nickels, and\n"
	     << numPennies << " pennies\n\n";
   }
}
/*** Insert definition of makeChange() from Figure 8.4 here. ***/
-------------------------------------------------
Sample Runs
This program tests a change-making function...

Enter item cost (negative to quit) and amount paid: 1.01 2.00

The change from this purchase is:
0 dollars,
3 quarters,
2 dimes,
0 nickels, and
4 pennies

Enter item cost (negative to quit) and amount paid: 1.34 5.00

The change from this purchase is:
3 dollars,
2 quarters,
1 dimes,
1 nickels, and
1 pennies

Enter item cost (negative to quit) and amount paid: 9.99 10.00

The change from this purchase is:
0 dollars,
0 quarters,
0 dimes,
0 nickels, and
1 pennies
Enter item cost (negative to quit) and amount paid: -1

 

 

Figure 8.7

int factorial(int n);
inline int sum(int n)
{
   return n * (n + 1) / 2;
}

// ... other function prototypes and/or inline definitions

 

 

Figure 8.10

void move(int n, char source, char destination, char spare)
{
   if (n <= 1) 						// anchor
	cout << "Move the top disk from " << source << " to "
	     << destination << endl;
   else
   { 							// inductive case
	move(n-1, source, spare, destination);
	move(1, source, destination, spare);
	move(n-1, spare, destination, source);
   }
}

 

 

Figure 8.11

#include <iostream>
using namespace std;

void move(int n, char source, char destination, char spare);

int main()
{
   const char PEG1 = 'A', 		// the three pegs
   	      PEG2 = 'B',
   	      PEG3 = 'C';
   cout << "This program solves the Hanoi Towers puzzle.\n\n";
   cout << "Enter the number of disks: ";
   int numDisks; 			// the number of disks to be moved
   cin >> numDisks;
   cout << endl;
   move(numDisks, PEG1, PEG2, PEG3); 	// the solution
}

/*** Insert definition of move() from Figure 8.10 here. ***/

 

 

Sample Run for Figure 8.11

This program solves the Hanoi Towers puzzle.

Enter the number of disks: 4
Move the top disk from A to B
Move the top disk from A to C
Move the top disk from B to C
Move the top disk from A to B
Move the top disk from C to A
Move the top disk from C to B
Move the top disk from A to B
Move the top disk from A to C
Move the top disk from B to C
Move the top disk from B to A
Move the top disk from C to A
Move the top disk from B to C
Move the top disk from A to B
Move the top disk from A to C
Move the top disk from B to C

 

 

Figure 8.12

class Sphere
{
   public:
   Sphere();
	// ... other methods omitted ...
   static int getNumberOfSpheres();

   private:
   double myRadius, myDensity, myWeight;
   static int numberOfSpheres;
};

int Sphere::numberOfSpheres = 0;

inline Sphere::Sphere()
{
   myRadius = myDensity = myWeight = 0.0;
   numberOfSpheres++;
}

inline int Sphere::getNumberOfSpheres()
{
   return numberOfSpheres;
}

 

 

Figure 8.13

#include <iostream>
using namespace std;

#include "Sphere.h"

int main()
{
   for (;;)
   {
	cout << "\nEnter a positive value (0 to quit): ";
	int aValue;
	cin >> aValue;
	if (aValue < 1) break;
	Sphere aSphere;
	cout << "Total number of spheres: "
	     << Sphere::getNumberOfSpheres() << endl;
   }
}
------------------------
Sample Run:

Enter a positive value (0 to quit): 1
Total number of spheres: 1

Enter a positive value (0 to quit): 1
Total number of spheres: 2

Enter a positive value (0 to quit): 1
Total number of spheres: 3

Enter a positive value (0 to quit): 1
Total number of spheres: 4

Enter a positive value (0 to quit): 0

 

Figure 8.15

#include <iostream>
using namespace std;

#include "Sphere.h" 			// now contains a destructor

int main()
{
   for (;;)
   {
	cout << "\nEnter a positive value (0 to quit): ";
	int aValue;
	cin >> aValue;
	if (aValue < 1) break;
	Sphere s0; 			// construct a Sphere object
	cout << "Inside the loop, total number of spheres is: "
	     << Sphere::getNumberOfSpheres() << endl;
   } 					// Sphere destructor gets called here for 
					// s0 each repetition
   cout << "\nOutside the loop, total number of spheres is: "
	<< Sphere::getNumberOfSpheres() << endl;
   Sphere s1, s2, s3; // construct 3 Sphere objects
   cout << "At the end, total number of spheres is: "
	<< Sphere::getNumberOfSpheres() << endl;
} 	
					// Sphere destructor gets called 
					// here for s1, s2, and s3
------------------------------------------
Sample Run:

Enter a positive value (0 to quit): 9
Inside the loop, total number of spheres is: 1

Enter a positive value (0 to quit): 9
Inside the loop, total number of spheres is: 1

Enter a positive value (0 to quit): 9
Inside the loop, total number of spheres is: 1

Enter a positive value (0 to quit): 0
Outside the loop, total number of spheres is: 0

At the end, total number of spheres is: 3