0

こんにちは、みなさん。質問があります。私は Visual Basic Express で作業しており、トランザクションからの変更を計算することになっています。

では、どのコードを使用しますか? 部分的に機能していますが、少し混乱し始めています。

ありがとうございました。

もっと情報が欲しかったあなたのために:

私が 1 ドル持っていて、何かを購入するために店に行ったとします。ユーザーに、費やした金額を入力してから、変更を計算して画面に出力するように依頼する必要があります。

次に、最小限の数のクォーター、ダイム ニッケル、およびペニーを使用して、それを画面に印刷することになっています。

どんな助けでも大歓迎です。

4

3 に答える 3

8

私はここで手足を出して、OPが取引から返されたお金のような変化について話していると仮定します.

だとしたら宿題なので疑似コードのみ。

それを行うための最も簡単な最初の試行方法は次のとおりです。costをトランザクションのコストとし、tendered引き渡された金額 (両方ともセント) とします。さらに、経済にはドル札、クォーターズ、ペニーしかないと仮定しましょう (私のコードを小さくするため) 。

change = tendered - cost

if change < 0:
    print "Pay up some more cash, cheapskate!"
    stop

dollars = 0
quarters = 0
cents = 0

while change >= 100:
    dollars = dollars + 1
    change = change - 100

while change >= 25:
    quarters = quarters + 1
    change = change - 25

while change >= 1:
    cents = cents + 1
    change = change - 1

print dollars " dollar(s), " quarters " quarter(s), and " cents " cent(s)."

これは間違いなくモジュロ演算子と除算演算子を使用してより効率的にすることができますが、それは読者の演習として残します。


私の提案は、鉛筆と紙を用意して、次の列を用意することです (2 ドル 93 セントの購入で 10 ドルを渡すため)。

tendered      cost    change   dollars  quarters     cents
--------  --------  --------  --------  --------  --------
    1000       293

紙の現在の値を使用して、変更された新しい値を書き留めて、の中でコードを1行ずつ実行します。

これはあなたの理解に大いに役立ちます。


あなたの更新に応じて:

私は 1 ドルを持っていて、何かを買いに店に行きます。ユーザーに、費やした金額を入力してから、変更を計算して画面に出力するように依頼する必要があります。次に、4 分の 1、2 セント硬貨、5 セント硬貨、および 1 セント硬貨の最小数を使用して、それを画面に出力することになっています。

それは私が上に持っていたものと非常に似ています:

tendered = 100
input cost
cost = int (cost * 100)
change = tendered - cost
if change < 0:
    print "Pay up some more cash, cheapskate!"
    stop
print "Change is ", (format "$9.99", change / 100)

quarters = 0, dimes = 0, nickels = 0, pennies = 0

while change >= 25:
    quarters = quarters + 1
    change = change - 25

while change >= 10:
    dimes = dimes + 1
    change = change - 10

while change >= 5:
    nickels = nickels + 1
    change = change - 5

while change >= 1:
    pennies = pennies + 1
    change = change - 1

print quarters, " quarters"
print dimes   , " dimes"
print nickels , " quarters"
print pennies , " pennies"
于 2011-02-04T03:49:23.347 に答える
2

プロセスを自動化するより「高度な」方法は次のとおりです。

Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
    Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D, 0.02D, 0.01D}
    Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal

    For iIndex As Integer = 0 To arrNotesAvailable.Length - 1
        arrChangeAmounts(iIndex) = dAmount \ arrNotesAvailable(iIndex)
        dAmount = dAmount Mod arrNotesAvailable(iIndex)
    Next

    Return arrChangeAmounts
End Function

これにより、発行される各ユニットの正確な金額で満たされた配列が自動的に返されます。

さらに高度なソリューション:

    Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
    Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D}
    Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal

    For iIndex As Integer = 0 To arrNotesAvailable.Length - 2
        arrChangeAmounts(iIndex) = (dAmount * 100) \ (arrNotesAvailable(iIndex) * 100)
        dAmount = dAmount Mod arrNotesAvailable(iIndex)
    Next

    arrChangeAmounts(arrNotesAvailable.Length - 1) = Math.Ceiling((dAmount * 100) / (arrNotesAvailable(arrNotesAvailable.Length - 1) * 100))

    Return arrChangeAmounts
End Function

これは、最後から 2 番目に指定された単位に必要な紙幣と硬貨の量を分解し、残りを通貨の最小単位で「埋めます」。1(1セントまたは1円)までの単位で取引されていない国。私たちの国では、5 セントまで取引します。

于 2013-02-04T19:51:11.353 に答える