Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Programming Language: C++ For this project, you will practice decomposing a prob

ID: 3600141 • Letter: P

Question

Programming Language: C++

For this project, you will practice decomposing a problem into functions. In the final part, you will also get some practice with pass-by-reference functions.

As part of this lab is to also gain experience with integer operations, you are NOT allowed to convert numbers into strings and use string processing primitives.

TASK 0

Consider the standard decimal representation of a non-negative integer num. You wish to write a function that repetitively adds up the digits of a number until it eventually results in a single-digit number. For example, given the number 234567, the first iteration results in 27 (=2+3+4+5+6+7), and the 2nd iteration results in 9 (=2+7). Since 9 is a single-digit number, no more iterations are needed and 9 is returned.

Write a function with the following prototype to do this:

// Precondition: num > 0
// Postcondition: the return value is the iterated sum of digits of num
int sumDigits(int num);

To do this, we first need to identify functions that are useful to doing this. In this case, a list of useful function prototypes might be:

int getDigit(int num, int index); // return the index'th digit of num

int numDigits(int num);            // return the number of digits in num

You should have at least these three functions, though you may have additional functions if you wish. Don't forget to write pre/post conditions for these functions.

You may use library functions defined in cmath (such as pow) if you wish, though you don't need to.

TASK 1

You need a driver program to test your above program. To do this, write a main function that prompts for and input num, calls sumdigits and outputs the result. You may assume that the input is a positive number and do not need to do any error checking (but realize that you would have to for a real program).

TASK 2

A well-known theorem of math states that the above sum is 9 iff the number is divisible by 9. Write a function that modifies its argument number so that its divisible by 9. The function should add something to the right-most digit of the number if possible; otherwise it should subtract something from that digit. An example use of this function might be:

transformNum(n);
cout << n; // prints 234567 if n was originally 234565

Write the transformNum function. You should be able to reuse most of the code from earlier. Also modify the driver program to output the transformed number.

Explanation / Answer

I am also adding comments and a test main :

--------------------------------------------------------------------------------------

#include <iostream>
int numDigits(int num){
int n=0;
while(num != 0){ // looping to calculate the number of digits
    n = n + 1;
    num = num/10; // here shrinking is done to calculate number of digits
                   // 123/10 = 12 ( 3 is shrinked)
}
return n; // return number of digits
}


int getDigit(int num, int index ){
int n = numDigits(num); // calculating the number of digits
for(int i=n;i>index;i--){
    num = num /10; // for each iteration shrinking a num from right in the num
}
return num%10; // return the last digit
}

int sumDigits(int num){
int sum = 0; // initially sum is 0
int index;
index = numDigits(num); // index is the num of digits
while(index > 0 ){
    sum = sum + getDigit(num,index); // getting num at index and adding to sum
    index = index - 1; // decrement index
}
return sum; // return sum
}

int main(){
int num = 123;
std :: cout << " " << sumDigits(num);
return 0;
}


------------------------------------------------------------------------------------

/* hope this helps */

/* if any queries please comment */

/* thank you */