faculteit in piet accent uitgeschreven
authorMart Lubbers <mart@martlubbers.net>
Mon, 19 May 2014 18:28:57 +0000 (20:28 +0200)
committerMart Lubbers <mart@martlubbers.net>
Mon, 19 May 2014 18:28:57 +0000 (20:28 +0200)
an_faculteit.tex
project.tex

index b6c0534..eab5607 100644 (file)
@@ -2,22 +2,47 @@
 Als we de analyse op een compleet programma toepassen komt er een \textit{Piet}
 programma uit dat behoorlijk fors is maar netjes zijn werk doet. Dit programma
 berekent de faculteit van $x$ en stopt dat uiteindelijk in $y$.
-\begin{lstlisting}[
-       mathescape=true,
-       basicstyle=\scriptsize,
-       keepspaces=true,
-       columns=flexible,
-       numbers=left,
-       numbersep=2pt,
-       title=Faculteit in \textit{While},
-       ]
+\begin{lstlisting}[title=Faculteit in \textit{While}]
 x:=5;
 y:=1;
 while $\neg$(x=1)
 do (
-       y:=y*x;
-       x:=x-1
+    y:=y*x;
+    x:=x-1
 )
 \end{lstlisting}
 
-In piet ziet dit er als volgt uit...
+In \textit{Piet} ziet dit er als volgt uit...
+\begin{lstlisting}[title=Faculteit in \textit{Piet'}]
+push 5      // x is vanaf nu variabele 1
+push 1      // y is vanaf nu variabele 2
+
+MARKERING A:
+Un(1)       // variabele x wordt klaargezet
+push 1      // de waarde 1 wordt klaargezet
+sub         // subtractie om straks gelijkheid te kunnen bepalen
+push 1      // de waarde 1 word gepushed om 0 te maken
+dup         // de waarde 1 staat er nu twee keer op
+sub         // 0 staat op de stack om groterdan relatie te bepalen
+push 2      // klaarmaken om de bovenste twee te swappen
+push 1      // idem
+roll        // swappen
+gre         // als x>0 dan ligt 1 op de stack anders 0
+not         // als x=0 dan ligt 1 op de stack anders 0
+pointer     // als x=0 dan draait de DP niet en gaat het programma naar pad A
+            // als x$\neq$ dan draait de DP en gaat het programma naar pad B
+
+PAD A:
+skip        //een oneindig aantal witte blokken, y is nu x!
+
+PAD B:
+Bin(1, 2)   // x en y worden klaargezet om y opnieuw te assignen
+mul         // x*y ligt boven op de stack
+Ass(2)      // x*y wordt geassigned aan y
+Un(1)       // x wordt klaargezet
+push 1      // 1 wordt klaargezet
+sub         // x-1 ligt op de stack
+Ass(1)      // x-1 wordt geassigned aan x
+            // nu gaat het programma weer via een wit pad naar markering A
+
+\end{lstlisting}
index 40bb852..1b0c600 100644 (file)
 
 \graphicspath{{./img/}}
 
+\lstset{
+       mathescape=true,
+       basicstyle=\scriptsize,
+       keepspaces=true,
+       columns=flexible,
+       numbers=left,
+       numbersep=5pt
+}
+
 \definecolor{lred}{HTML}{FFC0C0}
 \definecolor{lyellow}{HTML}{FFFFC0}
 \definecolor{lgreen}{HTML}{C0FFC0}