diff options
| author | Fuwn <[email protected]> | 2023-03-17 20:41:53 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-03-17 20:41:53 -0700 |
| commit | 734e826e2d70f7a6aeb36158dbed16209f0d8b7a (patch) | |
| tree | e91c032cb147e0864e1048b953b7d95e38cfb090 /src/2023/March/12.tex | |
| download | wri_350_documentation_log_assignment-734e826e2d70f7a6aeb36158dbed16209f0d8b7a.tar.xz wri_350_documentation_log_assignment-734e826e2d70f7a6aeb36158dbed16209f0d8b7a.zip | |
feat: complete book
Diffstat (limited to 'src/2023/March/12.tex')
| -rw-r--r-- | src/2023/March/12.tex | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/2023/March/12.tex b/src/2023/March/12.tex new file mode 100644 index 0000000..b9e97d1 --- /dev/null +++ b/src/2023/March/12.tex @@ -0,0 +1,123 @@ +\mytitle{The Last Homework of the Term}{\co} + +Now that the term is coming to an end, I am seeing the last couple of +assignments that are being handed out. This week, we had no quiz, but we did +have a homework assignment, and I expect us to have the final exam next week. + +The homework assignment was another MARIE-centric assignment, but featured new +questions that we haven't seen yet. The first two questions were complex +questions which asked us to understand the memory architecture of fundamental +types, and find various pieces of information about their characteristics; +including the number of bits required to represent them, maximum and minimum +values, and more. + +Following that, we had a couple familiar questions that we have seen before, but +in more complex programs, as well as a questions which asked us to draw +flow-charts for the programs that we have written, without using any condition +logic or branching. + +\smallskip + +\begin{tikzpicture}[node distance=2.5cm] + \node + (start) + [draw, rectangle, text centered, minimum width=2cm, minimum height=1cm] + {Start}; + + \node + (loadx) + [draw, rectangle, text centered, right of=start, minimum width=2cm, minimum height=1cm] + {Load X}; + + \node + (addx) + [draw, rectangle, text centered, right of=loadx, minimum width=2cm, minimum height=1cm] + {Add X}; + + \node + (addx2) + [draw, rectangle, text centered, right of=addx, minimum width=2cm, minimum height=1cm] + {Add X}; + + \node + (addy) + [draw, rectangle, text centered, below of=addx2, minimum width=2cm, minimum height=1cm] + {Add Y}; + + \node + (increment) + [draw, rectangle, text centered, left of=addy, minimum width=2cm, minimum height=1cm] + {Increment}; + + \node + (storey) + [draw, rectangle, text centered, left of=increment, minimum width=2cm, minimum height=1cm] + {Store Y}; + + \node + (stop) [draw, rectangle, text centered, minimum width=2cm, minimum height=1cm, left of=storey] + {Stop}; + + \draw [->] (start) -- (loadx); + \draw [->] (loadx) -- (addx); + \draw [->] (addx) -- (addx2); + \draw [->] (addx2) -- (addy); + \draw [->] (addy) -- (increment); + \draw [->] (increment) -- (storey); + \draw [->] (storey) -- (stop); +\end{tikzpicture} + +\smallskip + +The final result looks a little bit like this, with some extra implementation +for the increment subroutine. + +Finally, we had to implement a program which would take two input for two positive numbers, each +less than 20, and output the absolute value of the difference between the second number subtracted +from the first number. I'm not going to write all that out here, since it involves a length of +conditional logic, but it essentially is just a manual implementation of any standard absolute value +function (\verb|abs(first - second)|). + +Within the same program, we had to implement a subroutine that would multiply these two numbers +together. This was tenfold faster to implement since it just requires a looping portion which +decrements one of the numbers every iteration that it adds the other number to the accumulator, +finally storing the result in one of the values. + +Reimplemented in C, that would look something like this: + +\pagebreak + +\begin{lstlisting}[language=c] +int multiply(int first, int second) { + /* Initialize the result to 0. */ + int result = 0; + + /* While the second number is greater than 0, add + * the first number to the result and decrement + * the second number by 1. */ + while (second > 0) { + /* Add the first number to the result. */ + result += first; + + /* Decrement the second number by 1. */ + second -= 1; + } + + /* Return the result (first * second). */ + return result; +} +\end{lstlisting} + +If you have dealt with Riemann sums in calculus before, the above function in C +can be expressed as a Riemann sum, where the function is the first number, the +interval is the second number, and the number of rectangles is the second +number, or vice versa. + +\begin{equation} + \sum_{n=1}^{first}(second) +\end{equation} + +Riemann sums are essentially the \verb|for| loops of calculus. + +As a final evaluation, I would give this assignment a ten-out-of-ten for being a +very in-depth assignment, while still being doable for most of the students. |