/*****************************************************************************
 **    File:  Minimum.cpp                                                   **
 **    CIS 110A - 501  :  Demonstrate the ternary ? operator                **
 *****************************************************************************/

#include <iostream.h>

/*****************************************************************************
 **    Minimum2 <- minimum of two doubles, using IF logic                    **
 *****************************************************************************/

 double Minimum2 (double dV1, double dV2)
{
    double dMinimum2;

    if (dV1 < dV2)
        dMinimum2 = dV1;
    else
        dMinimum2 = dV2;
    return dMinimum2;
}


/*****************************************************************************
 **    Minimum3 <- minimum of three doubles, using ? logic                  **
 *****************************************************************************/

double Minimum3 (double dV1, double dV2, double dV3)
{
    double dMinimum3;

    dMinimum3 = Minimum2 (dV1, (dV2 < dV3) ? dV2 : dV3);
    return dMinimum3;
}


/*****************************************************************************
 **     Minimum4 <- minimum of four doubles, using even better logic        **
 *****************************************************************************/

double Minimum4 (double dV1, double dV2, double dV3, double dV4)
{
    double dMinimum4 = Minimum3 (dV1, dV2, (dV3 < dV4) ? dV3 : dV4);
    return dMinimum4;
}

double Minimum4a (double dV1, double dV2, double dV3, double dV4)    // Alright!
{
    return Minimum2 ((dV1 < dV2) ? dV1 : dV2, (dV3 < dV4) ? dV3 : dV4);
}


/*****************************************************************************
 **    main routine:  demonstrate use of Minimum4...                        **
 *****************************************************************************/

int main (void)
{
    cout << "The minimum of  2, 3.5, -4.7, 5.8  is  "
         << Minimum4 (2, 3.5, -4.7, 5.8)
         << endl
         << "The minimum of  -0.2, 19.7, 4.5, -6.8  is  "
         << Minimum4 (-0.2, 19.7, 4.5, -6.8)
         << endl
         << "The minimum of  3, 19, 5, 7.18  is  "
         << Minimum4 (3, 19, 5, 7.18)
         << endl
         << "The minimum of  1e5, 3e4, 5e7, 6e5  is  "
         << Minimum4 (1e5, 3e4, 5e7, 6e5)
         << endl
         << "The minimum of  0.02, -0.003, 0.513, -0.003  is  "
         << Minimum4a (0.02, -0.003, 0.513, -0.003)
         << endl;

    return 0;
}


/*****************************************************************************
 Output from execution...

The minimum of  2, 3.5, -4.7, 5.8  is  -4.7
The minimum of  -0.2, 19.7, 4.5, -6.8  is  -6.8
The minimum of  3, 19, 5, 7.18  is  3
The minimum of  1e5, 3e4, 5e7, 6e5  is  30000
The minimum of  0.02, -0.003, 0.513, -0.003  is  -0.003

 *****************************************************************************/
