variabelen klaar
[sec1415.git] / an_variabelen.tex
1 \subsection{Variabelen}
2 \subsubsection{Verschil met \textit{While}}
3 Omdat \textit{Piet} geen variabelen opslag kent moeten we de variabelenopslag
4 van \textit{While} emuleren. Dit wordt gedaan door steeds een diepte toe te
5 kennen aan variabelen en bij het assignen van een variabele wordt deze in de
6 stack gestopt en onthouden welke diepte hij heeft om het zo via de onderstaande
7 algorithmen op te kunnen rakelen. Binnen de algorithmen wordt $n$ gebruikt als
8 diepte van de variabele(beginnende bij $1$) en $m$ als het aantal variabelen op
9 de stack bij aanvang van het opvragen.
10
11 \subsubsection{Unair}
12 Als er een operator uitgevoerd wordt die slechts \'e\'en waarde vraagt van de
13 stack hoeft er slechts \'e\'en waarde boven aan de stack gezet te worden en dit
14 gaat met de volgende operaties:\\
15 push $n$, push $n-1$, roll, dup, push $n+1$, push $1$, roll
16 \begin{table}[H]
17 \centering
18 \caption{Voorbeeld, $n=3$}
19 \scriptsize
20 \begin{tabular}{|c|c|c|c|c|c|c|c|}
21 \hline
22 init &
23 push $3$ & push $3-1$ & roll & dup & push $3+1$ & push $1$ & roll\\
24 \hline
25 5 & 3 & 2 & 2 & 2 & 4 & 1 & 2 \\\hline
26 6 & 5 & 3 & 5 & 2 & 2 & 4 & 5 \\\hline
27 2 & 6 & 5 & 6 & 5 & 2 & 2 & 6 \\\hline
28 1 & 2 & 6 & 1 & 6 & 5 & 2 & 2 \\\hline
29 3 & 1 & 2 & 3 & 1 & 6 & 5 & 1 \\\hline
30 & 3 & 1 & & 3 & 1 & 6 & 3 \\\hline
31 & & 3 & & & 3 & 1 & \\\hline
32 & & & & & & 3 & \\\hline
33 \end{tabular}
34 \end{table}
35 Dit algorithme beschrijven we als $Un(n)$ voor later gebruik.
36
37 \subsubsection{Binair}
38 Als er een operator uitgevoerd wordt die twee waardes vraagt van de stack
39 worden deze boven elkaar boven op de stack gekopieert met de volgende
40 operaties:\\
41 $Un(n_1), Un(n_2+1)$
42 \begin{table}[H]
43 \centering
44 \caption{Voorbeeld, $n_1=2, n_2=4$}
45 \scriptsize
46 \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
47 \hline
48 & \multicolumn{7}{c|}{$Un(2)$} & \multicolumn{7}{c|}{$Un(4+1)$}\\
49 \hline
50 init &
51 push $2$ & push $3$ & roll & dup & push $3$ & push $1$ & roll &
52 push $5$ & push $4$ & roll & dup & push $6$ & push $1$ & roll\\
53 \hline
54 5 & 2 & 3 & 6 & 6 & 3 & 1 & 6 & 5 & 4 & 1 & 1 & 6 & 1 & 1 \\\hline
55 6 & 5 & 2 & 5 & 6 & 6 & 3 & 5 & 6 & 5 & 6 & 1 & 1 & 6 & 6 \\\hline
56 2 & 6 & 5 & 2 & 5 & 6 & 6 & 6 & 5 & 6 & 5 & 6 & 1 & 1 & 5 \\\hline
57 1 & 2 & 6 & 1 & 2 & 5 & 6 & 2 & 6 & 5 & 6 & 5 & 6 & 1 & 6 \\\hline
58 3 & 1 & 2 & 3 & 1 & 2 & 5 & 1 & 2 & 6 & 2 & 6 & 5 & 6 & 2 \\\hline
59 & 3 & 1 & & 3 & 1 & 2 & 3 & 1 & 2 & 3 & 2 & 6 & 5 & 1 \\\hline
60 & & 3 & & & 3 & 1 & & 3 & 1 & & 3 & 2 & 6 & 3 \\\hline
61 & & & & & & 3 & & & 3 & & & 3 & 2 & \\\hline
62 & & & & & & & & & & & & & 3 & \\\hline
63 \end{tabular}
64 \end{table}
65
66 \subsubsection{Assignment}
67 Het toewijzen van waarden aan variabelen kost in \textit{Piet} een stuk meer
68 werk omdat \textit{Piet} alle variabelen in een stack bewaard. Net als bij het
69 opvragen hebben de variabelen een nummer in plaats van een naam. Bij een
70 toewijzing wordt de waarde, $m$, bovenop de stack toegewezen aan de variabele
71 met de diepte, $n$, gerekend zonder de waarde bovenop de stack mee te tellen.
72 En dat gaat met de volgende operaties:\\
73 push $m$, push $n+1$, push $n$, roll, pop, push $n$, push $1$, roll
74 \begin{table}[H]
75 \centering
76 \caption{Voorbeeld, $n=4, m=7$}
77 \scriptsize
78 \begin{tabular}{|c|c|c|c|c|c|c|c|c|}
79 \hline
80 init & push 7 & push 5 & push 3 & roll & pop & push 4 & push 1 & roll\\
81 \hline
82 5 & 7 & 5 & 3 & 9 & 7 & 4 & 1 & 5 \\\hline
83 3 & 5 & 7 & 5 & 7 & 5 & 7 & 4 & 3 \\\hline
84 4 & 3 & 5 & 7 & 5 & 3 & 5 & 7 & 4 \\\hline
85 9 & 4 & 3 & 5 & 3 & 4 & 3 & 5 & 7 \\\hline
86 1 & 9 & 4 & 3 & 4 & 1 & 4 & 3 & 1 \\\hline
87 5 & 1 & 9 & 4 & 1 & 5 & 1 & 4 & 5 \\\hline
88 & 5 & 1 & 9 & 5 & & 5 & 1 & \\\hline
89 & & 5 & 1 & & & & 5 & \\\hline
90 & & 5 & & & & & & \\\hline
91 \end{tabular}
92 \end{table}
93
94 \begin{landscape}
95 \subsubsection{Groot voorbeeld}
96 We wijzen variabele $5$ de waarde van variabele $3$ $+$ variabele $2$ toe.
97 \begin{table}[H]
98 \centering
99 \caption{Groot voorbeeld}
100 \tiny
101 \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|}
102 \hline
103 & \multicolumn{7}{c|}{$Un(3)$} &
104 \multicolumn{7}{c|}{$Un(2)$} &
105 Addition &
106 \multicolumn{7}{c|}{$Ass(5)$}\\
107 \hline
108 init &
109 push $3$ & push $2$ & roll & dup & push $4$ & push $1$ & roll &
110 push $3$ & push $2$ & roll & dup & push $4$ & push $1$ & roll &
111 add &
112 push $6$ & push $5$ & roll & pop & push $5$ & push $1$ & roll\\
113 \hline
114 4 & 3 & 2 & 1 & 1 & 4 & 1 & 1 & 3 & 2 & 6 & 6 & 4 & 1 & 6 & 7 & 6 & 5
115 & 7 & 7 & 5 & 1 & 7 \\\hline
116 6 & 4 & 3 & 4 & 1 & 1 & 4 & 4 & 1 & 3 & 1 & 6 & 6 & 4 & 1 & 4 & 7 & 6
117 & 7 & 4 & 7 & 5 & 4 \\\hline
118 1 & 6 & 4 & 6 & 4 & 1 & 1 & 6 & 4 & 1 & 4 & 1 & 6 & 6 & 4 & 6 & 4 & 7
119 & 4 & 6 & 4 & 7 & 6 \\\hline
120 2 & 1 & 6 & 1 & 6 & 4 & 1 & 1 & 6 & 4 & 1 & 4 & 1 & 6 & 6 & 1 & 6 & 4
121 & 6 & 1 & 6 & 4 & 1 \\\hline
122 7 & 2 & 1 & 2 & 1 & 6 & 4 & 2 & 1 & 6 & 2 & 1 & 4 & 1 & 1 & 2 & 1 & 6
123 & 1 & 2 & 1 & 6 & 2 \\\hline
124 8 & 7 & 2 & 7 & 2 & 1 & 6 & 7 & 2 & 1 & 7 & 2 & 1 & 4 & 2 & 7 & 2 & 1
125 & 2 & 8 & 2 & 1 & 7 \\\hline
126 & 8 & 7 & 8 & 7 & 2 & 1 & 8 & 7 & 2 & 8 & 7 & 2 & 1 & 7 & 8 & 7 & 2
127 & 8 & & 8 & 2 & 8 \\\hline
128 & & 8 & & 8 & 7 & 2 & & 8 & 7 & & 8 & 7 & 2 & 8 & & 8 & 7
129 & & & & 8 & \\\hline
130 & & & & & 8 & 7 & & & 8 & & & 8 & 7 & & & & 8
131 & & & & & \\\hline
132 & & & & & & 8 & & & & & & & 8 & & & &
133 & & & & & \\\hline
134 \end{tabular}
135 \end{table}
136 \end{landscape}