如何跟踪自动售货机中可用硬币的硬币编号

How can I keep track of the coin number available coins in a vending machine?

本文关键字:硬币 编号 自动售货机 何跟踪 跟踪      更新时间:2023-10-16

我在c++中有一个学校项目,开发一台简单的自动售货机,它可以接受一美元的钞票,并提供25美分、1美分和5美分的零钱。所有商品的价格都不到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;
    }
}

首先,您当前的程序不起作用,因为您没有在函数changecalculator()内部传输purchaseAmount。你需要这样做:

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;

该任务中最复杂的部分是在计算QBackDBackNBack之前对值ioQavioDavioNav进行分析。让我们做四分之一:

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

它是计算两个值中的最小值:可用季度数和最佳季度数。所以,这条线正好计算出你需要什么。之后你可以计算一角硬币的数量:

chaneBack -= QBack * 25; // subtract quarters
DBack = std::min(chaneBack / 10, ioDav);

如果你理解这个逻辑,你可以为NBack完成它。