summaryrefslogtreecommitdiff
path: root/src/2023/March/12.tex
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-03-17 20:41:53 -0700
committerFuwn <[email protected]>2023-03-17 20:41:53 -0700
commit734e826e2d70f7a6aeb36158dbed16209f0d8b7a (patch)
treee91c032cb147e0864e1048b953b7d95e38cfb090 /src/2023/March/12.tex
downloadwri_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.tex123
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.