954,499 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

C++ Calculations

Hello All
I am having some problems with a C++ class that i am taking and after looking around on the web I am still lost.
The assignment that I am working on right now is as follows:

Two numbers are entered in from the keyboard. If the
larger number is odd, the smaller number is added to an accumulator. Then the larger number
is integer divided by two and the smaller number is doubled. Again if the larger number's
division is odd, the smaller number's doubling is added to an accumulator. lf the larger number
is even, nothing is added to the accumulator. This is repeated until the large number
sequence equals zero. The accumulator now holds the multiplication answer.
Write a program using functions, that will accomplish this task. Repeat until the user wishes to stop.
lt is not necessary to display the accumulation work as shown in the examples.
Output is to the screen and printer and should look like:
Your Name Class # Date & Time
XXXX times XXXX by conventional math = XXXXXXX
XXXX times XXXX by Zoo's method = XXXXXXX
Example 1) 75 x 23 = 1725
Larger Smaller Add to Accumulator
75 23 23
37 46 46
18 92 O
9 184 184
4 368 O
2 736 O
1 1472 1472
1725(TOTAL & PRODUCT)


Example 2)
122 x 251 = 30622
Larger Smaller Add to Accumulator
251 122 122
125 244 244
62 488 O
31 976 976
15 1952 1952
7 3904 3904
3 7808 7808
1 15616 15616
30622(TOTAL & PRODUCT)

If anyone could point me in a good direction i would be most great full
Thanx

kuru225
Newbie Poster
5 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

>>If the larger number is odd,

what happens if the larger number is even ?

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

Ancient, thanks for the quick reply.
if the larger number is even then the accumulator is '0'

If you have any ideas on how the logic would go your help would be most appreciated
thanks

kuru225
Newbie Poster
5 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

Write it out by hand. It might start like this:

enter two numbers.
calculate the product of the two numbers.
determine which number is larger, call it A, and call the other number B.  
use an accumulator, initialzed to zero
as long as A is above zero
  if A is odd 
    add B to accumulator
  divide A by 2 using integer math (means all remainders are dropped)
  //etc
Lerner
Nearly a Posting Maven
2,382 posts since Jul 2005
Reputation Points: 739
Solved Threads: 396
 

and if A is initially even, don't do anything.

Ancient Dragon
Retired & Loving It
Team Colleague
30,049 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,343
 

if A is even at anypoint, whether initially or not, then don't add B to accumulator, but you still need to divide A by 2 using integer math and double B. So if A = 44 and B = 11;

A    B    Total Accumulated so far
44 11     0
22 22     0
11 44     44
5   88     132
2   176   132
1   352   484
Lerner
Nearly a Posting Maven
2,382 posts since Jul 2005
Reputation Points: 739
Solved Threads: 396
 

AD: If the (originally) larger number is even you simply don't add the (originally) smaller one to the accumulator. Since "odd" just means that the one's bit is set, it's essentially binary mutiplication using shifts (division by 2) and adds.

kuru: Have you written a program before? Do you have an attempt for this one? Anything?

nucleon
Posting Pro in Training
478 posts since Oct 2008
Reputation Points: 163
Solved Threads: 91
 

Nuc: so if i have you right, i could just write an 'if' statement saying:
if(numA<numB)
numA / 2.0
else
accum +=numA

and then i could wrap this in a function for later use

kuru225
Newbie Poster
5 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

Ok
i have been tinkering around with the coding of this, and i think there is a problem with this function i have
could someone give me there input
void getnums()
{

int numA, numB, x, result;
cout << "Your two numbers to multiply are?"<<endl;
cin >> numA >> numB;

if (numB < numA)
{
x +=numA;
numA = numB;
numB = x;
}

result = process( numA, numB);


cout << numA << " times " << numB<< " by conventional math = " << (numA * numB) <<endl;
cout << numA << " times " << numB<< " by Zoo's method = " << result <<endl;

}

the function works fine if numA starts smaller then numB but if numB is smaller then numA it sort of goes to the crapper
any help would be welcomed
thanx

kuru225
Newbie Poster
5 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

Problem is that x is not initialized to zero (I take that you simply want to swap the values).

You might have it a bit simpler like ...

if (numB < numA)
{
    // use x only inside the if-block
    int x = numA;
    numA = numB;
    numB = x;
}
mitrmkar
Posting Virtuoso
1,809 posts since Nov 2007
Reputation Points: 1,105
Solved Threads: 395
 

mitrmkar:
that helps a lot
i should have known to do that instead of just claiming it as an integer
thank you

kuru225
Newbie Poster
5 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You