$25
Question 1:
a. Implement a function:
int printMonthCalender(int numOfDays, int startingDay)
This function is given two parameters:
• numOfDays - The number of days in the month
• startingDay – a number 1-7 that represents the day in the week of the first day in that month (1 for Monday, 2 for Tuesday, 3 for Wednesday, etc.).
The function should:
• Print a formatted monthly calendar of that month
• Return a number 1-7 that represents the day in the week of the last day in that month.
Formatting Notes:
• The output should include a header line with the days’ names.
• Columns should be spaced by a Tab.
Example: when calling printMonthCalender(31, 4)it should return 6, and should print:
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
b. A method for determining if a year is a leap year in the Gregorian calendar system is to check if it is divisible by 4 but not by 100, unless it is also divisible by 400.
For example, 1896, 1904, and 2000 were leap years but 1900 was not.
Write a function that takes in a year as input and return true if the year is a leap year, return false otherwise.
Note: background on leap year https://en.wikipedia.org/wiki/Leap_year
c. Implement a function:
void printYearCalender(int year, int startingDay)
This function is given two parameters:
• year – an integer that represents a year (e.g. 2016)
• startingDay – a number 1-7 that represents the day in the week of 1/1 in that year (1 for Monday, 2 for Tuesday, 3 for Wednesday, etc.).
The function should use the functions from sections (a) and (b) in order to print a formatted yearly calendar of that year.
Formatting Note: As the header for each month you should print the months’ name followed by the year (e.g. March 2016).
Example: Appendix A shows the expected output of the call printYearCalender(2016, 5).
d. Write program that interacts with the user and your function in (c).
Question 2:
Consider the following definitions:
a. A proper divisors of a positive integer (≥ 2) is any of its divisors excluding the number itself. For example, the proper divisors of 10 are: 1, 2 and 5.
b. A perfect number is a positive integer (≥ 2) that is equal to the sum of its proper divisors. For example, 6 and 28 are perfect numbers, since:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
Background of perfect numbers: https://en.wikipedia.org/wiki/Perfect_number
c. Amicable numbers are two different positive integer (≥ 2), so related that the sum of the proper divisors of each is equal to the other number. For example, 220 and 284 are amicable numbers, since:
284 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110
220 = 1 + 2 + 4 + 71 + 142
Background of amicable numbers: https://en.wikipedia.org/wiki/Amicable_numbers
a. Write a function:
void analyzeDividors(int num, int& outCountDivs, int& outSumDivs)
The function takes as an input a positive integer num (≥ 2), and updates two output parameters with the number of num's proper divisors and their sum.
For example, if this function is called with num=12, since 1, 2, 3, 4 and 6 are 12s proper divisors, the function would update the output parameters with the numbers 5 and 16. Note: Pay attention to the running time of your function. An efficient implementation would run in Θ"√𝑛𝑢𝑚’.
b. Use the function you wrote in section (a), to implement the function: bool isPerfect(int num)
This functions is given positive integer num (≥ 2), and determines if it is perfect number or not.
c. Use the functions you implemented in sections (a) and (b), to write a program that reads from the user a positive integer M (≥ 2), and prints:
• All the perfect numbers between 2 and M.
• All pairs of amicable numbers that are between 2 and M (both numbers must be in the range).
Note: Pay attention to the running time of your implementation. An efficient algorithm for this part would call analyzeDividors Θ(𝑀) times all together.
Question 3:
a. Solve Exercise 8.2.2, section b from the Discrete Math zyBook.
b. Solve Exercise 8.3.5, sections a-e from the Discrete Math zyBook
Question 4:
Solve the following questions from the Discrete Math zyBook: a) Exercise 5.1.2, sections b, c
b) Exercise 5.3.2, section a
c) Exercise 5.3.3, sections b, c
d) Exercise 5.2.3, sections a, b
Question 5:
Solve the following questions from the Discrete Math zyBook: a) Exercise 5.4.2, sections a, b
b) Exercise 5.5.3, sections a-g
c) Exercise 5.5.5, section a
d) Exercise 5.5.8, sections c-f
e) Exercise 5.6.6, sections a, b
Question 6:
Solve the following questions from the Discrete Math zyBook: a) Exercise 5.7.2, sections a, b
b) Exercise 5.8.4, sections a, b
Question 7:
How many one-to-one functions are there from a set with five elements to sets with the following number of elements?
a) 4
b) 5
c) 6
d) 7
Appendix A.
The expected output of the call printYearCalender(2016, 5) is:
January 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
February 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29
March 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
April 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
May 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
June 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
July 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
August 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
September 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
October 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
November 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
December 2016
Mon Tue Wed Thr Fri Sat Sun
1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31