2001 01 26
Home ] Up ]

 

// prog002d.cpp
// Author: me

// 01/26/2001 Test function

// 01/24/2001 Reorganized and added new test scheme

// 01/22/2001 Implemented two more functions

// 01/19/2001 Implemented two function

// 01/17/2001 Started

/*
Write functions that will give you two highest
values of the three integer values given.
*/


#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>



///////////////////////////////////////////////////////////
//prototypes
///////////////////////////////////////////////////////////
void swap(int &p, int &q);
void max2of3v1(int a, int b, int c, int &x, int &y);
void max2of3v2(int a, int b, int c, int &x, int &y);
void max2of3v3(int a, int b, int c, int &x, int &y);
void max2of3v4(int a, int b, int c, int &x, int &y);

bool inspectorGadget(int a, int b, int c, int x, int y); 


///////////////////////////////////////////////////////////
//main
///////////////////////////////////////////////////////////
void main(void)
  {
  int i, j, k, m1, m2;
  char ch;

  srand(time(NULL));

  /*

  for (i=1; i<=3; i++)
    for (j=1; j<=3; j++)
      for (k=1; k<=3; k++)
        {
        cout << i << ' ' << j << ' ' << k << ' ';
        max2of3v1(i, j, k, m1, m2);
        //max2of3v2(i, j, k, m1, m2);
        //max2of3v3(i, j, k, m1, m2);
        //max2of3v4(i, j, k, m1, m2);
        cout << "max2 are =" << m1 << ' ' << m2 << endl;
        }
  */
  
  do
    {
    i = rand() % 100;
    j = rand() % 100;
    k = rand() % 100;
    cout << i << ' ' << j << ' ' << k << endl;

    max2of3v1(i, j, k, m1, m2);
    cout << "max2v1 are =" << m1 << ' ' << m2 << endl;
    if(inspectorGadget(i, j, k, m1, m2))
        cout << "Okay\n";
      else
        cout << "NOT Okay\n";


    max2of3v2(i, j, k, m1, m2);
    cout << "max2v2 are =" << m1 << ' ' << m2 << endl;
    if(inspectorGadget(i, j, k, m1, m2))
        cout << "Okay\n";
      else
        cout << "NOT Okay\n";


    max2of3v3(i, j, k, m1, m2);
    cout << "max2v3 are =" << m1 << ' ' << m2 << endl;
    if(inspectorGadget(i, j, k, m1, m2))
        cout << "Okay\n";
      else
        cout << "NOT Okay\n";


    max2of3v4(i, j, k, m1, m2);
    cout << "max2v4 are =" << m1 << ' ' << m2 << endl;
    if(inspectorGadget(i, j, k, m1, m2))
        cout << "Okay\n";
      else
        cout << "NOT Okay\n";


    cout << "Enter 0 to quit ";
    cin >> ch;
    }
    while (ch != '0');

  }



///////////////////////////////////////////////////////////
//bool inspectorGadget(int a, int b, int c, int x, int y); 
///////////////////////////////////////////////////////////
bool inspectorGadget(int a, int b, int c, int x, int y)
  {
  //check if x and y are the top values of a, b, c
  //sort a, b, and c in increasing order
  //check if x == c and y = b
  for (int i=1; i<=2; i++)
    {
    if (a > b) swap(a, b);
    if (b > c) swap(b, c);
    }

  //check if x and y are the top values of a, b, c
  if (x != c)
    return false;

  if (y != b)
    return false;

  //check if x is higher than y
  if (y > x)
    return false;

  //check for a foreign value
  if ((x != a) && (x != b) && (x != c))
    return false;

  if ((y != a) && (y != b) && (y != c))
    return false;


  return true;
  }



///////////////////////////////////////////////////////////
//swap
///////////////////////////////////////////////////////////
void swap(int &p, int &q)
  {
  if (p != q)
    {
    int t = p;
    p = q;
    q = t;
    }
  }


