add solutions to Uebung1

This commit is contained in:
Jan Grewe 2015-10-21 11:30:48 +02:00
parent fb9008f571
commit 8bd0e7d775

View File

@ -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}