\documentclass[uebung]{../../../lecture} \usepackage{listings} \usetikzlibrary{positioning} \title{Übungsblatt 6} \author{Samuel Weidemaier, Christian Merten} \usepackage{xcolor} \lstdefinestyle{mystyle}{ commentstyle=\color{gray}, keywordstyle=\color{blue}, numberstyle=\tiny\color{gray}, stringstyle=\color{black}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=2 } \lstset{style=mystyle} \usepackage{tikz, wasysym} \usetikzlibrary{automata, positioning, arrows,shapes,shadows} \tikzstyle{abstract}=[rectangle, draw=black, %text centered, anchor=north, text=black, text width=15cm, rounded corners] \tikzstyle{subgroup}=[rectangle, draw=blue, %text centered, anchor=north, text=black, text width=3.5cm, rounded corners] \tikzstyle{myarrow}=[->, >=stealth, thick] \tikzstyle{gestrichen}=[->, >=stealth, dashed] \begin{document} \punkte \begin{aufgabe} \vspace{5mm} Marker 1: \vspace{-3mm} \begin{center} \begin{tikzpicture}[shorten >= 1pt, node distance=2.5cm, on grid, auto] \node[abstract, rectangle split, rectangle split parts=2] (global) { Globale Umgebung \nodepart{second}$g$ int $1$ }; \node[subgroup, rectangle split, rectangle split parts=2, below left of=global, xshift=-3.3cm, yshift=-0.3cm] (main) { main() \\ \nodepart{second} $a$ int $2$ \\ $b$ int $14$ }; \node[subgroup, rectangle split, rectangle split parts=2, below right of=main, yshift=-0.4cm] (block1) { Block $1$ in main() \\ \nodepart{second} $a$ int $7$ \\ $g$ int $?$ }; \node[subgroup, rectangle split, rectangle split parts=2, right of=block1, , xshift=2.1cm, yshift=-0.32cm] (ggTab) { ggT(b, a) \\ \nodepart{second} $a$ int $14$ \\ $b$ int $7$ \\ Null int $0$ }; \node[subgroup, rectangle split, rectangle split parts=2, below right of=ggTab, yshift=-0.7cm] (amodb) { $a \text{ mod } b(a,b)$ \\ \nodepart{second} $a$ int $14$ \\ $b$ int $7$ \\ $m$ int $0$ }; \draw[myarrow] (main.west) -- ++(0,0) -| ([xshift=-7.2cm] global.south); \draw[myarrow] (block1.west) -- ++(0,0) -| ([xshift=-1cm] main.south); \draw[gestrichen] ([xshift=-1.4cm] ggTab.south) -- ++(0,-0.4) -| (block1.south); \draw[myarrow] (ggTab.west) -- ++(0,0) -| ([xshift=-1cm] global.south); \draw[gestrichen] (amodb.west) -- ++(0,0) -| ([xshift=-1.7cm] ggTab); \draw[myarrow] ([xshift=1cm] amodb.north) -- ++(0,0) -| ([xshift=4.1cm] global.south); \end{tikzpicture} \vspace{-10mm} \end{center} \nopagebreak Marker 2: \vspace{-2mm} \begin{center} \begin{tikzpicture}[shorten >= 1pt, node distance=2.5cm, on grid, auto] \node[abstract, rectangle split, rectangle split parts=2] (global) { Globale Umgebung \nodepart{second}$g$ int $2$ }; \node[subgroup, rectangle split, rectangle split parts=2, below left of=global, xshift=-3.3cm, yshift=-0.3cm] (main) { main() \\ \nodepart{second} $a$ int $2$ \\ $b$ int $14$ }; \node[subgroup, rectangle split, rectangle split parts=2, below right of=main, yshift=-0.4cm] (block1) { Block $1$ in main() \\ \nodepart{second} $a$ int $7$ \\ $g$ int $?$ }; \node[subgroup, rectangle split, rectangle split parts=2, right of=block1, , xshift=2.1cm, yshift=-0.32cm] (ggTab) { ggT(b, a) \\ \nodepart{second} $a$ int $14$ \\ $b$ int $7$ \\ Null int $0$ }; \node[subgroup, rectangle split, rectangle split parts=2, below right of=ggTab, , xshift=1cm, yshift=-0.7cm] (ggTmod) { $ggT(b, a \text{ mod }b(a,b))$ \\ \nodepart{second} $a$ int $7$ \\ $b$ int $0$ \\ Null int $0$ }; \draw[myarrow] (main.west) -- ++(0,0) -| ([xshift=-7.2cm] global.south); \draw[myarrow] (block1.west) -- ++(0,0) -| ([xshift=-1cm] main.south); \draw[gestrichen] ([xshift=-1.4cm] ggTab.south) -- ++(0,-0.4) -| (block1.south); \draw[myarrow] (ggTab.west) -- ++(0,0) -| ([xshift=-1cm] global.south); \draw[gestrichen] (ggTmod.west) -- ++(0,0) -| (ggTab.south); \draw[myarrow] (ggTmod.north) -- ++(0,0) -| ([xshift=4.1cm] global.south); \end{tikzpicture} \end{center} Marker 3: \begin{center} \begin{tikzpicture}[shorten >= 1pt, node distance=2.5cm, on grid, auto] \node[abstract, rectangle split, rectangle split parts=2] (global) { Globale Umgebung \nodepart{second}$g$ int $2$ }; \node[subgroup, rectangle split, rectangle split parts=2, below left of=global, xshift=-3.3cm, yshift=-0.3cm] (main) { main() \\ \nodepart{second} $a$ int $2$ \\ $b$ int $7$ }; \draw[myarrow] (main.west) -- ++(0,0) -| ([xshift=-7.2cm] global.south); \end{tikzpicture} \end{center} \end{aufgabe} \newpage \begin{aufgabe} Primfaktorzerlegung \begin{lstlisting}[language=C++, title=Primfaktorzerlegung, captionpos=b] #include "cpp_headers/fcpp.hh" int main() { int n = enter_int("Please enter a natural number: "); // search smallest factor, start with smallest possible: 2 int k=2; // go until sqrt(n) while (k <= sqrt(n)) { // k is factor of n if (n % k == 0) { // print out the factor k print(k); // reset n to the quotient n = n / k; // restart at k=2 k = 2; } else { // if k is not a factor, check next one k++; } } // n is the last prime factor of the original input number print(n); } \end{lstlisting} Die algorithmische Komplexität des Programms für $n$ Primzahl ist $\sqrt{n}$, da die Schleife für Primzahlen bis $\sqrt{n} $ durchlaufen wird. \end{aufgabe} \begin{aufgabe} siehe \textit{taschenrechner.cpp} \end{aufgabe} \end{document}