This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:cprog:fall2024:projects:mmf0 [2024/09/24 15:55] – [else if] tkastne1 | notes:cprog:fall2024:projects:mmf0 [2024/09/29 03:52] (current) – [If it is a leap year subtract 1 more] mwinter4 | ||
---|---|---|---|
Line 1: | Line 1: | ||
======MMF0====== | ======MMF0====== | ||
+ | In this project we are to determine, given a year as input, which day of the week the January 1st of that year falls on. We can determine this with an algorithm known as <wrap hi> | ||
=====Process===== | =====Process===== | ||
Line 11: | Line 11: | ||
</ | </ | ||
+ | The ampersand above is necessary to assign the inputted value to our variable. The ampersand tells the fscanf function where our variable is stored in memory, so that we may access and modify the value based on the input we receive from the verify script. | ||
====Obtain the last two digits of this input value==== | ====Obtain the last two digits of this input value==== | ||
+ | To obtain the last 2 digits of our inputted year, we can take our year and mod (%) it by 100. Because we are using Zeller' | ||
====Quarter the value==== | ====Quarter the value==== | ||
====Add quartered value back to two digit year==== | ====Add quartered value back to two digit year==== | ||
====Subtract best fitting multiple of seven==== | ====Subtract best fitting multiple of seven==== | ||
+ | To subtract the best fitting multiple of seven the % operator can be used | ||
+ | * Do note that % is the remainder operator and not a modulo operator | ||
+ | * Modulo and remainder are primarily the same but they handle negative numbers differently | ||
====If it is a leap year subtract 1 more ==== | ====If it is a leap year subtract 1 more ==== | ||
+ | However, if we are using Zeller' | ||
====Look up day in table==== | ====Look up day in table==== | ||
Line 38: | Line 43: | ||
| Sunday | | Sunday | ||
====Edge case: leap years==== | ====Edge case: leap years==== | ||
+ | Subtracting 1 because it is a leap year may result in a value either less than the variables range or outside of the expected range of outputs | ||
+ | An underflow can be remedied in many ways. | ||
+ | * Adding 7 to the number when it is outside of the expected range | ||
+ | * When the result would be outside of the expected add 6 instead of subtracting 1 | ||
+ | * etc | ||
=====SELECTION===== | =====SELECTION===== | ||
Line 69: | Line 79: | ||
fprintf(stdout, | fprintf(stdout, | ||
} else if(myVariable >= 7){ | } else if(myVariable >= 7){ | ||
- | fprintf(stdout, | + | fprintf(stdout, |
} | } | ||
</ | </ | ||
Line 76: | Line 86: | ||
Because else if is only ran if the prior if statement is false it completes the same task as if(myVariable != 7 && myVariable >= 7) | Because else if is only ran if the prior if statement is false it completes the same task as if(myVariable != 7 && myVariable >= 7) | ||
====else==== | ====else==== | ||
+ | The else function is similar to the else if function in that it is only ran when the prior if statement results in false. | ||
+ | |||
+ | The else function however doesn' | ||
+ | < | ||
+ | int myVariable = 7; | ||
+ | if(myVariable == 7){ | ||
+ | fprintf(stdout, | ||
+ | } else{ | ||
+ | fprintf(stdout, | ||
+ | } | ||
+ | </ | ||
+ | The line The Value of myVariable is not 7 will always print unless myVariable == 7 results to true | ||
+ | The else function allows simple construction of an if than else statement. | ||
====RELATIONAL OPERATORS==== | ====RELATIONAL OPERATORS==== | ||