[exercises] Variables and Datastructures

This commit is contained in:
Jan Grewe 2015-10-06 09:52:29 +02:00
parent cfc7fe652f
commit dfabfe4f1e

View File

@ -0,0 +1,230 @@
\documentclass[12pt,a4paper,pdftex]{article}
\usepackage{natbib}
\usepackage{graphicx}
\usepackage[margin=1.5in]{geometry}
\usepackage[small]{caption}
\usepackage{sidecap}
\usepackage{pslatex}
\usepackage{amsmath}
\usepackage{amssymb}
\setlength{\marginparwidth}{2cm}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% letter : 8.5 x 11 in
\setlength{\headheight}{5mm} % default ~5mm
\setlength{\headsep}{8mm} % default ~10mm
\setlength{\topmargin}{15mm} % default ~8mm
\setlength{\textheight}{23cm}
\setlength{\oddsidemargin}{2.5cm}
\setlength{\evensidemargin}{2.5cm}
\setlength{\textwidth}{16cm}
\setlength{\voffset}{-1in}
\setlength{\hoffset}{-1in}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\baselinestretch}{1.15}
\makeatletter
\setlength{\@fptop}{0pt}
\setlength{\@fpsep}{5ex}
\makeatother
%%%%% title %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{\bf Einf\"uhrung in die wissenschaftliche Datenverarbeitung\\
--- \"Ubungen I: ---\\ Variablen und Datentypen}
\author{Jan Grewe, Jan Benda}
\date{\noindent\parbox{\textwidth}{\normalsize\itshape Eberhardt Karls Universit\"at
T\"ubingen, Abt. Neuroethologie }}
\begin{document}
\maketitle
Die folgenden Aufgaben dienen der \"Ubung und Selbstkontrolle und
sollten eigenst\"andig bearbeitet und gel\"ost werden. Die L\"osung
soll in Form eines einzelnen Skriptes (m-files) i.d.R. am gleichen Tag
mir zugeschickt werden (jan.grewe@uni-tuebingen.de). Jede Aufgabe
sollte in einer eigenen ``Zelle'' gel\"ost sein. Die Zellen
\textbf{m\"ussen} unabh\"angig voneinander ausf\"uhrbar sein. Das
Skript sollte nach dem Muster: ``variablen\_datentypen\_{nachname}.m''
benannt werden (z.B. variablen\_datentypen\_mueller.m).
\section{Aufgaben}
\begin{enumerate}
\item Erzeugen und L\"oschen von Variablen:
\begin{enumerate}
\item Erzeuge zwei Variablen \verb+a, b+ und weise ihnen
unterschiedliche Werte zu. Schlie{\ss}e die Zeilen mit einem
Semikolon ab. Erstelle eine Variable \verb+c+ die leer ist.
\item Lasse die Werte der Variablen ausgeben.
\item F\"uhre einfache mathematische Operationen aus (Addition,
Subtraktion, etc.) Potenzierung erfolgt \"uber das Dach Symbol
\verb+^+). |''Ueberpr\"ufe, ob sich der der urspruengliche Wert
der Variable ge\"andert hat.
\item Benuzte die Kommandozeile um herauszufinden, welche Variablen
es im Workspace gibt.
\item Benuzte die Kommandozeile um herauszufinden, welche Datentypen sie haben.
\item Finde in der Hilfe mehr Information \"uber das \verb+clear+ Kommando.
\item L\"osche eine Variable.
\item L\"osche alle \"ubrigen Variablen.
\end{enumerate}
\item Berechne die Fakult\"at von 5:
\begin{enumerate}
\item Erzeuge eine Variable \verb+x+ und weise ihr den Wert 1 zu.
\item Berechne den ersten Schritt und weise das Ergebnis \verb+x+
zu.
\item Wiederhole bis die Fakult\"at von 5 berechnet ist. \verb+x+
sollte nun das Endergebnis enthalten.
\end{enumerate}
\item Erstelle eine Variable, die einen beliebigen Text enth\"alt. Was
ist ihr Datentyp?
\item Erstelle eine Variable des 8 Bit Integer Datentyps und weise ihr einen Wert zu.
\item Was sind die gr\"o{\ss}ten Zahlen, die in den Integer 8, 16, 32
und 64 bit Datentypen abgelegt werden k\"onnen?
\item Erkl\"are die Ausgaben von \verb+int8(1024)+ und \verb+uint8(1024)+.
\item Typekonvertierung:
\begin{enumerate}
\item F\"uhre aus: \verb+x = 131.333+. Welchen Datentyp hat die
Variable \verb+x+?
\item Wandle \verb+x+ den speichereffizientesten Integer Typen um.
\end{enumerate}
\end{enumerate}
\end{document}
\newpage
\section{Aufgaben}
\subsection{Vektoren}
\begin{enumerate}
\item Erzeuge Vektoren:
\begin{enumerate}
\item Von 1 bis 10 in ganzzahligen Schritten.
\item $2:20$ in 2er Schritten.
\item mit absteigendem Inhalt von 100 bis 0.
\item In 100 Schritten von 0 bis $2\pi$ ($\pi$ ist als Konstante 'pi'
in Matlab definiert).
\end{enumerate}
\item Erzeuge eine Variable und speichere etwas Text in ihr sodass
mindestens 2 Worte vorhanden
sind. \\ (\verb+x = 'some text'+). Benutze die Indizierung um die
Woerter einzeln auszugeben.
\item Definiere zwei Vektoren: \verb+x = [3 2 6 8];+ and \verb+y = [4; 1; 3; 5];+
\begin{enumerate}
\item ... addiere 5 zu jedem Element von \verb+x+.
\item ... addiere 3 zu jedem Element zu jedem Element von y, dass einen nicht gerade Index hat.
\item ... multipliziere jedes Element von \verb+x+ mit dem
entsprechenden Element in \verb+y+ und weise das Ergebnis der
Variable \verb+z+ zu.
\end{enumerate}
\end{enumerate}
\newpage
\subsection{Matrizen}
\begin{enumerate}
\item Erstelle eine 5 x 5 Matrix die Zufallszahlen enth\"alt (nutze die
MATLAB Funktion \verb+randn()+, benutze die Hilfe. Was macht sie?).
\begin{enumerate}
\item Gib alle Elemente der ersten Zeile aus.
\item Gib alle Elemente der zweiten Spalte aus.
\item Greife mit einem einzigen Kommando auf die Elemnte jeder
2. Spalte zu und speichere die Daten in einer neuen Variable.
\end{enumerate}
\item Erstelle eine 3-D Matrix aus drei 2-D Matrizen. Benutze die
\verb+cat()+ Funktion f\"ur diesen Zweck ( schaue in der Hilfe
nach, wie sie benutzt wird).
\begin{enumerate}
\item Gib alle Elemente des ersten ``Blattes'' aus (Index 1 in der 3. Dimension).
\end{enumerate}
\item Erstelle eine 3-D Matrix mithilfe der Funktion
\verb+ones()+. Multipliziere das erste Blatt mit 1, das zweite mit
2, dritte mit 3 etc.
\item Erstelle folgende Variablen \verb+x = [1 5 9]+ and
\verb+y = [7 1 5]+ und \verb+M = [3 1 6; 5 2 7]+. Welche der
folgenden Operationen funktionieren? Wenn nicht, warum
funktioneieren sie nicht? Teste Deine Vorhersagen.
\begin{enumerate}
\item \begin{verbatim} x + y \end{verbatim}
\item \begin{verbatim} x * M \end{verbatim}
\item \begin{verbatim} x + y' \end{verbatim}
\item \begin{verbatim} M - [x y] \end{verbatim}
\item \begin{verbatim} [x; y] \end{verbatim}
\item \begin{verbatim} M - [x; y] \end{verbatim}
\end{enumerate}
\item Erzeuge eine 5 x 5 x 5 Matrix die mit ganzzahligen
Zufallszahlen zwischen 0 und 100 gefuellt ist.
\begin{enumerate}
\item Berechne den Mittelwert aller Bl\"atter dieser Matrix (benutze \verb+mean()+, siehe Hilfe).
\end{enumerate}
\end{enumerate}
\newpage
\section{Boolesche Operationen}
\begin{enumerate}
\item Gegeben sind zwei Vektoren \verb+x = [1 5 2 8 9 0 1]+ und
\verb+y = [5 2 2 6 0 0 2]+. F\"uhre aus und erkl\"are.
\begin{enumerate}
\item \verb+x > y+
\item \verb+y < x+
\item \verb+x == y+
\item \verb+x ~= y+
\item \verb+x & ~y+
\item \verb+x | y+
\end{enumerate}
\end{enumerate}
\newpage
\section{Logische Indizierung}
\begin{enumerate}
\item Gegeben sind \verb+x = (1:10)+ und
\verb+y = [3 1 5 6 8 2 9 4 7 0]+. Try to understand the following
commands.
\begin{enumerate}
\item \verb+x( (y <= 2) )+
\item \verb+x( (x > 2) | (y < 8) )+
\item \verb+x( (x == 0) & (y == 0) )+
\end{enumerate}
\item Erzeuge eine 100x100 2-D Matrix mit Zufallswerten zwischen 0 und 100 (\verb+randi+). Ersetze \verb+x < 33+ mit 0, \verb+x >= 33 und x < 66+ mit 1 und alle \verb+x >= 66+ auf 2.
\item Ermittle die Anzahl Elemente fuer jede Klasse mithilfe eines Booleschen Ausdrucks.
\end{enumerate}
\newpage
\section{Kontrollstrukturen}
\begin{enumerate}
\item Erzeuge einen Vektor 'x' mit z.B. 50 Zufallszahlen im Bereich 0 - 10.
\begin{enumerate}
\item Benutze eine Schleife um das arithmetische Mittel zu berechnen. Der Mittelwert ist definiert als:
$\overline{x}=\frac{1}{n}\sum\limits_{i=0}^{n}x_i $.
\item Benutze eine Schleife um die Standardabweichung zu bestimmen:
$\sigma=\sqrt{\frac{1}{n}\sum\limits_{i=0}^{n}(x_i-\overline{x})^2}$).
\item Suche in der MATLAB Hilfe nach Funktionen, die das fuer dich tuen :-).
\end{enumerate}
\item Erzeuge eine 5 x 5 x 5 Matrix mit Zufallszahlen.
\begin{enumerate}
\item Benutze eine for Schleife um nacheinander die Elemente jedes ``Blattes'' einzeln auszugeben.
\item Das gleich mit einer while-Schleife.
\end{enumerate}
\item Erstelle 'x' einen Vektor mit 10 Zufallszahlen im Bereich 0:10.
\begin{enumerate}
\item Benutze eine for-Schleife um all die Elemente zu loeschen,
die (\verb+x(index) = [];+) kleiner als 5 sind.
\item Loesche alle Elemente die kleiner als 5 und groesser als 2 sind.
\item Kann man das gleiche auch ohne eine Schleife erledigen?
\end{enumerate}
\item Teste den Zufallsgenerator! Dazu zaehle die Anzahl der
Elemente, die durch folgende Grenzen getrennt werden [0.2 0.4 0.6
0.8 1.0]. Speichere die Ergebnisse in einem passenden
Vektor. Nutze eine Schleife um 1000 Zufallszahlen mit
\verb+rand()+ (siehe Hilfe) zu ziehen. Was waere die Erwartung,
was kommt heraus?
\end{enumerate}
\end{document}