# making change using int and mod division

I am writing a program that calculates change returned, but I need to do so with both int and mod division.  Here are the problems I am having:
1.  Once I do int division, how do I do mod division?
2.  I want to use a switch, but the compiler won't let use a double as a value in my case, so what value could I use??

here is my code:

amtChange=price-paid;
switch(amtChange)
case 10.00:  tens=(amtChange/10.00)+.005;
amtChange=amtChange-(10.00*tens);

case 1.00: dollars = (amtChange / 1.00)+.005;
amtChange = amtChange - (1.00*dollars);

case .25:  quarters = (amtChange / .25)+.005;
amtChange = amtChange - (.25 * quarters);

case .10:  dimes = (amtChange / .10)+.005;
amtChange = amtChange - (.10 * dimes);

case .05:  nickels = (amtChange / .05)+.005;
amtChange = amtChange - (.05 * nickels);

default:  pennies = (amtChange / .01)+.005;

Thanks...
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
For the first question, I'm not sure what you meant

you can do

int x = 6;
int y = 4;
int result;
int rest;

result = x/y;   // result = 1
rest = x%y;    // rest = 2

For the second one

as switch handles integer values, lets say you'll be working with 2 decimals

you can do

switch( atmChange * 100 )           // 100 if you want to work with the 2 decimal places
{
case 1000:
// Code for 10.00
case 100:
// Code for 1.00
case 25:
// Code for 0.25
case 10:
// Code for 0.10
case 5:
// Code for 0.05
default:
// Code
}

Hope this helps

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Commented:
using both: For example: change is 24.38
multiply that by 100 gives you 2438.
2438%1000 gives 2, so 2 \$10
438%100 gives 4 so 4 \$1
38/25 gives 1 so 1 quarter
13/5 gives 2 so 2 nickles
3/1 gives 3 so 3 pennies.

With the switch statement you're using I guess you can do switch(atmChange*100)
case 1000:
case 100:
case 25:
etc.

Is that what you want?
Commented:
sorry tinchos, i was writing while you posted :)
Commented:
Ok, no problem

happens all the time

:)
Commented:
rgill67,
> I am writing a program that calculates change returned, but I need to do so
> with both int and mod division.  Here are the problems I am having:
> 1.  Once I do int division, how do I do mod division?
> 2.  I want to use a switch, but the compiler won't let use a double as a value
> in my case, so what value could I use??

There is no need for a switch.  A switch is for when you want to process one of a different number of values.  For this, you need to process EACH value (10's, then 1's, then quarters, etc.).  You don't just want to do one.

So, try this:
amtChange = price-paid;

tens = amtChange / 10.00;
amtChange = fmod( amtChange, 10.00 );

dollars = amtChange;
amtChange = fmod( amtChange, 1.00 );

quarters = amtChange / 0.25;
amtChange = fmod( amtChange, 0.25 );

dimes = amtChange / 0.10;
amtChange = fmod( amtChange, 0.10 );

nickels = amtChange / 0.05;
amtChange = fmod( amtChange, 0.05 );

pennies = amtChange / 0.01;

I assumed that amtChange and price-paid are floats or doubles.  If they are not, then this will need to be tweaked slightly, but I can help you with that.

Hope that helps,
Dex*
Commented:
rgill67,
first of all i think there is no need to use switch case over here.
I think you are dividing the variable with it self only
i.e. when amtChange is 10
then you are doing amChange/10
which obvious means 10/10

Please make your problem very clear, i guess you are missing something.

Mustak_Shaikh
Author Commented:
Both tinchos and n-fortynine were helpful with the switch, thank you...
Commented:
rgill67,

Would you please explain why you accepted that answer?  The first part was right on about how to do MOD division, but the rest of it won't help you at all.

Dex*
Commented:
You're welcome rgill67

Have a nice weekend

Tincho
Commented:
Sorry dexstar,

But I don't agree with you that my comment won't help at all.

Why are you saying that?

Commented:
tinchos,

Firstly, I don't mean to offend.  You definitely answered the question that he asked.  I guess that's why he accepted your answer.  That's fine.

My problem is that the answer to that question won't help him solve his problem because a switch statement is not at all appropriate.

> switch( atmChange * 100 )           // 100 if you want to work with the 2 decimal places
> {
>    case 1000:
>                         // Code for 10.00
>    case 100:
>                         // Code for 1.00
>    case 25:
>                         // Code for 0.25
>    case 10:
>                         // Code for 0.10
>    case 5:
>                         // Code for 0.05
>    default:
>                         // Code
> }

What if atmChange = 37.37 ?  Then it will switch on 3737, which doesn't have a corresponding case statement, so it will execute the "default".  How is that going to help you compute the amount of change to give?  The example only will work if you are giving exactly 10 dollars, 1 dollar, 25 cents, 10 cents, 5 cents, or a penny in change.  If you want to figure out how to give out \$37.37, it won't work at all.

Anyway, I guess he got the answer to his question, but after he plays with it for a while, he'll figure out that it isn't going to work using a switch statement, and he'll have to come back to ask another question.  No, wait, he won't because I already gave him the answer.  Oh well.  It's just points.

Dex*
###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.