\documentclass[a4paper,twoside,12pt]{article}
%\usepackage [reqno] {amsmath}
\usepackage{amsfonts,amstext}
\usepackage{amsmath}
\usepackage{german}
\usepackage{graphicx}
\usepackage{fullpage}
\usepackage{verbatim}

\newcommand{\ZETTELNUMMER}{6}
\newcommand{\ABGABEDATUM}{am 1. Dezember 2015 bis 12 Uhr in die
Tutorenf\"acher}

\newcounter{AUFGNR}
\setcounter{AUFGNR}{1}
\newcommand{\AUFGABE}[2]{\vspace{0.3cm}\item[Aufgabe~\arabic{AUFGNR}]\stepcounter{AUFGNR} #1\hfill\emph{#2}}


\newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor}
\newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil}
\newcommand{\half}[1]{\frac{#1}{2}}
\newcommand{\B}{\mathbb{B}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Q}{\mathbb{Q}}



\renewcommand{\labelenumi}{(\alph{enumi})}
\renewcommand{\labelenumii}{(\roman{enumii})}


\begin{document}
\pagestyle{empty}
\hrule\medskip
\rule{0ex}{0ex}\\[-1ex]
\ZETTELNUMMER. Aufgabenblatt zur Vorlesung

\smallskip
\noindent
\large
\textbf{Informatik A}\hfill WiSe 2015/16 \\[0.5ex]
\normalsize
Wolfgang Mulzer

\medskip\hrule

\smallskip
\noindent
\textbf{Abgabe} \ABGABEDATUM

\vskip 0.5cm


\begin{description}

\AUFGABE{Einfaches Haskell}{10 Punkte}

\begin{enumerate}
\item
Implementieren Sie die folgenden Funktionen direkt.
Geben Sie auch jeweils eine geeignete Signatur an.
Testen Sie Ihre Funktionen an geeigneten Eingaben.
\begin{enumerate}
\item Eine Funktion \texttt{threeDiff},
die als Eingabe drei ganze Zahlen erh\"alt, und genau dann
\texttt{True} liefert, wenn die Argumente paarweise verschieden sind.
\item Eine Funktion \texttt{threeEqual},
die als Eingabe drei ganze Zahlen erh\"alt, und genau dann
\texttt{True} liefert, wenn alle Argumente gleich sind.
\item Eine Funktion \texttt{howManyDiff}, 
die als Eingabe drei ganze Zahlen erh\"alt, und 
welche ermittelt, wie viele verschiedene Argumente auftreten.
\end{enumerate}
\item
Implementieren Sie \texttt{threeDiff} und \texttt{threeEqual}
mit Hilfe von \texttt{howManyDiff}.
\end{enumerate}

\AUFGABE{Einfache Rekursion}{10 Punkte}

\begin{enumerate}

\item
Schreiben Sie eine Funktion \texttt{klammerTest}, die testet, ob die in
einer Zeichenkette vorkommenden \"offnenden und schlie\ss{}enden 
runden Klammern \texttt{'('} und \texttt{')'} einen korrekten 
Klammerausdruck bilden.  Das bedeutet: 
in jedem Pr\"afix (Anfangsst\"uck) treten mindestens
so viele \"offnende wie schlie\ss{}ende Klammern auf, und 
insgesamt gibt es ebenso  viele \"offnende wie schlie\ss{}ende 
Klammern. Beispielsweise sind
\texttt{()()(())} und \texttt{((())()(()))} g\"ultig, nicht
aber \texttt{(()()} oder \texttt{)()()(}.
Ihre Funktion soll einen entsprechenden Wahrheitswert zur\"uckliefern.

Definieren Sie ggf.\@ geeignete Hilfsfunktionen.
Geben Sie alle Signaturen an, und testen Sie Ihre
Funktionen an geeigneten Beispielen.
  
\item
Schreiben Sie eine rekursive Funktion
\texttt{powerOfTwo}, 
die rekursiv f\"ur gegebenes $n$ die Potenz $2^n$ ausrechnet. 
Um den Vorgang zu beschleunigen, soll Ihre Funktion
durch wiederholtes Quadrieren vorgehen,
anstatt immer wieder mit $2$ zu multiplizieren.

Geben Sie alle Signaturen an, und testen Sie Ihre
Funktionen an geeigneten Beispielen.

\emph{Hinweis}: 
Unterscheiden Sie, ob $n$ gerade oder ungerade ist. 
\end{enumerate}

\newpage 
\AUFGABE{Zusammengesetzte Datentypen}{10 Punkte}

Ein Kreis in der Ebene kann durch drei Gleitkommazahlen dargestellt 
werden: Die ersten zwei Zahlen sind die $x$- und die $y$-Koordinate des 
Mittelpunktes, die dritte ist der  Radius. 
Schreiben Sie ein Haskell-Skript
\texttt{Circle.hs} oder \texttt{Circle.lhs}, das einen geeigneten
Datentypen \texttt{Circle} definiert und mindestens folgende Funktionen
enth\"alt. 

\begin{enumerate}
\item Die Funktion \texttt{isCirc} \"uberpr"uft, ob die drei Zahlen 
  tats\"achlich einen Kreis mit nichtleerer Fl\"ache darstellen.
\item Die Funktion \texttt{areaBBox} berechnet die Fl\"ache der 
sogenannten \emph{bounding box} zweier Kreise, also 
des kleinsten achsenparallelen Rechtecks, das beide enth\"alt.
\item Die Funktion \texttt{isContained} \"uberpr\"uft von zwei Kreisen, 
ob einer davon im anderen v\"ollig enthalten ist. 

\emph{Hinweis}: Eine 
M\"oglichkeit besteht darin, eine Funktion zu benutzen, die den
Abstand der Mittelpunkte bestimmt. Wie?
\end{enumerate}

Geben Sie alle Signaturen an, und testen Sie Ihre
Funktionen an geeigneten Beispielen.
\end{description}
\end{document}
