Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Meet and Greet (http://www.go4expert.com/community/meet-and-greet/)
-   -   Problem with simple program to compute change (http://www.go4expert.com/community/simple-program-compute-change-t18059/)

dhess62 16Jun2009 23:09

Problem with simple program to compute change
 
This program takes a number of pennies and converts it to dollars, quarters, dimes, nickels and pennies, here is the code that I wrote. The problem is, for some reason it always throws in a nickel when it computes the change for any amount that has a penny in it. Any ideas as to why?

example if you give it 346 pennies will return:
3 Dollars
1 Quarter
2 Dimes
1 Nickel <<<there's the problem
1 Penny

Code: VB.NET

Private Sub btnCalculateChange_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculateChange.Click
        txtNumOfPennies = Convert.ToInt32(Me.txtNumOfPennies.Text)
        Me.txtDollar.Text = Int((txtNumOfPennies.Text) / 100)
        Me.txtQuarter.Text = Int(((txtNumOfPennies.Text) Mod 100) / 25)
        Me.txtDime.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) / 10)
        Me.txtNickel.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10 / 5)
        Me.txtPenny.Text = Int(((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10) Mod 5)


SaswatPadhi 17Jun2009 08:08

Re: Problem with simple program to compute change
 
Hi, and Welcome to G4EF ! :)

You have a flaw in the code. You miss a pair of brackets.
Look at this line :

Code: VB.NET

Me.txtNickel.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10 / 5)

As the division operator '/' has higher priority than Mod, The above code simplifies to :

Code: VB.NET

Me.txtNickel.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 2)


What you noticed :
Quote:

Originally Posted by dhess62 (Post 49716)
The problem is, for some reason it always throws in a nickel when it computes the change for any amount that has a penny in it.

is correct. 1 Mod 2 = 1 Mod 5 = 1

So to correct the problem, just change the above line to :

Code: VB.NET

Me.txtNickel.Text = Int(((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10) / 5)



All times are GMT +5.5. The time now is 19:20.