From: Mart Lubbers Date: Wed, 28 May 2014 09:49:32 +0000 (+0200) Subject: nieuw X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=9fe27219d93e47942a14540b0ea5de37242fdd78;p=sec1415.git nieuw --- diff --git a/img/img4.gif b/img/img4.gif new file mode 100644 index 0000000..1814500 Binary files /dev/null and b/img/img4.gif differ diff --git a/img/img4.png b/img/img4.png new file mode 100644 index 0000000..97036ea Binary files /dev/null and b/img/img4.png differ diff --git a/introduction.tex b/introduction.tex index a6c5686..756f464 100644 --- a/introduction.tex +++ b/introduction.tex @@ -4,60 +4,101 @@ programmeertaal die is ge\"inspireerd door de Nederlandse kunstenaar Piet Mondriaan. Programma's geschreven vooor \textit{piet} kunnen eruit zien als abstracte kunst en worden aangeleverd als een afbeelding. Een programma dat zijn doel nastreeft is bijvoorbeeld het volgende programma dat het woord -``\textit{Tetris}'' print en iedere groep blokken een blok is uit het originele -\textit{Tetris} spel. +``\textit{Tetris}'' print en ieder vlak van dezelfde kleur is van de vorm van +een van de blokken uit het originele \textit{Tetris} spel. \begin{figure}[h] - \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png} + \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png} \end{figure} \subsection{Beschrijving en vergelijking met \textit{While}} \textit{Piet} en \textit{While} zijn beide imperatieve talen maar zijn toch erg -verschillend als het gaat om variabelenopslag en instructies. \textit{Piet} +verschillend als het gaat om variabelenopslag en instructies. \textit{Piet} slaat zijn variabelen op in een stack waar \textit{While} dit niet doet. In een toestand in \textit{While} kan iedere gedeclareerde variabele opgevraagd worden. Omdat \textit{Piet} de variabelen in een stack opslaat kan er alleen -maar de bovenste waarde opgevraagd worden.\\ -In \textit{Piet} is een stack een geordende rij van gehele getallen. De stack -gedraagt zich volgens het LIFO(Last in First Out) principe wat inhoudt dat er -slechts \'e\'en element per keer kan worden opgevraagd en dat dat alleen het -laatst toegevoegde element kan zijn.\\ +maar de bovenste waarde opgevraagd worden.\\ In \textit{Piet} is een stack een +geordende rij van gehele getallen. De stack gedraagt zich volgens het LIFO(Last +in First Out) principe wat inhoudt dat er alleen het bovenste element +beschikbaar is.\\ Instructies worden gegeven door het binnengaan van een nieuwe codel \footnote{Een codel is een blok $n\times n$ pixels waarbij $n\in\mathbb{N}$, een argument aan de compiler bepaalt de waarde van $n$. De standaard waarde is -$1$} Als de kleur van de nieuwe codel wit of hetzelfde is als de codel die -verlaten wordt zal er niks gebeuren, is de codel zwart dan wordt er een nieuwe -richting gekozen door de interpreter. Alle andere kleuren beschrijven een -overgang die te beschrijven is in twee parameters; tint en intensiteit. Beide -parameters zijn cyclisch, wat betekent dat de opvolger van de grootste waarde -de kleinste waarde is. Iedere mogelijke overgang beschrijft een instructie voor -de interpreter. Deze overgangen zijn beschreven in tabel -\ref{tab:in1}. +$1$}, de grootte van de codel is een interpreter argument en kan een groot +verschil maken in semantiek van het programma. Bij wijze van uitdaging heeft +een \textit{Piet} programmeur een programma gemaakt dat bij codel grootte $2$ +``Piet'' print en bij codel grootte $1$ ``Hello World''. Het programma is +zichtbaar in \ref{fig:img4}. +\begin{figure}[H] + \caption{Codel grootte maakt het verschil} + \label{fig:img4} + \centering + \includegraphics[natheight=46px, natwidth=50px, height=46px, width=50px]{img4.png} +\end{figure} +Een \textit{Piet} programma wordt ge\"interpreteert door een interpreter die te +vergelijken is met een agent die over de pixels loopt. De agent houdt een +aantal dingen bij terwijl hij aan het lopen is over de pixels namelijk: +\textit{codelchooser(CC), direction pointer(DP), vorig vlak(VK)}. De VK waarde +is de waarde van het vorige codel bij het bewegen naar een nieuwe codel. De +waarde van een codel is het oppervlakte van de codels met de zelfde kleur die +verlaten is. Het bepalen van de volgende codel wordt bepaald door een +combinatie van de CC en de DP, deze relatie staat beschreven in \ref{tab:in1}. +\begin{table}[H] + \caption{Volgend codel keuze} + \label{tab:in1} + \centering + \begin{tabular}{|c|c|c|} + \hline + DP & CC & Codel chosen\\ + \hline + rechts & links & meest bovenste\\ + rechts & rechts & minst bovenste\\ + omlaag & links & meest rechtse\\ + omlaag & rechts & meest linkse\\ + links & links & meest onderste\\ + links & rechts & meest bovenste\\ + omhoog & links & meest linkse\\ + omhoog & rechts & meest rechtse\\ + \hline + \end{tabular} +\end{table} + +De overgang van kleur die wordt waargenomen bij het verplaatsen van codel naar +codel bepaalt de operatie die wordt uitgevoerd. De overgang in kleur is te +beschrijven in twee cyclische parameters genaamd tint en intensiteit. Deze +overgangen zijn beschreven in \ref{tab:in2}. Als de interpreter een witte codel +binnengaat wordt er niks gedaan en vervolgt de interpreter zijn weg. Zwarte +codels en de rand van de afbeelding zijn blokkades en zorgt voor een CC +waardeverwisseling, komt de interpreter weer een blokkade tegen wordt de DP een +slag met de klok mee gedraaid, dit wordt herhaalt tot er een niet blokkade blok +gevonden wordt. Als dit na acht pogingen nog niet het geval is termineert het +programma. +\ref{tab:in2}. \begin{table}[H] - \caption{Beide overgangcykels} - \label{tab:in1} - \centering - \begin{itemize} - \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta - \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker - \end{itemize} + \caption{Beide overgangcykels} + \label{tab:in2} + \centering + \begin{itemize} + \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta + \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker + \end{itemize} \end{table} De instructies die de overgangen uitdrukken staan beschreven in de tabel \ref{tab:in2}. \begin{table}[H] - \caption{Commando's} - \label{tab:in2} - \centering - \begin{tabular}{|l|l|l|l|} - \hline - Tint\textbackslash Intensiteit & 0 donkerder & 1 donkerder & 2 donkerder\\ - \hline - 0 stappen & - & push & pop\\\hline - 1 stap & add & subtract & multiply\\\hline - 2 stappen & divide & mod & not\\\hline - 3 stappen & greater & pointer & switch\\\hline - 4 stappen & duplicate & roll & in(number)\\\hline - 5 stappen & in(char) & out(number) & out(char)\\\hline - \end{tabular} + \caption{Commando's} + \label{tab:in2} + \centering + \begin{tabular}{|l|l|l|l|} + \hline + Tint\textbackslash Intensiteit & 0 donkerder & 1 donkerder & 2 donkerder\\ + \hline + 0 stappen & - & push & pop\\\hline + 1 stap & add & subtract & multiply\\\hline + 2 stappen & divide & mod & not\\\hline + 3 stappen & greater & pointer & switch\\\hline + 4 stappen & duplicate & roll & in(number)\\\hline + 5 stappen & in(char) & out(number) & out(char)\\\hline + \end{tabular} \end{table}