From 571de4b7f56d67b66a2dc4dc0912926d4f9e58c8 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Fri, 25 Oct 2019 13:11:08 +0200 Subject: [PATCH] [programming] add solutions for parts of exercise, add question --- .../exercises/boolean_logical_indexing.tex | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/programming/exercises/boolean_logical_indexing.tex b/programming/exercises/boolean_logical_indexing.tex index 315efe7..5e790b2 100644 --- a/programming/exercises/boolean_logical_indexing.tex +++ b/programming/exercises/boolean_logical_indexing.tex @@ -14,7 +14,7 @@ %%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} \pagestyle{headandfoot} \header{{\bfseries\large Exercise 4 - }}{{\bfseries\large Boolean Expressions and logical indexing}}{{\bfseries\large 23. Oktober, 2018}} + }}{{\bfseries\large Boolean expressions and logical indexing}}{{\bfseries\large 29. Oktober, 2019}} \firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{} @@ -50,24 +50,75 @@ following pattern: ``variables\_datatypes\_\{lastname\}.m'' \verb+y = [5 2 2 6 0 0 2]+. Execute the following commands and explain. \begin{parts} \part \verb+x > y+ + \begin{solution} + Returns a vector of zeros and ones. The vector is one for each + position at which the value of x is larger than the + respective counterpart in y. + \end{solution} \part \verb+y < x+ + \begin{solution} + same result, because we are inverting the expression. + \end{solution} \part \verb+x == y+ + \begin{solution} + only 1 for same values in x and y + \end{solution} \part \verb+x ~= y+ + \begin{solution} + 1 for all indices where x and y values are not the same. + \end{solution} \part \verb+x & ~y+ + \begin{solution} + 1 only for the indices in which x is ~= 0 AND y is 0. + Implicit conversion of the values in x and y to logicals. + \end{solution} \part \verb+x | y+ + \begin{solution} + 1 at the indices where x or y are ~= 0. + \end{solution} \end{parts} + \question What is the difference between the logical operators + \verb+&+ and \verb+&&+ and \verb+|+ and \verb+||+ and why are they + useful? + \begin{solution} + \verb+&&+ and \verb+||+ are called short-ciruit AND and OR. In + case of an AND expression, the right-hand side is only evaluated + if the left-hand side yields \verb+true+. Similarly for OR, the + right-hand side is only evaluated if the left-hand side yields + \verb+false+. + + Saves processing time. + \end{solution} + \question Find out what the functions \verb+bitand+ and \verb+bitor+ do. \begin{parts} \part Execute and explain: \verb+bitand(10, 8)+ + \begin{solution} + compares the binary patterns of both numbers with a logican AND + and returns the decimal value of the resulting binary pattern. + The only bit that is ``on'' for both numbers is the '8', the + result is thus '8'. + \end{solution} \part Execute and explain: \verb+bitor(10, 8)+ + \begin{solution} + Comparison with a logical OR. 8 and 2 bits are ``on'' in at + least one of the two binary patterns, the result will be 10. + \end{solution} \end{parts} \item Implement the following Boolean expressions. Test your implementations using random integer numbers for \verb+x+ and \verb+y+ (\verb+randi+). \begin{parts} \part The result should be \verb+true+ if \verb+x+ is greater than \verb+y+ and the sum of \verb+x+ and \verb+y+ is not less than 100. + \begin{solution} + \code{x > y \& (x+y) >= 100} + \end{solution} \part The result should be \verb+true+ if \verb+x+ and \verb+y+ are not equal zero or \verb+x+ and \verb+y+ are equal. + \begin{solution} + \code{(x ~= 0 \& y ~= 0) | x == y} + \end{solution} + \end{parts} \end{questions}