如何跟踪自动售货机中可用硬币的硬币数量?

时间:2014-09-15 04:33:32

标签: c++

我有一个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;

    }
}

1 个答案:

答案 0 :(得分:1)

首先,您当前的计划无法正常运作,因为您无法在功能purchaseAmount内转移changecalculator()。你需要这样做:

1)将函数的签名更改为:void changecalculator(int iPurchaseAmount)

2)在函数内发送purchaseAmount(即以这种方式调用:changecalculator(purchaseAmount);

3)在函数体内使用值iPurchaseAmount,并从中删除行int purchaseAmount;

关于你的主要问题(节省可用硬币数量):

好的,您已在程序正文中添加了QavDavNav(可用硬币)。这是正确的。现在,您必须在changecalculator()函数中传输这些值。尝试使用函数的这个签名:void changecalculator(int iPurchaseAmount, int& ioQav, int& ioDav, int& ioNav)(这些值将在函数体内可用)。并以这种方式调用此函数:changecalculator(purchaseAmount, Qav, Dav, Nav);

之后,您只需要分析这些值并在函数内部进行更改。让我们添加值的更改(在多次调用此函数的情况下是必要的)。只需在计算QBackDBackNBack后添加以下行:

ioQav -= QBack;
ioDav -= DBack;
ioNav -= NBack;

此任务中最复杂的部分是在计算ioQavioDav和{{1}之前对值ioNavQBackDBack进行分析}}。让我们来做季度:

NBack

计算最小值为2:可用的季度数和最佳季度数。所以,这一行准确计算出你需要什么。在它之后你可以计算硬币数量:

QBack = std::min(chaneBack / 25, ioQav);

如果您了解此逻辑,则可以为chaneBack -= QBack * 25; // subtract quarters DBack = std::min(chaneBack / 10, ioDav); 完成此操作。