laatste kleine aanpassingen
[sec1415.git] / an_variabelen.tex
index c3115d1..b33eb46 100644 (file)
@@ -1 +1,149 @@
 \subsection{Variabelen}
+\subsubsection{Verschil met \textit{While}}
+Omdat \textit{Piet} geen variabelenopslag kent moeten we de variabelenopslag
+van \textit{While} emuleren. Dit wordt gedaan door steeds een diepte toe te
+kennen aan variabelen en bij het toewijzen van een variabele wordt deze in de
+stack gestopt en onthouden welke diepte hij heeft om het zo via de onderstaande
+algoritmen op te kunnen halen. Binnen de algoritmen wordt $n$ gebruikt als
+diepte van de variabele (beginnende bij $1$) en $m$ als het aantal variabelen op
+de stack bij aanvang van het opvragen.
+
+\subsubsection{Unair opvragen van een natuurlijk getal}
+Het opvragen van een vaste waarde gaat doormiddel van de $get(n)$ functie. Deze functie haalt de waarde op van variabele \textit{n}.
+
+
+\subsubsection{Unair}
+\label{subsec:unair}
+Als er een operator uitgevoerd wordt die slechts \'e\'en waarde vraagt van de
+stack hoeft er slechts \'e\'en waarde boven aan de stack gezet te worden en dit
+gaat met de volgende operaties bij $n>1$:\\
+push $n$, push $n-1$, roll, dup, push $n+1$, push $1$, roll
+\begin{table}[H]
+       \centering
+       \caption{Voorbeeld, $n=3$}
+       \scriptsize
+       \begin{tabular}{|c|c|c|c|c|c|c|c|}
+               \hline
+               init & 
+               push $3$ & push $3-1$ & roll & dup & push $3+1$ & push $1$ & roll\\
+               \hline
+               5 & 3   & 2     & 2     & 2     & 4     & 1     & 2     \\\hline
+               6       & 5     & 3     & 5     & 2     & 2     & 4     & 5     \\\hline
+               2       & 6     & 5     & 6     & 5     & 2     & 2     & 6     \\\hline
+               1       & 2     & 6     & 1     & 6     & 5     & 2     & 2     \\\hline
+               3       & 1     & 2     & 3     & 1     & 6     & 5     & 1     \\\hline
+               & 3     & 1     &       & 3     & 1     & 6     & 3     \\\hline
+         &     & 3     &       &       & 3     & 1     &       \\\hline
+          &    &       &       &       &       & 3     &       \\\hline
+       \end{tabular}
+\end{table}
+Voor $n=1$ voldoet de volgende operatie:\\
+dup\\
+Dit algoritme beschrijven we als $Un(n)$ voor later gebruik.
+
+
+\subsubsection{Binair}
+Als er een operator uitgevoerd wordt die twee waardes vraagt van de stack
+worden deze boven elkaar boven op de stack gekopieerd met de volgende
+operaties:\\
+$Un(n_1), Un(n_2+1)$
+\begin{table}[H]
+       \centering
+       \caption{Voorbeeld, $n_1=2, n_2=4$}
+       \scriptsize
+       \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
+               \hline
+               & \multicolumn{7}{c|}{$Un(2)$} & \multicolumn{7}{c|}{$Un(4+1)$}\\
+               \hline
+               init & 
+               push $2$ & push $3$ & roll & dup & push $3$ & push $1$ & roll &
+               push $5$ & push $4$ & roll & dup & push $6$ & push $1$ & roll\\
+               \hline
+               5       & 2 & 3 & 6     & 6 & 3 & 1 & 6 & 5 & 4 & 1 & 1 & 6 & 1 & 1     \\\hline
+               6       & 5     & 2 & 5 & 6     & 6 & 3 & 5     & 6 & 5 & 6 & 1 & 1 & 6 & 6     \\\hline
+               2       & 6     & 5     & 2     & 5     & 6     & 6 & 6 & 5     & 6 & 5 & 6 & 1 & 1 & 5 \\\hline
+               1       & 2     & 6     & 1     & 2     & 5     & 6     & 2     & 6     & 5     & 6     & 5     & 6 & 1 & 6     \\\hline
+               3       & 1     & 2     & 3     & 1     & 2     & 5     & 1     & 2     & 6     & 2     & 6     & 5     & 6 & 2 \\\hline
+                   & 3 & 1     &       & 3     & 1     & 2     & 3     & 1     & 2     & 3 & 2 & 6     & 5     & 1     \\\hline
+                   &   & 3     &       &       & 3     & 1     &       & 3     & 1     &       & 3 & 2 & 6     & 3     \\\hline
+                   &   &       &       &       &       & 3     &       &       & 3     &       &       & 3 & 2 &       \\\hline
+                   &   &       &       &       &       &       &       &       &       &       &       &       & 3 &   \\\hline
+       \end{tabular}
+\end{table}
+
+\subsubsection{Assignment}
+Het toewijzen van waarden aan variabelen kost in \textit{Piet} een stuk meer
+werk omdat \textit{Piet} alle variabelen in een stack bewaart. Net als bij het
+opvragen hebben de variabelen een nummer in plaats van een naam. Bij een
+toewijzing wordt de waarde, $m$, bovenop de stack toegewezen aan de variabele
+met de diepte, $n$, gerekend zonder de waarde bovenop de stack mee te tellen.
+En dat gaat met de volgende operaties voor $n>1$:\\
+push $m$, push $n+1$, push $n$, roll, pop, push $n$, push $1$, roll
+\begin{table}[H]
+       \centering
+       \caption{Voorbeeld, $n=4, m=7$}
+       \scriptsize
+       \begin{tabular}{|c|c|c|c|c|c|c|c|c|}
+               \hline
+               init & push 7 & push 5 & push 3 & roll & pop & push 4 & push 1 & roll\\
+               \hline
+               5       & 7 & 5 & 3 & 9 & 7     & 4 & 1 & 5     \\\hline
+               3       & 5     & 7 & 5 & 7     & 5     & 7     & 4 & 3 \\\hline
+               4       & 3     & 5     & 7 & 5 & 3     & 5     & 7     & 4     \\\hline
+               9       & 4     & 3     & 5     & 3     & 4     & 3     & 5     & 7     \\\hline
+               1       & 9     & 4     & 3     & 4     & 1     & 4     & 3     & 1     \\\hline
+               5       & 1     & 9     & 4     & 1     & 5     & 1     & 4     & 5     \\\hline
+                       & 5     & 1     & 9     & 5     &       & 5     & 1     &       \\\hline
+                       &       & 5     & 1     &       &       &       & 5     &       \\\hline
+                       &       & 5     &       &       &       &       &       &       \\\hline
+       \end{tabular}
+\end{table}
+
+Voor $n=1$ voldoen de volgende operaties:\\
+push $2$, push $1$, roll, pop
+
+\begin{landscape}
+\subsubsection{Groot voorbeeld}
+We wijzen variabele $5$ de waarde van variabele $3$ $+$ variabele $2$ toe. Dit
+laat zien dat de verschillende beschreven variable functies ook in combinatie
+werken.
+\begin{table}[H]
+       \centering
+       \caption{Groot voorbeeld}
+       \tiny
+       \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
+               \hline
+               & \multicolumn{7}{c|}{$Un(3)$} &
+                 \multicolumn{7}{c|}{$Un(2)$} &
+                 Addition &
+               \multicolumn{7}{c|}{$Ass(5)$}\\
+               \hline
+               init &
+               push $3$ & push $2$ & roll & dup & push $4$ & push $1$ & roll &
+               push $3$ & push $2$ & roll & dup & push $4$ & push $1$ & roll &
+               add &
+               push $6$ & push $5$ & roll & pop & push $5$ & push $1$ & roll\\
+               \hline
+               4       & 3 & 2 & 1 & 1 & 4     & 1     & 1 & 3 & 2 & 6 & 6     & 4 & 1 & 6     & 7 & 6 & 5
+               & 7     & 7     & 5 & 1 & 7     \\\hline
+               6       & 4     & 3 & 4 & 1 & 1 & 4 & 4 & 1 & 3 & 1     & 6     & 6     & 4 & 1 & 4     & 7 & 6
+               & 7     & 4     & 7     & 5 & 4 \\\hline
+               1       & 6     & 4     & 6 & 4 & 1 & 1 & 6     & 4     & 1 & 4 & 1     & 6     & 6     & 4     & 6     & 4     & 7
+               & 4     & 6     & 4     & 7     & 6     \\\hline
+               2       & 1     & 6     & 1     & 6 & 4 & 1 & 1 & 6     & 4     & 1     & 4     & 1     & 6     & 6     & 1     & 6     & 4
+               & 6     & 1     & 6     & 4     & 1     \\\hline
+               7       & 2     & 1     & 2     & 1     & 6 & 4 & 2     & 1     & 6     & 2     & 1     & 4     & 1     & 1     & 2     & 1     & 6
+               & 1     & 2     & 1     & 6     & 2     \\\hline
+               8       & 7     & 2     & 7     & 2     & 1     & 6 & 7 & 2     & 1     & 7     & 2     & 1     & 4     & 2     & 7     & 2     & 1
+               & 2     & 8     & 2     & 1     & 7     \\\hline
+                       & 8     & 7     & 8     & 7     & 2     & 1     & 8     & 7     & 2     & 8     & 7     & 2     & 1     & 7     & 8     & 7     & 2
+               & 8     &       & 8     & 2     & 8     \\\hline
+                       &       & 8     &       & 8     & 7     & 2     &       & 8     & 7     &       & 8     & 7     & 2     & 8     &       & 8     & 7
+               &       &       &       & 8     &       \\\hline
+                       &       &       &       &       & 8     & 7     &       &       & 8     &       &       & 8     & 7     &       &       &       & 8
+               &       &       &       &       &       \\\hline
+                       &       &       &       &       &       & 8     &       &       &       &       &       &       & 8     &       &       &       &
+               &       &       &       &       &       \\\hline
+       \end{tabular}
+\end{table}
+\end{landscape}