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