diff --git a/09/tut9.pdf b/09/tut9.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b3f6df23e9c15e06a1758a5aba512404d4a4b45c Binary files /dev/null and b/09/tut9.pdf differ diff --git a/09/tut9.tex b/09/tut9.tex new file mode 100644 index 0000000000000000000000000000000000000000..51ccaea2f91c97646aa587e0701eeed0ea569f83 --- /dev/null +++ b/09/tut9.tex @@ -0,0 +1,372 @@ +%Original Template von Nicolas Lehman, angepasst von Wolfgang Mulzer und Katharina Klost + + % Dokumentenklasse +\documentclass[ +% globale Schriftgröße + 10pt, +% setzt Absatzabstand hoch + parskip=half-, +% Format + paper=a4, +% lädt Sprachpakete + english,ngerman, +]{scrartcl} + +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} + +% //////////////////// Pakete laden //////////////////// +\usepackage{amsmath} +% modifiziert amsmath +\usepackage{mathtools} +% mathematische Symbole, für \ceckmarks +\usepackage{amssymb} +% für proof +\usepackage{amsthm} +% für \mathscr +\usepackage{mathrsfs} +\usepackage{latexsym} +% für bessere Worttrennung +\usepackage{microtype} +% Spracheinstellung +\usepackage[ngerman]{babel} +% für Quellcode +\usepackage{verbatim} +\usepackage{listings} +% für Umlaute und Sonderzeichen in der Tex-Datei +\usepackage[utf8]{inputenc} +\usepackage{graphicx} +% für Tabellen mit gleicher Spaltenbreite und automatischen Umbrüchen +\usepackage{tabularx} +\usepackage{fullpage} +% für multirow in tabulars +\usepackage{multirow} +\usepackage{rotate} +% um Farben zu benutzen, kann mehr als das Paket color +\usepackage[cmyk,table]{xcolor} +% Verlinkungen +\usepackage[ +% farbige Schrift, statt farbiger Rahmen + colorlinks, +% verlinkt im Abb.Verzeichnis Seitenzahl statt Bildunterschrift + linktocpage, +% setzt Farbe der Links auf blau + linkcolor=blue +]{hyperref} +% nur für digitale Anwendungen, url = "http://www.example.com" +% für Webadressen wie e-mail usw.: "\url{http://www.example.com}" +\usepackage{url} +% für versch. Aufzählungezeichen wie z.B. a) +\usepackage{enumitem} +% folgt ein Leerzeichen nach einem \Befehl, wird es nicht verschluckt +\usepackage{xspace} +% für das Durchstreichen u.a. in Matheformeln mit \cancel +\usepackage{cancel} +% für \forloop und \whiledo +\usepackage{ifthen} + +% //////////////////// Syntaxhervorhebung //////////////////// +\lstloadlanguages{Python, Haskell, [LaTeX]TeX, Java} +\lstset{% +% \scriptsize: die Fontgröße für den Quelltext + basicstyle=\footnotesize\ttfamily, +% legt Farbe der Box fest + backgroundcolor = \color{bgcolour}, +% automatische Umbrüche nur nach Leerzeichen? + breakatwhitespace=false, +% automatische Zeilenumbrüche? + breaklines=true, +% die Überschrift steht oben, t = top + captionpos=t, +% Formatierung der Kommentare + commentstyle=\color{codeblue}\ttfamily, +% einfacher Rahmen um den Quelltext + frame=single, +% Behalte Leerzeichen im Quelltext. Nützlich, um +% Einrückungen zu erhalten (benötigt eventuell columns=flexible) + keepspaces=true, +% Formatierung der Schlüsselwörter + keywordstyle=\bfseries\ttfamily\color{codepurple}, +% Wohin mit den Zeilennummern? +% mögliche Werte sind: none, left, right + numbers=left, +% Formatierung der Zeilennummern + numberstyle=\tiny\color{codegreen}, +% Abstand zwischen Zeilennummern und Quelltext + numbersep=5pt, +% nummeriert nur jede i-te Zeile + stepnumber=1, +% Zeige alle Leerzeichen mit Hilfe von speziellen Unterstrichen; +% überschreibt 'showstringspaces' + showspaces=false, +% unterstreiche Leerzeichen nur in Zeichenketten + showstringspaces=false, +% Zeige Tabulatoren in Zeichenketten mit Hilfe von speziellen +% Unterstrichen + showtabs=false, + flexiblecolumns=false, +% Schrittweite zwischen Zeilennummern. +% Der Wert 1 bedeutet, dass jede Zeile nummeriert wird. + tabsize=1, +% Formatierung der Zeichenketten. + stringstyle=\color{orange}\ttfamily, +% leere Zeilen werden nicht nummeriert + numberblanklines=false, +% Abstand zum linken Seitenrand + xleftmargin=1.2em, +% Abstand zum rechten Seitenrand + xrightmargin=0.4em, + aboveskip=2ex, +} + +\lstdefinestyle{py}{% + language=Python, +} +\lstdefinestyle{hs}{% + language=Haskell, +} +\lstdefinestyle{tex}{% + language=[LaTeX]TeX, +% Um LaTex im Quelltext einzufügen + escapeinside={\%*}{*)}, +% Hervorhebung der TeX-Schlüsselwörter + texcsstyle=*\bfseries\color{blue}, + morekeywords={*,$,\{,\},\[,\],lstinputlisting,includegraphics, + rowcolor,columncolor,listoffigures,lstlistoflistings, + subsection,subsubsection,textcolor,tableofcontents,colorbox, + fcolorbox,definecolor,cellcolor,url,linktocpage,subtitle, + subject,maketitle,usetikzlibrary,node,path,addbibresource, + printbibliography}, + numbers=none, + numbersep=0pt, + xleftmargin=0.4em, +} + +\lstdefinestyle{java}{% + language=Java, + extendedchars=true, +} + +% füge einen x64-Assembler Dialekt hinzu +\lstdefinelanguage[x64]{Assembler} +% basiert auf dem "x86masm" Dialekt + [x86masm]{Assembler} + % zusätzliche Schlüsselwörter + {morekeywords={CDQE,CQO,CMPSQ,CMPXCHG16B,JRCXZ,LODSQ,MOVSXD, % + POPFQ,PUSHFQ,SCASQ,STOSQ,IRETQ,RDTSCP,SWAPGS, % + rax,rdx,rcx,rbx,rsi,rdi,rsp,rbp, % + r8,r8d,r8w,r8b,r9,r9d,r9w,r9b} +} + +\lstdefinestyle{c}{ + language=c, + extendedchars=true, +} + +% //////////////////// eigene Anweisungen //////////////////// +% benötigt package xspace +\newcommand\FU{Freie Universität Berlin\xspace} +\newcommand\gdw{g.\,d.\,w.\xspace} +\newcommand\oBdA{o.\,B.\,d.\,A.\xspace} +\newcommand\N{\mathbb{N}\xspace} +\newcommand\Q{\mathbb{Q}\xspace} +\newcommand\R{\mathbb{R}\xspace} +\newcommand\Z{\mathbb{Z}\xspace} +\newcommand\ohneNull{\ensuremath{\backslash\lbrace 0\rbrace}}% \{0} +% Schreibt Befehl \dh in \dhALT um +\let\dhALT\dh +%renew überschreibt command \dh +\renewcommand\dh{d.\,h.\xspace} +\newcommand{\from}{\ensuremath{\colon}} +\newcommand{\floor}[1]{\lfloor{#1}\rfloor} +\newcommand{\ceil}[1]{\lceil{#1}\rceil} +\newcommand{\abbrev}[2]{\expandafter\newcommand\csname + #1\endcsname{#2\xspace}} +\newcommand{\cclasss}[2]{\abbrev{#1}{\textsf{#2}}} +\newcommand{\cclass}[1]{\cclasss{#1}{#1}} +\cclasss{ccP}{P} +\cclass{NP} +\cclass{LOGSPACE} +\cclass{NL} + +% //////////////// mathematische Funktionen //////////////////// +\DeclareMathOperator{\True}{True} +\DeclareMathOperator{\False}{False} + +% //////////////////// eigene Theoreme //////////////////// +\newtheorem{theorem}{Satz} +\newtheorem{corollary}[theorem]{Korollar} +\newtheorem{lemma}[theorem]{Lemma} +\newtheorem{observation}[theorem]{Beobachtung} +\newtheorem{definition}[theorem]{Definition} +\newtheorem{Literatur}[theorem]{Literatur} + +% konfiguriert proof +\makeatletter +\newenvironment{Proof}[1][\proofname]{\par + \pushQED{\qed}% + \normalfont \topsep6\p@\@plus6\p@\relax + \trivlist + \item[\hskip\labelsep + \bfseries + #1\@addpunct{.}]\ignorespaces +}{% + \popQED\endtrivlist\@endpefalse +} +\makeatother + +% //////////////////// eigene Farben //////////////////// +\let\definecolor=\xdefinecolor +\definecolor{FUgreen}{RGB}{153,204,0} +\definecolor{FUblue}{RGB}{0,51,102} + +\definecolor{middlegray}{rgb}{0.5,0.5,0.5} +\definecolor{lightgray}{rgb}{0.8,0.8,0.8} +\definecolor{orange}{rgb}{0.8,0.3,0.3} +\definecolor{azur}{rgb}{0,0.7,1} +\definecolor{yac}{rgb}{0.6,0.6,0.1} +\definecolor{Pink}{rgb}{1,0,0.6} + +\definecolor{bgcolour}{rgb}{0.97,0.97,0.97} +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.35,0.35,0.35} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{codeblue}{rgb}{0.4,0.5,1} + +% //////////////////// eigene Einstellungen //////////////////// + +% verhindert Einrückung der 1. Zeile eines Absatzes +\parindent 0pt +% <-- Nummer des Übungszettels +\newcommand{\ubungNo}{9} +% <-- Name der Lehrveranstaltung eintragen +\newcommand{\veranstaltung}{Funktionale Programmierung} +% <-- z.B. SoSo 17, WiSe 17/18 +\newcommand{\semester}{WiSe 23/24} +% % <-- Hier Anzahl der Aufgaben eintragen +\newcommand{\aufgNo}{3} + +% https://tex.stackexchange.com/a/117538 +\renewcommand\lstlistingname{Beispiel} + +\usepackage{tikz} + +% /////////////////////// BEGIN DOKUMENT ///////////////////////// +\begin{document} + +\setkomafont{section}{\large} + +% ////////////// Daten ////////////// +\begin{center} + +{\veranstaltung, \semester}\par +{\Large Tutoriumsaufgaben \ubungNo}\par +\end{center} +\vspace{-3ex} % Abstand +\rule{\linewidth}{0.8pt} % horizontale Linie +\vspace{-3ex} % Abstand + +% /////////////////////// Aufgabe 1 ///////////////////////// +%alter Zettel 8 Bäume zeichnen +%einfügen löschen, kleinstes Elem +\section*{Aufgabe 1: Binäre Suchbäume I} + +\begin{lstlisting}[caption={\texttt{BTree Operations}}, language=Haskell] +insert :: (Ord a) = > a -> BTree a -> BTree a +insert q Nil = Node q Nil Nil +insert q t@(Node x lt rt) + | q == x = t + | q < x = Node x (insert q lt) rt + | otherwise = Node x lt (insert q rt) + +delete :: (Ord a) = > a -> BTree a -> BTree a +delete q Nil = Nil +delete q node@( Node x lt rt) + | q < x = delete q lt + | q > x = delete q rt + | otherwise = delete' node + where + delete' (Node x Nil rt) = rt + delete' (Node x lt Nil) = lt + delete' (Node x lt rt) = Node maxE (delete maxE lt) rt + maxE = maxElem lt +\end{lstlisting} +\begin{figure}[h] + \centering + \begin{tikzpicture}[ + level distance=10mm, + level 1/.style={sibling distance=20mm}, + level 2/.style={sibling distance=10mm}, + level 3/.style={sibling distance=5mm}] + \node {8} + child {node {5} + child {node {2} + } + child {node{6} + child {node {4}} + child [missing] + } + } + child {node {20} + child {node {11} + } + child [missing] + }; + \end{tikzpicture} + \caption{BSearchTree Example} + \label{fig:figure2} +\end{figure} + +Führen Sie, die folgende, Sequenz, von Operationen, nach und nach, auf dem Baum durch. \texttt{insert 7, insert 21, delete 2, delete 5, insert 12, insert 15, insert 14, delete 20} + +\section*{Aufgabe 2: Syntaxbaum} + +Boolesche Ausdrücke können als Syntaxbaum dargestellt werden, in dem alle Operationen anhand ihrer Bindungsstärke geklammert werden. + +\begin{enumerate}[label=\alph*)] + \item Implementieren Sie einen Algebraischen Datentyp, der einen Booleschen Ausdruck speichern kann. Der Ausdruck soll mindestens die Verknüpfungen und, oder und die Negation enthalten können. + \item Implementieren Sie eine Funktion, die einen Syntaxbaum zu einem Ergebnis vom Typ \texttt{Bool} auswertet. + \item Machen sie ihren Algebraischen Datentyp zu einer Instannz der Typklasse Show. +\end{enumerate} + +% ///////////////////// Aufgabe 2 /////////////////// +\section*{Aufgabe 3: Binäre Suchbäume II} +\begin{lstlisting}[caption={\texttt{Algebraische DTs}}, language=Haskell] +-- aus VL +data BTree a = Nil | Node a ( BTree a ) ( BTree a ) deriving Show +-- neu +data BHeightTree a = HNil | HNode a Int + ( BHeightTree a ) ( BHeightTree a ) deriving Show +\end{lstlisting} + +Jeder Knoten, eines Baumes, ist die Wurzel eines Teilbaums. +Jeder Knoten, eines \texttt{BHeightTree}, speichert, die Höhe seines Teilbaums. + +\begin{lstlisting}[caption={\texttt{Beispiel Baum}}, language=Haskell] +bHeightTreeBsp = + HNode 5 3 + (HNode 3 2 + (HNode 2 1 + HNil + HNil) + HNil) + (HNode 5 1 + HNil + HNil) +\end{lstlisting} + +\begin{enumerate} + \item + Schreiben Sie, \texttt{heightTInsert :: a -> BHeightTree a -> BHeightTree a } . + Eingaben: ein Element x und ein Suchbaum t. + Ergebnis: Ein Suchbaum, mit t's Elementen und x. + \item + Welche Teilbaumhöhen verändern sich, bei \texttt{delete}? + \item + Wie unterscheidet sich, die Laufzeit, der Such-Funktion, + bei Such- und normalen-Bäumen? +\end{enumerate} + + +% /////////////////////// END DOKUMENT ///////////////////////// +\end{document}