diff --git a/programming/exercises/Wetterdaten_Helgoland.txt b/programming/exercises/Wetterdaten_Helgoland.txt new file mode 100644 index 0000000..0a84510 --- /dev/null +++ b/programming/exercises/Wetterdaten_Helgoland.txt @@ -0,0 +1,19 @@ + STAT JJJJMM QN TNN TNM TMM TXM TXX SOS NMM RSS RSX FMM FXX +10015 201509 1 12.3 13.7 15.3 16.9 18.7 151.3 -9.9 74.0 10.6 4.6 27.1 +10015 201508 3 13.8 16.3 18.1 20.1 23.6 199.0 -9.9 108.5 26.6 -9.9 20.9 +10015 201507 3 12.1 14.6 16.6 18.8 25.9 237.9 5.1 83.2 13.1 4.4 25.3 +10015 201506 3 9.9 11.6 13.5 15.7 20.0 221.3 -9.9 -9.9 5.6 3.9 22.8 +10015 201505 3 6.6 8.6 10.3 12.3 16.6 216.7 5.4 49.5 10.1 4.3 23.7 +10015 201504 3 1.4 5.7 7.5 9.4 11.7 233.6 4.9 15.1 4.1 4.0 24.6 +10015 201503 3 1.5 4.0 5.6 7.1 9.5 141.4 5.8 73.5 16.3 4.5 30.9 +10015 201502 3 -0.2 2.6 3.9 5.2 7.2 88.4 5.6 45.5 8.6 4.6 25.2 +10015 201501 3 -1.5 3.0 4.9 6.3 9.8 51.7 5.8 103.1 15.8 5.3 30.6 +10015 201412 3 -1.4 4.0 5.9 7.4 10.5 34.5 6.4 150.5 32.5 5.5 30.2 +10015 201411 3 0.5 8.5 9.6 10.7 15.8 51.1 6.4 22.9 6.4 5.0 24.3 +10015 201410 3 9.4 13.1 14.5 15.8 18.8 92.3 5.9 82.5 22.6 4.5 27.2 +10015 201409 3 9.8 15.2 16.9 18.7 22.2 164.4 4.6 31.4 7.9 4.3 21.7 +10015 201408 3 10.9 15.1 17.4 19.5 25.2 212.2 5.2 190.3 47.3 4.4 25.2 +10015 201407 3 12.7 17.5 19.5 22.2 25.9 285.0 4.5 54.6 23.6 3.7 17.5 +10015 201406 3 11.3 13.3 15.2 17.6 22.2 247.6 4.9 31.0 8.0 3.8 17.7 +10015 201405 3 7.2 10.1 12.0 14.3 20.7 211.8 5.5 58.0 12.4 3.9 20.4 +10015 201404 3 4.5 7.7 9.5 12.0 16.7 185.4 5.2 32.8 10.1 4.3 23.4 diff --git a/programming/exercises/Wetterdaten_Helgoland.xlsx b/programming/exercises/Wetterdaten_Helgoland.xlsx new file mode 100644 index 0000000..02c5f07 Binary files /dev/null and b/programming/exercises/Wetterdaten_Helgoland.xlsx differ diff --git a/programming/exercises/structs_cells.tex b/programming/exercises/structs_cells.tex new file mode 100644 index 0000000..a2c3a2b --- /dev/null +++ b/programming/exercises/structs_cells.tex @@ -0,0 +1,77 @@ +\documentclass[12pt,a4paper,pdftex]{exam} + +\usepackage[german]{babel} +\usepackage{natbib} +\usepackage{graphicx} +\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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} +\pagestyle{headandfoot} +\header{{\bfseries\large \"Ubung 6}}{{\bfseries\large Strukturen und Cell Arrays}}{{\bfseries\large 16. Oktober, 2015}} +\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: + jan.grewe@uni-tuebingen.de} +\runningfooter{}{\thepage}{} + +\setlength{\baselineskip}{15pt} +\setlength{\parindent}{0.0cm} +\setlength{\parskip}{0.3cm} +\renewcommand{\baselinestretch}{1.15} + +\newcommand{\code}[1]{\texttt{#1}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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} \\ +\end{center} + +Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und +Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost +werden. Im Gegensatz zu den vorherigen \"Ubungsbl\"attern k\"onnen die +L\"osungen nicht mehr in einer Datei gemacht werden. Die L\"osungen +also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: +``skripte\_funktionen\_\{nachname\}.zip'' benannt werden. + +\begin{questions} + + \question Erzeugen von Strukturen: + \begin{parts} + \part Erzeuge eine Struktur mit vier Feldern. Weise beliebige, + verschiedene, Werte zu. + \part Gib die Namen der Felder der Struktur aus. + \part Greife auf eines der Felder zu und gib den Inhalt auf dem Bildschirm aus. + \part Weise einen Wert einem noch nicht existierenden Feld zu. + \part L\"osche ein Feld. + \end{parts} + + \question Schreibe eine Funktion, die den Pfad zu einem Verzeichnis + \"ubernimmt und eine Struktur mit Informationen \"uber das + Verzeichnis zur\"uckgibt. Dies soll der Name und die Anzahl Dateien + in dem Verzeichnis sein. + + \question Erzeugen von Cell Arrays: + \begin{parts} + \part Erzeuge ein leeres Cell Array. + \part Weise der ersten Zelle einen Vektor, der zweiten Zelle eine + Matrize und der dritten einen Text zu. + \part Greife auf die Zellen zu. + \end{parts} + + \question + + \question + +\end{questions} + +\end{document} \ No newline at end of file diff --git a/programming/lectures/data_structures.tex b/programming/lectures/data_structures.tex index 3c61f9f..b6ba252 100644 --- a/programming/lectures/data_structures.tex +++ b/programming/lectures/data_structures.tex @@ -16,11 +16,11 @@ \usepackage{scalefnt} \usepackage{tikz} \usepackage{ textcomp } -\usepackage{soul} +\usepackage{color, soul} \usepackage{hyperref} \definecolor{lightblue}{rgb}{.7,.7,1.} -\definecolor{mygreen}{rgb}{0,1.,0} - +\definecolor{mygreen}{rgb}{0.4,1.,0.4} +\definecolor{stringcolor}{rgb}{0.1,0.6,0.1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \mode { @@ -68,7 +68,7 @@ language=Matlab, commentstyle=\itshape\color{darkgray}, keywordstyle=\color{blue}, - stringstyle=\color{green}, + stringstyle=\color{stringcolor}, backgroundcolor=\color{blue!10}, breaklines=true, breakautoindent=true, @@ -101,32 +101,142 @@ \huge{1. Fortgeschrittene Datenstrukturen} \end{frame} +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \large + Bisher kennen wir folgende Datenstrukturen: + \begin{enumerate} + \item Skalare. + \item Vektoren. + \item Matrizen. + \end{enumerate}\pause + F\"ur die meisten F\"alle reicht das aus. Manchmal m\"ochte man aber + Dinge gemeinsam ablegen, die nicht den gleichen Datentyp haben. + \pause\\ + + Beispiel: Ich habe eine Reihe Versuchspersonen bei denen ich + verschiede Parameter (Alter, Geschlecht) zusammen mit den + Testergebnissen ablegen m\"ochte. +\end{frame} + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \only<1> { + F\"ur diese Zwecke kennt MATLAB vier weitere Datenstrukturen: + \begin{enumerate} + \item Strukturen. + \item Cell Arrays. + \item Tabellen (neu seit 2013). + \item Objekte. + \end{enumerate} + } + \only <2> { + F\"ur diese Zwecke kennt MATLAB \st{vier} \textbf{drei} weitere Datenstrukturen: + \begin{enumerate} + \item Strukturen. + \item Cell Arrays. + \item Tabellen (neu seit 2013). + \item \st{Objekte.} + \end{enumerate} + } +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \huge{Strukturen} +\end{frame} \begin{frame}[fragile] \frametitle{Fortgeschrittene Datenstrukturen} - \framesubtitle{Strukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} \begin{itemize} \item Strukturen werden benutzt um beliebige zusammengeh\"orige Daten in sog. Kontainern zu speichern. - \item Diese Daten k\"onnen über den Namen des Kontainers oder + \item Diese Daten k\"onnen \"uber den Namen des Kontainers oder ``Feldes'' angesprochen werden. \item Man kann Listen von diesen Strukturen haben. \end{itemize} \end{frame} - \begin{frame}[fragile] \frametitle{Fortgeschrittene Datenstrukturen} \framesubtitle{Strukturen} Beispiel: - + \footnotesize + \begin{lstlisting} + subjects(1).name = 'John Dow'; + subjects(1).age = 35; + subjects(1).sex = 'm'; + subjects(1).results = [1 2 3 4 5]; + + subjects(2).name = 'Jane Smith'; + subjects(2).age = 32; + subjects(2).sex = 'f'; + subjects(2).results = [1 2 3 4 5]; + + fieldnames(subjects) + ans = + 'name' + 'age' + 'sex' + 'results' + \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Fortgeschrittene Datenstrukturen} - \framesubtitle{Navigieren im Dateisystem} - + \framesubtitle{Strukturen} + Beispiel: + \footnotesize + \begin{lstlisting} + subjects(1).name + ans = + 'John Doe' + + subjects(1).test2 = []; + fieldname(subjects(2)) + ans = + 'name' + 'age' + 'sex' + 'results' + 'test2' + \end{lstlisting} +\end{frame} + + + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Strukturen} + \textbf{Vorteile:} + \begin{enumerate} + \item Strukturen koennen beliebige Werte aufnehmen. + \item Man kann Listen von Strukturen erstellen und darauf + indizieren. + \item Sind sehr leicht lesbar. + \item Addressieren von Feldern ist sehr intuitiv. + \end{enumerate} + \pause + \vspace{1cm} + \textbf{Nachteile:} + \begin{enumerate} + \item Alle Eintr\"age in einer Strukturliste m\"ussen gleichgefromt + sein. + \item Kein logisches Indizieren. + \item Elemente der Strukturen m\"ussen \"uber den Feldnamen + angesprochen werden. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \huge{Cell Arrays} \end{frame} @@ -134,9 +244,9 @@ \frametitle{Fortgeschrittene Datenstrukturen} \framesubtitle{Cell Arrays} \begin{enumerate} - \item Matrizen k\"onnen nur rechtwinklig sein.\pause + \item Matrizen k\"onnen nur rechtwinklig sein. \item Manchmal hat man aber unterschiedlich viele Datenpunkte, die - dennoch logisch zusammengeh\"oren.\pause + dennoch logisch zusammengeh\"oren. \item Z.B. Wenn man Zeitpunkte von Neuronalen- oder Verhaltensereignissen hat. \end{enumerate} \end{frame} @@ -164,4 +274,51 @@ \end{lstlisting} \end{frame} + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Cell Arrays} + \textbf{Vorteile:} + \begin{enumerate} + \item Kann alle m\"oglichen Daten ablegen. + \item Benutzung m\"oglich ohne Kenntnis von Feldnamen. + \end{enumerate}\pause + \vspace{1cm} + \textbf{Nachteile:} + \begin{enumerate} + \item Manchmal un\"ubersichtlich. + \item Adressieren mit ${}$ ist eher ungew\"ohnlich. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \huge{Tabellen} +\end{frame} + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Tabellen} + \begin{enumerate} + \item Datenstruktur \"ahnlich zu Excel Tabellen. + \item Jede Spalte ist eine Kategorie. + \item Verschiedene Spalten k\"onnen unterschiedliche Datentypen + haben. + \item Unterst\"utzung von Filteroperationen auf Spalten und Zeilen. + \item Kann direkt \textit{*.xlsx} Dateien importieren. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Tabellen} + \scriptsize + \begin{lstlisting} + + \end{lstlisting} +\end{frame} + + + \end{document} \ No newline at end of file diff --git a/programming/lectures/images/simple_program.pdf b/programming/lectures/images/simple_program.pdf new file mode 100644 index 0000000..854b787 Binary files /dev/null and b/programming/lectures/images/simple_program.pdf differ diff --git a/programming/lectures/scripts_functions.tex b/programming/lectures/scripts_functions.tex index 2ea61d4..f7ad6a8 100644 --- a/programming/lectures/scripts_functions.tex +++ b/programming/lectures/scripts_functions.tex @@ -317,7 +317,8 @@ Probleme mit dieser Funktion: \item Die Funktion ist f\"ur genau einen Zweck gut. \item Was sie tut, ist festgelegt und kann von au{\ss}en nicht beeinflusst werden. - \item Sie tut 2 Dinge: Sinus berechnen \textbf{und} graphisch darstellen. + \item Sie tut 3 Dinge: Sinus berechnen \textbf{und} Amplituden + \"andern \textbf{und} graphisch darstellen. \item Es ist nicht (einfach) m\"oglich an die berechneten Daten zu kommen. \item Keinerlei Dokumentation. Ich muss den code lesen um zu @@ -334,7 +335,9 @@ Probleme mit dieser Funktion: \frametitle{Skripte und Funktionen} \framesubtitle{Funktionen} \begin{enumerate} - \item Identifizieren des Problems. + \item Manchmal ist es besser noch mal neu anzufangen als + Kleiningkeiten zu verbessern: + \item Welches Problem soll gel\"ost werden? \item Aufteilen in Teilprobleme. \item Gute Namen finden. \item Definieren der Schnittstellen --- Was muss die Funktion @@ -350,7 +353,8 @@ Probleme mit dieser Funktion: \begin{enumerate} \item Berechnen der \textbf{einzelnen} Sinus. \item Plotten der Daten. - \item Koordinieren von Berechung und Darstellung. + \item Koordinieren von Berechung und Darstellung mit + unterschiedlichen Amplituden. \end{enumerate} \end{frame} @@ -501,18 +505,34 @@ legend('show') \end{frame} \begin{frame} - \frametitle{Skripte undFunktionen} + \frametitle{Skripte und Funktionen} \framesubtitle{Funktionen --- Zusammenfassung} Funktionen sind kleine Code Fragmente, die \begin{enumerate} \item ... genau eine Aufgabe erledigen. \item ... Argumente entgegennehmen k\"onnen. \item ... R\"uckgabewerte haben k\"onnen. - \item ... ihren eigenen G\"ueltigkeitsbereich haben. + \item ... ihren eigenen G\"ultigkeitsbereich haben. \item ... Skripten fast immer vorzuziehen sind. \end{enumerate} \end{frame} + +\begin{frame} + \frametitle{Skripte und Funktionen} + \framesubtitle{Organisation von Programmen} + + \begin{itemize} + \item Mit den Funktionen haben wir ein Werkzeug, dass uns erlaubt + ein Programm in kleine, ``verdauliche'', Teile zu gliedern. + \end{itemize} + Ein m\"ogliches Programmlayout k\"onnte so aussehen: + \begin{figure} + \includegraphics[width=0.5\columnwidth]{./images/simple_program.pdf} + \end{figure} +\end{frame} + + \begin{frame}[plain] \huge{3. Programmierstil} \end{frame} @@ -584,6 +604,7 @@ legend('show') Code: A Handbook of Agile Software Craftmanship}, Prentice Hall \end{frame} +\end{document} \begin{frame}[plain] \huge{4. Vom Problem zum Algorithmus zum Programm}\\