/*
Write a function that will give you two highest
values of the three integer values.

Examples:
Input:  1, 2, 3
Output: 2, 3

Input:  2, 2, 3
Output: 2, 3

Input:  1, 1, 1
Output: 1, 1

Input:  a, b, c
Output: x, y so that x and y are the highest values


///////////////////////////////////////////////////////////
//Plans
///////////////////////////////////////////////////////////
//Plan1: Find max of three, find max of remaining
//Plan2: Sort and pick the last two
//Plan3: if a is max then max of b and c .....
//Plan4: Find minimum and drop it


///////////////////////////////////////////////////////////
//Plan1: Find max of three, find max of remaining
///////////////////////////////////////////////////////////
swap the highest of a, b, and c with c
swap the highest of a and b with b
x = c
y = b



///////////////////////////////////////////////////////////
//Plan2: Sort and pick the last two
///////////////////////////////////////////////////////////
Algorithm:
do the following 2 times:
  if a > b then swap a, b
  if b > c then swap b, c
  end do

x = c
y = b


///////////////////////////////////////////////////////////
//Plan3: if a is max then max of b and c .....
///////////////////////////////////////////////////////////
Algorithm:
if a>=b and a>=c then
    x = a
    if b>c then y = b else y = c
  else if b>=c and b>=a then
    x = b
    if a>c then y = a else y = c
  else 
    x = c
    if a>b then y = a else y = b

  end if


///////////////////////////////////////////////////////////
//Plan4: Find minimum and drop it
///////////////////////////////////////////////////////////
Algorithm:
if a<=b and a<=c then
    x = b, y = c
  else if b<=c and b<=a then
    x = a, y = c
  else 
    x = a, y = b

  end if

*/


///////////////////////////////////////////////////////////
//Plan1: Find max of three, find max of remaining
///////////////////////////////////////////////////////////
/*
swap the highest of a, b, and c with c
swap the highest of a and b with b
x = c
y = b
*/
void max2of3v1(int a, int b, int c, int &x, int &y)
  {
  if (a >= b && a >= c)           //Is a is maximum?
      swap (a, c);
    else if (b >= a && b >= c)    //Is b is maximum?
      swap (b, c);

  if (a > b) 
      swap (a, b);

  x = c;
  y = b;
  }


///////////////////////////////////////////////////////////
//void max2of3v2(int a, int b, int c, int &x, int &y)
///////////////////////////////////////////////////////////
//Plan2: Sort and pick the last two
///////////////////////////////////////////////////////////
/*
Algorithm:
do the following 2 times:
  if a > b then swap a, b
  if b > c then swap b, c
  end do

x = c
y = b
*/
void max2of3v2(int a, int b, int c, int &x, int &y)
  {
  for (int i=1; i<= 2; i++)
    {
    if (a > b) swap(a, b);
    if (b > c) swap(b, c);
    }

  x = c;
  y = b;
  }


///////////////////////////////////////////////////////////
//void max2of3v4(int a, int b, int c, int &x, int &y)
///////////////////////////////////////////////////////////
/*
Plan4: Find minimum and drop it
Algorithm:
if a<=b and a<=c then
    x = b, y = c
  else if b<=c and b<=a then
    x = a, y = c
  else 
    x = a, y = b

  end if

make sure x and y are in decreasing order
*/
void max2of3v4(int a, int b, int c, int &x, int &y)
  {
  if (a<=b && a<=c) 
      x = b, y = c;
    else if (b<=c && b<=a) 
      x = a, y = c;
    else 
      x = a, y = b;

  if (x < y) 
      swap(x, y);
  }



///////////////////////////////////////////////////////////
//void max2of3v3(int a, int b, int c, int &x, int &y)
///////////////////////////////////////////////////////////
/*
Plan3: if a is max then max of b and c .....
Algorithm:
if a>=b and a>=c then
    x = a
    if b>c then y = b else y = c
  else if b>=c and b>=a then
    x = b
    if a>c then y = a else y = c
  else 
    x = c
    if a>b then y = a else y = b

  end if
*/
void max2of3v3(int a, int b, int c, int &x, int &y)
  {
  if (a>=b && a>=c)
      {
      x = a;
      if (b > c) y = b; else y = c;
      }
    else if (b >= c && b >= a)
      {
      x = b;
      if (a > c) y = a; else y = c;
      }
    else 
      {
      x = c;
      if (a > b) y = a; else y = b;
      }
  }