From: Mart Lubbers Date: Mon, 19 May 2014 18:28:57 +0000 (+0200) Subject: faculteit in piet accent uitgeschreven X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=e9e87a8181b11d95c08171886cd625eafc34fdf0;p=sec1415.git faculteit in piet accent uitgeschreven --- diff --git a/an_faculteit.tex b/an_faculteit.tex index b6c0534..eab5607 100644 --- a/an_faculteit.tex +++ b/an_faculteit.tex @@ -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} diff --git a/project.tex b/project.tex index 40bb852..1b0c600 100644 --- a/project.tex +++ b/project.tex @@ -14,6 +14,15 @@ \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}