Menu

Friday, 5 December 2014

Chapter 7,Problem 6:Object Oriented Programming by Robert Lafore in C++ Solution Manual

//Ahmad Furqan Attari
//P7.6
#include 
#include  //for srand(), rand()
#include  //for time for srand()
#include  //for _getch()
using namespace std;
enum Suit { clubs, diamonds, hearts, spades };
//from 2 to 10 are integers without names
const int jack = 11;
const int queen = 12;
const int king = 13;
const int ace = 14;
////////////////////////////////////////////////////////////////
class card
{
private:
 int number; //2 to 10, jack, queen, king, ace
 Suit suit; //clubs, diamonds, hearts, spades
public:
 card() //constructor
 { }
 void set(int n, Suit s) //set card
 {
  suit = s; number = n;
 }
 void display(); //display card
};
//--------------------------------------------------------------
void card::display() //display the card
{
 if (number >= 2 && number <= 10)
  cout << number;
 else
  switch (number)
 {
  case jack: cout << "J"; break;
  case queen: cout << "Q"; break;
  case king: cout << "K"; break;
  case ace: cout << "A"; break;
 }
 switch (suit)
 {
 case clubs: cout << static_cast(5); break;
 case diamonds: cout << static_cast(4); break;
 case hearts: cout << static_cast(3); break;
 case spades: cout << static_cast(6); break;
 }
}
////////////////////////////////////////////////////////////////
void main(void)
{
 card deck[52];
 int j;
 cout << endl;
 for (j = 0; j<52; j++) //make an ordered deck
 {
  int num = (j % 13) + 2; //cycles through 2 to 14, 4 times
  Suit su = Suit(j / 13); //cycles through 0 to 3, 13 times
  deck[j].set(num, su); //set card
 }
 cout << "\nOrdered deck : \n";
 for (j = 0; j<52; j++) //display ordered deck
 {
  deck[j].display();
  cout << " ";
  if (!((j + 1) % 13)) //newline every 13 cards
   cout << endl;
 }
 srand(time(NULL)); //seed random numbers with time
 for (j = 0; j<52; j++) //for each card in the deck,
 {
  int k = rand() % 52; //pick another card at random
  card temp = deck[j]; //and swap them
  deck[j] = deck[k];
  deck[k] = temp;
 }
 cout << "\nPlayers' Hands : \n";
 cout << "Player 1:";
 for (j = 0; j<52; j++) //display shuffled deck
 {
  deck[j].display();
  cout << ", ";
  if (!((j + 1) % 13)) //newline every 13 cards
  {
   cout << endl;
   if (j<51)
    cout << "Player " << (j + 1) / 13 + 1 << ":";
  }
 }
 _getch();
} //end main

Chapter 7,Problem 5:Object Oriented Programming by Robert Lafore in C++ Solution Manual

//Ahmad Furqan Attari
//p7.5
#include 
#include 
#include 
using namespace std;
const int SIZE = 10;
class fraction
{
private:
 int num, den;
public:
 fraction()
 {}
 fraction(int n, int d) :num(n), den(d)
 {
  lowterms();
 }
 void take_frac(void)
 {
  char ch;
  cin >> num >> ch >> den;
 }
 void show_frac(void)
 {
  cout << setw(2) << num << "/" << setw(2) << den;
 }
 void lowterms(void) // change ourself to lowest terms
 {
  long tnum, tden, temp, gcd;
  tnum = labs(num); // use non-negative copies
  tden = labs(den); // (needs cmath)
  if (tden == 0) // check for n/0
  {
   cout << "Illegal fraction : division by 0"; exit(1);
  }
  else if (tnum == 0) // check for 0/n
  {
   num = 0; den = 1; return;
  }
  // this ‘while’ loop finds the gcd of tnum and tden
  while (tnum != 0)
  {
   if (tnum < tden) // ensure numerator larger
   {
    temp = tnum; tnum = tden; tden = temp;
   } // swap them
   tnum = tnum - tden; // subtract them
  }
  gcd = tden; // this is greatest common divisor
  num = num / gcd; // divide both num and den by gcd
  den = den / gcd; // to reduce frac to lowest terms
 }
 void add_frac(fraction a, fraction b)
 {
  num = a.num*b.den + a.den*b.num;
  den = a.den*b.den;
  lowterms();
 }
 void sub_frac(fraction a, fraction b)
 {
  num = a.num*b.den - a.den*b.num;
  den = a.den*b.den;
  lowterms();
 }
 void mul_frac(fraction a, fraction b)
 {
  num = a.num*b.num;
  den = a.den*b.den;
  lowterms();
 }
 void div_frac(fraction a, fraction b)
 {
  num = a.num*b.den;
  den = a.den*b.num;
  lowterms();
 }
};
void main(void)
{
 fraction f[SIZE],sum,divisor,result;
 char ch;
 int i=0;
 do
 {
  cout << "Enter a fraction: ";
  f[i].take_frac();
  i++;
  cout << "Enter again?(y/n):";
  ch = _getche();
  cout << endl;
 } while (ch == 'y'&& i < SIZE);
 sum = { 0, 1 };
 for (int j = 0; j < i; j++)
 {
  sum.add_frac(sum, f[j]);
 }
 divisor = { 1, i + 1 };
 result.div_frac(sum, divisor);
 cout << "Average of entered fractions:";
 result.show_frac();
 _getch();
}