Write a program that reads pairs of integers between 100 an
*
Write a program that reads pairs of integers between 100 and 10, 000 from the standard
input stream and determines whether the pairs are amicable or not.
Use a while loop to read the pairs of nums.
The while loop must have some explicit stopping condition.
Use the functions that you previously defined
?readnum, properDivisor, properDivisorSum, and amicablePair.
*/
and here is my code
#include <limits>
#include <iostream>
#include <string>
using namespace std;
bool readNumber(int lbound, int ubound, int ntries, int wrong, int& num);
int properDivisorSum(int numer, string);
bool amicablePair(int a, int b);
int main()
{
int numX, numY, sumX, sumY;
int lbound, ubound, ntries, wrong;
lbound = 100;
ubound = 10000;
ntries = 5;
wrong = 0;
cout << \"Please enter an integer num for X: \";
cin >> numX;
readNumber(lbound, ubound, ntries, wrong, numX);
if(readNumber(lbound, ubound, ntries, wrong, numX) == true)
{
cout << \"Please enter an integer num for Y: \";
cin >> numY;
readNumber(lbound, ubound, ntries, wrong, numY);
}
if(readNumber(lbound, ubound, ntries, wrong, numX) == true && readNumber(lbound, ubound, ntries, wrong, numY) == true)
{
sumX = properDivisorSum(numX, \"X\");
sumY = properDivisorSum(numY, \"Y\");
amicablePair(sumX, numY);
amicablePair(sumY, numX);
if (amicablePair(sumY, numX) == true)
{
cout << \"They are amicable numbers \" << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of X \" << numX << \" is\" << \" equals to \" << \"sum of Y divisors \" << sumY << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of Y \" << numY << \" is\" << \" equals to \" << \"sum of X divisors \" << sumX << endl;
}
if (amicablePair(sumY, numX) == false)
{
cout << \"They are not amicable \" << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of X \" << numX << \" is\" << \" not equals to \" << \"sum of Y divisors \" << sumY << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of Y \" << numY << \" is\" << \" not equals to \" << \"sum of X divisors \" << sumX << endl;
}
}
if(readNumber(lbound, ubound, ntries, wrong, numX) == false || readNumber(lbound, ubound, ntries, wrong, numY) == false)
{
cout <<\" game over\" << endl;
}
system(\"pause\");
return 0;
}
int properDivisorSum(int num, string result)
{
{
double limit = num;
int sum = 0;
for (int i = 1; i < limit; i++)
{
if (num % i == 0)
{
sum += i;
cout << \"The divisor for \" << result << \" is \" << i << endl;
}
}
cout << \"The sum of the divisors from \" << result << \" is \" << sum << \"\ \" << endl;
cout << \"-----------------------------------------------------------------\" << endl;
return sum;
}
}
bool amicablePair(int sum, int num)
{
if (sum == num)
return true;
else
return false;
}
bool readNumber(int lbound, int ubound, int ntries, int wrong, int& num)
{
if (num >= lbound && num <= ubound)
{
return true;
}
else{
do
{
if (num < lbound || num > ubound || !cin.good())
{
cout << \"try again!: \";
cin >> num;
wrong++;
if(wrong > ntries)
{
cout << \"Sorry..!!\ You have reached the maximum limit of Tries.\" << endl;
return false;
}
cin.clear();
cin.ignore();
}
else if (num >= lbound && num <= ubound)
{
return true;
}
} while (num < lbound || num > ubound);
}
}
program should reject non numeric input
program should only accept numbers between 100 and 10,000
once it reaches maxmimum ntries(number of tries) program should return false
Solution
#include <limits>
#include <iostream>
#include <string>
#include<stdio.h>
using namespace std;
bool readNumber(int lbound, int ubound, int ntries, int wrong, int& num);
int properDivisorSum(int numer, string);
bool amicablePair(int a, int b);
int main()
{
int numX, numY, sumX, sumY;
int lbound, ubound, ntries, wrong;
lbound = 100;
ubound = 10000;
ntries = 5;
wrong = 1;
int flag=1;
while(flag)
{
cout << \"Please enter an integer num for X: \";
if (scanf(\"%d\", &numX) != 1)
{
printf(\"This is not a number.\ \");
}
readNumber(lbound, ubound, ntries, wrong, numX);
if(readNumber(lbound, ubound, ntries-1, wrong, numX) == true)
{
cout << \"Please enter an integer num for Y: \";
cin >> numY;
readNumber(lbound, ubound, ntries-1, wrong, numY);
}
if(readNumber(lbound, ubound, ntries, wrong, numX) == true && readNumber(lbound, ubound, ntries, wrong, numY) == true)
{
sumX = properDivisorSum(numX, \"X\");
sumY = properDivisorSum(numY, \"Y\");
amicablePair(sumX, numY);
amicablePair(sumY, numX);
if (amicablePair(sumY, numX) == true)
{
cout << \"They are amicable numbers \" << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of X \" << numX << \" is\" << \" equals to \" << \"sum of Y divisors \" << sumY << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of Y \" << numY << \" is\" << \" equals to \" << \"sum of X divisors \" << sumX << endl;
}
if (amicablePair(sumY, numX) == false)
{
cout << \"They are not amicable \" << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of X \" << numX << \" is\" << \" not equals to \" << \"sum of Y divisors \" << sumY << endl;
cout << \"----------------------------------------------------------------------\" << endl;
cout << \"num of Y \" << numY << \" is\" << \" not equals to \" << \"sum of X divisors \" << sumX << endl;
}
}
if(readNumber(lbound, ubound, ntries, wrong, numX) == false || readNumber(lbound, ubound, ntries, wrong, numY) == false)
{
cout <<\" game over\" << endl;
}
cout<<\"Do you want to enter another pair(y/n)\ \";
char ch;
cin>>ch;
if(ch==\'y\')
{
}
else
{
flag=0;
}
}
return 0;
}
int properDivisorSum(int num, string result)
{
{
double limit = num;
int sum = 0;
for (int i = 1; i < limit; i++)
{
if (num % i == 0)
{
sum += i;
cout << \"The divisor for \" << result << \" is \" << i << endl;
}
}
cout << \"The sum of the divisors from \" << result << \" is \" << sum << \"\ \" << endl;
cout << \"-----------------------------------------------------------------\" << endl;
return sum;
}
}
bool amicablePair(int sum, int num)
{
if (sum == num)
return true;
else
return false;
}
bool readNumber(int lbound, int ubound, int ntries, int wrong, int& num)
{
if (num >= lbound && num <= ubound)
{
return true;
}
else{
do
{
if (num < lbound || num > ubound || !cin.good())
{
cout << \"try again!: \";
cin >> num;
wrong++;
if(wrong > ntries)
{
cout << \"Sorry..!!\ You have reached the maximum limit of Tries.\" << endl;
return false;
}
cin.clear();
cin.ignore();
}
else if (num >= lbound && num <= ubound)
{
return true;
}
} while (num < lbound || num > ubound);
}
}
=======================================================
Output:
akshay@akshay-Inspiron-3537:~/Chegg$ g++ ntries.cpp
akshay@akshay-Inspiron-3537:~/Chegg$ ./a.out
Please enter an integer num for X: a
This is not a number.
try again!: try again!: 123
Please enter an integer num for Y: 123
The divisor for X is 1
The divisor for X is 3
The divisor for X is 41
The sum of the divisors from X is 45
-----------------------------------------------------------------
The divisor for Y is 1
The divisor for Y is 3
The divisor for Y is 41
The sum of the divisors from Y is 45
-----------------------------------------------------------------
They are not amicable
----------------------------------------------------------------------
num of X 123 is not equals to sum of Y divisors 45
----------------------------------------------------------------------
num of Y 123 is not equals to sum of X divisors 45
Do you want to enter another pair(y/n)
y
Please enter an integer num for X: 86
try again!: 111
Please enter an integer num for Y: 1236
The divisor for X is 1
The divisor for X is 3
The divisor for X is 37
The sum of the divisors from X is 41
-----------------------------------------------------------------
The divisor for Y is 1
The divisor for Y is 2
The divisor for Y is 3
The divisor for Y is 4
The divisor for Y is 6
The divisor for Y is 12
The divisor for Y is 103
The divisor for Y is 206
The divisor for Y is 309
The divisor for Y is 412
The divisor for Y is 618
The sum of the divisors from Y is 1676
-----------------------------------------------------------------
They are not amicable
----------------------------------------------------------------------
num of X 111 is not equals to sum of Y divisors 1676
----------------------------------------------------------------------
num of Y 1236 is not equals to sum of X divisors 41





