From dfabfe4f1e13a8aa9e773aadaecafe3fb12688f4 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Tue, 6 Oct 2015 09:52:29 +0200 Subject: [PATCH] [exercises] Variables and Datastructures --- programming/exercises/variables_types.tex | 230 ++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 programming/exercises/variables_types.tex diff --git a/programming/exercises/variables_types.tex b/programming/exercises/variables_types.tex new file mode 100644 index 0000000..941b79c --- /dev/null +++ b/programming/exercises/variables_types.tex @@ -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} +