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 */
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.