/**
 * CS-11 Case study for buying pizza
 * pizza.cpp
 * Purpose: Determines which of two pizza sizes is the best buy.
 *
 * @author Ed Parrish (adapted from Walter Savith textbook example 03-09)
 * @version 1.1 3/4/05
 */

#include <iostream>
using namespace std;

/**
 * Calculates the price per square inch of a pizza.
 *
 * @param diameter The diameter of the pizza in inches.
 * @param price The price of the pizza in dollars.
 * @return The price per square inch of a pizza.
 */
double calcUnitPrice(int diameter, double price);

/**
 * Main program that handles all user I/O and decision making.
 */
int main(void) {
    int diameterSmall, diameterLarge;
    double priceSmall, unitPriceSmall,
           priceLarge, unitPriceLarge;

    cout << "Welcome to the Pizza Consumers Union.\n";
    cout << "Enter diameter of a small pizza (in inches): ";
    cin >> diameterSmall;
    cout << "Enter the price of a small pizza: $";
    cin >> priceSmall;
    cout << "Enter diameter of a large pizza (in inches): ";
    cin >> diameterLarge;
    cout << "Enter the price of a large pizza: $";
    cin >> priceLarge;

    unitPriceSmall = calcUnitPrice(diameterSmall, priceSmall);
    unitPriceLarge = calcUnitPrice(diameterLarge, priceLarge);

    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout << "Small pizza:\n"
         << "Diameter = " << diameterSmall << " inches\n"
         << "Price = $" << priceSmall
         << ", Per square inch = $" << unitPriceSmall << endl
         << "Large pizza:\n"
         << "Diameter = " << diameterLarge << " inches\n"
         << "Price = $" << priceLarge
         << ", Per square inch = $" << unitPriceLarge << endl;

    if (unitPriceLarge < unitPriceSmall) {
        cout << "The large one is the better buy.\n";
    } else {
        cout << "The small one is the better buy.\n";
    }
    cout << "Buon Appetito!\n";

    return 0;
}

// Calculates the price per square inch of a pizza.
double calcUnitPrice(int diameter, double price) {
    const double PI = 3.14159;
    double radius, area;

    radius = diameter/static_cast<double>(2);
    area = PI * radius * radius;
    return (price/area);
}

