我有一个c ++的学校项目,用于一台简单的自动售货机,可以接受1美元钞票并改变季度,角钱,镍币。所有物品的价格都不到1美元。 但我需要增加额外的能力来跟踪机器中的可用变化,我不知道如何去做。 这是我写的代码片段:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//set the variables
int Qav=5 ;
int Dav=5 ;
int Nav=5 ;
int purchaseAmount ;
cout << "Simple Vending Program for Adam Ashouri (Regular Version)" <<endl;
cout <<endl;
cout <<endl;
cout << "Enter a purchase amount [5 - 100] -->";
cin >> purchaseAmount;
int chaneBack = 100 - purchaseAmount ;
changecalculator ();
}
void changecalculator ()
{
int purchaseAmount ;
int QBack ,DBack ,NBack ;
int chaneBack = 100 - purchaseAmount ;
if (purchaseAmount %5 == 0)
{
cout << "You entered a purchase amount of " << purchaseAmount << " cents." <<endl;
cout <<endl;
QBack = chaneBack / 25 ;
DBack = (chaneBack % 25) / 10;
NBack = (chaneBack %25 %10) / 5;
cout <<"Your change of " <<chaneBack <<" cents is given as " <<QBack <<" Q, " <<DBack <<" D,and " <<NBack <<" N." <<endl;
int coinsNum = QBack + DBack + NBack;
cout << "The value of your " <<coinsNum <<" coins adds up to " <<chaneBack <<" cents." <<endl;
cout << "Thank you for using my program.";
}
else
{
cout << "Unable to process an invalid purchase amout of " <<purchaseAmount <<" cents." <<endl;
cout << "Thank you for using my program." <<endl;
}
}
答案 0 :(得分:1)
首先,您当前的计划无法正常运作,因为您无法在功能purchaseAmount
内转移changecalculator()
。你需要这样做:
1)将函数的签名更改为:void changecalculator(int iPurchaseAmount)
2)在函数内发送purchaseAmount
(即以这种方式调用:changecalculator(purchaseAmount);
)
3)在函数体内使用值iPurchaseAmount
,并从中删除行int purchaseAmount;
。
关于你的主要问题(节省可用硬币数量):
好的,您已在程序正文中添加了Qav
,Dav
和Nav
(可用硬币)。这是正确的。现在,您必须在changecalculator()
函数中传输这些值。尝试使用函数的这个签名:void changecalculator(int iPurchaseAmount, int& ioQav, int& ioDav, int& ioNav)
(这些值将在函数体内可用)。并以这种方式调用此函数:changecalculator(purchaseAmount, Qav, Dav, Nav);
。
之后,您只需要分析这些值并在函数内部进行更改。让我们添加值的更改(在多次调用此函数的情况下是必要的)。只需在计算QBack
,DBack
和NBack
后添加以下行:
ioQav -= QBack;
ioDav -= DBack;
ioNav -= NBack;
此任务中最复杂的部分是在计算ioQav
,ioDav
和{{1}之前对值ioNav
,QBack
,DBack
进行分析}}。让我们来做季度:
NBack
计算最小值为2:可用的季度数和最佳季度数。所以,这一行准确计算出你需要什么。在它之后你可以计算硬币数量:
QBack = std::min(chaneBack / 25, ioQav);
如果您了解此逻辑,则可以为chaneBack -= QBack * 25; // subtract quarters
DBack = std::min(chaneBack / 10, ioDav);
完成此操作。