2011-02-04 3 views
0

Эй, все. У меня есть вопрос. Я работаю над Visual Basic Express, и я должен рассчитать изменение от транзакции.как вы рассчитываете изменение минимальной монеты для транзакции?

Теперь, какой код я использовал? Я отчасти работаю, но начинаю немного запутываться.

спасибо.

Для вас, ребята, которые хотели больше информации:

у меня есть один доллар, и я иду в магазин, чтобы купить что-то. Я должен попросить пользователя указать сумму, которую они потратили, а затем рассчитать изменение и распечатать на экране.

Тогда я должен использовать наименьшее количество кварталов, копейки и пенни и распечатать их на экране.

Любая помощь была бы принята с благодарностью.

+3

Просьба предоставить огромное количество дополнительных деталей. – SLaks

+1

Что заставляет вас думать, что это где-то близко к достаточной информации, чтобы ответить на этот вопрос? –

+0

Является ли кто-то еще смущенным или это только я? – Mayank

ответ

7

Я собираюсь выйти на конечность и предположить, что ОП говорит об изменении, как в деньгах, возвращенных из транзакции.

Если это так, то это, вероятно, домашнее задание, поэтому только псевдокод.

Простейший способ первой попытки сделать это следующим образом. Пусть 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 

и пропустите код по строке в вашей голове,, используя текущие значения из бумаги и записывая новые значения, где они меняются.

Это значительно поможет вашему пониманию.


В ответ на ваше обновление:

У меня есть один доллар, и я иду в магазин, чтобы купить что-то. Я должен попросить пользователя указать сумму, которую они потратили, а затем рассчитать изменение и распечатать на экране. Затем я должен использовать наименьшее количество кварталов, копейки, никели и пенни, а затем распечатать их на экране.

Это удивительно похоже на то, что у меня было выше:

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

ОК Я не так далеко вперед в этом, мы только начали, я только предполагаю использовать 100 центов, таких как 1.00 – 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 : Class 'Название Аарон Праздник ': IME 211 «Назначение: Изменение Calc

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 
Смежные вопросы