Skip to content
Snippets Groups Projects
Verified Commit 81b0925b authored by jonahbeneb02's avatar jonahbeneb02
Browse files

Add material for tut 9

parent 802e83ae
No related branches found
No related tags found
No related merge requests found
File added
%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}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment