2011-02-04 3 views
0

안녕하세요. 나는 질문이있다. 나는 Visual Basic Express에 대해 연구하고 있으며 트랜잭션의 변화를 계산해야한다.거래에 대한 최소 동전 변경은 어떻게 계산합니까?

이제 어떤 코드를 사용합니까? 나는 부분적으로 작동하지만 조금 혼란스러워지기 시작했다.

감사합니다.

내가 1 달러를 가지고 뭔가를 구입하는 가게에 가서 말 : 자세한 정보를 원 너희들을 위해

. 사용자가 지출 한 금액을 입력 한 다음 변경 사항을 계산하고 화면에 인쇄하도록 사용자에게 요청해야합니다.

그런 다음 최소 분기 수, 센트 센트, 페니 수를 사용하여 화면에 인쇄해야합니다.

도움을 주시면 감사하겠습니다.

+3

추가 세부의 방대한 양을 주시기 바랍니다. – SLaks

+1

당신이이 질문에 대답하기에 충분한 정보에 가깝다고 생각하는 이유는 무엇입니까? –

+0

다른 사람이 혼란 스럽습니까 아니면 저입니까? – Mayank

답변

7

나는 사지에 나가서 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)." 

이제 모듈러스 및 나누기 연산자를 사용하면 더 효율적으로 만들 수 있지만 독자의 연습 문제로 남겨 두겠습니다.

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


나의 제안은 연필과 (두 달러와-아흔셋 %의 구입을 위해 10 달러를 넘겨위한) 다음과 같은 열 종이의 비트와 함께 앉아서하는 것입니다

코드 머리글 코드 행에서을 사용하여 용지의 현재 값을 사용하고 변경 한 새 값을 적어 두십시오.

이렇게하면 이해를 돕는 데 도움이됩니다. 당신의 갱신에 대응


:

나는 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" 
+0

ok 나는 이것에서 미리 멀었습니다. 우리는 단지 100 센트와 같은 100 센트를 사용한다고 가정합니다. – norris1023

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 

이 두 번째 마지막 지정된 장치에 필요한 노트와 동전의 양을 분해 한 후 '입력'할 통화의 가장 작은 단위로 나머지. 최대 1 (1 센트 또는 1 엔) 단위로 거래하지 않는 국가의 경우. 우리 나라에서는 5 센트까지 거래합니다.

+0

궁금한 사람들은이 방법으로 통화의 가장 작은 단위 = 1 센트. 내 같은 나라에서는 1 센트 내에서 거래하지 않습니다. 우리는 최소한 5 센트로 반올림해야합니다. 확장 된 예제는 두 번째 마지막 단위로 변경 양을 나누고 지정된 최소 단위로 필요한 동전의 개수를 계산합니다. – ShadowedR

0

그냥 그런 과제를했습니다. enter image description here 공공 Form1 클래스 '이름 : 아론 휴일 '클래스 : IME (211) '목적 : 변경 석회질

Dim Owed As Double 
Dim Tend As Double 
Dim Change As Double 
Dim _20D As Integer 
Dim _10D As Integer 
Dim _5D As Integer 
Dim _1D As Integer 
Dim _25C As Integer 
Dim _10C As Integer 
Dim _5C As Integer 
Dim _1C As Integer 

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click 
    Close() 
End Sub 

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click 
    'Clear Due Amounts 
    txtOwed.Text = "" 
    txtTend.Text = "" 
    lblChange.Text = "" 
    'Clear Dollar Amounts 
    lbl20D.Text = "" 
    lbl10D.Text = "" 
    lbl5D.Text = "" 
    lbl1D.Text = "" 
    'Clear Cents Amounts 
    lbl25C.Text = "" 
    lbl10C.Text = "" 
    lbl5C.Text = "" 
    lbl1C.Text = "" 

    txtOwed.Focus() 

End Sub 

Private Sub btnRing_Click(sender As Object, e As EventArgs) Handles btnRing.Click 
    'Check to see if Empty 
    If ((txtOwed.Text) = Nothing) Then 
     lblChange.Text = ("Error") 
     MessageBox.Show("Please Enter Amount Owed") 
     Exit Sub 
    End If 

    If ((txtTend.Text) = Nothing) Then 
     lblChange.Text = ("Error") 
     MessageBox.Show("Please Enter Amount Tendered") 
     Exit Sub 
    End If 

    'Set Dim Values 
    Owed = txtOwed.Text 
    Tend = txtTend.Text 

    'Calculate Change due 
    Change = (Tend - Owed) 
    lblChange.Text = Change.ToString("C2") 

    'Check if they paid enough 
    If ((lblChange.Text) < 0) Then 
     lblChange.Text = ("Pay Up!") 
     MessageBox.Show("Please Pay full Amount!") 
     Exit Sub 
    End If 


    'Set Dim Values 
    _20D = 0 '$20 
    _10D = 0 '$10 
    _5D = 0 '$5 
    _1D = 0 '$1 
    _25C = 0 '$0.25 
    _10C = 0 '$0.10 
    _5C = 0 '$0.05 
    _1C = 0 '$0.01 

    'Find Amounts of Each 
    Do While Change >= 20 
     _20D = _20D + 1 
     Change = Change - 20 
    Loop 
    'Display $20s 
    lbl20D.Text = _20D 

    '================================================ 

    Do While Change >= 10 
     _10D = _10D + 1 
     Change = Change - 10 
    Loop 
    'Display $10s 
    lbl10D.Text = _10D 

    '================================================ 

    Do While Change >= 5 
     _5D = _5D + 1 
     Change = Change - 5 
    Loop 
    'Display $5s 
    lbl5D.Text = _5D 

    '================================================ 

    Do While Change >= 1 
     _1D = _1D + 1 
     Change = Change - 1 
    Loop 
    'Display $1s 
    lbl1D.Text = _1D 

    '================================================ 

    Do While Change >= 0.25 
     _25C = _25C + 1 
     Change = Change - 0.25 
    Loop 
    'Display $0.25s 
    lbl25C.Text = _25C 

    '================================================ 

    Do While Change >= 0.1 
     _10C = _10C + 1 
     Change = Change - 0.1 
    Loop 
    'Display $0.10s 
    lbl10C.Text = _10C 

    '================================================ 

    Do While Change >= 0.05 
     _5C = _5C + 1 
     Change = Change - 0.05 
    Loop 
    'Display $0.05s 
    lbl5C.Text = _5C 

    '================================================ 

    Do While Change >= 0.01 
     _1C = _1C + 1 
     Change = Change - 0.01 
    Loop 
    'Display $0.01s 
    lbl1C.Text = _1C 

    'Display Thank you 
    If ((lblChange.Text) >= 0) Then 
     MessageBox.Show("Thank you, Come Again") 
    End If 
End Sub 
End Class 
관련 문제