From b08ff66959abbf2ac70a3b3b50501338859fd302 Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan.grewe@g-node.org>
Date: Wed, 12 Oct 2016 10:51:00 +0200
Subject: [PATCH] [translation] chapter 1 boolean expressions

---
 programming/lecture/programming.tex | 171 ++++++++++++++--------------
 1 file changed, 86 insertions(+), 85 deletions(-)

diff --git a/programming/lecture/programming.tex b/programming/lecture/programming.tex
index e5e5f92..bc4e4b4 100644
--- a/programming/lecture/programming.tex
+++ b/programming/lecture/programming.tex
@@ -777,122 +777,123 @@ ans =
     16    17    25
 \end{lstlisting}
 
-\section{Boolean Operations}
-
-Boolesche Ausdr\"ucke sind Anweisungen, die zu \codeterm{wahr} oder
-\codeterm{falsch} ausgewertet werden. Man kennt sie z.B. aus der
-Mengenlehre. In der Programmierung werden sie eingesetzt, um z.B. die
-Beziehung zwischen Entit\"aten zu testen. Hierzu werden die
-\codeterm{relationalen Operatoren} (\code[Operator!relationaler!>]{>},
-\code[Operator!relationaler!<]{<},
-\code[Operator!relationaler!==]{==},
-\code[Operator!relationaler!"!]{!}, gr\"o{\ss}er als, kleiner als,
-gleich und nicht) eingesetzt. Mehrere Ausdr\"ucke werden mittels der
-\codeterm[Operator!logischer]{logischen Operatoren}
-(\code[Operator!logischer!and1@\&]{\&}, \code[Operator!logischer!or1@{"|} {}]{|},
-UND, ODER) verkn\"upft. Sie sind nicht nur wichtig, um
-Codeabschnitte bedingt auszuf\"uhren (Verzweigungen,
-\ref{controlstructsec}) sondern auch um aus Vektoren und Matrizen
-bequem Elemente auszuw\"ahlen (logisches Indizieren,
-\ref{logicalindexingsec}). 
-
-Die Tabellen \ref{logicalandor} zeigen die Wahrheitstabellen f\"ur das
-logische UND, das logische ODER und das logische XOR
-(entweder-oder). Es werden die Aussagen A und B mit dem Operator
-verkn\"upft. Beim logischen UND ist der gesamte Ausdruck nur dann
-wahr, wenn beide Ausdr\"ucke sich zu wahr auswerten lassen.  Anders
-ist das beim logischen ODER. Hier ist der gesamte Ausdruck wahr, wenn
-sich der eine \emph{oder} der andere Ausdruck, oder beide Ausdr\"ucke
-zu wahr auswerten lassen. Das auschlie{\ss}ende ODER (XOR) ist nur
-wahr, wenn entweder der eine oder der andere Ausdruck wahr ist und ist
-in \matlab{} als Funktion \code[xor()]{xor(A, B)} verf\"ugbar.
+\section{Boolean expressions}
+
+Boolean expressions are instructions that can be evaluated to
+\varcode{true} or \varcode{false}. In the context of programming they
+are used to test the relations accordingly the programming language
+defines operators for such instructions. The following
+\codeterm{relational operators} are defined:
+(\code[Operator!relational!>]{>}, \code[Operator!relational!<]{<},
+\code[Operator!relational!==]{==}, \code[Operator!relational!"~]{~},
+greater than, less than, equal to, and not.  Via so called
+\codeterm[Operator!logical]{logical operators} it is possible to join
+single Boolean expressions (\code[Operator!logical!and1@\&]{\&},
+\code[Operator!logical!or1@{"|} {}]{|}, AND, OR). These expressions
+are important to control which parts of the code should be evaluated
+under a certain condition (conditional statements,
+Section~\ref{controlstructsec}) but also for accessing only certain
+elements of a vector or matrix (logical indexing,
+Section~\ref{logicalindexingsec}).
+
+The truth tables (\ref{logicalandor}) are used to visualize the
+results of Boolean expressions. The statements A and B can be
+evaluated to True or False. When they are combined with a logical AND
+the expression is true only if both statements are true. The logical
+OR, on the other hand, requires that at least one of the statements is
+true. The exclusive OR (XOR) is true only for cases in which one of
+the statements but not both are true. There is no operator for XOR in
+\matlab{} it is realized via the function \code[xor()]{xor(A,
+  B)}.
 
 \begin{table}[tp]
-  \titlecaption{Wahrheitstabellen logisches UND, ODER und XOR.}{}\label{logicalandor}
+  \titlecaption{Truth tables for logical AND, OR and XOR.}{}\label{logicalandor}
   \begin{tabular}{llll}
     \multicolumn{2}{l}{\multirow{2}{*}{}}  & \multicolumn{2}{c}{\textbf{B}} \\
-    & \sffamily{\textbf{und}} & \multicolumn{1}{|c}{wahr} & falsch \\ \cline{2-4} 
-    \multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr}   & \multicolumn{1}{c}{\textcolor{mygreen}{wahr}} &  \textcolor{red}{falsch} \erb \\ 
-    & \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l}{\textcolor{red}{falsch}} & \textcolor{red}{falsch}      
+    & \sffamily{\textbf{und}} & \multicolumn{1}{|c}{true} & false \\ \cline{2-4} 
+    \multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{true}   & \multicolumn{1}{c}{\textcolor{mygreen}{true}} &  \textcolor{red}{false} \erb \\ 
+    & \multicolumn{1}{l|}{false} & \multicolumn{1}{l}{\textcolor{red}{false}} & \textcolor{red}{false}      
   \end{tabular}
   \hfill
   \begin{tabular}{llll}
     \multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}}      \\
-    & \sffamily{\textbf{oder}} & \multicolumn{1}{|c}{wahr} & falsch \\ \cline{2-4} 
-    \multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr}   & \multicolumn{1}{c}{\textcolor{mygreen}{wahr}}     &  \textcolor{mygreen}{wahr}  \erb    \\
-    & \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l}{\textcolor{mygreen}{wahr}}     & \textcolor{red}{falsch}      
+    & \sffamily{\textbf{oder}} & \multicolumn{1}{|c}{true} & false \\ \cline{2-4} 
+    \multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{true}   & \multicolumn{1}{c}{\textcolor{mygreen}{true}}     &  \textcolor{mygreen}{true}  \erb    \\
+    & \multicolumn{1}{l|}{false} & \multicolumn{1}{l}{\textcolor{mygreen}{true}}     & \textcolor{red}{false}      
   \end{tabular}
   \hfill
   \begin{tabular}{llll}
     \multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}}      \\
