How To Calculate The Change In Money Using Arrays In C++
Reverend Jim 3,756 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster
Use an if statement as in
if (dollars > 0) { cout << "Dollars: " << dollars << endl; } In this case I think it would be acceptable to use a single line format as
if (dollars > 0) cout << "Dollars: " << dollars << endl; Edited by Reverend Jim
While that is a proper fix, for the code you have, I think that, with a bit of refactoring, you can accomplish what you want and make your code more efficient.
First, instead of using a bunch of literal constants, sometimes referred to as Magic Numbers, defining some constants to represent those values, makes your code that much easier to understand:
const double MAX_UNDER_DOLLAR = .99; const int DOLLAR = 100; const int QUARTER = 25; const int DIME = 10; const int NICKEL = 5; Second use the conditional statements to decide whether to calculate for that particular denomination and print out the result:
if (change1 > QUARTER) { quarters = change1 / QUARTER; cout << "Quarters: " << quarters << '\n'; change1 -= quarters * QUARTER; } When we put this together it could look something like this:
#include <iostream> #include <iomanip> #include <string> using namespace std; const double MAX_UNDER_DOLLAR = .99; const int DOLLAR = 100; const int QUARTER = 25; const int DIME = 10; const int NICKEL = 5; int main() { double moneyOwed = 0.0; double moneyPaid = 0.0; cout << "Customer owes: $"; cin >> moneyOwed; cout << "Customer pays: $"; cin >> moneyPaid; cout << fixed << setprecision(2); //calculations double change = moneyPaid - moneyOwed; double change1 = change; cout << "Change due: $" << change << '\n'; int dollars = 0; if (change1 > MAX_UNDER_DOLLAR) { dollars = (int) (change1); cout << "Dollars: " << dollars << '\n'; change1 -= dollars; } change1 *= DOLLAR; int quarters = 0; if (change1 > QUARTER) { quarters = change1 / QUARTER; cout << "Quarters: " << quarters << '\n'; change1 -= quarters * QUARTER; } int dimes = 0; if (change1 > DIME) { dimes = change1 / DIME; cout << "Dimes: " << dimes << '\n'; change1 -= dimes * DIME; } int nickels = 0; if (change1 > NICKEL) { nickels = change1 / NICKEL; cout << "Nickels: " << nickels << '\n'; change1 -= nickels * NICKEL; } int pennies = 0; if (change1 > 0) { pennies = change1; cout << "Pennies: " << pennies << '\n'; change1 = 0; } cin.ignore(1); cin.get(); } The output based on your sample:
Customer owes: $1.3
Customer pays: $2
Change due: $0.70
Quarters: 2
Dimes: 2
Some side notes:
Declare your variables as close to where they will be used as possible. The compiler doesn't care and on a large project this will help you find the declaration if you need to change it.
Only use endl if you need the stream to be flushed. Use '\n' instead for most cases.
To pause execution I think you'll find :
cin.ignore(1); cin.get(); to be more clearer for what you intend. Just throwing a random cin statement in there can be confusing.
Edited by tinstaafl
Reverend Jim 3,756 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster
In this case I think that using constants is unnecessary. It adds nothing to the code simply because the actual values are so obvious that the constants add only to the length of the overall code.
quarters = (change1 % 100) / 25; is pretty self-explanatory and making a const for 25 is tantamount to adding comments like add one to x. If you feel otherwise I would suggest
quarters = (change1 % 100) / 25; \\ 25 = cents in a quarter I don't feel like coding this up in c/c++ (I'm quite rusty) but a vbScript version is
set arg = Wscript.Arguments if arg.Count <> 2 then wscript.echo "change cost cash" wscript.quit end if cost = Int(cdbl(arg(0)) * 100) cash = Int(cdbl(arg(1)) * 100) set denom = CreateObject("Scripting.Dictionary") denom(10000) = Array("hundred","hundreds") denom( 5000) = Array("fifty","fifties") denom( 2000) = Array("twenty","twenties") denom( 1000) = Array("ten","tens") denom( 500) = Array("five","fives") denom( 100) = Array("one","ones") denom( 25) = Array("quarter","quarters") denom( 10) = Array("dime","dimes") denom( 5) = Array("nickel","nickels") denom( 1) = Array("penny","pennies") balance = cash - cost for each denomination in denom.keys num = balance \ denomination if num > 0 then if num = 1 then wscript.echo num,denom(denomination)(0) else wscript.echo num,denom(denomination)(1) end if balance = balance - num * denomination end if next Slightly complicated with a dictionary because I wanted to handle both singular and plural amounts.
Edited by Reverend Jim
Having some extra length in the code doesn't hurt anything as long as it's for efficiency and/or readability. The compiler will optimize it anyway.
Using constants is more about following good and accepted practices and principles to avoid a lot of hassle on larger projects. Using these principles on simple things and getting them ingrained as habits will reap huge dividends in later projects.
A map in c++ would work but ,unless the scope of the project is to be expanded, the overhead is way more than what's needed for such a simple project.
Edited by tinstaafl
Reverend Jim 3,756 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster
I follow good and accepted practices and principles, just not blindly. But you are correct in that it's better to develop the habit early. One can relax it later when one is older and (possibly) wiser ^_^
How To Calculate The Change In Money Using Arrays In C++
Source: https://www.daniweb.com/programming/threads/509702/change-calculator
Posted by: hensonpromes98.blogspot.com

0 Response to "How To Calculate The Change In Money Using Arrays In C++"
Post a Comment