253 lines
6.6 KiB
TeX
253 lines
6.6 KiB
TeX
\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}
|