diff --git a/report/src/report.tex b/report/src/report.tex index a653bae4ba672d88d70b3224aae9040cc49e9d92..099bd64d24dd5489fe2a396601ae912a5de674b5 100644 --- a/report/src/report.tex +++ b/report/src/report.tex @@ -9,8 +9,12 @@ \usepackage{siunitx} \usepackage{ragged2e} \usepackage{booktabs} +\usepackage{algorithm} +\usepackage{algpseudocodex} \usepackage{hyperref} +\newcommand{\algorithmautorefname}{Algorithm} + \title{Solar Pump Control} \subtitle{Arduino Project for the Arduino Block Course 2022} \author{Engelmann, Mario\and Gehr, Stefan} @@ -94,7 +98,64 @@ and increments the queue. Both index variables get set back to zero in case they reach the the end of the queue. \section{Saying Numbers} - +As our ``client'' only speaks German, we needed to implement the way numbers are read in that language. +First we implemented a function sayDigit(\(d\)) that plays the corresponding sound of the digit \(d\). +So ``eins'' for \(d=1\), ``zwei'' for \(d=2\), and so on. +Then for a few special cases we needed to create the function +sayPreNumber(\(n\)) that only says ``ein'' instead of ``eins'' for \(n=1\) and just calls our normal sayNumber(\(n\)) function otherwise. +This is necessary for cases like \(n=31\) which is read as ``EINunddreißig'' instead of ``EINSunddreißig''. +Another special fucntion is sayAftNumber(\(n\)) which only our normal sayNumber(\(\n\)) function if \(n\ne 0\). +It is necessary for numbers like 100, 200, 300, \dots, +as we want to say ``zweihundert'' for \(n=200\) and not ``zweihundertnull''. +\begin{algorithm} + \caption{Pseudocode implementation of the sayNumber function} + \label{alg:saynumber} +\begin{algorithmic}[1] +\Function{sayNumber}{\(n\)} + \If{\(n<0\)} + \Comment{negative number} + \State say(minus) + \State sayNumber(\(-n\)) + \ElsIf{\(n < 10\)} + \Comment{1-digit number} + \State sayDigit(\(n\)) + \ElsIf{\(n < 100\)} + \Comment{2-digit number} + \If{\(n=11\)} + \Comment{special case ELF} + \State say(elf) + \ElsIf{\(n=12\)} + \Comment{special case ZWÖLF} + \State say(zwölf) + \Else + \State tens \(\gets \lfloor n / 10 \rfloor\) + \State ones \(\gets n - 10 \times \text{tens}\) + \If{\(\text{ones}\ne 0\)} + \Comment{say the 1-digit first} + \State sayPreNumber(ones) + \If{\(\text{tens}\ge 2\)} + \Comment{UND only for numbers \(> 20\)} + \State say(und) + \EndIf + \EndIf + \If{\(\text{tens}=1\)} + \State say(zehn) + \ElsIf{\(\text{tens}=2\)} + \State say(zwanzig) + \ElsIf{\(\hdots\)} + \State \(\vdots\) + \EndIf + \EndIf + \Else + \Comment{3-digit number} + \State hundreds \(\gets \lfloor n / 100 \rfloor\) + \State sayPreNumber(hundreds) + \State sayAftNumber(\(n - 100 \times \text{hundreds}\) + \EndIf +\end{algorithmic} +\end{algorithm} +Finally our main function sayNumber(\(n\)) goes thorugh all the possible cases. +A peudocode implementation of it can be seen in \autoref{alg:saynumber}. \section{Temperature} %\listoffigures