Value-Returning Functions
A call to a value-returning function is part of an expression.
A value-returning function is used when there is only one result returned by a function and that result is to be used directly in an expression.
A value-returning function returns one value, not through a parameter but by means of a return statement.

Value-Returning Function Example
int Power (/* in */ int x,     // Base number
           /* in */ int n)    // Power to raise base to
{
   int result;   // Holds intermediate powers of x
   result = 1;
   while (n > 0)
   {
      result = result * x;
      n--;
   }
   return result;
}
Usage
   y = Power(5, 3)

Another Value-Returning
Function Example
#include <iostream>
using namespace std;
int Min (int val1, int val2, int val3);
int main()
{
int num1;
int num2;
int num3;
int min_num;

Another Value-Returning
Function Example
  cout << "Please enter an integer value for num1: "
       << endl;
cin >> num1;
cout << "Please enter an integer value for num2: ”
        << endl;
cin >> num2;
cout << "Please enter an integer value for num3: "
        << endl;
cin >> num3;
min_num = Min(num1, num2, num3);
cout << "The minimum number of the three entered is ”
        << min_num << endl;
}

Another Value-Returning
Function Example
int Min (int val1, int val2, int val3)
{
int result;
result = val1;
if (val2 < result)
result = val2;
if (val3 < result)
result = val3;
return result;
}

Revisiting the Power Function
#include <iostream>
#include <cmath>
using namespace std;
float power (int base, int exponent);
int main()
{
   float result;
   int base;
   int exponent;
   cout << "Please enter integer base value " << endl;
   cin >> base;

Revisiting the Power Function
   cout << "Please enter integer exponent value "
        << endl;
   cin >> exponent;
   result = power(base, exponent);
   cout << base << " raised to the " << exponent
        << " power is " << result << endl;
}

Revisiting the Power Function
float power (int base, int exponent)
{
   int i =1;
   float result = 1.0;
   while (i <= abs(exponent))
   {
      result = result * base;
      i++;
   }
   if (exponent < 0)
      result = 1.0/result;
   return result;
}

Problem-Solving Case Study
(Starship Weight and Balance)
Problem: Write a program that determines the weight and center of gravity of a new plane, based on the number of crew members and passengers as well as the weight of the baggage, closet contents, and fuel.
Input: Number of crew members, number of passengers, weight of closet contents, baggage weight, fuel in gallons.
Output: Total weight, center of gravity.

Starship Weight and Balance (continued)
Discussion: Sum all of the weights, using the standard average weight of a person of 170 pounds, and the fact that a gallon of fuel weighs 6.7 pounds.
totalWeight = emptyWeight + (crew + passengers) * 170 + baggage + closet + fuel * 6.7
centerofGravity = (emptyMoment + crewMoment + passengerMoment + cargoMoment + fuelMoment)/totalWeight

Main (Level 0)
Get data
Set totalWt = EMPTY_WEIGHT + (passengers + crew) * 170 + baggage + closet + fuel * 6.7
Set centerof Gravity = (CrewMoment(crew) + PassengerMoment(passengers) + CargoMoment(closet, baggage) + FuelMoment(fuel) + EMPTY _MOMENT)/totalWt
Print totalWt, centerof Gravity
Print warning

Level 1 Functional Decomposition
Get Data (Out: crew, passengers, closet, baggage, fuel)
  Prompt for numer of crew, number of passengers, weight in closet  and baggage compartments, and gallons of fuel
     Read crew, passengers, closet, baggage, fuel
     Echo print the input
CrewMoment (In: crew) Out Function Value
  Return crew * 170 * 143
Cargo Moment (In: closet, baggage) Out: Function value
  Return closet * 182 + baggage * 386

Level 1 Functional
Decomposition (continued)
Passenger Moment (In: passengers)
Set moment = 0.0
IF passengers > 6
Add (passengers – 6) * 170 * 341 to moment
Set passengers = 6
IF passengers > 4
Add (passengers – 4) * 170 * 295 to moment
Set passengers = 4
IF passengers > 2
Add (passengers – 2) * 170 * 219 to moment
Set passengers = 2
IF passengers > 0
Add passengers * 170 * 265 to moment
Return moment

Level 1 Functional
Decomposition (concluded)
Fuel Moment (In: fuel) Out: Function value
Set moment = 0.0
Set fuelWt = fuel * 6.7
IF fuel < 60
Set fuelDistance = fuel * 314.6
ELSE IF fuel < 361
Set fuelDistance = 305.8 + (-0.01233 * (fuel – 60))
ELSE IF fuel < 521
Set fuelDistance = 303.0 + (0.12500 * (fuel – 361))
ELSE IF fuel < 521
Set fuelDistance = 323.0 + (-0.04444 * (fuel – 521))
Return fuelDistance * fuelWt

Module Structure Chart

Case Study Implementation (abridged)
const float PERSON_WT = 170.0;        // Average person weighs
                                      //   170 lbs.
const float LBS_PER_GAL = 6.7;        // Jet-A weighs 6.7 lbs.
                                      //   per gal.
const float EMPTY_WEIGHT = 9887.0;    // Standard empty weight
const float EMPTY_MOMENT = 3153953.0; // Standard empty moment
float CargoMoment( int, int );
float CrewMoment( int );
float FuelMoment( int );
void  GetData( int&, int&, int&, int&, int& );
float PassengerMoment( int );
void  PrintWarning();

