Расчет долларов прямо в программе обмена денег

Пожалуйста, посмотрите на код ниже

#include <QtCore/QCoreApplication>
#include <iostream>

int main(int argc, char *argv[])
{
using namespace std;

double purchaseAmount;
double paidAmount;
float balance;

int change, quarters, dimes, nickels, pennies, tenDollar, fiveDollar; // declare variables

cout << "Enter Total purchased amount" << endl;
cin >> purchaseAmount;

cout << "Enter Total paid amount" << endl;
cin >> paidAmount;

balance = paidAmount - purchaseAmount ;

tenDollar = balance / 10; // calculate the number of Ten Dollars
change =   tenDollar  % 10  ; // calculate the change needed
change = balance * 100;
quarters = change / 25; // calculate the number of quarters
change = change % 25; // calculate remaining change needed
dimes = change / 10; // calculate the number of dimes
change = change % 10; // calculate remaining change needed
nickels = change / 5; // calculate the number of nickels
pennies = change % 5; // calculate pennies

cout << "\nQuarters: " << quarters << endl; // display # of quarters
cout << " Dimes: " << dimes << endl; // display # of dimes
cout << " Nickels: " << nickels << endl; // display # of nickels
cout <<" Pennies: " << pennies << endl; // display # of pennies
cout <<" Ten dollar: " << tenDollar << endl; // display # of Ten dollar
//cout <<" Five dollar: " << fiveDollar << endl; // display # of Ten dollar

return (0);

}

То, что я пытаюсь сделать здесь, рассчитать оставшееся изменение в десять долларов, кварталы, десять центов, никели и копейки. И, например, когда я запускаю программу таким образом —

Enter Total purchased amount
9.75
Enter Total paid amount
20

Quarters: 4
Dimes: 0
Nickels: 0
Pennies: 0
Ten dollar: 1

Что не так. При этом вышеприведенный вывод неверен. Скорее должно быть

Enter Total purchased amount
9.75
Enter Total paid amount
20

Quarters: 1
Dimes: 0
Nickels: 0
Pennies: 0
Ten dollar: 1

Так что я тут делаю не так?

Спасибо

1

Решение

Как уже неоднократно говорилось, ошибка заключалась в мучительно повторенном коде. Учтите следующее:

int currencyCount(int& pennies, int penniesInDenomination) {
const int count = penniesInBase / penniesInDenomination;
pennies = pennies % penniesInDenomination;

return count;
}

Это может использоваться для каждой деноминации — многократно и в одну строку. Это работает, когда функция получает два значения: новое сальдо и количество для этого наименования. Эта сортировка обманывает, беря баланс по ссылке и, как «побочный эффект» вызова этой, по-видимому, автономной функции, она уменьшает баланс в соответствии с количеством возвращенных конфессий. Очевидно, вы хотели бы документировать это.

...
const int numberOfQuarters = currencyCount(balance, 25);
const int numberOfDimes    = currencyCount(balance, 10);
...

Вы также можете поместить информацию о валюте (например, имя и количество копеек, которые она представляет) в вектор и зациклить его, выполнив то же самое:

typedef std::pair<std::string, int> Currency;
typedef std::vector<Currency> Currencies;
typedef Currencies::const_iterator CIter;

...

for(CIter iter = currencies.begin(); iter != currencies.end(); ++iter) {
const int quantity = currencyCount(balance, iter->second);
std::cout << iter->first << ": " << quantity << std::endl;
}

Таким образом, вы избегаете повторного кода и ошибок, которые он вызывает.

1

Другие решения

Не меняя большую часть кода, вы можете получить желаемый ответ, заменив

change = balance * 100;

с

change = ((balance) - floor(balance)) * 100;

Однако уделите больше внимания своему решению, и я гарантирую, что вы получите больше очков, чем простой обходной путь. Кроме того, не смейте нарушать соглашения, пожалуйста, разместите используя пространство имен std вне главной.

Как это:

#include <iostream>
using namespace std; // Place it here! Not inside main.

int main()
{
return 0;
}

Примечание: я сказал желаемый ответ.

0

По вопросам рекламы [email protected]