From 8bd0e7d775f7ce4ea26705bc8fdda5f6f0de3f4c Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Wed, 21 Oct 2015 11:30:48 +0200 Subject: [PATCH] add solutions to Uebung1 --- programming/exercises/variables_types.tex | 208 +++++++++++++++++----- 1 file changed, 160 insertions(+), 48 deletions(-) diff --git a/programming/exercises/variables_types.tex b/programming/exercises/variables_types.tex index c0d82f3..3226ab3 100644 --- a/programming/exercises/variables_types.tex +++ b/programming/exercises/variables_types.tex @@ -1,4 +1,4 @@ -\documentclass[12pt,a4paper,pdftex]{exam} +\documentclass[12pt,a4paper,pdftex, answers]{exam} \usepackage[german]{babel} \usepackage{natbib} @@ -8,6 +8,7 @@ \usepackage{pslatex} \usepackage{amsmath} \usepackage{amssymb} +\usepackage{lipsum} \setlength{\marginparwidth}{2cm} \usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} @@ -16,7 +17,7 @@ \pagestyle{headandfoot} \header{{\bfseries\large \"Ubung 1}}{{\bfseries\large Variablen und Datentypen}}{{\bfseries\large 12. Oktober, 2015}} \firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: -jan.grewe@uni-tuebingen.de} + jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{} \setlength{\baselineskip}{15pt} @@ -25,15 +26,15 @@ jan.grewe@uni-tuebingen.de} \renewcommand{\baselinestretch}{1.15} \newcommand{\code}[1]{\texttt{#1}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\renewcommand{\solutiontitle}{\noindent\textbf{L\"osung:}\par\noindent} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \vspace*{-6.5ex} \begin{center} -\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] -{\large Jan Grewe, Jan Benda}\\[-3ex] -Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ + \textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] + {\large Jan Grewe, Jan Benda}\\[-3ex] + Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ \end{center} Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und @@ -47,82 +48,193 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: \begin{questions} -\question Erzeugen und L\"oschen von Variablen: + \question Erzeugen und L\"oschen von Variablen: \begin{parts} - \part Erzeuge zwei Variablen \code{a}, \code{b} und weise ihnen + \part Erzeuge zwei Variablen \code{a}, \code{b} und weise ihnen unterschiedliche Werte zu. Schlie{\ss}e die Zeilen mit einem Semikolon ab. Erstelle eine Variable \code{c} die leer ist. - \part Lass die Werte der Variablen ausgeben. - \part Benuzte die Kommandozeile um herauszufinden, welche Variablen + \begin{solution} + \code{a = 1;}, \code{b = 2;}, \code{c = [];} + \end{solution} + \part Lass die Werte der Variablen ausgeben. + \begin{solution} + \code{disp(a)}, \code{disp(b)}, \code{disp(c)} + \end{solution} + \part Benuzte die Kommandozeile um herauszufinden, welche Variablen es im Workspace gibt. - \part Benuzte die Kommandozeile um herauszufinden, welche Datentypen sie haben. - \part Finde in der Hilfe mehr Information \"uber das \code{clear} Kommando. - \part L\"osche eine Variable. - \part L\"osche alle \"ubrigen Variablen. + \begin{solution} + \code{who} + \end{solution} + \part Benuzte die Kommandozeile um herauszufinden, welche Datentypen sie haben. + \begin{solution} + \code{whos} oder \code{class(a)}, \code{class(b)}, \code{class(c)} + \end{solution} + \part Finde in der Hilfe mehr Information \"uber das \code{clear} Kommando. + \begin{solution} + \code{help clear} + \end{solution} + \part L\"osche eine Variable. + \begin{solution} + \code{clear a} + \end{solution} + \part L\"osche alle \"ubrigen Variablen. + \begin{solution} + \code{clear all} oder einfach \code{clear} + \end{solution} \end{parts} -\question Operationen auf Variablen: -\begin{parts} - \part Erstelle die Variablen \code{a} und \code{b} und weise ihnen - beliebige Werte zu. - \part Addiere beliebige andere Zahlen zu den Variablen \code{a} und \code{b}. - \part Addiere die Variablen. - \part Mulipliziere die Variablen miteinander. - \part \"Andern sich die urspr\"unglichen Werte der Variablen? - \part F\"uhre eine beliebige Berechnungen mit den Variablen aus und - weise die Ergebnisse einer neuen Variable \code{x} zu. - \part Weise \code{a} und \code{b} neue Werte zu. Hat sich etwas am - Wert von \code{x} ge\"andert? + \question Operationen auf Variablen: + \begin{parts} + \part Erstelle die Variablen \code{a} und \code{b} und weise ihnen + beliebige Werte zu. + \begin{solution} + \code{a = 5; b = 3.14;} + \end{solution} + \part Addiere beliebige andere Zahlen zu den Variablen \code{a} und \code{b}. + \begin{solution} + \code{a + 5}, \code{b + 7.28} + \end{solution} + \part Addiere die Variablen. + \begin{solution} + \code{a + b} + \end{solution} + \part Mulipliziere die Variablen miteinander. + \begin{solution} + \code{a * b} + \end{solution} + \part \"Andern sich die urspr\"unglichen Werte der Variablen? + \begin{solution} + Nein, die Operationen benutzen die Werte der Variablen. Die + Variablen bleiben unver\"andert. + \end{solution} + \part F\"uhre eine beliebige Berechnungen mit den Variablen aus und + weise die Ergebnisse einer neuen Variable \code{x} zu. + \begin{solution} + \code{x = a * b;} + \end{solution} + \part Weise \code{a} und \code{b} neue Werte zu. Hat sich etwas am + Wert von \code{x} ge\"andert? + \begin{solution} + Nein, der Variablen \code{x} wird ein Wert zugewiesen, der sich + nicht \"andert bis der Variablen ein neuer Wert zugewiesen + wird. Die Variable 'x' speichert das Resultat der Rechnung + \textbf{nicht} die Anweisung. + \end{solution} \end{parts} -\question Berechne die Fakult\"at von 5: + \question Berechne die Fakult\"at von 5: \begin{parts} - \part Erzeuge eine Variable \code{x} und weise ihr den Wert 1 zu. - \part Berechne den ersten Schritt (\code{*2}) und weise das Ergebnis \code{x} + \part Erzeuge eine Variable \code{x} und weise ihr den Wert 1 zu. + \part Berechne den ersten Schritt (\code{*2}) und weise das Ergebnis \code{x} zu. - \part Fahre schrittweise fort, bis die Fakult\"at von 5 berechnet ist. \code{x} + \part Fahre schrittweise fort, bis die Fakult\"at von 5 berechnet ist. \code{x} sollte nun das Endergebnis enthalten. \end{parts} + \begin{solution} + \code{x = 1;} \\ \code{x = x * 2;}\\ \code{x = x * 3;} \\ \code{x = x * 4;} \\ \code{x = x * 5;}\\ code{disp(x)}\\ + \code{ 120} + \end{solution} -\question Erstelle eine Variable, die einen beliebigen Text enth\"alt. Was + \question Erstelle eine Variable, die einen beliebigen Text enth\"alt. Was ist ihr Datentyp? - -\question Was sind die gr\"o{\ss}ten Zahlen, die in den Integer 8, 16, 32 -und 64 bit Datentypen abgelegt werden k\"onnen? - -\question Erstelle eine Variable des 8 Bit Integer Datentyps und weise -ihr einen Wert zu. Addiere \code{300}. Welchen Wert enth\"alt nun die -Variable? Warum? - -\question Erkl\"are die Ausgaben von \code{int8(1024)} und \code{uint8(1024)}. - -\question Typkonvertierung: + \begin{solution} + \code{x = 'einfacher Text'}\\ \code{class(x)\\ char} + \end{solution} + + \question Was sind die gr\"o{\ss}ten Zahlen, die in den Integer 8, 16, 32 + und 64 bit Datentypen abgelegt werden k\"onnen? + \begin{solution} + \verb+2^8 / 2 - 1+\\ + \verb+2^16 / 2 - 1+\\ + \verb+2^32 / 2 - 1+\\ + \verb+2^64 / 2 - 1+ + \end{solution} + + \question Erstelle eine Variable des 8 Bit Integer Datentyps und weise + ihr einen Wert zu. Addiere \code{300}. Welchen Wert enth\"alt nun die + Variable? Warum? + \begin{solution} + \code{x = int8(35);\\x = x + 300;\\ disp(x)\\ 127}\\ + Der Datentype int8 kann nur Werte von -128 bis 127 speichern. + \end{solution} + + \question Erkl\"are die Ausgaben von \code{int8(1024)} und \code{uint8(1024)}. + \begin{solution} + Der int8 Datentyp kann Werte von -128 bis maximal 127 ablegen. Der + uint8 Typ ist \textit{unsigned}, er speichert Werte zwischen 0 und + 255. + \end{solution} + + \question Typkonvertierung: \begin{parts} - \part F\"uhre aus: \code{x = 131.333}. Welchen Datentyp hat die + \part F\"uhre aus: \code{x = 131.333}. Welchen Datentyp hat die Variable \code{x}? - \part Wandle \code{x} in den speichereffizientesten Integer Datentypen um. - \part Welchen Wert hat nun \code{x} ? + \begin{solution} + Sie hat den Typ \textit{double}. + \end{solution} + \part Wandle \code{x} in den speichereffizientesten Integer Datentypen um. + \begin{solution} + \code{x = uint8(x);}\\Ben\"otigt 8 bit anstelle der 64 bit f\"ur + den double. + \end{solution} + \part Welchen Wert hat nun \code{x} ? + \begin{solution} + 131 + \end{solution} \end{parts} -\question Flie{\ss}kommazahlen 1: Endliche Pr\"azision bei Addition + \question Flie{\ss}kommazahlen 1: Endliche Pr\"azision bei Addition \begin{parts} \part Weise der Variablen \code{a} eine Zahl mit Nachkommastellen zu. + \begin{solution} + \code{a = 3.14;} + \end{solution} \part Eine weitere Variable \code{b} soll den Wert \code{a+0.001} haben. Was ist das Ergebnis von \code{b-a} ? + \begin{solution} + \code{b = a + 0.001;}\\ \code{disp(b - a)\\0.001}\\ + Alles ok, Ergebnis wie erwartet. + \end{solution} \part Einer dritte Variable \code{c} soll der Wert \code{a+1e-16} zugewiesen werden. Was ist das Ergebnis von \code{c-a} ? Warum? + \begin{solution} + Das Ergebnis ist 0! Auch die doble Werte haben nur eine endliche + P\"azision in den Nachkommastellen. + \end{solution} \part Berechne \verb=(2^52 + 1) - 2^52= sowie \verb=(2^53 + 1) - 2^53=. + \begin{solution} + Im Ersten Fall ist das Ergebnis = 1, im Zweiten = 0. Bei so + gro{\ss}en Zahlen k\"onnen so kleine Unterschiede nicht mehr + aufgel\"ost werden. + \end{solution} \part Berechne \code{sqrt(1+1e-16)-1} . Ist das richtig? Warum? + \begin{solution} + Die Wurzel von 1 + etwas sollte nicht 1 sein! Das Ergebnis + sollte nicht 0 sein. Vergleiche beim Addieren einer etwas + gr\"o{\ss}eren Zahl (z.B. 1e-8). + \end{solution} \end{parts} -\question Flie{\ss}kommazahlen 2: Endliche Pr\"azision bei Multiplikation + \question Flie{\ss}kommazahlen 2: Endliche Pr\"azision bei Multiplikation \begin{parts} \part Weise der Variablen \code{a} die Zahl \code{4/3} zu. \part Die Variable \code{b} soll den Wert \code{3*(a-1)} erhalten. \part Welches Ergebnis erwartest du f\"ur \code{b-1} ? + \begin{solution} + \code{a = 4/3;}\\ \code{b = 3 * (a-1)}\\ + b sollte nun 1 sein. d.h., \code{b-1} sollte 0 sein. + \end{solution} \part Berechne mit matlab \code{b-1} ! + \begin{solution} + \code{disp(b - 1)\\ -2.2204e-16}\\ Aufgrund von Rundungsfehlern + kommt es zu diesem Ergebnis. + \end{solution} \part Was sollte \code{sin(pi)} ergeben ? Was sagt matlab? + \begin{solution} + Sollte 0 sein, ist es aber nicht. Wie oben, Rundungsfehler + f\"uhren zu diesen Abweichungen. + \end{solution} \end{parts} \end{questions}