Case Study Implementation
int main()
{
    int   crew;          // Number of crew on board (1 or 2)
    int   passengers;    // Number of passengers (0 through 8)
    int   closet;        // Weight in closet (160 lbs. Max.)
    int   baggage;       // Weight of baggage (525 lbs. max.)
    int   fuel;          // Gallons of fuel (10 - 565 gals.)
    float totalWt;       // Total weight of loaded Starship
    float centerOfGravity; // Center of gravity of loaded Ship
    GetData(crew, passengers, closet, baggage, fuel);
    totalWt = EMPTY_WEIGHT + float(passengers + crew) * PERSON_WT + float(baggage + closet) + float(fuel) * LBS_PER_GAL;
    centerOfGravity = (CrewMoment(crew) + PassengerMoment (passengers) + CargoMoment(closet, baggage) + FuelMoment(fuel) + EMPTY_MOMENT) / totalWt;

Case Study Implementation
void GetData( /*out*/ int& crew,
              /*out*/ int& passengers,
              /*out*/ int& closet,
              /*out*/ int& baggage,
             /*out*/ int& fuel       )
{
    cout << "Enter the number of crew members." << endl;
    cin >> crew;
    cout << "Enter the number of passengers." << endl;
    cin >> passengers;
    cout << "Enter the closet cargo weight, in pounds."
         << endl;
cin >> closet;
    cout << "Enter the weight, in pounds, of cargo in
             the aft baggage compartment." << endl;
cin >> baggage;
    cout << "Enter the number of U.S. gallons of fuel"
         << endl << " loaded.“;
    cin >> fuel;
}

Case Study Implementation
float CrewMoment( /*in*/ int crew )  // Number of crew members
// Computes the crew moment arm in inch-pounds from the number of
// crew members.  Global constant PERSON_WT is used as the weight
// of each crew member
// Precondition:
//    crew == 1  OR  crew == 2
// Postcondition:
//    Function value == Crew moment arm, based on the crew
//    parameter
{
    const float CREW_DISTANCE = 143.0;  // Distance to crew seats
                                        //   from front
    return float(crew) * PERSON_WT * CREW_DISTANCE;
}

Case Study Implementation
float PassengerMoment( /*in*/ int passengers )
{
    const float ROW1_DIST = 219.0;  // Distance to row 1 seats
    const float ROW2_DIST = 265.0;  // Distance to row 2 seats
    const float ROW3_DIST = 295.0;  // Distance to row 3 seats
    const float ROW4_DIST = 341.0;  // Distance to row 4 seats
    float moment = 0.0;             // Running total of moment
if (passengers > 6)             // For passengers 7 and 8
    {
        moment = moment + float (passengers - 6) *
                 PERSON_WT * ROW4_DIST;
        passengers = 6;                    // 6 remain
    }
    if (passengers > 4)              // For passengers 5 and 6
           .
           .
           .
    return moment;
}

Case Study Implementation
float CargoMoment( /*in*/ int closet,     // Weight in closet
                   /*in*/ int baggage )   // Weight of baggage
// Computes the total moment arm for cargo loaded into the
// front closet and aft baggage compartment
// Precondition:
//     0 <= closet <= 160  &&  0 <= baggage <= 525
// Postcondition:
//     Function value == Cargo moment arm, based on the closet
//     and baggage parameters
{
    const float CLOSET_DIST = 182.0;    // Distance to closet
    const float BAGGAGE_DIST = 386.0;   // Distance to baggage
    return float(closet) * CLOSET_DIST +
           float(baggage) * BAGGAGE_DIST;
}

Case Study Implementation
float FuelMoment( /* in */ int fuel )    // Fuel in gallons
{
    float fuelWt;           // Weight of fuel in pounds
    float fuelDistance;     // Distance from front of plane
    fuelWt = float(fuel) * LBS_PER_GAL;
    if (fuel < 60)
        fuelDistance = float(fuel) * 314.6;
    else if (fuel < 361)
        fuelDistance = 305.8 + (-0.01233 * float(fuel - 60));
    else if (fuel < 521)
        fuelDistance = 303.0 + ( 0.12500 * float(fuel - 361));
    else
        fuelDistance = 323.0 + (-0.04444 * float(fuel - 521));
    return fuelDistance * fuelWt;
}

Testing & Debugging – Stubs
A stub is has the same name and interface as a function that actually would be called by the part of the program being tested, but it is usually much simpler
Example
void GetYear (/*inout*/ ifstream& dataIn,   // Input file
              /*out*/ string& year)  //Four digits of year
// Stub for GetYear function in the ConvertDates program
{
cout << “Get Year was called here. Returning \”1949\”.”
     << endl;
year = “1948”;
}

Testing & Debugging - Drivers
A driver is a simple main function which cals a function being tested and permits direct control of testing.
Example
float FuelMoment (int);
int main()
{
int testVal;
cout << “Fuel moment for gallons from 10 – 565 in steps”
        << “of 15:” << endl;
testVal = 10;
while (testVal <= 565)
{
  cout << FuelMoment(testVal) << endl;
      testVal = testVal + 15;
}
}