-    & \sffamily{\textbf{xor}} & \multicolumn{1}{|c}{wahr} & falsch \\ \cline{2-4} 
-    \multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr}   & \multicolumn{1}{c}{\textcolor{red}{falsch}}     &  \textcolor{mygreen}{wahr}  \erb    \\
-    & \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch}      
+    & \sffamily{\textbf{xor}} & \multicolumn{1}{|c}{true} & false \\ \cline{2-4} 
+    \multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{true}   & \multicolumn{1}{c}{\textcolor{red}{false}}     &  \textcolor{mygreen}{true}  \erb    \\
+    & \multicolumn{1}{l|}{false} & \multicolumn{1}{l}{\textcolor{mygreen}{true}} & \textcolor{red}{false}      
   \end{tabular}
 \end{table}
 
-Tabelle \ref{logicalrelationaloperators} zeigt die logischen Operatoren, die in
-\matlab{} definiert sind. Zu bemerken sind hier noch die
-\code[Operator!logischer!and2@\&\&]{\&\&} und
-\code[Operator!logischer!or2@{"|}{"|} {}]{||} Operatoren. Man kann
-beliebige Ausdr\"ucke verkn\"upfen und h\"aufig kann schon anhand des
-ersten Ausdrucks entschieden werden, ob der gesamte boolesche Ausdruck
-zu wahr oder falsch ausgewertet werden wird. Wenn zwei Aussagen mit
-einem UND verkn\"upft werden und der erste zu falsch ausgewertet wird,
-muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der
-\enterm{short-circuit} Versionen spart Rechenzeit, da die Ausdr\"ucke
-nur sowei wie n\"otig ausgewertet werden. 
+
+Table~\ref{logicalrelationaloperators} show the logical and relational
+operators that are available in \matlab{}. The additional
+\code[Operator!logical!and2@\&\&]{\&\&} und
+\code[Operator!logical!or2@{"|}{"|} {}]{||} operators are the so
+called `\enterm{shorrt-circuit} operators for the logical OR and
+AND. Short-circuit means that \matlab{} stopps to evaluate a Boolean
+expresssion as soon as it becomes clear that the whole expression
+cannot become true. For example assume that the two statements A and B
+are joined using a AND. The whole expression can only be true if A is
+already true. This means, that there is no need to evaluate B if A is
+false. Since the statements may be arbitrarily elaborated computations
+this saves processing time.
 
 \begin{table}[t]
   \titlecaption{\label{logicalrelationaloperators}
-    Logische (links) und relationale (rechts)  Operatoren in \matlab.}{}
+    Logical (left) and relational (right)  operators in \matlab.}{}
   \begin{tabular}{cc}
     \hline
-    \textbf{Operator} & \textbf{Beschreibung} \erh \\ \hline
-    \varcode{$\sim$} & logisches NICHT \erb \\
-    \varcode{$\&$} &  logisches UND\\
-    \varcode{$|$} & logisches ODER\\
-    \varcode{$\&\&$} & short-circuit logisches UND\\
-    \varcode{$\|$} & short-circuit logisches ODER\\
+    \textbf{operator} & \textbf{description} \erh \\ \hline
+    \varcode{$\sim$} & logical NOT \erb \\
+    \varcode{$\&$} &  logical AND\\
+    \varcode{$|$} & logical OR\\
+    \varcode{$\&\&$} & short-circuit logical AND\\
+    \varcode{$\|$} & short-circuit logical OR\\
     \hline
   \end{tabular}
   \hfill
   \begin{tabular}{cc}
     \hline
-    \textbf{Operator} & \textbf{Beschreibung} \erh \\ \hline
-    \varcode{$==$} & gleich \erb \\
-    \varcode{$\sim=$} & ungleich\\
-    \varcode{$>$} &  gr\"o{\ss}er als \\
-    \varcode{$<$} & kleiner als \\
-    \varcode{$>=$} & gr\"o{\ss}er oder gleich \\
-    \varcode{$<=$} & kleiner oder gleich \\
+    \textbf{operator} & \textbf{description} \erh \\ \hline
+    \varcode{$==$} & equals \erb \\
+    \varcode{$\sim=$} & unequal\\
+    \varcode{$>$} &  greater than \\
+    \varcode{$<$} & less than \\
+    \varcode{$>=$} & greateror equal \\
+    \varcode{$<=$} & less or equal \\
     \hline
   \end{tabular}
 \end{table}
 
-Um Werte miteinander zu vergleichen gibt es die
-\codeterm[Operator!relationaler]{relationalen Operatoren} (Tabelle
-\ref{logicalrelationaloperators}). Mit ihnen kann man auf Dinge wie
-Gleichheit (\varcode{==}) gr\"o{\ss}er oder kleiner als (\varcode{>},
-\varcode{<}) testen.
-
-\begin{important}[Zuweisungs- und Gleichheitsoperator]
-  Der Zuweisungsoperator \code[Operator!Zuweisung!=]{=} und der
-  logische Operator \code[Operator!logischer!==]{==} sind zwei
-  grundverschiedene Dinge. Da sie umgangsprachlich gleich sind
-  k\"onnen sie leider leicht verwechselt werden.
+\begin{important}[Assignment and equality operators]
+  The assignment operator \code[Operator!Assignment!=]{=} and the
+  logical equality operator \code[Operator!logical!==]{==} are
+  fundamentally different. Since they are colloquially treated equal
+  they can be easily confused.
 \end{important}
 
-Das Ergebnis eines booleschen Ausdrucks ist immer vom Datentyp
-\codeterm{logical}. Jede beliebige Variable zu wahr oder falsch
-ausgewertet werden indem diese in den Typ \code{logical} umgewandelt
-wird. Dabei werden von \matlab{} alle Werte, die nicht 0 sind als wahr
-eingesch\"atzt. Listing \ref{booleanexpressions} zeigt einige
-Beispiele. \matlab{} kennt die Schl\"usselworte \code{true} und
-\code{false}. Diese sind Synonyme f\"ur die \code{logical} Werte 1 und
-0.
-
-\begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions]
+Previously we have introduced the data types for integer or floating
+point numbers and discussed that there are instances where it is more
+efficient to use a integer data type rather than storing floating
+poing numbers. The result of a Boolean expression can only assume two
+values (true or false). This implies that we need only a single bit to
+store this information as a 0 (false) and 1 (true). In \matlab{} knows
+a special data type (\codeterm{logical}) to store the result of a
+Boolean expresssion. Every variable can be evaluated to true or false
+by just onverting it to the logical data type. When doing so \matlab{}
+interprets all values different form zero to be true.  In
+listing~\ref{booleanexpressions} we show several examples for such
+operations. \matlab{} also knows the keywords \code{true} and
+\code{false} which are synonyms for the \codeterm{logical} values 1
+and 0.
+
+\begin{lstlisting}[caption={Boolean expressions.}, label=booleanexpressions]
 >> true
 ans = 1
 >> false