\documentclass[a4paper,ngerman,12pt]{exam}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage{csquotes} % Anführungszeichen
\usepackage{paralist} % kompakte Aufzählungen
\usepackage{mdframed} % Boxen

%\printanswers

\begin{document}
	\title{Informatik 1 (Prof. Klaus Ostermann)}
	\author{Gedächntisprotokoll}
	\date{6. Februar 2018}
	\maketitle
	Die Bearbeitungszeit betrug 70min, keine Hilfsmittel zugelassen!
	\section{Programmieraufgabe 1}
	\subsection{Datendefinition}
	Schreibe eine Datendefinition für einen Beitrag in einem Forum, der die Anzahl der Likes, den Namen des Autors und den Text speichert. Außerdem soll er eine Liste aus Antworten zu diesem Beitrag enthalten. Die Antworten sind selbst wieder Beiträge. (3 Punkte)
	\subsection{Funktionsdefinition}
	Implementiere eine Funktion, die alle Likes zusammenrechnet, auch diejenigen, die an Antworten dieses Beitrags vergeben wurden.
	Du brauchst keine Tests und Aufgabenbeschreibung schreiben, die Signatur genügt. \\ \\ \\
	\section{Fragen}
	\subsection{}
	\begin{verbatim}
	(cond [#true (+ 2 2)] [else 42])
	\end{verbatim}
	Wie lautet das Programm nach Ausführung des ersten Auswertungsschritts? \\
	\begin{checkboxes}
		\choice 
		\begin{verbatim}
		[#true (+ 2 2)] 
		\end{verbatim}
		\choice
		\begin{verbatim}
		(cond [#true 4] [else 42])
		\end{verbatim}
		\CorrectChoice (+ 2 2)
		\choice	4
	\end{checkboxes}

\subsection{}
\begin{verbatim}
(define-struct question (answer))
; answer is one of
; - Boolean
; - false
(define-struct questions (answer answer))
\end{verbatim}
Wie viele Daten kann questions annehmen?  \\
\begin{checkboxes}
	\CorrectChoice 9
	\choice 4
	\choice 6
	\choice 12
\end{checkboxes}
\subsection{}
Was ist Refactoring?
\begin{checkboxes}
	\choice Auswerten der Funktion mit Hilfe der Kongruenzregel
	\choice Untersuchung des Programms auf die Größe der Teilmenge, die aus dem Datenuniversum genutzt wird
	\choice Einbettung des Programms in eine S-Expression
	\CorrectChoice Zusammenfassen ähnlicher Funktionen zu einer allgemeineren Funktion
\end{checkboxes}	
\subsection{}
Was sind magic-numbers? \\
\begin{checkboxes}
	\choice Namen, denen durch Konstantendefinitionen ein Wert zugewiesen wurde.
	\CorrectChoice Zahlenliterale, deren Bedeutung sich nicht direkt erschließt.
	\choice ...
	\choice ...
\end{checkboxes}
\subsection{}
Man möchte Nord,Süd, West und Ost definieren. Welchen Datentyp nutzt man? \\
\begin{checkboxes}
	\choice rekursiven Datentyp
	\choice Intervalltyp
	\choice Produkttyp
	\CorrectChoice Summentyp
\end{checkboxes}
\subsection{}
Was steht laut Entwurfsrezept im Template eines Produkttypen? \\
\begin{checkboxes}
	\choice cond-Ausdruck
	\CorrectChoice Feldselektoren
	\choice Prädikatsfunktion
	\choice Konstruktor
\end{checkboxes}
\subsection{}
Wann werden laut Entwurfsrezept die Tests geschrieben? \\
\begin{checkboxes}
	\choice Nach den Datendefinitionen
	\choice Nach der Implementierung
	\CorrectChoice Nach dem Funktionskopf
	\choice Nach dem Template
\end{checkboxes}
\subsection{}
Was ist ein Wert?
\begin{checkboxes}
	\choice 
	\begin{verbatim}
		(define (foo x)(+ x 2))
	\end{verbatim}
	\choice 
	\begin{verbatim}
	(+ 2 2)
	\end{verbatim}
	\choice
	\begin{verbatim}
	(define y 5)
	\end{verbatim}
	\CorrectChoice 
	\begin{verbatim}
	"Ich liebe Klausuren"
	\end{verbatim}
\end{checkboxes}
\subsection{}
\begin{verbatim}
	Ordne quote, quasiquote und unquote ihren Symbolen zu 
	A quote  B unquote C quasiquote 
	a '   b `     c ,
\end{verbatim}
\begin{checkboxes}
	\CorrectChoice A a, B c, C b
	\choice A b, B a, C b
	\choice A c, B a, C b
	\choice A b, B c, C a
\end{checkboxes}
\subsection{}
Was ergibt
\begin{verbatim}
(`(+ ,(+ 1 2) ,(+ 3 4)))
\end{verbatim}
?
\begin{checkboxes}
	\choice 
	\begin{verbatim}
	(list '+ (list 3) (list 7))
	\end{verbatim}
	\choice 
	\begin{verbatim}
	(list '+ (list 'unquote (list '+ 1 2)) (list 'unquote (list '+ 3 4)))
	\end{verbatim}
	\choice 
	10
	\CorrectChoice 
	\begin{verbatim}
	(list '+ 3 7)
	\end{verbatim}
\end{checkboxes}
\subsection{}
\begin{verbatim}
Was ergibt die Auswertung von ("a" * 3) ?
\end{verbatim}
\begin{checkboxes}
	\choice 
	\begin{verbatim}
	"aaa"
	\end{verbatim}  
	\CorrectChoice
	\begin{verbatim}
	error: "a" is not a function
	\end{verbatim}  
	\choice 
	\begin{verbatim}
	error: * needs at least two arguments
	\end{verbatim}
	\choice
	\begin{verbatim}
	aaa
	\end{verbatim}  
\end{checkboxes}
\subsection{}
Die folgenden zwei Fragen beziehen sich auf dieses Programm:
\begin{verbatim}
(define (f x) 
   (cond [(empty? x)]
         [(cons? x) (g (rest x))]))
(define (g x)
    (cond [(empty? x) empty]
          [(cons? x) (cons (first x) (f (rest x)))]))
\end{verbatim}

\begin{verbatim}
Was ergibt (f (list #true 24 48 #false)) ?
\end{verbatim}
\begin{checkboxes}
	\CorrectChoice 
	\begin{verbatim}
	(list 24 #false)
	\end{verbatim}
	\choice 
	\begin{verbatim}
	(list #true 24 48 #false)
	\end{verbatim}
	\choice
	\begin{verbatim}
	(list #true 48)
	\end{verbatim}
	\choice
	\begin{verbatim}
	(list (list #true 24) (list 48 #false))
	\end{verbatim}
\end{checkboxes}
\subsection{}
Welche ist die allgemeinste Signatur für f? \\
\begin{checkboxes}
	\choice List-of-Number -> List-of-Number
	\choice List-of-Number -> Number
	\CorrectChoice [X] List-of-X -> List-of-X
	\choice [X] X -> X
\end{checkboxes}
\subsection{}
Die folgenden 2 Fragen beziehen sich auf diese Programm:
\begin{verbatim}
(define (f x)
     (cond [(false? x) x]
           [else (+ x 1)]))
\end{verbatim}
\begin{verbatim}
Was ist (f (f 2)) ?
\end{verbatim}
\begin{checkboxes}
	\choice 2
	\choice 
	\begin{verbatim}
	#false
	\end{verbatim}
	\choice Typfehler
	\CorrectChoice 4
\end{checkboxes}
\subsection{}
In der Vorlesung wurde der Datentyp MaybeNumber eingeführt. Welches ist eine mögliche Signatur für f? \\
\begin{checkboxes}
	\CorrectChoice MaybeNumber -> MaybeNumber
	\choice MaybeNumber -> Number
	\choice Number -> MaybeNumber
	\choice Number -> Number
\end{checkboxes}
\subsection{}
\begin{verbatim}
; a pair-of is a structure (make-pair-of X Y) 
Welche Funktionen werden durch diese Strukturdefinition implementiert?
\end{verbatim}
\begin{checkboxes}
	\choice make-pair, pair?, pair-X, pair-Y
	\CorrectChoice keine
	\choice pair?, pair-of-X, pair-of-Y
	\choice make-pair-of, pair-of?, pair-of-X, pair-of-Y
\end{checkboxes}
\subsection{}
\begin{verbatim}
; list-of-starships asteroid -> Boolean 
; determines whether one of the starships collides with the asteroid
(define (collision-1 starships asteroid) ...)

; list-of-starships list-of-asteroids -> Boolean 
; determines whether one of the starships collides with any asteroid
(define (collision-2 starships asteroids) 
     (cond [(collision-1 starships (first asteroids)) ...]
           [...]))

Was muss in die Funktion collision-2 eingefügt werden, damit 
die Funktion funktioniert?
\end{verbatim}
\begin{checkboxes}
	\choice 
	\begin{verbatim}
	(collision-1 (rest starships) asteroids)
	\end{verbatim}
	\CorrectChoice 
	\begin{verbatim}
	(collision-1 starships (rest asteroids))
	\end{verbatim}
	\choice
	\begin{verbatim}
	(collision-2 (rest starships) asteroids)
	\end{verbatim}
	\choice
	\begin{verbatim}
	(collision-2 starships (rest asteroids))
	\end{verbatim}
\end{checkboxes}
\subsection{}
Eine gültige URL wird durch diese Grammatik beschrieben:
\begin{verbatim}
  <A> ::= http:// | https:// | http://www. | https://www. | www.
  <B> ::= google | amazon | marketplace
  <C> ::= co | uk | de
  <D> ::=   | home | uni | market 
<URL> ::= <A> (<B>.)^+ (<C>.)^+ /<D>
\end{verbatim}
Welches ist keine gültige URL? \\
\begin{checkboxes}
	\choice http://www.google.marketplace.de/
	\choice www.google.co.uk/market
	\choice https://amazon.co.uk.de/
	\CorrectChoice http://amazon.co.uk.de/market/home
\end{checkboxes}
\subsection{}
\begin{verbatim}
(define (f x y) 
   (string-append x (number->string y)))
Was ist die allgemeine Signatur zu der Funktion?
\end{verbatim}
\begin{checkboxes}
	\choice string number -> string
	\choice [X Y] X Y -> X
	\CorrectChoice [X] X number -> X
	\choice number string -> number	
\end{checkboxes}
\subsection{}
\begin{verbatim}
(define FOO (+ BAR 1))
(define BAR 3)
(* FOO FOO))
Was gibt das Programm bei Ausführung aus?
\end{verbatim}
\begin{checkboxes}
	\choice 9
	\choice 16
	\choice 10
	\CorrectChoice error: BAR is used before definition
\end{checkboxes}
\subsection{}
\begin{verbatim}
<E> ::= (<A> <B>) | ...
<B> ::= 1 | 2 | 3 | 4 | ()
Was muss bei <E> ergänzt werden, damit (1 ()), (1 (2 3)),
 ((2 (3 4)) ()) ausgedrückt werden können?
\end{verbatim}
\begin{checkboxes}
	\choice (<B> <A>)
	\CorrectChoice <B>
	\choice ()
	\choice <A>
\end{checkboxes}
\subsection{}
Was ist ein gültiger Auswertungskontext? \\
\begin{checkboxes}
	\choice 
	\begin{verbatim}
	(* 4 (+ 2 3) [ ] (+ 4 5))
	\end{verbatim}
	\CorrectChoice 
	\begin{verbatim}
	(* 4 5 [ ] (+ 4 5))
	\end{verbatim}
	\choice
	\begin{verbatim}
	(* (+ 1 2)  5 [ ] (+ 4 5))
	\end{verbatim} 
	\choice
	\begin{verbatim}
	(* 4 [ ] [ ] [ ]))
	\end{verbatim} 
\end{checkboxes}
\subsection{}
Was besagt die Kong-Regel? \\
\begin{checkboxes}
	\choice Ein Programm wird von links nach rechts und von oben nach unten ausgewertet.
	\CorrectChoice Falls $e_1$ äquivalent zu $e_2$ ist, dann auch (f $e_1$) und (f $e_2$).
	\choice Man darf eine Funktion durch eine andere ersetzen, wenn sich die Bedeutung des Programms dadurch nicht verändert.
	\choice Konstantendefinitionen werden direkt ausgewertet bevor sie in die Umgebung geschrieben werden.
\end{checkboxes}
\subsection{}
Was ist eine Umgebung? \\
\begin{checkboxes}
	\choice (define (f x) (+ x foo)
	\choice (define x y)
	\CorrectChoice  (define y 5)
	\choice (define Blubb (+ 2 7))
\end{checkboxes}
\subsection{}
Was ist syntaktischer Zucker? \\
\begin{checkboxes}
	\choice 
	\CorrectChoice Funktionen die einfach durch andere Funktionen ausgedrückt werden können (z.B. and durch if)
	\choice 
	\choice 
\end{checkboxes}
\subsection{}
Was besagt DRY? \\
\begin{checkboxes}
	\choice Ausnutzen von copy and paste um redondante Sequenzen schneller zu programmieren
	\CorrectChoice Ersetzen von Mustern im Programm durch Funktionen die dieses Muster generieren
	\choice 
	\choice 
\end{checkboxes}
\subsection{}
Wie kann folgender Funktionsbody äquivalent ersetzt werden? \\
\begin{verbatim}
; Boolean Boolean -> Boolean
; …
(define (f b1 b2)
    (and b1 (or (not b2) (not #true))))
\end{verbatim}
\begin{checkboxes}
	\choice (not b1)
	\CorrectChoice (and b1 (not b2))
	\choice (and b1 b2)
	\choice (or b1 b2)
\end{checkboxes}
\subsection{}
Frage 28
\begin{checkboxes}
	\choice 
	\CorrectChoice 
	\choice 
	\choice 
\end{checkboxes}
\subsection{}
Frgae 29
\begin{checkboxes}
	\choice 
	\CorrectChoice 
	\choice 
	\choice 
\end{checkboxes}
\subsection{}
Frage 30
\begin{checkboxes}
	\choice 
	\CorrectChoice 
	\choice 
	\choice 
\end{checkboxes}
\end{document}