[lecture] not yet finished version of control_structures
This commit is contained in:
parent
5709b25a0d
commit
e4676a601b
312
programming/lectures/control_structures.tex
Normal file
312
programming/lectures/control_structures.tex
Normal file
@ -0,0 +1,312 @@
|
||||
\documentclass{beamer}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{listings}
|
||||
\usepackage{pgf}
|
||||
%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade}
|
||||
%\usepackage{multimedia}
|
||||
|
||||
\usepackage[english]{babel}
|
||||
\usepackage{movie15}
|
||||
\usepackage[latin1]{inputenc}
|
||||
\usepackage{times}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{bm}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[scaled=.90]{helvet}
|
||||
\usepackage{scalefnt}
|
||||
\usepackage{tikz}
|
||||
\usepackage{ textcomp }
|
||||
\usepackage{soul}
|
||||
\usepackage{hyperref}
|
||||
\definecolor{lightblue}{rgb}{.7,.7,1.}
|
||||
\definecolor{mygreen}{rgb}{0,1.,0}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\mode<presentation>
|
||||
{
|
||||
\usetheme{Singapore}
|
||||
\setbeamercovered{opaque}
|
||||
\usecolortheme{tuebingen}
|
||||
\setbeamertemplate{navigation symbols}{}
|
||||
\usefonttheme{default}
|
||||
\useoutertheme{infolines}
|
||||
% \useoutertheme{miniframes}
|
||||
}
|
||||
|
||||
\AtBeginSection[]
|
||||
{
|
||||
\begin{frame}<beamer>
|
||||
\begin{center}
|
||||
\Huge \insertsectionhead
|
||||
\end{center}
|
||||
% \frametitle{\insertsectionhead}
|
||||
% \tableofcontents[currentsection,hideothersubsections]
|
||||
\end{frame}
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
|
||||
|
||||
\setbeamertemplate{blocks}[rounded][shadow=true]
|
||||
|
||||
\title[]{Scientific Computing -- Grundlagen der Programmierung }
|
||||
\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\
|
||||
Universit\"at T\"ubingen}
|
||||
|
||||
\institute[Wissenschaftliche Datenverarbeitung]{}
|
||||
\date{12.10.2015 - 06.11.2015}
|
||||
%\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
|
||||
|
||||
\subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung}
|
||||
|
||||
\titlegraphic{
|
||||
\includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB}
|
||||
}
|
||||
%%%%%%%%%% configuration for code
|
||||
\lstset{
|
||||
basicstyle=\ttfamily,
|
||||
numbers=left,
|
||||
showstringspaces=false,
|
||||
language=Matlab,
|
||||
commentstyle=\itshape\color{darkgray},
|
||||
keywordstyle=\color{blue},
|
||||
stringstyle=\color{green},
|
||||
backgroundcolor=\color{blue!10},
|
||||
breaklines=true,
|
||||
breakautoindent=true,
|
||||
columns=flexible,
|
||||
frame=single,
|
||||
captionpos=b,
|
||||
xleftmargin=1em,
|
||||
xrightmargin=1em,
|
||||
aboveskip=10pt
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand{\mycite}[1]{
|
||||
\begin{flushright}
|
||||
\tiny \color{black!80} #1
|
||||
\end{flushright}
|
||||
}
|
||||
|
||||
\newcommand{\code}[1]{\texttt{#1}}
|
||||
|
||||
\input{../../latex/environments.tex}
|
||||
\makeatother
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{frame}[plain]
|
||||
\frametitle{}
|
||||
\vspace{-1cm}
|
||||
\titlepage % erzeugt Titelseite
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[plain]
|
||||
\huge{5. Kontrollstrukturen}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{Was ist das?}
|
||||
\begin{itemize}
|
||||
\item Regeln den Ablauf von Anweisungen.
|
||||
\item Was soll unter welchen Bedingungen wie h\"aufig ausgef\"uhrt werden?\vspace{0.5cm}\pause
|
||||
\item Im Wesentlichen zwei Arten von Kontrollstrukturen:
|
||||
\begin{enumerate}
|
||||
\item Schleifen (\code{for} und \code{while} Schleifen).\vspace{0.25cm}
|
||||
\item Bedingte Anweisungen und Verzweigungen.
|
||||
\end{enumerate}\vspace{0.5cm}\pause
|
||||
\item Geh\"oren nicht zu den Kontrollstrukturen, werden wir hier
|
||||
aber kurz ansprechen:
|
||||
\begin{enumerate}
|
||||
\item Ausnahmebehandlungen.
|
||||
\end{enumerate}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{Schleifen}
|
||||
|
||||
Schleifen werden gebraucht um wiederholte Ausf\"uhrung desselben
|
||||
Codes zu vereinfachen. Z.B. die Berechnung der Fakult\"at von
|
||||
gestern...
|
||||
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
>> x = 1;
|
||||
>> x = x * 2;
|
||||
>> x = x * 3;
|
||||
>> x = x * 4;
|
||||
>> x = x * 5;
|
||||
>> x
|
||||
x =
|
||||
120
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
\begin{itemize}
|
||||
\item Zeilen 2 bis 5 sind sehr \"ahnlich.
|
||||
\item Die Verwendung von solchen Codeklonen ist schlechter Programmierstil!
|
||||
\item Welche Nachteile hat es sonst noch?
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{for - Schleife}
|
||||
\tiny
|
||||
\begin{lstlisting}[label=loopListing2]
|
||||
>> for x = 1:5
|
||||
... % etwas sinnvolles mit x ...
|
||||
end
|
||||
>> disp(x);
|
||||
5
|
||||
>>
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{while - Schleife}
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
>> x = 1;
|
||||
>> while x <= 5
|
||||
... % etwas sinnvolles mit x ...
|
||||
disp(x);
|
||||
x = x + 1;
|
||||
end
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
>> disp(x)
|
||||
6
|
||||
>>
|
||||
>> while true %never ending loop!
|
||||
disp(x);
|
||||
x = x + 1;
|
||||
end
|
||||
1
|
||||
2
|
||||
...
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{if - Anweisung (bedingte Anweisung)}
|
||||
|
||||
Wird eingesetzt um bestimmte Code Abschnitte
|
||||
nur unter bestimmten Umst\"anden auszuf\"uhren.
|
||||
|
||||
\tiny
|
||||
\begin{lstlisting}[label=loopListing4]
|
||||
>> x = rand(1); % eine einzelne Zufallszahl
|
||||
>> if x < 0.5
|
||||
disp('x is less than 0.5');
|
||||
end
|
||||
>>
|
||||
>> if x < 0.5
|
||||
disp('x is less than 0.5!');
|
||||
else
|
||||
disp('x is greater than or equal to 0.5!')
|
||||
end
|
||||
>>
|
||||
>> if x < 0.5
|
||||
disp('x is less than 0.5!');
|
||||
elseif x < 0.75
|
||||
disp('x is greater than 0.5 but less than 0.75!');
|
||||
else
|
||||
disp('x is greater than or equal to 0.75!')
|
||||
end
|
||||
>>
|
||||
>> if x < 0.75
|
||||
disp('x is less than 0.75!');
|
||||
elseif x < 0.5
|
||||
disp('x is less than 0.5!');
|
||||
else
|
||||
disp('x is greater than or equal to 0.75!')
|
||||
end
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{break unnd continue}
|
||||
\vspace{-0.5cm}
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
>> for x = 1:5 % using continue
|
||||
if(x > 2 & x < 5)
|
||||
continue;
|
||||
end
|
||||
disp(x);
|
||||
end
|
||||
1
|
||||
2
|
||||
5
|
||||
>>
|
||||
>> for x = 1:5000 % using break
|
||||
if(x > 5)
|
||||
break;
|
||||
end
|
||||
disp(x);
|
||||
end
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
>>
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{\"Ubungen}
|
||||
\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}
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Kontrollstrukturen}
|
||||
\framesubtitle{\"Ubungen}
|
||||
\vspace{-0.5cm}
|
||||
\begin{enumerate}\setcounter{enumi}{2}
|
||||
\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 L\"osche 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 z\"ahle 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 w\"are die Erwartung,
|
||||
was kommt heraus?
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\end{document}
|
Reference in New Issue
Block a user