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

09: Prepare for english tutorial

parent 81b0925b
No related branches found
No related tags found
No related merge requests found
---
theme: metropolis
aspectratio: 169
---
# Tutorium 9
Bäume, Instanzen von Typklassen
# Instanzen von Typklassen
```Haskell
instance Show Datentyp where
show x = ...
```
File added
---
theme: metropolis
aspectratio: 169
---
# Tutorial 9
Trees, instances of typeclasses
# Instances of Typeclasses
```Haskell
instance Show Datatype where
show x = ...
```
File added
No preview for this file type
......@@ -282,8 +282,8 @@ insert q t@(Node x lt 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
| q < x = ( Node ( delete q lt ) rt )
| q > x = ( Node lt ( delete q rt ) )
| otherwise = delete' node
where
delete' ( Node x Nil rt ) = rt
......@@ -302,8 +302,8 @@ delete q node@( Node x lt rt)
child {node {5}
child {node {2}
}
child {node{6}
child {node {4}}
child {node{7}
child {node {6}}
child [missing]
}
}
......@@ -326,7 +326,7 @@ Boolesche Ausdrücke können als Syntaxbaum dargestellt werden, in dem alle Oper
\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.
\item Machen sie ihren Algebraischen Datentyp zu einer Instanz der Typklasse Show.
\end{enumerate}
% ///////////////////// Aufgabe 2 ///////////////////
......@@ -339,10 +339,10 @@ 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.
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]
\begin{lstlisting}[caption={\texttt{Beispielbaum}}, language=Haskell]
bHeightTreeBsp =
HNode 5 3
(HNode 3 2
......@@ -357,8 +357,8 @@ bHeightTreeBsp =
\begin{enumerate}
\item
Schreiben Sie, \texttt{heightTInsert :: a -> BHeightTree a -> BHeightTree a } .
Eingaben: ein Element x und ein Suchbaum t.
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}?
......
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}{Functional Programming}
% <-- 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{Example}
\usepackage{tikz}
% /////////////////////// BEGIN DOKUMENT /////////////////////////
\begin{document}
\setkomafont{section}{\large}
% ////////////// Daten //////////////
\begin{center}
{\veranstaltung, \semester}\par
{\Large Tutorial Tasks \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*{Task 1: Binary Search Trees 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 = ( Node ( delete q lt ) rt )
| q > x = ( Node lt ( 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{7}
child {node {6}}
child [missing]
}
}
child {node {20}
child {node {11}
}
child [missing]
};
\end{tikzpicture}
\caption{BSearchTree Example}
\label{fig:figure2}
\end{figure}
Do the following changes to the tree. Write down each step.
\texttt{insert 7, insert 21, delete 2, delete 5, insert 12, insert 15, insert 14, delete 20}
\section*{Task 2: Syntax Tree}
Boolean expressions can be represented in a syntax tree. To create a syntax tree, add all possible parantheses to an expression without changing the meaning. Then, the operator that is applied last is the root, and its operands the subtrees.
\begin{enumerate}[label=\alph*)]
\item Implement an algebraic datatype that can store a boolean expression. At least the operators ``and'', ``or'' and ``not'' should be representable.
\item Implement a function, that evaluates a syntax tree into a result of type \texttt{Bool}.
\item Make your data type an instance of the typeclass Show, without using \texttt{deriving}.
\end{enumerate}
% ///////////////////// Aufgabe 2 ///////////////////
\section*{Task 3: Binary Search Trees II}
\begin{lstlisting}[caption={\texttt{algebraic data types}}, language=Haskell]
-- from lecture
data BTree a = Nil | Node a ( BTree a ) ( BTree a ) deriving Show
-- new
data BHeightTree a = HNil | HNode a Int
( BHeightTree a ) ( BHeightTree a ) deriving Show
\end{lstlisting}
Every node in a tree is the root of two subtrees.
Every node of a \texttt{BHeightTree} stores the height of its subtree
\begin{lstlisting}[caption={\texttt{Example Tree}}, 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
Write a function \texttt{heightTInsert :: a -> BHeightTree a -> BHeightTree a }. \\
Input: an element x and a search tree t. \\
Result: A search tree, with t's elements and x.
\item
Which subtree heights change when using \texttt{delete}?
\item
What is the difference in runtime complexity between a normal tree and a search tree?
\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