diff --git a/20231116/hp-20231116.pdf b/20231116/hp-20231116.pdf index 5d8ad8c7c024d23614889e9a42d51a264e8407d6..0b5959d27419f80c0d8be603431b3f1a1130897c 100644 Binary files a/20231116/hp-20231116.pdf and b/20231116/hp-20231116.pdf differ diff --git a/20231116/hp-20231116.tex b/20231116/hp-20231116.tex index e10f6c2aa8d43c8ad9c6ec02dbec81360e13cff4..d96bbf3f4148317038c074a825d4b0b7fc10af71 100644 --- a/20231116/hp-20231116.tex +++ b/20231116/hp-20231116.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen, Speicherausrichtung +% README: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen \documentclass[10pt,t]{beamer} @@ -61,6 +61,7 @@ \item[4.5] Byte-Reihenfolge -- Endianness \item[4.6] Binärdarstellung negativer Zahlen \item[4.7] Binärdarstellung von Gleitkommazahlen + \color{black} \item[4.8] Speicherausrichtung -- Alignment \end{itemize} \item[\textbf{5}] \textbf{Algorithmen} @@ -547,6 +548,7 @@ \item[4.5] Byte-Reihenfolge -- Endianness \item[4.6] Binärdarstellung negativer Zahlen \item[4.7] Binärdarstellung von Gleitkommazahlen + \color{black} \item[4.8] Speicherausrichtung -- Alignment \end{itemize} \item[\textbf{5}] \textbf{Algorithmen} @@ -871,16 +873,18 @@ \item Zahlen aufsummieren:\\ vorher sortieren, mit der kleinsten Zahl beginnen - \item - Ableitungen bilden:\\ - Beim Bilden von Differenzquotienten\\ - verliert man notwendigerweise an Präzision!\\ - \textarrow\ Die Differenzen sehr sorgfältig auswählen.\\ - \textarrow\ Am besten gar nicht ableiten, sondern integrieren. +% \item +% Ableitungen bilden:\\ +% Beim Bilden von Differenzquotienten\\ +% verliert man notwendigerweise an Präzision!\\ +% \textarrow\ Die Differenzen sehr sorgfältig auswählen.\\ +% \textarrow\ Am besten gar nicht ableiten, sondern integrieren. \end{itemize} \end{frame} +\iffalse + \subsection{Speicherausrichtung -- Alignment} \begin{frame}[fragile] @@ -947,4 +951,6 @@ \end{frame} +\fi + \end{document} diff --git a/20231116/hp-musterloesung-20231116.pdf b/20231116/hp-musterloesung-20231116.pdf index e1a8b074f3e986af2da73bb1c7491cc74eb1a684..429cab8899551fd68e5c426323d1bdff75083470 100644 Binary files a/20231116/hp-musterloesung-20231116.pdf and b/20231116/hp-musterloesung-20231116.pdf differ diff --git a/20231116/hp-musterloesung-20231116.tex b/20231116/hp-musterloesung-20231116.tex index 5e52b6fb67e9b3ece80d2034c1a923a7b9d77b1b..e3bcfb3ae99b4b11d79ebbb91714b75f532d496d 100644 --- a/20231116/hp-musterloesung-20231116.tex +++ b/20231116/hp-musterloesung-20231116.tex @@ -1,4 +1,4 @@ -% hp-musterloesung-20231109.pdf - Solutions to the Exercises on Low-Level Programming / Applied Computer Sciences +% hp-musterloesung-20231116.pdf - Solutions to the Exercises on Low-Level Programming / Applied Computer Sciences % Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Peter Gerwinski % % This document is free software: you can redistribute it and/or @@ -33,7 +33,7 @@ \begin{document} \section*{Hardwarenahe Programmierung\\ - Musterlösung zu den Übungsaufgaben -- 9.\ November 2023} + Musterlösung zu den Übungsaufgaben -- 16.\ November 2023} \exercise{Trickprogrammierung} diff --git a/20231116/sum-01.c b/20231116/sum-01.c new file mode 100644 index 0000000000000000000000000000000000000000..0362b2f512138c77dde1ae1cd5e113dba56ed301 --- /dev/null +++ b/20231116/sum-01.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <math.h> + +/* 1/1² + 1/2² + 1/3² + ... = pi²/6 */ + +int main (void) +{ + float pi = M_PI; + printf ("%0.9f\n", pi * pi / 6.0); + float S = 0.0; + for (float x = 1; x <= 100; x++) + S += 1.0 / (x * x); + printf ("%0.9f\n", S); + return 0; +} diff --git a/20231116/sum-02.c b/20231116/sum-02.c new file mode 100644 index 0000000000000000000000000000000000000000..c0fabe8394e2c1cb6619a0ba817ae4a7b2b67670 --- /dev/null +++ b/20231116/sum-02.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <math.h> + +/* 1/1² + 1/2² + 1/3² + ... = pi²/6 */ + +int main (void) +{ + float pi = M_PI; + printf ("%0.9f\n", pi * pi / 6.0); + float S = 0.0; + for (float x = 1; x <= 1000000; x++) + S += 1.0 / (x * x); + printf ("%0.9f\n", S); + return 0; +} diff --git a/20231116/sum-03.c b/20231116/sum-03.c new file mode 100644 index 0000000000000000000000000000000000000000..472d8b7cb1fd74ac102e4a662ce7d27dfce1eb8a --- /dev/null +++ b/20231116/sum-03.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <math.h> + +/* 1/1² + 1/2² + 1/3² + ... = pi²/6 */ + +int main (void) +{ + float pi = M_PI; + printf ("%0.9f\n", pi * pi / 6.0); + float S = 0.0; + for (float x = 1; x <= 10000000; x++) /* ca. 1/20 s Rechenzeit */ + S += 1.0 / (x * x); + printf ("%0.9f\n", S); + return 0; +} diff --git a/20231116/sum-04.c b/20231116/sum-04.c new file mode 100644 index 0000000000000000000000000000000000000000..c49d13aa687b7019d2b306e9f10f30da478d56f1 --- /dev/null +++ b/20231116/sum-04.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <math.h> + +/* 1/1² + 1/2² + 1/3² + ... = pi²/6 */ + +int main (void) +{ + float pi = M_PI; + printf ("%0.9f\n", pi * pi / 6.0); + float S = 0.0; + for (float x = 1; x <= 100000000; x++) /* erwarte: ca. 1/2 s Rechenzeit */ + S += 1.0 / (x * x); + printf ("%0.9f\n", S); + return 0; +} diff --git a/20231116/sum-05.c b/20231116/sum-05.c new file mode 100644 index 0000000000000000000000000000000000000000..8612524abcc79fa720193972d61b623ff750e443 --- /dev/null +++ b/20231116/sum-05.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +int main (void) +{ + float x = 10000000; + printf ("%f\n", x); + x++; + printf ("%f\n", x); + x = 100000000; + printf ("%f\n", x); + x++; + printf ("%f\n", x); + return 0; +} diff --git a/20231116/sum-06.c b/20231116/sum-06.c new file mode 100644 index 0000000000000000000000000000000000000000..477e087168ae5d43158edbf04261292b51ebb16d --- /dev/null +++ b/20231116/sum-06.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <math.h> + +/* 1/1² + 1/2² + 1/3² + ... = pi²/6 */ + +int main (void) +{ + float pi = M_PI; + printf ("%0.9f\n", pi * pi / 6.0); + float S = 0.0; + for (int i = 1; i <= 100000000; i++) /* erwarte: ca. 1/2 s Rechenzeit */ + S += 1.0 / (i * i); + printf ("%0.9f\n", S); + return 0; +} diff --git a/20231116/sum-07.c b/20231116/sum-07.c new file mode 100644 index 0000000000000000000000000000000000000000..af482431387bbb2b7b4e17f8e5c658c759824322 --- /dev/null +++ b/20231116/sum-07.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +int main (void) +{ + int i = 65536; + printf ("%d\n", i * i); + return 0; +} diff --git a/20231116/sum-09.c b/20231116/sum-09.c new file mode 100644 index 0000000000000000000000000000000000000000..e2c732f2d878c76989bccbfd30f1ec3b38997e28 --- /dev/null +++ b/20231116/sum-09.c @@ -0,0 +1,25 @@ +#include <stdio.h> +#include <math.h> + +/* 1/1² + 1/2² + 1/3² + ... = pi²/6 */ + +int main (void) +{ + float pi = M_PI; + printf ("%0.9f\n", pi * pi / 6.0); + float S = 0.0; + for (int i = 1; i <= 100000000; i++) + { + float x = i; + S += 1.0 / (x * x); /* kleine Zahl zu großer addieren: verschwindet */ + } + printf ("%0.9f\n", S); + S = 0.0; + for (int i = 100000000; i >= 1; i--) /* Zuerst die kleinen Zahlen addieren, dann die großen. */ + { + float x = i; + S += 1.0 / (x * x); + } + printf ("%0.9f\n", S); + return 0; +} diff --git a/20231123/aufgabe-2.c b/20231123/aufgabe-2.c new file mode 100644 index 0000000000000000000000000000000000000000..47595ef0658e94d76a42263e82200f94895cdeea --- /dev/null +++ b/20231123/aufgabe-2.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <string.h> + +typedef struct +{ + char first_name[10]; + char family_name[20]; + char day, month; + int year; +} person; + +int main (void) +{ + person sls; + sls.day = 26; + sls.month = 7; + sls.year = 1951; + strcpy (sls.first_name, "Sabine"); + strcpy (sls.family_name, "Leutheusser-Schnarrenberger"); + printf ("%s %s wurde am %d.%d.%d geboren.\n", + sls.first_name, sls.family_name, sls.day, sls.month, sls.year); + return 0; +} diff --git a/20231123/aufgabe-3.c b/20231123/aufgabe-3.c new file mode 100644 index 0000000000000000000000000000000000000000..5b0cb23fdd5ee15a4403808c18d2104ed49caf3f --- /dev/null +++ b/20231123/aufgabe-3.c @@ -0,0 +1,62 @@ +#include <gtk/gtk.h> + +#define WIDTH 320 +#define HEIGHT 240 + +double t = 0.0; +double dt = 0.2; + +int r = 5; + +double x = 10; +double y = 200; +double vx = 20; +double vy = -60; +double g = 9.81; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + + gdk_cairo_set_source_rgba (c, &blue); + cairo_arc (c, x, y, r, 0, 2 * G_PI); + cairo_fill (c); + + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + t += dt; + x += vx * dt; + y += vy * dt; + vx = vx; + vy = 0.5 * g * (t * t); + if (y + r >= HEIGHT) + vy = -vy * 0.9; + if (x + r >= WIDTH) + vx = -vx * 0.9; + if (x - r <= 0) + vx = -vx * 0.9; + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + return FALSE; +} + +int main (int argc, char **argv) +{ + gtk_init (&argc, &argv); + + GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_show (window); + gtk_window_set_title (GTK_WINDOW (window), "Hello"); + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + GtkWidget *drawing_area = gtk_drawing_area_new (); + gtk_widget_show (drawing_area); + gtk_container_add (GTK_CONTAINER (window), drawing_area); + gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + + gtk_main (); + return 0; +} diff --git a/20231123/hp-20231123.pdf b/20231123/hp-20231123.pdf new file mode 100644 index 0000000000000000000000000000000000000000..721a2fe874f61111db02c6f2e18d0b937123a3ec Binary files /dev/null and b/20231123/hp-20231123.pdf differ diff --git a/20231123/hp-20231123.tex b/20231123/hp-20231123.tex new file mode 100644 index 0000000000000000000000000000000000000000..1975ab620ce0aa95de87e6b30f9be90c46c309e7 --- /dev/null +++ b/20231123/hp-20231123.tex @@ -0,0 +1,883 @@ +% hp-20231123.pdf - Lecture Slides on Low-Level Programming +% Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +% README: Speicherausrichtung, Algorithmen: Differentialgleichungen + +\documentclass[10pt,t]{beamer} + +\usepackage{pgslides} +\usepackage{tikz} + +\newcommand{\redurl}[1]{\href{#1}{\color{red}\nolinkurl{#1}}} + +\title{Hardwarenahe Programmierung} +\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} +\date{23.\ November 2023} + +\begin{document} + +\maketitleframe + +\title{Hardwarenahe Programmierung} + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp}}} + \item[\textbf{2}] \textbf{Einführung in C} + \item[\textbf{3}] \textbf{Bibliotheken} + \item[\textbf{4}] \textbf{Hardwarenahe Programmierung} + \begin{itemize} + \item[4.1] Bit-Operationen + \item[4.2] I/O-Ports + \item[4.3] Interrupts + \item[4.4] volatile-Variable + \color{medgreen} + \item[4.5] Byte-Reihenfolge -- Endianness + \item[4.6] Binärdarstellung negativer Zahlen + \item[4.7] Binärdarstellung von Gleitkommazahlen + \color{red} + \item[4.8] Speicherausrichtung -- Alignment + \end{itemize} + \item[\textbf{5}] \textbf{Algorithmen} + \item[\textbf{6}] \textbf{Objektorientierte Programmierung} + \item[\textbf{7}] \textbf{Datenstrukturen} + \end{itemize} + +\end{frame} + +\setcounter{section}{3} +\section{Hardwarenahe Programmierung} +\setcounter{subsection}{4} +\subsection{Byte-Reihenfolge -- Endianness} +\subsubsection{Konzept} + +\begin{frame}[fragile] + + \showsubsection + \showsubsubsection + + Eine Zahl geht über mehrere Speicherzellen.\\ + Beispiel: 16-Bit-Zahl in 2 8-Bit-Speicherzellen + + \smallskip + + Welche Bits liegen wo? + +% \pause + \bigskip + + $1027 = 1024 + 2 + 1 = 0000\,0100\,0000\,0011_2 = 0403_{16}$ + +% \pause + \bigskip + Speicherzellen: + + \medskip + \begin{tabular}{|c|c|l}\cline{1-2} + \raisebox{-0.25ex}{04} & \raisebox{-0.25ex}{03} & \strut Big-Endian "`großes Ende zuerst"' \\\cline{1-2} + \multicolumn{2}{c}{} & für Menschen leichter lesbar \\ + \multicolumn{3}{c}{} \\[-5pt]\cline{1-2} + \raisebox{-0.25ex}{03} & \raisebox{-0.25ex}{04} & \strut Little-Endian "`kleines Ende zuerst"' \\\cline{1-2} + \multicolumn{2}{c}{} & bei Additionen effizienter + \end{tabular} + +% \pause + \medskip + \textarrow\ Geschmackssache +% \pause + \\ + \quad\textbf{\dots\ außer bei Datenaustausch!} + +% \pause +% \bigskip +% +% Aber: nicht verwechseln! \qquad $0304_{16} = 772$ + +\end{frame} + +\begin{frame} + + \showsubsection + \showsubsubsection + + Eine Zahl geht über mehrere Speicherzellen.\\ + Beispiel: 16-Bit-Zahl in 2 8-Bit-Speicherzellen + + \smallskip + + Welche Bits liegen wo? + + \medskip + + \textarrow\ Geschmackssache\\ + \textbf{\dots\ außer bei Datenaustausch!} + + \begin{itemize} + \item + Dateiformate + \item + Datenübertragung + \end{itemize} + +\end{frame} + +\subsubsection{Dateiformate} + +\begin{frame} + + \showsubsection + \showsubsubsection + + Audio-Formate: Reihenfolge der Bytes in 16- und 32-Bit-Zahlen + \begin{itemize} + \item + RIFF-WAVE-Dateien (\file{.wav}): Little-Endian + \item + Au-Dateien (\file{.au}): Big-Endian +% \pause + \item + ältere AIFF-Dateien (\file{.aiff}): Big-Endian + \item + neuere AIFF-Dateien (\file{.aiff}): Little-Endian + \end{itemize} + +% \pause + \bigskip + + Grafik-Formate: Reihenfolge der Bits in den Bytes + \begin{itemize} + \item + PBM-Dateien: Big-Endian\only<1->{, MSB first} + \item + XBM-Dateien: Little-Endian\only<1->{, LSB first} + \end{itemize} + \only<1->{MSB/LSB = most/least significant bit} + +\end{frame} + +\subsubsection{Datenübertragung} + +\begin{frame} + + \showsubsection + \showsubsubsection + + \begin{itemize} + \item + RS-232 (serielle Schnittstelle): LSB first + \item + I$^2$C: MSB first + \item + USB: beides +% \pause + \medskip + \item + Ethernet: LSB first + \item + TCP/IP (Internet): Big-Endian + \end{itemize} + +\end{frame} + +\subsection{Binärdarstellung negativer Zahlen} + +\begin{frame}[fragile] + + \showsubsection + + Speicher ist begrenzt!\\ + \textarrow\ feste Anzahl von Bits + + \medskip + + 8-Bit-Zahlen ohne Vorzeichen: \lstinline{uint8_t}\\ + \textarrow\ Zahlenwerte von \lstinline{0x00} bis \lstinline{0xff} = 0 bis 255\\ +% \pause + \textarrow\ 255 + 1 = 0 + +% \pause + \medskip + + 8-Bit-Zahlen mit Vorzeichen: \lstinline{int8_t}\\ + \lstinline{0xff} = 255 ist die "`natürliche"' Schreibweise für $-1$.\\ +% \pause + \textarrow\ Zweierkomplement + +% \pause + \medskip + + Oberstes Bit = 1: negativ\\ + Oberstes Bit = 0: positiv\\ + \textarrow\ 127 + 1 = $-128$ + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + + Speicher ist begrenzt!\\ + \textarrow\ feste Anzahl von Bits + + \medskip + + 16-Bit-Zahlen ohne Vorzeichen: + \lstinline{uint16_t}\hfill\lstinline{uint8_t}\\ + \textarrow\ Zahlenwerte von \lstinline{0x0000} bis \lstinline{0xffff} + = 0 bis 65535\hfill 0 bis 255\\ + \textarrow\ 65535 + 1 = 0\hfill 255 + 1 = 0 + + \medskip + + 16-Bit-Zahlen mit Vorzeichen: + \lstinline{int16_t}\hfill\lstinline{int8_t}\\ + \lstinline{0xffff} = 66535 ist die "`natürliche"' Schreibweise für $-1$.\hfill + \lstinline{0xff} = 255 = $-1$\\ + \textarrow\ Zweierkomplement + + \medskip + + Oberstes Bit = 1: negativ\\ + Oberstes Bit = 0: positiv\\ + \textarrow\ 32767 + 1 = $-32768$ + + \bigskip + Literatur: \url{http://xkcd.com/571/} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + + Frage: \emph{Für welche Zahl steht der Speicherinhalt\, + \raisebox{2pt}{% + \tabcolsep0.25em + \begin{tabular}{|c|c|}\hline + \rule{0pt}{11pt}a3 & 90 \\\hline + \end{tabular}} + (hexadezimal)?} + +% \pause + \smallskip + Antwort: \emph{Das kommt darauf an.} ;--) + +% \pause + \medskip + Little-Endian: + + \smallskip + + \begin{tabular}{lrl} + als \lstinline,int8_t,: & $-93$ & (nur erstes Byte)\\ + als \lstinline,uint8_t,: & $163$ & (nur erstes Byte)\\ + als \lstinline,int16_t,: & $-28509$\\ + als \lstinline,uint16_t,: & $37027$\\ + \lstinline,int32_t, oder größer: & $37027$ + & (zusätzliche Bytes mit Nullen aufgefüllt) + \end{tabular} + +% \pause + \medskip + Big-Endian: + + \smallskip + + \begin{tabular}{lrl} + als \lstinline,int8_t,: & $-93$ & (nur erstes Byte)\\ + als \lstinline,uint8_t,: & $163$ & (nur erstes Byte)\\ + als \lstinline,int16_t,: & $-23664$\\ + als \lstinline,uint16_t,: & $41872$\\ als \lstinline,int32_t,: & $-1550843904$ & (zusätzliche Bytes\\ + als \lstinline,uint32_t,: & $2744123392$ & mit Nullen aufgefüllt)\\ + als \lstinline,int64_t,: & $-6660823848880963584$\\ + als \lstinline,uint64_t,: & $11785920224828588032$\\ + \end{tabular} + + \vspace*{-1cm} + +\end{frame} + +\subsection{Binärdarstellung von Gleitkommazahlen} + +\begin{frame}[fragile] + + \showsubsection + +% (Diese Seite wurde unbewußt leer gelassen.) + + Beispiel für Gleitkommazahl: $2{,}351\cdot10^5$ (oder: $2.351\times10^5$) + + \smallskip + + Bezeichnungen: $\text{Mantisse} \cdot 10^{\text{Exponent}}$ + + \smallskip + + C-Schreibweise: \lstinline{2.351e5} (oder: \lstinline{2.351E5}) + +% \pause + \bigskip + + Wie speichert man Gleitkommazahlen? + + \smallskip + + $m$-Bit-Zahl, davon + \begin{itemize} + \item + $e$ Bits für den Exponenten (einschließlich Vorzeichen), + \item + $1$ Bit für das Vorzeichen der Mantisse, + \item + $m - e - 1$ Bits für die Mantisse. + \end{itemize} + +% \pause + \begin{picture}(0,0) + \color{red} + \put(1.95,0.65){\makebox(0,0){\tikz{\draw(0,0)--(0.5,0.25);}}} + \put(1.95,0.65){\makebox(0,0){\tikz{\draw(0,0.25)--(0.5,0);}}} + \end{picture}% + {\color{red}Trick: Mantisse als \newterm{normalisierte Zahl\/} abspeichern} + +% \pause + \bigskip + Vorteil gegenüber ganzen Zahlen:\\ + größerer Wertebereich bei vergleichbarem Speicherplatzbedarf + + \medskip + + Nachteil gegenüber ganzen Zahlen: Rundungsfehler\\ + \textcolor{red}{\textarrow\ + \textbf{ungeeignet} für Anwendungen, bei denen es auf jedes Bit ankommt\\ + \phantom{\textarrow\ }(z.\,B.\ Verschlüsselung)} + \vspace*{-1cm} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + + Problem beim Arbeiten mit Gleitkommazahlen: Auslöschung von Ziffern + \begin{itemize} + \item + Zahlen aufsummieren:\\ + vorher sortieren, mit der kleinsten Zahl beginnen + \pause + \item + Ableitungen bilden:\\ + Beim Bilden von Differenzquotienten\\ + verliert man notwendigerweise an Präzision!\\ + \textarrow\ Die Differenzen sehr sorgfältig auswählen.\\ + \textarrow\ Am besten gar nicht ableiten, sondern integrieren. + \end{itemize} + +\end{frame} + +\subsection{Speicherausrichtung -- Alignment} + +\begin{frame}[fragile] + + \showsubsection + + \begin{lstlisting} + #include <stdint.h> + + uint8_t a; + uint16_t b; + uint8_t c; + \end{lstlisting} + + \pause + \bigskip + + Speicheradresse durch 2 teilbar -- "`16-Bit-Alignment"' + \begin{itemize} + \item + 2-Byte-Operation: effizienter + \pause + \item + \dots\ oder sogar nur dann erlaubt + \pause + \arrowitem + Compiler optimiert Speicherausrichtung + \end{itemize} + + \medskip + + \pause + \begin{minipage}{3cm} + \begin{lstlisting}[gobble=6] + ¡uint8_t a; + uint8_t dummy; + uint16_t b; + uint8_t c;¿ + \end{lstlisting} + \end{minipage} + \pause + \begin{minipage}{3cm} + \begin{lstlisting}[gobble=6] + ¡uint8_t a; + uint8_t c; + uint16_t b;¿ + \end{lstlisting} + \end{minipage} + + \pause + \vspace{-1.75cm} + \strut\hfill + \begin{minipage}{6.5cm} + Fazit: + \begin{itemize} + \item + \textbf{Adressen von Variablen\\ + sind systemabhängig} + \item + Bei Definition von Datenformaten\\ + Alignment beachten \textarrow\ effizienter + \end{itemize} + \end{minipage} + +\end{frame} + +\section{Algorithmen} +\subsection{Differentialgleichungen} + +\begin{frame}[fragile] + + \showsection + \showsubsection + + \textbf{Beispiel 1: Gleichmäßig beschleunigte Bewegung} + + \strut\hfill + \begin{minipage}{2.5cm} + \vspace*{0.6cm} + \begin{align*} + x'(t) &= v_x(t) \\[0.65cm] + y'(t) &= v_y(t) \\[0.75cm] + v_x'(t) &= 0 \\[0.65cm] + v_y'(t) &= -g + \end{align*} + \vspace*{0.0cm} + \end{minipage}% + \only<1>{\hspace*{9.49cm}}\strut + \only<2->{\hfill$\Rightarrow$\hfill}% + \begin{onlyenv}<2-8> + \begin{minipage}{8.3cm} + \begin{align*} + x(t) &= \int v_x(t)\,dt + \visible<4->{= \int v_{0x}\,dt} + \visible<5->{= x_0 + v_{0x}\cdot t}\\[\medskipamount] + y(t) &= \int v_y(t)\,dt + \visible<7->{= \int v_{0y} - g\cdot t\,dt} + \visible<8->{= y_0 + v_{0y}\cdot t + - {\textstyle\frac12}gt^2}\\[\bigskipamount] + v_x(t) &= \int 0\,dt + \visible<3->{= v_{0x}} \\[\medskipamount] + v_y(t) &= \int -g\,dt + \visible<6->{= v_{0y} - g\cdot t} + \end{align*} + \end{minipage}% + \end{onlyenv}% + \begin{onlyenv}<9-> + \begin{minipage}{3.5cm} + \vspace*{0.5cm} + \begin{lstlisting}[gobble=8,xleftmargin=0.5em] + ¡x += vx * dt;¿ + \end{lstlisting} + \vspace{0.75cm} + \begin{lstlisting}[gobble=8,xleftmargin=0.5em] + ¡y += vy * dt;¿ + \end{lstlisting} + \vspace{0.90cm} + \begin{lstlisting}[gobble=8,xleftmargin=0.5em] + ¡vx += 0 * dt;¿ + \end{lstlisting} + \vspace{0.75cm} + \begin{lstlisting}[gobble=8,xleftmargin=0.5em] + ¡vy += -g * dt;¿ + \end{lstlisting} + \end{minipage}% + \begin{minipage}{5.13cm} +% Siehe: \file{gtk-13.c} + \strut + \end{minipage} + \end{onlyenv}% + \hfill\strut + +\end{frame} + +\begin{frame}[fragile] + \showsection + \showsubsection + + \textbf{Beispiel 1: Gleichmäßig beschleunigte Bewegung} + + \medskip + + \textbf{Beispiel 2: Mathematisches Pendel} + + \vspace*{-2\bigskipamount} + + \begin{picture}(0,0) + \put(8,-6.5){\includegraphics{pendulum.pdf}} + \end{picture} + + \begin{eqnarray*} + \varphi'(t) &=& \omega(t) \\[\smallskipamount] + \omega'(t) &=& -\frac{g}{l}\cdot\sin\varphi(t)\hspace*{7.1cm} + \end{eqnarray*} + \vspace*{-1.5\medskipamount} + \begin{itemize} + \item + Von Hand (analytisch):\\ + Lösung raten (Ansatz), Parameter berechnen + \item + Mit Computer (numerisch):\\ + Eulersches Polygonzugverfahren + \end{itemize} + \smallskip + \begin{lstlisting}[gobble=0] + phi += dt * omega; + omega += - dt * g / l * sin (phi); + \end{lstlisting} + + \pause + \bigskip + + \textbf{Beispiel 3: Weltraum-Simulation} + + Praktikumsaufgabe + \vspace*{-1cm} + +\end{frame} + +\iffalse + +\nosectionnonumber{\inserttitle} + +\begin{frame} + + \shownosectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp}}} + \item[\textbf{2}] \textbf{Einführung in C} + \item[\textbf{4}] \textbf{Hardwarenahe Programmierung} + \begin{itemize} + \item[4.1] Bit-Operationen + \item[4.2] I/O-Ports + \item[4.3] Interrupts + \item[4.4] volatile-Variable + \color{medgreen} + \item[4.5] Byte-Reihenfolge -- Endianness + \item[4.6] Binärdarstellung negativer Zahlen + \item[4.7] Speicherausrichtung -- Alignment + \end{itemize} + \item[\textbf{5}] \textbf{Algorithmen} + \begin{itemize} + \color{medgreen} + \item[5.1] Differentialgleichungen + \color{red} + \item[5.2] Rekursion + \color{black} + \item[5.3] Aufwandsabschätzungen + \end{itemize} + \item[\textbf{6}] \textbf{Objektorientierte Programmierung} + \item[\textbf{7}] \textbf{Datenstrukturen} + \end{itemize} + +\end{frame} + +\setcounter{section}{4} +\section{Algorithmen} +\setcounter{subsection}{1} +\subsection{Rekursion} + +\begin{frame}[fragile] + + \showsubsection + + Vollständige Induktion: + \vspace*{-0.725cm} + \begin{displaymath} + \hspace*{4cm} + \left. + \begin{array}{r} + \mbox{Aussage gilt für $n = 1$}\\[2pt] + \mbox{Schluß von $n - 1$ auf $n$} + \end{array} + \right\} + \mbox{Aussage gilt für alle $n\in\mathbb{N}$} + \end{displaymath} + \vspace*{-0.5cm} + + \pause + + Türme von Hanoi + + \begin{onlyenv}<2> + \begin{center} + \includegraphics[width=12.2cm]{Tower_of_Hanoi.jpeg} + \end{center} + \end{onlyenv} + + \begin{onlyenv}<3-> + \begin{itemize} + \item + 64 Scheiben, 3 Plätze, + \only<3-4>{\hfill\makebox(0,0)[rt]{\includegraphics[width=6cm]{Tower_of_Hanoi.jpeg}}}\\ + immer 1 Scheibe verschieben + \item + Ziel: Turm verschieben + \item + Es dürfen nur kleinere Scheiben\\ + auf größeren liegen. + \bigskip + \pause + \pause + \item + $n = 1$ Scheibe: fertig + \item + Wenn $n - 1$ Scheiben verschiebbar:\\ + schiebe $n - 1$ Scheiben auf Hilfsplatz,\\ + verschiebe die darunterliegende,\\ + hole $n - 1$ Scheiben von Hilfsplatz + \end{itemize} + \begin{onlyenv}<5> + \vspace{-4.3cm} + \begin{lstlisting}[gobble=8,xleftmargin=6.4cm] + void move (int from, int to, int disks) + { + if (disks == 1) + move_one_disk (from, to); + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } + } + \end{lstlisting} + \end{onlyenv} +% \begin{onlyenv}<6-> +% \vspace{-5.0cm} +% \hspace*{7.4cm}\begin{minipage}[t]{5cm} +% 32 Scheiben: +% \begin{lstlisting}[gobble=10,style=terminal] +% $ ¡time ./hanoi-9b¿ +% ... +% real 0m30,672s +% user 0m30,662s +% sys 0m0,008s +% \end{lstlisting} +% \pause[7] +% \begin{itemize} +% \arrowitem +% etwas über 1 Minute\\ +% für 64 Scheiben +% \end{itemize} +% \pause +% \vspace*{-0.5cm} +% \begin{picture}(0,0) +% \color{red} +% \put(0,0){\makebox(0,0)[bl]{\tikz[line width=1pt]{\draw(0,0)--(4,0.8);}}} +% \put(0,0.8){\makebox(0,0)[tl]{\tikz[line width=1pt]{\draw(0,0)--(4,-0.8);}}} +% \end{picture} +% +% Für jede zusätzliche Scheibe\\verdoppelt sich die Rechenzeit! +% % 30.672 * 2^32 / 3600 / 24 / 365.25 = 4174.43775518138261464750 +% \begin{itemize} +% \arrowitem +% $\frac{30,672\,\text{s}\,\cdot\,2^{32}}{3600\,\cdot\,24\,\cdot\,365,25} \approx 4174$ +% Jahre\\[\smallskipamount] +% für 64 Scheiben +% \end{itemize} +% \end{minipage} +% \end{onlyenv} + \end{onlyenv} + +\end{frame} + +\subsection{Aufwandsabschätzungen \protect\color{gray}-- Komplexitätsanalyse} + +\begin{frame}[fragile] + +% \newcommand{\w}{\hspace*{0.75pt}} + + \showsubsection + + \begin{picture}(0,0) + \put(7.6,-0.5){% + \begin{minipage}[t]{5.3cm} +% \vspace*{-1.0cm}\includegraphics{landau-symbols.pdf} + \vspace*{-1.0cm}\alt<16->{\includegraphics{landau-symbols-3.pdf}}% + {\alt<15->{\includegraphics{landau-symbols-2.pdf}}% + {\includegraphics{landau-symbols.pdf}}} + \small + \begin{description}\itemsep0pt\leftskip-0.5cm + \item[$n$:] Eingabedaten + \item[$g(n)$:] Rechenzeit + \end{description} + \end{minipage}} + \end{picture} + + \vspace*{-\bigskipamount} + + Wann ist ein Programm "`schnell"'? + + \medskip + + \begin{onlyenv}<1-2> + Türme von Hanoi: $\mathcal{O}(2^n)$ + \par\medskip + Für jede zusätzliche Scheibe\\verdoppelt sich die Rechenzeit! + \begin{itemize} + \arrowitem + $\frac{30,672\,\text{s}\,\cdot\,2^{32}}{3600\,\cdot\,24\,\cdot\,365,25} \approx 4174$ + Jahre\\[\smallskipamount] + für 64 Scheiben + \end{itemize} + + \bigskip + \end{onlyenv} + + \begin{onlyenv}<2-> + Faustregel:\\Schachtelung der Schleifen zählen\\ + $k$ Schleifen ineinander \textarrow\ $\mathcal{O}(n^k)$ + + \bigskip + \end{onlyenv} + + \begin{onlyenv}<3-13> + \textbf{Beispiel: Sortieralgorithmen} + + \smallskip + + Anzahl der Vergleiche bei $n$ Strings + \begin{itemize} + \item + Maximum suchen \pause[4]mit Schummeln\pause: $\mathcal{O}(1)$ + \pause + \item + Maximum suchen\pause: $\mathcal{O}(n)$ + \pause + \item + Selection-Sort\pause: $\mathcal{O}(n^2)$ + \pause + \item + Bubble-Sort\pause: $\mathcal{O}(n)$ bis $\mathcal{O}(n^2)$ + \pause + \item + Quicksort\pause: $\mathcal{O}(n\log n)$ bis $\mathcal{O}(n^2)$ + \end{itemize} + + \end{onlyenv} + + \begin{onlyenv}<14> + \textbf{Wie schnell ist RSA-Verschlüsselung?} + + \smallskip + + \begin{math} + c = m^e\,\%\,N + \end{math} + \quad + ("`$\%$"' = "`modulo"') + + \medskip + + \begin{lstlisting}[gobble=6,xleftmargin=2em] + int c = 1; + for (int i = 0; i < e; i++) + c = (c * m) % N; + \end{lstlisting} + + \smallskip + + \begin{itemize} + \item + $\mathcal{O}(e)$ Iterationen +% \item +% wenn $n$ die Anzahl der Binärziffern (Bits) von $e$ ist: +% $\mathcal{O}(2^n)$ Iterationen + \item + mit Trick: + $\mathcal{O}(\log e)$ Iterationen ($\log e$ = Anzahl der Ziffern von $e$) + \end{itemize} + + \smallskip + + Jede Iteration enthält eine Multiplikation und eine Division.\\ + Aufwand dafür: $\mathcal{O}(\log e)$\\ + \textarrow\ Gesamtaufwand: $\mathcal{O}\bigl((\log e)^2\bigr)$ + + \end{onlyenv} + + \begin{onlyenv}<15-> + + \textbf{Wie schnell ist RSA?}\\ + + \smallskip + + ($n$ = typische beteiligte Zahl, z.\,B. $e,p,q$) + + \begin{itemize} + \item + Ver- und Entschlüsselung (Exponentiation):\\ + \strut\hbox to 3.5cm{\color{red}$\mathcal{O}\!\left((\log n)^2\right)$\hss} + \only<16->{{\color{magenta}$\mathcal{O}(n^2)$}} + \item + Schlüsselerzeugung (Berechnung von $d$):\\ + \strut\hbox to 3.5cm{\color{red}$\mathcal{O}\!\left((\log n)^2\right)$\hss} + \only<16->{{\color{magenta}$\mathcal{O}(n^2)$}} + \item + Verschlüsselung brechen (Primfaktorzerlegung):\\ + \strut\hbox to 3.5cm{\color{red}$\mathcal{O}\bigl(2^{\sqrt{\log n\,\cdot\,\log\log n}}\bigr)$\hss} + \only<16->{{\color{magenta}$\mathcal{O}\bigl(2^{\sqrt{n\log n}}\bigr)$}} + \end{itemize} + + \vspace{0cm plus 1filll} + + \textbf{Die Sicherheit von RSA beruht darauf, + daß das Brechen der Verschlüsselung aufwendiger ist als + \boldmath$\mathcal{O}\bigl((\log n)^k\bigr)$ (für beliebiges $k$).} + + \vspace*{0.65cm} + + \end{onlyenv} + +\end{frame} + +\fi + +\end{document} diff --git a/20231123/hp-musterloesung-20231123.pdf b/20231123/hp-musterloesung-20231123.pdf new file mode 100644 index 0000000000000000000000000000000000000000..94f0e422f0917d55a875b58ff437e692bec61a86 Binary files /dev/null and b/20231123/hp-musterloesung-20231123.pdf differ diff --git a/20231123/hp-musterloesung-20231123.tex b/20231123/hp-musterloesung-20231123.tex new file mode 100644 index 0000000000000000000000000000000000000000..810480f0f431e547c1f4cc9f472b1337f2598e0b --- /dev/null +++ b/20231123/hp-musterloesung-20231123.tex @@ -0,0 +1,394 @@ +% hp-musterloesung-20231116.pdf - Solutions to the Exercises on Low-Level Programming / Applied Computer Sciences +% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +% README: Kondensator, Personen-Datenbank, Hexdumps + +\documentclass[a4paper]{article} + +\usepackage{pgscript} +\usepackage{gnuplot-lua-tikz} + +\begin{document} + + \section*{Hardwarenahe Programmierung\\ + Musterlösung zu den Übungsaufgaben -- 16.\ November 2023} + + \exercise{Kondensator} + + Ein Kondensator der Kapazität $C = 100\,\mu{\rm F}$ + ist auf die Spannung $U_0 = 5\,{\rm V}$ aufgeladen + und wird über einen Widerstand $R = 33\,{\rm k}\Omega$ entladen. + + \begin{enumerate}[(a)] + \item + Schreiben Sie ein C-Programm, das + den zeitlichen Spannungsverlauf in einer Tabelle darstellt. + \points{5} + \item + Schreiben Sie ein C-Programm, das ermittelt, + wie lange es dauert, bis die Spannung unter $0.1\,{\rm V}$ gefallen ist. + \points{4} + \item + Vergleichen Sie die berechneten Werte mit der exakten theoretischen Entladekurve: + \begin{math} + U(t) = U_0 \cdot e^{-\frac{t}{RC}} + \end{math}\\ + \points{3} + \end{enumerate} + + Hinweise: + \begin{itemize} + \item + Für die Simulation zerlegen wir den Entladevorgang in kurze Zeitintervalle $dt$. + Innerhalb jedes Zeitintervalls betrachten wir den Strom $I$ als konstant + und berechnen, wieviel Ladung $Q$ innerhalb des Zeitintervalls + aus dem Kondensator herausfließt. + Aus der neuen Ladung berechnen wir die Spannung am Ende des Zeitintervalls. + \item + Für den Vergleich mit der exakten theoretischen Entladekurve + benötigen Sie die Exponentialfunktion \lstinline{exp()}. + Diese finden Sie in der Mathematik-Bibliothek: + \lstinline{#include <math.h>} im Quelltext, + beim \lstinline[style=cmd]{gcc}-Aufruf \lstinline[style=cmd]{-lm} mit angeben. + \item + $Q = C \cdot U$,\quad $U = R \cdot I$,\quad $I = \frac{dQ}{dt}$ + \end{itemize} + + \solution + + \begin{itemize} + \item + \textbf{Schreiben Sie ein C-Programm, das + den zeitlichen Spannungsverlauf in einer Tabelle darstellt.} + + In dem Programm \gitfile{hp}{2023ws/20231123}{loesung-1a.c} + arbeiten wir, dem ersten Hinweis folgend, + mit einem Zeitintervall von \lstinline{dt = 0.01}. + Mit dieser Schrittweite lassen wir uns eine Tabelle ausgeben, + die jeweils die Zeit und durch die Simulation berechnete Spannung ausgibt. + + Wir simulieren, wie die Ladung $Q = C \cdot U$ des Kondensators + im Laufe der Zeit abfließt. + Dazu berechnen wir in jedem Zeitschritt zunächst den Strom $I = U / R$, + der aus dem Kondensator fließt. + Dieser Strom bewirkt, daß innerhalb des Zeitintervalls $dt$ + die Ladung $dQ = I \cdot dt$ aus dem Kondensator abfließt. + Am Ende des Zeitintervalls berechnen wir die zur neuen Ladung $Q$ + gehörende neue Spannung $U = Q / C$. + + Für eine einfache Ausgabe der Tabelle + verwenden wir die Formatspezifikationen \lstinline{%10.3lf} für drei + bzw.\ \lstinline{%15.8lf} für acht Nachkommastellen Genauigkeit. + Damit schreiben wir jeweils eine \emph{lange Fließkommazahl\/} (\lstinline{%lf}) + rechtsbündig in ein Feld der Breite 10 bzw.\ 15 + und lassen uns 3 bzw.\ 8 Nachkommastellen ausgeben. + + Wir compilieren das Programm mit: + \lstinline[style=cmd]{gcc -Wall -O loesung-1a.c -o loesung-1a} + + \item + \textbf{Schreiben Sie ein C-Programm, das ermittelt, + wie lange es dauert, bis die Spannung unter \boldmath $0.1\,{\rm V}$ gefallen ist.} + + Wir ändern das Programm \gitfile{hp}{2023ws/20231123}{loesung-1a.c} so ab, + daß zum einen die Schleife abbricht, sobald die Spannung + den Wert $0.1\,{\rm V}$ unterschreitet (\gitfile{hp}{2023ws/20231123}{loesung-1b.c}), + und daß zum anderen nicht jedesmal eine Zeile für die Tabelle ausgegeben wird, + sondern erst am Ende die Zeit (und die Spannung). + + Der Ausgabe entnehmen wir, daß die Spannung bei etwa $t = 12.90\,{\rm s}$ + den Wert $0.1\,{\rm V}$ unterschreitet. + + \item + \textbf{Vergleichen Sie die berechneten Werte + mit der exakten theoretischen Entladekurve:\\[0.5\smallskipamount] + \boldmath + \begin{math} + U(t) = U_0 \cdot e^{-\frac{t}{RC}} + \end{math}} + + Wir ändern das Programm \gitfile{hp}{2023ws/20231123}{loesung-1a.c} so ab, + daß es zusätzlich zur Zeit und zur simulierten Spannung + die exakte Spannung $U_0 \cdot e^{-\frac{t}{RC}}$ + gemäß der theoretischen Entladekurve ausgibt (\gitfile{hp}{2023ws/20231123}{loesung-1c.c}), + + Da dieses Programm die Exponentialfunktion verwendet, müssen wir nun + beim Compilieren zusätzlich \lstinline[style=cmd]{-lm}\hspace{1pt} + für das Einbinden der Mathematik-Bibliothek angeben. + + Der erweiterten Tabelle können wir entnehmen, + daß die durch die Simulation berechnete Spannung + mit der Spannung $U_0 \cdot e^{-\frac{t}{RC}}$ + gemäß der theoretischen Entladekurve + bis auf wenige Prozent übereinstimmt. + Dies ist für viele praktische Anwendungen ausreichend, + wenn auch nicht für Präzisionsmessungen. + + Wenn Sie die Ausgabe des Programms, z.\,B.\ mit + \lstinline[style=cmd]{./loesung-1c > loesung-1c.dat}, + in einer Datei \gitfile{hp}{2023ws/20231123}{loesung-1c.dat} speichern, + können Sie sich die beiden Kurven graphisch darstellen lassen, + z.\,B.\ mit \file{gnuplot} und dem folgenden Befehl: + \begin{lstlisting}[style=cmd,gobble=8] + plot "loesung-1c.dat" using 1:2 with lines title "Simulation", + "loesung-1c.dat" using 1:3 with lines title "Theorie" + \end{lstlisting} + \vspace*{-\bigskipamount} + \begin{center} + \input{loesung-1c.tikz} + \end{center} + Der Unterschied zwischen der simulierten und der theoretischen Entladungskurve + ist mit bloßem Auge nicht sichtbar. + \end{itemize} + + \exercise{Personen-Datenbank} + + Wir betrachten das folgende Programm (\gitfile{hp}{2023ws/20231123}{aufgabe-2.c}): + \begin{lstlisting} + #include <stdio.h> + #include <string.h> + + typedef struct + { + char first_name[10]; + char family_name[20]; + char day, month; + int year; + } person; + + int main (void) + { + person sls; + sls.day = 26; + sls.month = 7; + sls.year = 1951; + strcpy (sls.first_name, "Sabine"); + strcpy (sls.family_name, "Leutheusser-Schnarrenberger"); + printf ("%s %s wurde am %d.%d.%d geboren.\n", + sls.first_name, sls.family_name, sls.day, sls.month, sls.year); + return 0; + } + \end{lstlisting} + + Die Standard-Funktion \lstinline{strcpy()} bewirkt ein Kopieren eines Strings + von rechts nach links, hier also z.\,B.\ die Zuweisung der String-Konstanten + \lstinline{"Sabine"} an die String-Variable \lstinline{sls.first_name[]}. + + Das Programm wird für einen 32-Bit-Rechner compiliert und ausgeführt.\\ + (Die \lstinline[style=cmd]{gcc}-Option \lstinline[style=cmd]{-m32} sorgt dafür, + daß \lstinline[style=cmd]{gcc} Code für einen 32-Bit-Prozessor erzeugt.) + + \begin{lstlisting}[style=terminal] + $ ¡gcc -Wall -O -m32 aufgabe-2.c -o aufgabe-2¿ + $ ¡./aufgabe-2¿ + Sabine Leutheusser-Schnarrenberger wurde am 110.98.1701278309 geboren. + Speicherzugriffsfehler + \end{lstlisting} + + \begin{enumerate}[\quad(a)] + \item + Erklären Sie die Ausgabe des Programms einschließlich der Zahlenwerte. + \points{4} + \item + Welche Endianness hat der verwendete Rechner? + Begründen Sie Ihre Antwort. + \points{1} + \item + Wie sähe die Ausgabe auf einem Rechner mit entgegengesetzter Endianness aus? + \points{2} + \item + Erklären Sie den Speicherzugriffsfehler. + (Es kann sein, daß sich der Fehler auf Ihrem Rechner nicht bemerkbar macht. + Er ist aber trotzdem vorhanden.) + \points{2} + \end{enumerate} + + \goodbreak + + \solution + + \begin{enumerate}[\quad(a)] + \item + \textbf{Erklären Sie die Ausgabe des Programms einschließlich der Zahlenwerte.} + + Der String \lstinline{"Leutheusser-Schnarrenberger"} + hat 27 Zeichen und daher mehr als die in der Variablen + \lstinline{sls.family_name} vorgesehenen 20 Zeichen. + Das \lstinline{"nberger"} paßt nicht mehr in die String-Variable. + + Die Zuweisung \lstinline{strcpy (sls.family_name, "Leutheusser-Schnarrenberger")} + überschreibt daher 8 Speicherzellen außerhalb der String-Variablen + \lstinline{sls.family_name} mit dem String \lstinline{"nberger"} + (7 Buchstaben zzgl.\ String-Ende-Symbol) -- und damit insbesondere die Variablen + \lstinline{sls.day}, \lstinline{sls.month} und \lstinline{sls.year}. + + Die überschriebenen Speicherzellen sehen demnach folgendermaßen aus: + \begin{center} + \begin{picture}(8,1.5)(0,-0.5) + \put(0,0){\line(1,0){8}} + \put(0,1){\line(1,0){8}} + \multiput(0,0)(1,0){9}{\line(0,1){1}} + \put(0.4,0.38){\lstinline{n}} + \put(1.4,0.38){\lstinline{b}} + \put(2.4,0.38){\lstinline{e}} + \put(3.4,0.38){\lstinline{r}} + \put(4.4,0.38){\lstinline{g}} + \put(5.4,0.38){\lstinline{e}} + \put(6.4,0.38){\lstinline{r}} + \put(7.5,0.5){\makebox(0,0){\lstinline{0x00}}} + \put(0.5,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{0.95cm}{0pt}}_{\mbox{\lstinline{day}}}$}} + \put(1.5,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{0.95cm}{0pt}}_{\mbox{\lstinline{month}}}$}} + \put(4.0,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{3.95cm}{0pt}}_{\mbox{\lstinline{year}}}$}} + \put(7.0,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{1.95cm}{0pt}}_{\mbox{?}}$}} + \end{picture} + \end{center} + ("`?"' steht für zwei Speicherzellen, von denen wir nicht wissen, + wofür sie genutzt werden.) + + Wenn wir die ASCII-Zeichen in Hexadezimalzahlen umrechnen, entspricht dies: + \begin{center} + \begin{picture}(7,1.5)(0,-0.5) + \put(0,0){\line(1,0){8}} + \put(0,1){\line(1,0){8}} + \multiput(0,0)(1,0){9}{\line(0,1){1}} + \put(0.5,0.5){\makebox(0,0){\lstinline{0x6e}}} + \put(1.5,0.5){\makebox(0,0){\lstinline{0x62}}} + \put(2.5,0.5){\makebox(0,0){\lstinline{0x65}}} + \put(3.5,0.5){\makebox(0,0){\lstinline{0x72}}} + \put(4.5,0.5){\makebox(0,0){\lstinline{0x67}}} + \put(5.5,0.5){\makebox(0,0){\lstinline{0x65}}} + \put(6.5,0.5){\makebox(0,0){\lstinline{0x72}}} + \put(7.5,0.5){\makebox(0,0){\lstinline{0x00}}} + \put(0.5,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{0.95cm}{0pt}}_{\mbox{\lstinline{day}}}$}} + \put(1.5,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{0.95cm}{0pt}}_{\mbox{\lstinline{month}}}$}} + \put(4.0,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{3.95cm}{0pt}}_{\mbox{\lstinline{year}}}$}} + \put(7.0,-0.1){\makebox(0,0)[t]{$\underbrace{\rule{1.95cm}{0pt}}_{\mbox{?}}$}} + \end{picture} + \end{center} + Dies entspricht bereits genau den Werten \lstinline{110} und \lstinline{98} + für die Variablen \lstinline{sls.day} bzw.\ \lstinline{sls.month}. + + Für die Variable \lstinline{sls.year} müssen wir ihre vier Speicherzellen + unter der Berücksichtigung der Endianness des Rechners zusammenziehen. + Für Big-Endian ergibt dies \lstinline{0x65726765 == 1701996389}. + Für Little-Endian ergibt sich der Wert \lstinline{0x65677265 == 1701278309}, + der auch in der Ausgabe des Programms auftaucht. + + \item + \textbf{Welche Endianness hat der verwendete Rechner? + Begründen Sie Ihre Antwort.} + + Wie in (a) begründet, ergibt sich die Ausgabe von + \lstinline[style=terminal]{1701278309} für das Jahr + aus dem Speicherformat Little-Endian. + + \item + \textbf{Wie sähe die Ausgabe auf einem Rechner mit entgegengesetzter Endianness aus?} + + Wie in (a) begründet, ergäbe sich aus dem Speicherformat Big-Endian + die Ausgabe von \lstinline[style=terminal]{1701996389} für das Jahr. + + \item + \textbf{Erklären Sie den Speicherzugriffsfehler. + (Es kann sein, daß sich der Fehler auf Ihrem Rechner nicht bemerkbar macht. + Er ist aber trotzdem vorhanden.)} + + Die zwei in (a) mit "`?"' bezeichneten Speicherzellen + wurden ebenfalls überschrieben. + Dies ist in der Ausgabe zunächst nicht sichtbar, + bewirkt aber später den Speicherzugriffsfehler. + + (Tatsächlich handelt es sich bei den überschriebenen Speicherzellen + um einen Teil der Rücksprungadresse, die \lstinline{main()} verwendet, + um mit \lstinline{return 0} an das Betriebssystem zurückzugeben.) + + \end{enumerate} + + \textbf{Hinweis 1:} + Um auf einen solchen Lösungsweg zu kommen, wird empfohlen, + "`geheimnisvolle"' Zahlen nach hexadezimal umzurechnen + und in Speicherzellen (Zweiergruppen von Hex-Ziffern) zu zerlegen. + Oft erkennt man dann direkt ASCII-Zeichen: + Großbuchstaben beginnen mit der Hex-Ziffer \lstinline{4} oder \lstinline{5}, + Kleinbuchstaben mit \lstinline{6} oder \lstinline{7}. + + \textbf{Hinweis 2:} + Um derartige Programmierfehler in der Praxis von vorneherein zu vermeiden, + wird empfohlen, anstelle von \lstinline{strcpy()} + grundsätzlich die Funktion \lstinline{strncpy()} zu verwenden. + Diese erwartet einen zusätzlichen Parameter, + der die maximal zulässige Länge des Strings enthält. + Ohne einen derartigen expliziten Parameter kann die Funktion nicht wissen, + wie lang die Variable ist, in der der String gespeichert werden soll. + + \exercise{Hexdumps} + + Das folgende Programm (\gitfile{hp}{2023ws/20231123}{aufgabe-4.c}) liest + einen String ein und gibt die ASCII-Werte der Buchstaben hexadezimal aus. + (Anders als z.\,B.\ \lstinline{scanf()} + akzeptiert die Funktion \lstinline{fgets()} zum Lesen von Strings auch Leerzeichen, + und sie vermeidet Pufferüberläufe.) + \begin{lstlisting}[style=numbered] + #include <stdio.h> + + int main (void) + { + char buffer[100]; + fgets (buffer, 100, stdin); + for (char *p = buffer; *p; p++) + printf ("%02x", *p); + printf ("\n"); + } + \end{lstlisting} + Beispiel: Bei der Eingabe von \lstinline[style=cmd]{Dies ist ein Test.} + erscheint die Ausgabe\\ + \lstinline[style=terminal]{44696573206973742065696e20546573742e0a}. + + Schreiben Sie ein Programm, das diese Umwandlung in umgekehrter Richtung vornimmt, + also z.\,B.\ bei Eingabe von \lstinline[style=cmd]{44696573206973742065696e20546573742e0a} + wieder \lstinline[style=terminal]{Dies ist ein Test.} ausgibt. + + \points{6} + + Hinweis für die Klausur: + Abgabe in digitaler Form ist erwünscht, aber nicht zwingend. + + \solution + + Siehe \gitfile{hp}{2023ws/20231123}{loesung-3.c}. + + Das Programm macht mehrfach davon Gebrauch, + daß in C Zeichen und Zahlen äquivalent sind. + Wenn z.\,B.\ die \lstinline{char}-Variable \lstinline{c} + den Wert \lstinline{'3'} (Ziffer 3) enthält, + dann hat der Ausdruck \lstinline{c - '0'} den Wert \lstinline{3} (Zahlenwert 3). + Hierfür ist es insbesondere nicht nötig, vorauszusetzen, + daß wir den ASCII-Zeichensatz verwenden und \lstinline{'0'} + den Wert \lstinline{48} hat. + + Bei Eingabe von \lstinline[style=cmd]{44696573206973742065696e20546573742e0a} + gibt das Programm zusätzlich eine Leerzeile aus. + Die liegt daran, daß das \lstinline[style=cmd]{0a} am Ende + bereits eine Zeilenschaltung enthält und das Programm mit + \lstinline{printf ("\n")} eine zusätzliche Zeilenschaltung ausgibt. + +\end{document} diff --git a/20231123/hp-uebung-20231123.pdf b/20231123/hp-uebung-20231123.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6beb192a0a95fd8864f56b5dac454eb0f06a3e18 Binary files /dev/null and b/20231123/hp-uebung-20231123.pdf differ diff --git a/20231123/hp-uebung-20231123.tex b/20231123/hp-uebung-20231123.tex new file mode 100644 index 0000000000000000000000000000000000000000..5ec4c23a85d0cc054e38ed08b2d28df9af5104cc --- /dev/null +++ b/20231123/hp-uebung-20231123.tex @@ -0,0 +1,188 @@ +% hp-uebung-20231123.pdf - Exercises on Low-Level Programming / Applied Computer Sciences +% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +% README: Kondensator, Personen-Datenbank, Hexdumps + +\documentclass[a4paper]{article} + +\usepackage{pgscript} +\usepackage{gensymb} + +\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} +\newcommand{\ITWOC}{I\raisebox{0.5ex}{\normalsize 2}C} + +\begin{document} + + \thispagestyle{empty} + + \section*{Hardwarenahe Programmierung\\ + Übungsaufgaben -- 23.\ November 2023} + + Diese Übung enthält Punkteangaben wie in einer Klausur. + Um zu "`bestehen"', müssen Sie innerhalb von 80 Minuten + unter Verwendung ausschließlich zugelassener Hilfsmittel + 14 Punkte (von insgesamt \totalpoints) erreichen. + + \exercise{Kondensator} + + Ein Kondensator der Kapazität $C = 100\,\mu{\rm F}$ + ist auf die Spannung $U_0 = 5\,{\rm V}$ aufgeladen + und wird über einen Widerstand $R = 33\,{\rm k}\Omega$ entladen. + + \begin{enumerate}[(a)] + \item + Schreiben Sie ein C-Programm, das + den zeitlichen Spannungsverlauf in einer Tabelle darstellt. + \points{5} + \item + Schreiben Sie ein C-Programm, das ermittelt, + wie lange es dauert, bis die Spannung unter $0.1\,{\rm V}$ gefallen ist. + \points{4} + \item + Vergleichen Sie die berechneten Werte mit der exakten theoretischen Entladekurve: + \begin{math} + U(t) = U_0 \cdot e^{-\frac{t}{RC}} + \end{math}\\ + \points{3} + \end{enumerate} + + Hinweise: + \begin{itemize} + \item + Für die Simulation zerlegen wir den Entladevorgang in kurze Zeitintervalle $dt$. + Innerhalb jedes Zeitintervalls betrachten wir den Strom $I$ als konstant + und berechnen, wieviel Ladung $Q$ innerhalb des Zeitintervalls + aus dem Kondensator herausfließt. + Aus der neuen Ladung berechnen wir die Spannung am Ende des Zeitintervalls. + \item + Für den Vergleich mit der exakten theoretischen Entladekurve + benötigen Sie die Exponentialfunktion \lstinline{exp()}. + Diese finden Sie in der Mathematik-Bibliothek: + \lstinline{#include <math.h>} im Quelltext, + beim \lstinline[style=cmd]{gcc}-Aufruf \lstinline[style=cmd]{-lm} mit angeben. + \item + $Q = C \cdot U$,\quad $U = R \cdot I$,\quad $I = \frac{dQ}{dt}$ + \end{itemize} + + \exercise{Personen-Datenbank} + + Wir betrachten das folgende Programm (\gitfile{hp}{2023ws/20231123}{aufgabe-2.c}): + \begin{lstlisting} + #include <stdio.h> + #include <string.h> + + typedef struct + { + char first_name[10]; + char family_name[20]; + char day, month; + int year; + } person; + + int main (void) + { + person sls; + sls.day = 26; + sls.month = 7; + sls.year = 1951; + strcpy (sls.first_name, "Sabine"); + strcpy (sls.family_name, "Leutheusser-Schnarrenberger"); + printf ("%s %s wurde am %d.%d.%d geboren.\n", + sls.first_name, sls.family_name, sls.day, sls.month, sls.year); + return 0; + } + \end{lstlisting} + + Die Standard-Funktion \lstinline{strcpy()} bewirkt ein Kopieren eines Strings + von rechts nach links, hier also z.\,B.\ die Zuweisung der String-Konstanten + \lstinline{"Sabine"} an die String-Variable \lstinline{sls.first_name[]}. + + Das Programm wird für einen 32-Bit-Rechner compiliert und ausgeführt.\\ + (Die \lstinline[style=cmd]{gcc}-Option \lstinline[style=cmd]{-m32} sorgt dafür, + daß \lstinline[style=cmd]{gcc} Code für einen 32-Bit-Prozessor erzeugt.) + + \begin{lstlisting}[style=terminal] + $ ¡gcc -Wall -O -m32 aufgabe-2.c -o aufgabe-2¿ + $ ¡./aufgabe-2¿ + Sabine Leutheusser-Schnarrenberger wurde am 110.98.1701278309 geboren. + Speicherzugriffsfehler + \end{lstlisting} + + \begin{enumerate}[\quad(a)] + \item + Erklären Sie die Ausgabe des Programms einschließlich der Zahlenwerte. + \points{4} + \item + Welche Endianness hat der verwendete Rechner? + Begründen Sie Ihre Antwort. + \points{1} + \item + Wie sähe die Ausgabe auf einem Rechner mit entgegengesetzter Endianness aus? + \points{2} + \item + Erklären Sie den Speicherzugriffsfehler. + (Es kann sein, daß sich der Fehler auf Ihrem Rechner nicht bemerkbar macht. + Er ist aber trotzdem vorhanden.) + \points{2} + \end{enumerate} + + \exercise{Hexdumps} + + Das folgende Programm (\gitfile{hp}{2023ws/20231123}{aufgabe-4.c}) liest + einen String ein und gibt die ASCII-Werte der Buchstaben hexadezimal aus. + (Anders als z.\,B.\ \lstinline{scanf()} + akzeptiert die Funktion \lstinline{fgets()} zum Lesen von Strings auch Leerzeichen, + und sie vermeidet Pufferüberläufe.) + \begin{lstlisting}[style=numbered] + #include <stdio.h> + + int main (void) + { + char buffer[100]; + fgets (buffer, 100, stdin); + for (char *p = buffer; *p; p++) + printf ("%02x", *p); + printf ("\n"); + } + \end{lstlisting} + Beispiel: Bei der Eingabe von \lstinline[style=cmd]{Dies ist ein Test.} + erscheint die Ausgabe\\ + \lstinline[style=terminal]{44696573206973742065696e20546573742e0a}. + + Schreiben Sie ein Programm, das diese Umwandlung in umgekehrter Richtung vornimmt, + also z.\,B.\ bei Eingabe von \lstinline[style=cmd]{44696573206973742065696e20546573742e0a} + wieder \lstinline[style=terminal]{Dies ist ein Test.} ausgibt. + + \points{6} + + Hinweis für die Klausur: + Abgabe in digitaler Form ist erwünscht, aber nicht zwingend. + + \begin{flushright} + \textit{Viel Erfolg!} + \end{flushright} + + \makeatletter + \immediate\write\@mainaux{\string\gdef\string\totalpoints{\arabic{points}}} + \makeatother + +\end{document} diff --git a/20231123/loesung-1a.c b/20231123/loesung-1a.c new file mode 100644 index 0000000000000000000000000000000000000000..f355706a6ff6f95bd72897123a985fb2b7ead7c3 --- /dev/null +++ b/20231123/loesung-1a.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <math.h> + +int main (void) +{ + double C = 0.0001; + double U0 = 5.0; + double U = U0; + double R = 33000.0; + double t = 0.0; + double dt = 0.01; + double Q = C * U; + while (U > 0.09) + { + printf ("%10.3lf%15.8lf\n", t, U); + double I = U / R; + Q -= I * dt; + U = Q / C; + t += dt; + } + return 0; +} diff --git a/20231123/loesung-1b.c b/20231123/loesung-1b.c new file mode 100644 index 0000000000000000000000000000000000000000..f5fc22022ef10a1b986bbd11fba8298a7547792d --- /dev/null +++ b/20231123/loesung-1b.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <math.h> + +int main (void) +{ + double C = 0.0001; + double U0 = 5.0; + double U = U0; + double R = 33000.0; + double t = 0.0; + double dt = 0.01; + double Q = C * U; + while (U >= 0.1) + { + double I = U / R; + Q -= I * dt; + U = Q / C; + t += dt; + } + printf ("%10.3lf%15.8lf\n", t, U); + return 0; +} diff --git a/20231123/loesung-1c.c b/20231123/loesung-1c.c new file mode 100644 index 0000000000000000000000000000000000000000..71802e036dd56534470028b61f646d297d1d8840 --- /dev/null +++ b/20231123/loesung-1c.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <math.h> + +int main (void) +{ + double C = 0.0001; + double U0 = 5.0; + double U = U0; + double R = 33000.0; + double t = 0.0; + double dt = 0.01; + double Q = C * U; + while (U > 0.09) + { + printf ("%10.3lf%15.8lf%15.8lf\n", t, U, U0 * exp (-t / (R * C))); + double I = U / R; + Q -= I * dt; + U = Q / C; + t += dt; + } + return 0; +} diff --git a/20231123/loesung-1c.dat b/20231123/loesung-1c.dat new file mode 100644 index 0000000000000000000000000000000000000000..4df706295bde25a74e025c5335f43617d93129a8 --- /dev/null +++ b/20231123/loesung-1c.dat @@ -0,0 +1,1324 @@ + 0.000 5.00000000 5.00000000 + 0.010 4.98484848 4.98487142 + 0.020 4.96974288 4.96978861 + 0.030 4.95468306 4.95475144 + 0.040 4.93966887 4.93975977 + 0.050 4.92470017 4.92481346 + 0.060 4.90977684 4.90991237 + 0.070 4.89489873 4.89505637 + 0.080 4.88006570 4.88024532 + 0.090 4.86527762 4.86547908 + 0.100 4.85053436 4.85075752 + 0.110 4.83583577 4.83608050 + 0.120 4.82118172 4.82144789 + 0.130 4.80657208 4.80685956 + 0.140 4.79200671 4.79231537 + 0.150 4.77748548 4.77781518 + 0.160 4.76300825 4.76335887 + 0.170 4.74857489 4.74894630 + 0.180 4.73418527 4.73457733 + 0.190 4.71983925 4.72025184 + 0.200 4.70553671 4.70596970 + 0.210 4.69127751 4.69173077 + 0.220 4.67706151 4.67753493 + 0.230 4.66288860 4.66338203 + 0.240 4.64875864 4.64927196 + 0.250 4.63467149 4.63520458 + 0.260 4.62062703 4.62117977 + 0.270 4.60662513 4.60719739 + 0.280 4.59266566 4.59325732 + 0.290 4.57874849 4.57935942 + 0.300 4.56487349 4.56550358 + 0.310 4.55104054 4.55168966 + 0.320 4.53724951 4.53791754 + 0.330 4.52350027 4.52418709 + 0.340 4.50979269 4.51049818 + 0.350 4.49612666 4.49685070 + 0.360 4.48250203 4.48324450 + 0.370 4.46891869 4.46967948 + 0.380 4.45537651 4.45615549 + 0.390 4.44187537 4.44267243 + 0.400 4.42841514 4.42923016 + 0.410 4.41499570 4.41582857 + 0.420 4.40161693 4.40246753 + 0.430 4.38827870 4.38914691 + 0.440 4.37498088 4.37586660 + 0.450 4.36172336 4.36262646 + 0.460 4.34850602 4.34942639 + 0.470 4.33532873 4.33626626 + 0.480 4.32219137 4.32314595 + 0.490 4.30909382 4.31006534 + 0.500 4.29603596 4.29702430 + 0.510 4.28301767 4.28402273 + 0.520 4.27003883 4.27106049 + 0.530 4.25709932 4.25813747 + 0.540 4.24419901 4.24525356 + 0.550 4.23133781 4.23240862 + 0.560 4.21851557 4.21960256 + 0.570 4.20573219 4.20683524 + 0.580 4.19298755 4.19410655 + 0.590 4.18028152 4.18141637 + 0.600 4.16761400 4.16876459 + 0.610 4.15498487 4.15615109 + 0.620 4.14239401 4.14357576 + 0.630 4.12984130 4.13103847 + 0.640 4.11732663 4.11853912 + 0.650 4.10484988 4.10607759 + 0.660 4.09241094 4.09365377 + 0.670 4.08000970 4.08126753 + 0.680 4.06764603 4.06891877 + 0.690 4.05531983 4.05660738 + 0.700 4.04303098 4.04433324 + 0.710 4.03077937 4.03209623 + 0.720 4.01856489 4.01989625 + 0.730 4.00638742 4.00773319 + 0.740 3.99424685 3.99560692 + 0.750 3.98214307 3.98351735 + 0.760 3.97007597 3.97146436 + 0.770 3.95804544 3.95944783 + 0.780 3.94605136 3.94746767 + 0.790 3.93409363 3.93552375 + 0.800 3.92217214 3.92361597 + 0.810 3.91028677 3.91174422 + 0.820 3.89843741 3.89990839 + 0.830 3.88662397 3.88810838 + 0.840 3.87484632 3.87634406 + 0.850 3.86310436 3.86461535 + 0.860 3.85139798 3.85292212 + 0.870 3.83972708 3.84126427 + 0.880 3.82809154 3.82964169 + 0.890 3.81649127 3.81805428 + 0.900 3.80492614 3.80650193 + 0.910 3.79339606 3.79498454 + 0.920 3.78190092 3.78350199 + 0.930 3.77044062 3.77205419 + 0.940 3.75901504 3.76064102 + 0.950 3.74762408 3.74926239 + 0.960 3.73626765 3.73791819 + 0.970 3.72494562 3.72660831 + 0.980 3.71365791 3.71533265 + 0.990 3.70240440 3.70409110 + 1.000 3.69118499 3.69288357 + 1.010 3.67999958 3.68170996 + 1.020 3.66884807 3.67057015 + 1.030 3.65773035 3.65946404 + 1.040 3.64664632 3.64839154 + 1.050 3.63559587 3.63735255 + 1.060 3.62457892 3.62634695 + 1.070 3.61359534 3.61537465 + 1.080 3.60264506 3.60443555 + 1.090 3.59172795 3.59352955 + 1.100 3.58084393 3.58265655 + 1.110 3.56999288 3.57181645 + 1.120 3.55917472 3.56100915 + 1.130 3.54838934 3.55023454 + 1.140 3.53763665 3.53949254 + 1.150 3.52691654 3.52878304 + 1.160 3.51622891 3.51810594 + 1.170 3.50557367 3.50746115 + 1.180 3.49495072 3.49684857 + 1.190 3.48435996 3.48626810 + 1.200 3.47380130 3.47571964 + 1.210 3.46327463 3.46520310 + 1.220 3.45277985 3.45471838 + 1.230 3.44231689 3.44426538 + 1.240 3.43188562 3.43384401 + 1.250 3.42148597 3.42345417 + 1.260 3.41111783 3.41309577 + 1.270 3.40078111 3.40276871 + 1.280 3.39047571 3.39247290 + 1.290 3.38020154 3.38220824 + 1.300 3.36995851 3.37197464 + 1.310 3.35974651 3.36177200 + 1.320 3.34956546 3.35160023 + 1.330 3.33941526 3.34145924 + 1.340 3.32929582 3.33134893 + 1.350 3.31920705 3.32126921 + 1.360 3.30914885 3.31122000 + 1.370 3.29912112 3.30120118 + 1.380 3.28912378 3.29121269 + 1.390 3.27915674 3.28125441 + 1.400 3.26921990 3.27132626 + 1.410 3.25931318 3.26142816 + 1.420 3.24943647 3.25156000 + 1.430 3.23958969 3.24172171 + 1.440 3.22977276 3.23191317 + 1.450 3.21998557 3.22213432 + 1.460 3.21022803 3.21238506 + 1.470 3.20050007 3.20266529 + 1.480 3.19080158 3.19297494 + 1.490 3.18113249 3.18331390 + 1.500 3.17149269 3.17368209 + 1.510 3.16188211 3.16407943 + 1.520 3.15230065 3.15450583 + 1.530 3.14274822 3.14496119 + 1.540 3.13322474 3.13544543 + 1.550 3.12373012 3.12595846 + 1.560 3.11426427 3.11650019 + 1.570 3.10482711 3.10707055 + 1.580 3.09541854 3.09766944 + 1.590 3.08603849 3.08829677 + 1.600 3.07668685 3.07895246 + 1.610 3.06736356 3.06963642 + 1.620 3.05806852 3.06034857 + 1.630 3.04880164 3.05108882 + 1.640 3.03956285 3.04185710 + 1.650 3.03035206 3.03265330 + 1.660 3.02116917 3.02347735 + 1.670 3.01201411 3.01432917 + 1.680 3.00288680 3.00520866 + 1.690 2.99378714 2.99611575 + 1.700 2.98471506 2.98705036 + 1.710 2.97567047 2.97801239 + 1.720 2.96665328 2.96900177 + 1.730 2.95766343 2.96001841 + 1.740 2.94870081 2.95106223 + 1.750 2.93976535 2.94213316 + 1.760 2.93085697 2.93323110 + 1.770 2.92197559 2.92435597 + 1.780 2.91312112 2.91550770 + 1.790 2.90429348 2.90668620 + 1.800 2.89549259 2.89789139 + 1.810 2.88671837 2.88912320 + 1.820 2.87797074 2.88038153 + 1.830 2.86924961 2.87166631 + 1.840 2.86055492 2.86297746 + 1.850 2.85188657 2.85431491 + 1.860 2.84324449 2.84567856 + 1.870 2.83462859 2.83706834 + 1.880 2.82603881 2.82848418 + 1.890 2.81747506 2.81992599 + 1.900 2.80893725 2.81139369 + 1.910 2.80042532 2.80288721 + 1.920 2.79193919 2.79440647 + 1.930 2.78347876 2.78595139 + 1.940 2.77504398 2.77752189 + 1.950 2.76663476 2.76911790 + 1.960 2.75825101 2.76073933 + 1.970 2.74989268 2.75238612 + 1.980 2.74155967 2.74405818 + 1.990 2.73325191 2.73575544 + 2.000 2.72496933 2.72747782 + 2.010 2.71671185 2.71922525 + 2.020 2.70847939 2.71099764 + 2.030 2.70027187 2.70279493 + 2.040 2.69208923 2.69461704 + 2.050 2.68393139 2.68646389 + 2.060 2.67579826 2.67833542 + 2.070 2.66768978 2.67023153 + 2.080 2.65960587 2.66215217 + 2.090 2.65154646 2.65409725 + 2.100 2.64351147 2.64606671 + 2.110 2.63550083 2.63806046 + 2.120 2.62751447 2.63007844 + 2.130 2.61955230 2.62212057 + 2.140 2.61161426 2.61418677 + 2.150 2.60370028 2.60627699 + 2.160 2.59581028 2.59839113 + 2.170 2.58794419 2.59052914 + 2.180 2.58010193 2.58269093 + 2.190 2.57228344 2.57487644 + 2.200 2.56448864 2.56708560 + 2.210 2.55671747 2.55931832 + 2.220 2.54896984 2.55157455 + 2.230 2.54124569 2.54385421 + 2.240 2.53354494 2.53615723 + 2.250 2.52586753 2.52848354 + 2.260 2.51821339 2.52083306 + 2.270 2.51058244 2.51320574 + 2.280 2.50297461 2.50560149 + 2.290 2.49538984 2.49802025 + 2.300 2.48782805 2.49046195 + 2.310 2.48028918 2.48292652 + 2.320 2.47277315 2.47541389 + 2.330 2.46527990 2.46792399 + 2.340 2.45780936 2.46045675 + 2.350 2.45036145 2.45301211 + 2.360 2.44293611 2.44558999 + 2.370 2.43553328 2.43819033 + 2.380 2.42815287 2.43081305 + 2.390 2.42079483 2.42345810 + 2.400 2.41345909 2.41612541 + 2.410 2.40614558 2.40881490 + 2.420 2.39885423 2.40152651 + 2.430 2.39158497 2.39426017 + 2.440 2.38433775 2.38701582 + 2.450 2.37711248 2.37979338 + 2.460 2.36990911 2.37259280 + 2.470 2.36272757 2.36541401 + 2.480 2.35556778 2.35825694 + 2.490 2.34842970 2.35112152 + 2.500 2.34131325 2.34400770 + 2.510 2.33421836 2.33691539 + 2.520 2.32714497 2.32984455 + 2.530 2.32009302 2.32279510 + 2.540 2.31306243 2.31576698 + 2.550 2.30605315 2.30876013 + 2.560 2.29906511 2.30177448 + 2.570 2.29209825 2.29480996 + 2.580 2.28515249 2.28786652 + 2.590 2.27822779 2.28094408 + 2.600 2.27132407 2.27404259 + 2.610 2.26444127 2.26716198 + 2.620 2.25757933 2.26030219 + 2.630 2.25073818 2.25346316 + 2.640 2.24391776 2.24664482 + 2.650 2.23711801 2.23984711 + 2.660 2.23033886 2.23306997 + 2.670 2.22358026 2.22631333 + 2.680 2.21684214 2.21957714 + 2.690 2.21012443 2.21286133 + 2.700 2.20342709 2.20616584 + 2.710 2.19675003 2.19949061 + 2.720 2.19009322 2.19283557 + 2.730 2.18345657 2.18620067 + 2.740 2.17684003 2.17958585 + 2.750 2.17024355 2.17299104 + 2.760 2.16366705 2.16641619 + 2.770 2.15711049 2.15986123 + 2.780 2.15057379 2.15332610 + 2.790 2.14405690 2.14681075 + 2.800 2.13755976 2.14031511 + 2.810 2.13108230 2.13383912 + 2.820 2.12462448 2.12738273 + 2.830 2.11818622 2.12094587 + 2.840 2.11176748 2.11452849 + 2.850 2.10536818 2.10813053 + 2.860 2.09898828 2.10175192 + 2.870 2.09262771 2.09539262 + 2.880 2.08628641 2.08905255 + 2.890 2.07996433 2.08273167 + 2.900 2.07366141 2.07642992 + 2.910 2.06737759 2.07014723 + 2.920 2.06111280 2.06388355 + 2.930 2.05486701 2.05763883 + 2.940 2.04864014 2.05141299 + 2.950 2.04243214 2.04520600 + 2.960 2.03624295 2.03901779 + 2.970 2.03007252 2.03284830 + 2.980 2.02392078 2.02669748 + 2.990 2.01778769 2.02056526 + 3.000 2.01167318 2.01445161 + 3.010 2.00557720 2.00835645 + 3.020 1.99949969 2.00227973 + 3.030 1.99344060 1.99622140 + 3.040 1.98739988 1.99018140 + 3.050 1.98137745 1.98415968 + 3.060 1.97537328 1.97815617 + 3.070 1.96938730 1.97217083 + 3.080 1.96341946 1.96620360 + 3.090 1.95746970 1.96025443 + 3.100 1.95153798 1.95432326 + 3.110 1.94562422 1.94841003 + 3.120 1.93972839 1.94251469 + 3.130 1.93385043 1.93663719 + 3.140 1.92799028 1.93077748 + 3.150 1.92214788 1.92493549 + 3.160 1.91632319 1.91911119 + 3.170 1.91051615 1.91330450 + 3.180 1.90472671 1.90751538 + 3.190 1.89895481 1.90174378 + 3.200 1.89320040 1.89598965 + 3.210 1.88746343 1.89025292 + 3.220 1.88174384 1.88453355 + 3.230 1.87604159 1.87883149 + 3.240 1.87035661 1.87314668 + 3.250 1.86468887 1.86747906 + 3.260 1.85903829 1.86182860 + 3.270 1.85340484 1.85619524 + 3.280 1.84778847 1.85057892 + 3.290 1.84218911 1.84497959 + 3.300 1.83660672 1.83939721 + 3.310 1.83104124 1.83383171 + 3.320 1.82549263 1.82828306 + 3.330 1.81996084 1.82275119 + 3.340 1.81444580 1.81723606 + 3.350 1.80894748 1.81173762 + 3.360 1.80346582 1.80625582 + 3.370 1.79800078 1.80079060 + 3.380 1.79255229 1.79534192 + 3.390 1.78712031 1.78990972 + 3.400 1.78170480 1.78449397 + 3.410 1.77630569 1.77909459 + 3.420 1.77092295 1.77371156 + 3.430 1.76555651 1.76834481 + 3.440 1.76020634 1.76299430 + 3.450 1.75487238 1.75765998 + 3.460 1.74955459 1.75234180 + 3.470 1.74425291 1.74703971 + 3.480 1.73896729 1.74175366 + 3.490 1.73369769 1.73648361 + 3.500 1.72844406 1.73122950 + 3.510 1.72320636 1.72599129 + 3.520 1.71798452 1.72076893 + 3.530 1.71277850 1.71556238 + 3.540 1.70758827 1.71037157 + 3.550 1.70241376 1.70519647 + 3.560 1.69725493 1.70003703 + 3.570 1.69211173 1.69489320 + 3.580 1.68698412 1.68976494 + 3.590 1.68187205 1.68465219 + 3.600 1.67677546 1.67955491 + 3.610 1.67169433 1.67447305 + 3.620 1.66662859 1.66940657 + 3.630 1.66157820 1.66435542 + 3.640 1.65654311 1.65931955 + 3.650 1.65152328 1.65429892 + 3.660 1.64651867 1.64929348 + 3.670 1.64152922 1.64430319 + 3.680 1.63655489 1.63932799 + 3.690 1.63159563 1.63436785 + 3.700 1.62665140 1.62942272 + 3.710 1.62172215 1.62449255 + 3.720 1.61680784 1.61957729 + 3.730 1.61190842 1.61467691 + 3.740 1.60702385 1.60979136 + 3.750 1.60215408 1.60492059 + 3.760 1.59729907 1.60006455 + 3.770 1.59245877 1.59522321 + 3.780 1.58763314 1.59039652 + 3.790 1.58282213 1.58558443 + 3.800 1.57802570 1.58078690 + 3.810 1.57324380 1.57600389 + 3.820 1.56847640 1.57123535 + 3.830 1.56372344 1.56648123 + 3.840 1.55898488 1.56174151 + 3.850 1.55426069 1.55701612 + 3.860 1.54955081 1.55230503 + 3.870 1.54485520 1.54760820 + 3.880 1.54017382 1.54292557 + 3.890 1.53550662 1.53825712 + 3.900 1.53085357 1.53360279 + 3.910 1.52621462 1.52896254 + 3.920 1.52158973 1.52433633 + 3.930 1.51697885 1.51972412 + 3.940 1.51238195 1.51512587 + 3.950 1.50779897 1.51054153 + 3.960 1.50322988 1.50597106 + 3.970 1.49867464 1.50141442 + 3.980 1.49413320 1.49687156 + 3.990 1.48960553 1.49234246 + 4.000 1.48509157 1.48782705 + 4.010 1.48059129 1.48332531 + 4.020 1.47610465 1.47883719 + 4.030 1.47163161 1.47436264 + 4.040 1.46717212 1.46990164 + 4.050 1.46272614 1.46545414 + 4.060 1.45829364 1.46102009 + 4.070 1.45387457 1.45659946 + 4.080 1.44946889 1.45219220 + 4.090 1.44507656 1.44779828 + 4.100 1.44069754 1.44341765 + 4.110 1.43633179 1.43905028 + 4.120 1.43197927 1.43469612 + 4.130 1.42763994 1.43035514 + 4.140 1.42331375 1.42602729 + 4.150 1.41900068 1.42171253 + 4.160 1.41470068 1.41741084 + 4.170 1.41041371 1.41312215 + 4.180 1.40613973 1.40884645 + 4.190 1.40187870 1.40458368 + 4.200 1.39763058 1.40033380 + 4.210 1.39339534 1.39609679 + 4.220 1.38917293 1.39187260 + 4.230 1.38496331 1.38766119 + 4.240 1.38076645 1.38346252 + 4.250 1.37658231 1.37927655 + 4.260 1.37241085 1.37510325 + 4.270 1.36825203 1.37094258 + 4.280 1.36410581 1.36679450 + 4.290 1.35997216 1.36265897 + 4.300 1.35585103 1.35853595 + 4.310 1.35174239 1.35442540 + 4.320 1.34764620 1.35032729 + 4.330 1.34356242 1.34624159 + 4.340 1.33949102 1.34216824 + 4.350 1.33543196 1.33810722 + 4.360 1.33138520 1.33405849 + 4.370 1.32735070 1.33002201 + 4.380 1.32332842 1.32599774 + 4.390 1.31931833 1.32198564 + 4.400 1.31532040 1.31798569 + 4.410 1.31133458 1.31399784 + 4.420 1.30736084 1.31002206 + 4.430 1.30339914 1.30605830 + 4.440 1.29944945 1.30210654 + 4.450 1.29551172 1.29816673 + 4.460 1.29158593 1.29423885 + 4.470 1.28767203 1.29032285 + 4.480 1.28376999 1.28641870 + 4.490 1.27987978 1.28252636 + 4.500 1.27600136 1.27864580 + 4.510 1.27213469 1.27477698 + 4.520 1.26827973 1.27091987 + 4.530 1.26443646 1.26707442 + 4.540 1.26060484 1.26324062 + 4.550 1.25678482 1.25941841 + 4.560 1.25297638 1.25560777 + 4.570 1.24917948 1.25180865 + 4.580 1.24539409 1.24802103 + 4.590 1.24162017 1.24424488 + 4.600 1.23785769 1.24048015 + 4.610 1.23410660 1.23672680 + 4.620 1.23036688 1.23298482 + 4.630 1.22663850 1.22925416 + 4.640 1.22292141 1.22553478 + 4.650 1.21921559 1.22182666 + 4.660 1.21552100 1.21812976 + 4.670 1.21183760 1.21444405 + 4.680 1.20816537 1.21076948 + 4.690 1.20450426 1.20710604 + 4.700 1.20085425 1.20345368 + 4.710 1.19721529 1.19981237 + 4.720 1.19358737 1.19618208 + 4.730 1.18997044 1.19256277 + 4.740 1.18636447 1.18895441 + 4.750 1.18276942 1.18535697 + 4.760 1.17918527 1.18177042 + 4.770 1.17561198 1.17819472 + 4.780 1.17204952 1.17462984 + 4.790 1.16849786 1.17107574 + 4.800 1.16495696 1.16753240 + 4.810 1.16142678 1.16399977 + 4.820 1.15790731 1.16047784 + 4.830 1.15439850 1.15696656 + 4.840 1.15090032 1.15346591 + 4.850 1.14741274 1.14997585 + 4.860 1.14393574 1.14649635 + 4.870 1.14046926 1.14302738 + 4.880 1.13701330 1.13956890 + 4.890 1.13356780 1.13612089 + 4.900 1.13013275 1.13268331 + 4.910 1.12670810 1.12925613 + 4.920 1.12329384 1.12583932 + 4.930 1.11988992 1.12243285 + 4.940 1.11649631 1.11903669 + 4.950 1.11311299 1.11565080 + 4.960 1.10973992 1.11227516 + 4.970 1.10637707 1.10890973 + 4.980 1.10302441 1.10555448 + 4.990 1.09968191 1.10220939 + 5.000 1.09634954 1.09887442 + 5.010 1.09302727 1.09554953 + 5.020 1.08971507 1.09223471 + 5.030 1.08641290 1.08892992 + 5.040 1.08312074 1.08563513 + 5.050 1.07983856 1.08235030 + 5.060 1.07656632 1.07907542 + 5.070 1.07330400 1.07581044 + 5.080 1.07005156 1.07255534 + 5.090 1.06680898 1.06931010 + 5.100 1.06357623 1.06607467 + 5.110 1.06035327 1.06284903 + 5.120 1.05714008 1.05963315 + 5.130 1.05393662 1.05642700 + 5.140 1.05074287 1.05323055 + 5.150 1.04755880 1.05004377 + 5.160 1.04438438 1.04686664 + 5.170 1.04121958 1.04369912 + 5.180 1.03806437 1.04054118 + 5.190 1.03491872 1.03739280 + 5.200 1.03178261 1.03425394 + 5.210 1.02865599 1.03112458 + 5.220 1.02553885 1.02800469 + 5.230 1.02243116 1.02489424 + 5.240 1.01933288 1.02179320 + 5.250 1.01624399 1.01870155 + 5.260 1.01316447 1.01561924 + 5.270 1.01009427 1.01254627 + 5.280 1.00703338 1.00948259 + 5.290 1.00398176 1.00642818 + 5.300 1.00093939 1.00338302 + 5.310 0.99790625 1.00034706 + 5.320 0.99488229 0.99732030 + 5.330 0.99186749 0.99430269 + 5.340 0.98886183 0.99129421 + 5.350 0.98586528 0.98829484 + 5.360 0.98287781 0.98530454 + 5.370 0.97989939 0.98232328 + 5.380 0.97693000 0.97935105 + 5.390 0.97396961 0.97638781 + 5.400 0.97101818 0.97343354 + 5.410 0.96807571 0.97048821 + 5.420 0.96514214 0.96755179 + 5.430 0.96221747 0.96462425 + 5.440 0.95930166 0.96170557 + 5.450 0.95639468 0.95879572 + 5.460 0.95349652 0.95589468 + 5.470 0.95060714 0.95300241 + 5.480 0.94772651 0.95011890 + 5.490 0.94485461 0.94724411 + 5.500 0.94199141 0.94437801 + 5.510 0.93913689 0.94152059 + 5.520 0.93629102 0.93867182 + 5.530 0.93345378 0.93583167 + 5.540 0.93062513 0.93300010 + 5.550 0.92780505 0.93017711 + 5.560 0.92499352 0.92736266 + 5.570 0.92219051 0.92455672 + 5.580 0.91939600 0.92175928 + 5.590 0.91660995 0.91897029 + 5.600 0.91383234 0.91618975 + 5.610 0.91106315 0.91341762 + 5.620 0.90830236 0.91065388 + 5.630 0.90554992 0.90789850 + 5.640 0.90280583 0.90515145 + 5.650 0.90007006 0.90241272 + 5.660 0.89734257 0.89968228 + 5.670 0.89462335 0.89696009 + 5.680 0.89191237 0.89424615 + 5.690 0.88920961 0.89154041 + 5.700 0.88651503 0.88884286 + 5.710 0.88382863 0.88615348 + 5.720 0.88115036 0.88347223 + 5.730 0.87848020 0.88079909 + 5.740 0.87581814 0.87813404 + 5.750 0.87316415 0.87547706 + 5.760 0.87051820 0.87282811 + 5.770 0.86788026 0.87018718 + 5.780 0.86525032 0.86755424 + 5.790 0.86262835 0.86492927 + 5.800 0.86001433 0.86231224 + 5.810 0.85740822 0.85970313 + 5.820 0.85481002 0.85710191 + 5.830 0.85221968 0.85450856 + 5.840 0.84963720 0.85192306 + 5.850 0.84706254 0.84934539 + 5.860 0.84449568 0.84677551 + 5.870 0.84193661 0.84421341 + 5.880 0.83938528 0.84165906 + 5.890 0.83684169 0.83911243 + 5.900 0.83430581 0.83657352 + 5.910 0.83177761 0.83404228 + 5.920 0.82925707 0.83151871 + 5.930 0.82674417 0.82900277 + 5.940 0.82423888 0.82649444 + 5.950 0.82174119 0.82399370 + 5.960 0.81925107 0.82150053 + 5.970 0.81676849 0.81901490 + 5.980 0.81429343 0.81653680 + 5.990 0.81182588 0.81406619 + 6.000 0.80936580 0.81160306 + 6.010 0.80691317 0.80914738 + 6.020 0.80446798 0.80669912 + 6.030 0.80203020 0.80425828 + 6.040 0.79959981 0.80182482 + 6.050 0.79717678 0.79939873 + 6.060 0.79476109 0.79697998 + 6.070 0.79235272 0.79456854 + 6.080 0.78995165 0.79216440 + 6.090 0.78755786 0.78976754 + 6.100 0.78517132 0.78737793 + 6.110 0.78279201 0.78499554 + 6.120 0.78041992 0.78262037 + 6.130 0.77805501 0.78025238 + 6.140 0.77569727 0.77789156 + 6.150 0.77334667 0.77553788 + 6.160 0.77100319 0.77319132 + 6.170 0.76866682 0.77085187 + 6.180 0.76633753 0.76851949 + 6.190 0.76401529 0.76619416 + 6.200 0.76170009 0.76387588 + 6.210 0.75939191 0.76156461 + 6.220 0.75709072 0.75926033 + 6.230 0.75479651 0.75696302 + 6.240 0.75250925 0.75467267 + 6.250 0.75022892 0.75238924 + 6.260 0.74795550 0.75011272 + 6.270 0.74568896 0.74784310 + 6.280 0.74342930 0.74558034 + 6.290 0.74117648 0.74332442 + 6.300 0.73893049 0.74107533 + 6.310 0.73669131 0.73883305 + 6.320 0.73445891 0.73659755 + 6.330 0.73223328 0.73436881 + 6.340 0.73001439 0.73214682 + 6.350 0.72780223 0.72993155 + 6.360 0.72559677 0.72772299 + 6.370 0.72339799 0.72552110 + 6.380 0.72120587 0.72332588 + 6.390 0.71902040 0.72113730 + 6.400 0.71684155 0.71895535 + 6.410 0.71466930 0.71677999 + 6.420 0.71250364 0.71461122 + 6.430 0.71034454 0.71244901 + 6.440 0.70819198 0.71029334 + 6.450 0.70604594 0.70814419 + 6.460 0.70390641 0.70600155 + 6.470 0.70177336 0.70386539 + 6.480 0.69964677 0.70173569 + 6.490 0.69752663 0.69961244 + 6.500 0.69541291 0.69749561 + 6.510 0.69330560 0.69538519 + 6.520 0.69120468 0.69328115 + 6.530 0.68911012 0.69118348 + 6.540 0.68702190 0.68909215 + 6.550 0.68494002 0.68700715 + 6.560 0.68286444 0.68492847 + 6.570 0.68079516 0.68285607 + 6.580 0.67873214 0.68078994 + 6.590 0.67667538 0.67873006 + 6.600 0.67462485 0.67667642 + 6.610 0.67258053 0.67462899 + 6.620 0.67054241 0.67258775 + 6.630 0.66851046 0.67055269 + 6.640 0.66648467 0.66852379 + 6.650 0.66446502 0.66650102 + 6.660 0.66245149 0.66448438 + 6.670 0.66044406 0.66247384 + 6.680 0.65844271 0.66046938 + 6.690 0.65644743 0.65847099 + 6.700 0.65445820 0.65647864 + 6.710 0.65247499 0.65449232 + 6.720 0.65049780 0.65251202 + 6.730 0.64852659 0.65053770 + 6.740 0.64656136 0.64856936 + 6.750 0.64460208 0.64660697 + 6.760 0.64264874 0.64465052 + 6.770 0.64070132 0.64269999 + 6.780 0.63875980 0.64075536 + 6.790 0.63682417 0.63881662 + 6.800 0.63489440 0.63688374 + 6.810 0.63297047 0.63495671 + 6.820 0.63105238 0.63303551 + 6.830 0.62914010 0.63112013 + 6.840 0.62723362 0.62921054 + 6.850 0.62533291 0.62730673 + 6.860 0.62343796 0.62540867 + 6.870 0.62154875 0.62351636 + 6.880 0.61966527 0.62162978 + 6.890 0.61778750 0.61974890 + 6.900 0.61591542 0.61787372 + 6.910 0.61404901 0.61600421 + 6.920 0.61218825 0.61414036 + 6.930 0.61033313 0.61228214 + 6.940 0.60848364 0.61042955 + 6.950 0.60663975 0.60858256 + 6.960 0.60480145 0.60674116 + 6.970 0.60296872 0.60490534 + 6.980 0.60114154 0.60307507 + 6.990 0.59931990 0.60125033 + 7.000 0.59750378 0.59943112 + 7.010 0.59569316 0.59761741 + 7.020 0.59388803 0.59580919 + 7.030 0.59208837 0.59400644 + 7.040 0.59029416 0.59220915 + 7.050 0.58850539 0.59041729 + 7.060 0.58672204 0.58863085 + 7.070 0.58494410 0.58684982 + 7.080 0.58317154 0.58507418 + 7.090 0.58140435 0.58330391 + 7.100 0.57964252 0.58153900 + 7.110 0.57788603 0.57977943 + 7.120 0.57613486 0.57802518 + 7.130 0.57438899 0.57627624 + 7.140 0.57264842 0.57453259 + 7.150 0.57091312 0.57279422 + 7.160 0.56918308 0.57106111 + 7.170 0.56745829 0.56933324 + 7.180 0.56573872 0.56761060 + 7.190 0.56402436 0.56589317 + 7.200 0.56231519 0.56418094 + 7.210 0.56061121 0.56247389 + 7.220 0.55891238 0.56077200 + 7.230 0.55721871 0.55907526 + 7.240 0.55553017 0.55738366 + 7.250 0.55384674 0.55569717 + 7.260 0.55216842 0.55401579 + 7.270 0.55049518 0.55233950 + 7.280 0.54882702 0.55066827 + 7.290 0.54716390 0.54900211 + 7.300 0.54550583 0.54734098 + 7.310 0.54385278 0.54568489 + 7.320 0.54220474 0.54403380 + 7.330 0.54056170 0.54238771 + 7.340 0.53892363 0.54074659 + 7.350 0.53729053 0.53911045 + 7.360 0.53566238 0.53747925 + 7.370 0.53403916 0.53585299 + 7.380 0.53242086 0.53423165 + 7.390 0.53080746 0.53261522 + 7.400 0.52919895 0.53100368 + 7.410 0.52759532 0.52939701 + 7.420 0.52599655 0.52779521 + 7.430 0.52440262 0.52619825 + 7.440 0.52281352 0.52460612 + 7.450 0.52122924 0.52301881 + 7.460 0.51964975 0.52143631 + 7.470 0.51807506 0.51985859 + 7.480 0.51650513 0.51828564 + 7.490 0.51493997 0.51671746 + 7.500 0.51337954 0.51515402 + 7.510 0.51182385 0.51359531 + 7.520 0.51027287 0.51204131 + 7.530 0.50872658 0.51049202 + 7.540 0.50718499 0.50894742 + 7.550 0.50564806 0.50740749 + 7.560 0.50411580 0.50587222 + 7.570 0.50258817 0.50434159 + 7.580 0.50106518 0.50281560 + 7.590 0.49954680 0.50129422 + 7.600 0.49803302 0.49977744 + 7.610 0.49652383 0.49826526 + 7.620 0.49501921 0.49675765 + 7.630 0.49351915 0.49525460 + 7.640 0.49202364 0.49375610 + 7.650 0.49053266 0.49226214 + 7.660 0.48904620 0.49077269 + 7.670 0.48756424 0.48928775 + 7.680 0.48608677 0.48780731 + 7.690 0.48461378 0.48633134 + 7.700 0.48314526 0.48485984 + 7.710 0.48168118 0.48339279 + 7.720 0.48022154 0.48193018 + 7.730 0.47876632 0.48047200 + 7.740 0.47731552 0.47901823 + 7.750 0.47586911 0.47756885 + 7.760 0.47442708 0.47612386 + 7.770 0.47298942 0.47468325 + 7.780 0.47155612 0.47324699 + 7.790 0.47012716 0.47181508 + 7.800 0.46870253 0.47038750 + 7.810 0.46728222 0.46896424 + 7.820 0.46586622 0.46754529 + 7.830 0.46445450 0.46613063 + 7.840 0.46304706 0.46472025 + 7.850 0.46164389 0.46331414 + 7.860 0.46024497 0.46191228 + 7.870 0.45885029 0.46051467 + 7.880 0.45745983 0.45912128 + 7.890 0.45607359 0.45773211 + 7.900 0.45469155 0.45634714 + 7.910 0.45331369 0.45496637 + 7.920 0.45194002 0.45358977 + 7.930 0.45057050 0.45221733 + 7.940 0.44920514 0.45084905 + 7.950 0.44784391 0.44948491 + 7.960 0.44648681 0.44812490 + 7.970 0.44513382 0.44676900 + 7.980 0.44378493 0.44541720 + 7.990 0.44244012 0.44406949 + 8.000 0.44109939 0.44272587 + 8.010 0.43976273 0.44138630 + 8.020 0.43843012 0.44005079 + 8.030 0.43710154 0.43871933 + 8.040 0.43577699 0.43739188 + 8.050 0.43445645 0.43606846 + 8.060 0.43313992 0.43474904 + 8.070 0.43182737 0.43343361 + 8.080 0.43051881 0.43212217 + 8.090 0.42921420 0.43081469 + 8.100 0.42791355 0.42951117 + 8.110 0.42661685 0.42821159 + 8.120 0.42532407 0.42691594 + 8.130 0.42403521 0.42562421 + 8.140 0.42275025 0.42433639 + 8.150 0.42146919 0.42305247 + 8.160 0.42019201 0.42177244 + 8.170 0.41891870 0.42049627 + 8.180 0.41764925 0.41922397 + 8.190 0.41638365 0.41795552 + 8.200 0.41512188 0.41669090 + 8.210 0.41386393 0.41543011 + 8.220 0.41260980 0.41417314 + 8.230 0.41135947 0.41291997 + 8.240 0.41011292 0.41167059 + 8.250 0.40887016 0.41042499 + 8.260 0.40763116 0.40918316 + 8.270 0.40639591 0.40794509 + 8.280 0.40516441 0.40671077 + 8.290 0.40393664 0.40548017 + 8.300 0.40271259 0.40425331 + 8.310 0.40149225 0.40303015 + 8.320 0.40027560 0.40181070 + 8.330 0.39906265 0.40059493 + 8.340 0.39785337 0.39938284 + 8.350 0.39664775 0.39817442 + 8.360 0.39544579 0.39696966 + 8.370 0.39424747 0.39576854 + 8.380 0.39305278 0.39457106 + 8.390 0.39186171 0.39337720 + 8.400 0.39067425 0.39218695 + 8.410 0.38949039 0.39100031 + 8.420 0.38831011 0.38981725 + 8.430 0.38713342 0.38863777 + 8.440 0.38596028 0.38746187 + 8.450 0.38479071 0.38628952 + 8.460 0.38362467 0.38512071 + 8.470 0.38246218 0.38395545 + 8.480 0.38130320 0.38279371 + 8.490 0.38014774 0.38163548 + 8.500 0.37899577 0.38048076 + 8.510 0.37784730 0.37932953 + 8.520 0.37670231 0.37818179 + 8.530 0.37556079 0.37703752 + 8.540 0.37442272 0.37589671 + 8.550 0.37328811 0.37475936 + 8.560 0.37215693 0.37362544 + 8.570 0.37102918 0.37249496 + 8.580 0.36990485 0.37136789 + 8.590 0.36878393 0.37024424 + 8.600 0.36766640 0.36912398 + 8.610 0.36655226 0.36800712 + 8.620 0.36544150 0.36689363 + 8.630 0.36433410 0.36578352 + 8.640 0.36323006 0.36467676 + 8.650 0.36212936 0.36357335 + 8.660 0.36103200 0.36247328 + 8.670 0.35993796 0.36137654 + 8.680 0.35884724 0.36028312 + 8.690 0.35775982 0.35919300 + 8.700 0.35667570 0.35810619 + 8.710 0.35559487 0.35702266 + 8.720 0.35451731 0.35594241 + 8.730 0.35344301 0.35486543 + 8.740 0.35237197 0.35379171 + 8.750 0.35130418 0.35272123 + 8.760 0.35023962 0.35165400 + 8.770 0.34917829 0.35058999 + 8.780 0.34812017 0.34952921 + 8.790 0.34706526 0.34847163 + 8.800 0.34601355 0.34741726 + 8.810 0.34496503 0.34636607 + 8.820 0.34391968 0.34531806 + 8.830 0.34287750 0.34427323 + 8.840 0.34183847 0.34323156 + 8.850 0.34080260 0.34219304 + 8.860 0.33976986 0.34115766 + 8.870 0.33874026 0.34012541 + 8.880 0.33771377 0.33909629 + 8.890 0.33669040 0.33807028 + 8.900 0.33567012 0.33704737 + 8.910 0.33465294 0.33602756 + 8.920 0.33363884 0.33501084 + 8.930 0.33262781 0.33399719 + 8.940 0.33161985 0.33298661 + 8.950 0.33061494 0.33197909 + 8.960 0.32961308 0.33097461 + 8.970 0.32861425 0.32997318 + 8.980 0.32761845 0.32897477 + 8.990 0.32662567 0.32797939 + 9.000 0.32563589 0.32698702 + 9.010 0.32464912 0.32599765 + 9.020 0.32366533 0.32501127 + 9.030 0.32268453 0.32402788 + 9.040 0.32170670 0.32304746 + 9.050 0.32073183 0.32207001 + 9.060 0.31975991 0.32109552 + 9.070 0.31879094 0.32012398 + 9.080 0.31782491 0.31915537 + 9.090 0.31686181 0.31818970 + 9.100 0.31590162 0.31722695 + 9.110 0.31494434 0.31626711 + 9.120 0.31398996 0.31531017 + 9.130 0.31303848 0.31435613 + 9.140 0.31208988 0.31340498 + 9.150 0.31114415 0.31245671 + 9.160 0.31020129 0.31151130 + 9.170 0.30926129 0.31056876 + 9.180 0.30832413 0.30962906 + 9.190 0.30738981 0.30869221 + 9.200 0.30645833 0.30775820 + 9.210 0.30552967 0.30682701 + 9.220 0.30460382 0.30589864 + 9.230 0.30368078 0.30497308 + 9.240 0.30276053 0.30405031 + 9.250 0.30184308 0.30313034 + 9.260 0.30092840 0.30221316 + 9.270 0.30001650 0.30129875 + 9.280 0.29910736 0.30038710 + 9.290 0.29820097 0.29947821 + 9.300 0.29729733 0.29857208 + 9.310 0.29639643 0.29766868 + 9.320 0.29549826 0.29676802 + 9.330 0.29460281 0.29587009 + 9.340 0.29371007 0.29497487 + 9.350 0.29282004 0.29408236 + 9.360 0.29193271 0.29319255 + 9.370 0.29104807 0.29230543 + 9.380 0.29016610 0.29142100 + 9.390 0.28928681 0.29053924 + 9.400 0.28841018 0.28966015 + 9.410 0.28753621 0.28878372 + 9.420 0.28666489 0.28790994 + 9.430 0.28579621 0.28703881 + 9.440 0.28493016 0.28617031 + 9.450 0.28406674 0.28530444 + 9.460 0.28320593 0.28444119 + 9.470 0.28234773 0.28358055 + 9.480 0.28149213 0.28272252 + 9.490 0.28063912 0.28186708 + 9.500 0.27978870 0.28101423 + 9.510 0.27894086 0.28016396 + 9.520 0.27809558 0.27931627 + 9.530 0.27725287 0.27847113 + 9.540 0.27641271 0.27762856 + 9.550 0.27557509 0.27678853 + 9.560 0.27474002 0.27595105 + 9.570 0.27390747 0.27511610 + 9.580 0.27307745 0.27428368 + 9.590 0.27224994 0.27345377 + 9.600 0.27142494 0.27262638 + 9.610 0.27060244 0.27180149 + 9.620 0.26978243 0.27097909 + 9.630 0.26896491 0.27015919 + 9.640 0.26814987 0.26934176 + 9.650 0.26733729 0.26852681 + 9.660 0.26652718 0.26771433 + 9.670 0.26571952 0.26690430 + 9.680 0.26491431 0.26609672 + 9.690 0.26411154 0.26529159 + 9.700 0.26331120 0.26448889 + 9.710 0.26251329 0.26368862 + 9.720 0.26171779 0.26289078 + 9.730 0.26092471 0.26209534 + 9.740 0.26013403 0.26130232 + 9.750 0.25934574 0.26051169 + 9.760 0.25855985 0.25972346 + 9.770 0.25777633 0.25893761 + 9.780 0.25699519 0.25815413 + 9.790 0.25621642 0.25737303 + 9.800 0.25544001 0.25659430 + 9.810 0.25466594 0.25581791 + 9.820 0.25389423 0.25504388 + 9.830 0.25312485 0.25427219 + 9.840 0.25235781 0.25350284 + 9.850 0.25159309 0.25273581 + 9.860 0.25083068 0.25197110 + 9.870 0.25007059 0.25120871 + 9.880 0.24931280 0.25044862 + 9.890 0.24855731 0.24969084 + 9.900 0.24780410 0.24893534 + 9.910 0.24705318 0.24818213 + 9.920 0.24630454 0.24743121 + 9.930 0.24555816 0.24668255 + 9.940 0.24481404 0.24593616 + 9.950 0.24407218 0.24519202 + 9.960 0.24333257 0.24445014 + 9.970 0.24259520 0.24371051 + 9.980 0.24186006 0.24297311 + 9.990 0.24112715 0.24223794 + 10.000 0.24039646 0.24150500 + 10.010 0.23966799 0.24077427 + 10.020 0.23894172 0.24004576 + 10.030 0.23821766 0.23931945 + 10.040 0.23749579 0.23859533 + 10.050 0.23677610 0.23787341 + 10.060 0.23605860 0.23715367 + 10.070 0.23534327 0.23643611 + 10.080 0.23463011 0.23572073 + 10.090 0.23391911 0.23500750 + 10.100 0.23321026 0.23429644 + 10.110 0.23250356 0.23358752 + 10.120 0.23179901 0.23288075 + 10.130 0.23109659 0.23217612 + 10.140 0.23039629 0.23147362 + 10.150 0.22969812 0.23077325 + 10.160 0.22900207 0.23007499 + 10.170 0.22830812 0.22937885 + 10.180 0.22761628 0.22868482 + 10.190 0.22692653 0.22799288 + 10.200 0.22623888 0.22730304 + 10.210 0.22555331 0.22661528 + 10.220 0.22486981 0.22592961 + 10.230 0.22418839 0.22524601 + 10.240 0.22350903 0.22456448 + 10.250 0.22283173 0.22388501 + 10.260 0.22215648 0.22320760 + 10.270 0.22148328 0.22253224 + 10.280 0.22081212 0.22185892 + 10.290 0.22014299 0.22118764 + 10.300 0.21947589 0.22051839 + 10.310 0.21881081 0.21985116 + 10.320 0.21814775 0.21918595 + 10.330 0.21748669 0.21852276 + 10.340 0.21682764 0.21786157 + 10.350 0.21617059 0.21720238 + 10.360 0.21551553 0.21654519 + 10.370 0.21486245 0.21588998 + 10.380 0.21421135 0.21523676 + 10.390 0.21356223 0.21458552 + 10.400 0.21291507 0.21393624 + 10.410 0.21226987 0.21328893 + 10.420 0.21162663 0.21264358 + 10.430 0.21098534 0.21200018 + 10.440 0.21034599 0.21135873 + 10.450 0.20970858 0.21071922 + 10.460 0.20907309 0.21008164 + 10.470 0.20843954 0.20944599 + 10.480 0.20780790 0.20881227 + 10.490 0.20717818 0.20818046 + 10.500 0.20655037 0.20755057 + 10.510 0.20592446 0.20692258 + 10.520 0.20530045 0.20629649 + 10.530 0.20467833 0.20567229 + 10.540 0.20405809 0.20504999 + 10.550 0.20343973 0.20442957 + 10.560 0.20282325 0.20381102 + 10.570 0.20220863 0.20319435 + 10.580 0.20159588 0.20257954 + 10.590 0.20098498 0.20196659 + 10.600 0.20037593 0.20135550 + 10.610 0.19976873 0.20074625 + 10.620 0.19916337 0.20013885 + 10.630 0.19855985 0.19953329 + 10.640 0.19795815 0.19892956 + 10.650 0.19735828 0.19832765 + 10.660 0.19676022 0.19772757 + 10.670 0.19616398 0.19712930 + 10.680 0.19556954 0.19653284 + 10.690 0.19497691 0.19593819 + 10.700 0.19438607 0.19534534 + 10.710 0.19379702 0.19475428 + 10.720 0.19320976 0.19416501 + 10.730 0.19262427 0.19357752 + 10.740 0.19204056 0.19299181 + 10.750 0.19145862 0.19240787 + 10.760 0.19087845 0.19182570 + 10.770 0.19030003 0.19124529 + 10.780 0.18972336 0.19066663 + 10.790 0.18914844 0.19008973 + 10.800 0.18857526 0.18951457 + 10.810 0.18800382 0.18894115 + 10.820 0.18743411 0.18836947 + 10.830 0.18686613 0.18779952 + 10.840 0.18629987 0.18723129 + 10.850 0.18573533 0.18666478 + 10.860 0.18517249 0.18609999 + 10.870 0.18461136 0.18553690 + 10.880 0.18405193 0.18497552 + 10.890 0.18349420 0.18441584 + 10.900 0.18293816 0.18385785 + 10.910 0.18238380 0.18330155 + 10.920 0.18183112 0.18274693 + 10.930 0.18128012 0.18219399 + 10.940 0.18073079 0.18164272 + 10.950 0.18018312 0.18109312 + 10.960 0.17963711 0.18054518 + 10.970 0.17909275 0.17999890 + 10.980 0.17855005 0.17945428 + 10.990 0.17800899 0.17891130 + 11.000 0.17746956 0.17836997 + 11.010 0.17693178 0.17783027 + 11.020 0.17639562 0.17729221 + 11.030 0.17586109 0.17675577 + 11.040 0.17532818 0.17622096 + 11.050 0.17479688 0.17568776 + 11.060 0.17426719 0.17515618 + 11.070 0.17373911 0.17462621 + 11.080 0.17321263 0.17409784 + 11.090 0.17268774 0.17357107 + 11.100 0.17216444 0.17304589 + 11.110 0.17164273 0.17252230 + 11.120 0.17112260 0.17200030 + 11.130 0.17060405 0.17147988 + 11.140 0.17008707 0.17096103 + 11.150 0.16957165 0.17044375 + 11.160 0.16905780 0.16992803 + 11.170 0.16854550 0.16941388 + 11.180 0.16803476 0.16890128 + 11.190 0.16752556 0.16839023 + 11.200 0.16701791 0.16788073 + 11.210 0.16651180 0.16737277 + 11.220 0.16600721 0.16686635 + 11.230 0.16550416 0.16636146 + 11.240 0.16500263 0.16585810 + 11.250 0.16450263 0.16535626 + 11.260 0.16400413 0.16485594 + 11.270 0.16350715 0.16435713 + 11.280 0.16301167 0.16385983 + 11.290 0.16251770 0.16336404 + 11.300 0.16202522 0.16286974 + 11.310 0.16153424 0.16237695 + 11.320 0.16104474 0.16188564 + 11.330 0.16055672 0.16139582 + 11.340 0.16007019 0.16090748 + 11.350 0.15958513 0.16042062 + 11.360 0.15910154 0.15993523 + 11.370 0.15861941 0.15945132 + 11.380 0.15813875 0.15896886 + 11.390 0.15765954 0.15848787 + 11.400 0.15718178 0.15800833 + 11.410 0.15670547 0.15753024 + 11.420 0.15623061 0.15705360 + 11.430 0.15575718 0.15657840 + 11.440 0.15528519 0.15610464 + 11.450 0.15481463 0.15563231 + 11.460 0.15434549 0.15516141 + 11.470 0.15387778 0.15469193 + 11.480 0.15341148 0.15422388 + 11.490 0.15294660 0.15375724 + 11.500 0.15248313 0.15329202 + 11.510 0.15202106 0.15282820 + 11.520 0.15156039 0.15236578 + 11.530 0.15110111 0.15190477 + 11.540 0.15064323 0.15144515 + 11.550 0.15018674 0.15098692 + 11.560 0.14973162 0.15053007 + 11.570 0.14927789 0.15007461 + 11.580 0.14882553 0.14962053 + 11.590 0.14837455 0.14916782 + 11.600 0.14792493 0.14871648 + 11.610 0.14747667 0.14826651 + 11.620 0.14702977 0.14781789 + 11.630 0.14658423 0.14737064 + 11.640 0.14614003 0.14692474 + 11.650 0.14569718 0.14648018 + 11.660 0.14525568 0.14603698 + 11.670 0.14481551 0.14559511 + 11.680 0.14437667 0.14515458 + 11.690 0.14393917 0.14471538 + 11.700 0.14350299 0.14427752 + 11.710 0.14306813 0.14384097 + 11.720 0.14263459 0.14340575 + 11.730 0.14220237 0.14297185 + 11.740 0.14177145 0.14253925 + 11.750 0.14134184 0.14210797 + 11.760 0.14091353 0.14167799 + 11.770 0.14048652 0.14124932 + 11.780 0.14006080 0.14082194 + 11.790 0.13963638 0.14039585 + 11.800 0.13921324 0.13997105 + 11.810 0.13879138 0.13954754 + 11.820 0.13837080 0.13912531 + 11.830 0.13795149 0.13870435 + 11.840 0.13753346 0.13828467 + 11.850 0.13711669 0.13786626 + 11.860 0.13670118 0.13744912 + 11.870 0.13628694 0.13703324 + 11.880 0.13587395 0.13661861 + 11.890 0.13546221 0.13620524 + 11.900 0.13505172 0.13579312 + 11.910 0.13464247 0.13538225 + 11.920 0.13423446 0.13497262 + 11.930 0.13382769 0.13456424 + 11.940 0.13342215 0.13415708 + 11.950 0.13301784 0.13375116 + 11.960 0.13261476 0.13334647 + 11.970 0.13221290 0.13294300 + 11.980 0.13181225 0.13254075 + 11.990 0.13141282 0.13213972 + 12.000 0.13101460 0.13173990 + 12.010 0.13061758 0.13134130 + 12.020 0.13022177 0.13094389 + 12.030 0.12982716 0.13054770 + 12.040 0.12943375 0.13015270 + 12.050 0.12904152 0.12975889 + 12.060 0.12865049 0.12936628 + 12.070 0.12826064 0.12897485 + 12.080 0.12787197 0.12858461 + 12.090 0.12748448 0.12819555 + 12.100 0.12709816 0.12780767 + 12.110 0.12671302 0.12742096 + 12.120 0.12632904 0.12703542 + 12.130 0.12594622 0.12665104 + 12.140 0.12556457 0.12626783 + 12.150 0.12518407 0.12588578 + 12.160 0.12480472 0.12550489 + 12.170 0.12442653 0.12512515 + 12.180 0.12404948 0.12474655 + 12.190 0.12367357 0.12436911 + 12.200 0.12329880 0.12399280 + 12.210 0.12292517 0.12361763 + 12.220 0.12255267 0.12324360 + 12.230 0.12218130 0.12287070 + 12.240 0.12181105 0.12249893 + 12.250 0.12144192 0.12212828 + 12.260 0.12107392 0.12175876 + 12.270 0.12070703 0.12139035 + 12.280 0.12034125 0.12102306 + 12.290 0.11997658 0.12065687 + 12.300 0.11961301 0.12029180 + 12.310 0.11925055 0.11992783 + 12.320 0.11888918 0.11956496 + 12.330 0.11852891 0.11920319 + 12.340 0.11816974 0.11884252 + 12.350 0.11781165 0.11848294 + 12.360 0.11745464 0.11812444 + 12.370 0.11709872 0.11776703 + 12.380 0.11674387 0.11741070 + 12.390 0.11639010 0.11705545 + 12.400 0.11603741 0.11670127 + 12.410 0.11568578 0.11634817 + 12.420 0.11533522 0.11599613 + 12.430 0.11498571 0.11564516 + 12.440 0.11463727 0.11529525 + 12.450 0.11428989 0.11494640 + 12.460 0.11394355 0.11459860 + 12.470 0.11359827 0.11425186 + 12.480 0.11325403 0.11390617 + 12.490 0.11291084 0.11356152 + 12.500 0.11256869 0.11321791 + 12.510 0.11222757 0.11287535 + 12.520 0.11188748 0.11253382 + 12.530 0.11154843 0.11219332 + 12.540 0.11121041 0.11185386 + 12.550 0.11087340 0.11151542 + 12.560 0.11053742 0.11117801 + 12.570 0.11020246 0.11084161 + 12.580 0.10986852 0.11050624 + 12.590 0.10953558 0.11017188 + 12.600 0.10920366 0.10983853 + 12.610 0.10887274 0.10950619 + 12.620 0.10854282 0.10917485 + 12.630 0.10821390 0.10884452 + 12.640 0.10788598 0.10851519 + 12.650 0.10755905 0.10818685 + 12.660 0.10723312 0.10785951 + 12.670 0.10690817 0.10753316 + 12.680 0.10658420 0.10720779 + 12.690 0.10626122 0.10688341 + 12.700 0.10593922 0.10656001 + 12.710 0.10561819 0.10623759 + 12.720 0.10529813 0.10591615 + 12.730 0.10497905 0.10559568 + 12.740 0.10466093 0.10527617 + 12.750 0.10434378 0.10495764 + 12.760 0.10402758 0.10464007 + 12.770 0.10371235 0.10432346 + 12.780 0.10339807 0.10400780 + 12.790 0.10308474 0.10369310 + 12.800 0.10277236 0.10337936 + 12.810 0.10246093 0.10306656 + 12.820 0.10215044 0.10275471 + 12.830 0.10184090 0.10244380 + 12.840 0.10153229 0.10213384 + 12.850 0.10122461 0.10182481 + 12.860 0.10091787 0.10151672 + 12.870 0.10061206 0.10120956 + 12.880 0.10030718 0.10090333 + 12.890 0.10000321 0.10059802 + 12.900 0.09970017 0.10029364 + 12.910 0.09939805 0.09999018 + 12.920 0.09909685 0.09968764 + 12.930 0.09879655 0.09938601 + 12.940 0.09849717 0.09908530 + 12.950 0.09819869 0.09878549 + 12.960 0.09790112 0.09848660 + 12.970 0.09760445 0.09818860 + 12.980 0.09730868 0.09789151 + 12.990 0.09701381 0.09759532 + 13.000 0.09671982 0.09730003 + 13.010 0.09642673 0.09700562 + 13.020 0.09613453 0.09671211 + 13.030 0.09584321 0.09641949 + 13.040 0.09555278 0.09612775 + 13.050 0.09526323 0.09583690 + 13.060 0.09497455 0.09554692 + 13.070 0.09468675 0.09525782 + 13.080 0.09439982 0.09496960 + 13.090 0.09411376 0.09468225 + 13.100 0.09382857 0.09439577 + 13.110 0.09354424 0.09411015 + 13.120 0.09326077 0.09382540 + 13.130 0.09297816 0.09354151 + 13.140 0.09269641 0.09325848 + 13.150 0.09241551 0.09297631 + 13.160 0.09213546 0.09269499 + 13.170 0.09185627 0.09241452 + 13.180 0.09157791 0.09213490 + 13.190 0.09130040 0.09185613 + 13.200 0.09102374 0.09157819 + 13.210 0.09074791 0.09130110 + 13.220 0.09047291 0.09102485 + 13.230 0.09019875 0.09074944 diff --git a/20231123/loesung-1c.tikz b/20231123/loesung-1c.tikz new file mode 100644 index 0000000000000000000000000000000000000000..e97073c442cd1f84adf842357e3cb254fb05e54c --- /dev/null +++ b/20231123/loesung-1c.tikz @@ -0,0 +1,521 @@ +\begin{tikzpicture}[gnuplot] +%% generated with GNUPLOT 5.0p5 (Lua 5.1; terminal rev. 99, script rev. 100) +%% Mi 14 Nov 2018 19:24:42 CET +\path (0.000,0.000) rectangle (12.500,8.750); +\gpcolor{color=gp lt color border} +\gpsetlinetype{gp lt border} +\gpsetdashtype{gp dt solid} +\gpsetlinewidth{1.00} +\draw[gp path] (1.012,0.616)--(1.192,0.616); +\draw[gp path] (11.947,0.616)--(11.767,0.616); +\node[gp node right] at (0.828,0.616) {$0$}; +\draw[gp path] (1.012,1.393)--(1.192,1.393); +\draw[gp path] (11.947,1.393)--(11.767,1.393); +\node[gp node right] at (0.828,1.393) {$0.5$}; +\draw[gp path] (1.012,2.169)--(1.192,2.169); +\draw[gp path] (11.947,2.169)--(11.767,2.169); +\node[gp node right] at (0.828,2.169) {$1$}; +\draw[gp path] (1.012,2.946)--(1.192,2.946); +\draw[gp path] (11.947,2.946)--(11.767,2.946); +\node[gp node right] at (0.828,2.946) {$1.5$}; +\draw[gp path] (1.012,3.722)--(1.192,3.722); +\draw[gp path] (11.947,3.722)--(11.767,3.722); +\node[gp node right] at (0.828,3.722) {$2$}; +\draw[gp path] (1.012,4.499)--(1.192,4.499); +\draw[gp path] (11.947,4.499)--(11.767,4.499); +\node[gp node right] at (0.828,4.499) {$2.5$}; +\draw[gp path] (1.012,5.275)--(1.192,5.275); +\draw[gp path] (11.947,5.275)--(11.767,5.275); +\node[gp node right] at (0.828,5.275) {$3$}; +\draw[gp path] (1.012,6.052)--(1.192,6.052); +\draw[gp path] (11.947,6.052)--(11.767,6.052); +\node[gp node right] at (0.828,6.052) {$3.5$}; +\draw[gp path] (1.012,6.828)--(1.192,6.828); +\draw[gp path] (11.947,6.828)--(11.767,6.828); +\node[gp node right] at (0.828,6.828) {$4$}; +\draw[gp path] (1.012,7.605)--(1.192,7.605); +\draw[gp path] (11.947,7.605)--(11.767,7.605); +\node[gp node right] at (0.828,7.605) {$4.5$}; +\draw[gp path] (1.012,8.381)--(1.192,8.381); +\draw[gp path] (11.947,8.381)--(11.767,8.381); +\node[gp node right] at (0.828,8.381) {$5$}; +\draw[gp path] (1.012,0.616)--(1.012,0.796); +\draw[gp path] (1.012,8.381)--(1.012,8.201); +\node[gp node center] at (1.012,0.308) {$0$}; +\draw[gp path] (2.574,0.616)--(2.574,0.796); +\draw[gp path] (2.574,8.381)--(2.574,8.201); +\node[gp node center] at (2.574,0.308) {$2$}; +\draw[gp path] (4.136,0.616)--(4.136,0.796); +\draw[gp path] (4.136,8.381)--(4.136,8.201); +\node[gp node center] at (4.136,0.308) {$4$}; +\draw[gp path] (5.698,0.616)--(5.698,0.796); +\draw[gp path] (5.698,8.381)--(5.698,8.201); +\node[gp node center] at (5.698,0.308) {$6$}; +\draw[gp path] (7.261,0.616)--(7.261,0.796); +\draw[gp path] (7.261,8.381)--(7.261,8.201); +\node[gp node center] at (7.261,0.308) {$8$}; +\draw[gp path] (8.823,0.616)--(8.823,0.796); +\draw[gp path] (8.823,8.381)--(8.823,8.201); +\node[gp node center] at (8.823,0.308) {$10$}; +\draw[gp path] (10.385,0.616)--(10.385,0.796); +\draw[gp path] (10.385,8.381)--(10.385,8.201); +\node[gp node center] at (10.385,0.308) {$12$}; +\draw[gp path] (11.947,0.616)--(11.947,0.796); +\draw[gp path] (11.947,8.381)--(11.947,8.201); +\node[gp node center] at (11.947,0.308) {$14$}; +\draw[gp path] (1.012,8.381)--(1.012,0.616)--(11.947,0.616)--(11.947,8.381)--cycle; +\node[gp node right] at (10.479,7.8) {Simulation}; +\gpcolor{rgb color={0.580,0.000,0.827}} +\draw[gp path] (10.663,7.8)--(11.579,7.8); +\draw[gp path] (1.012,8.381)--(1.020,8.358)--(1.028,8.334)--(1.035,8.311)--(1.043,8.288)% + --(1.051,8.265)--(1.059,8.241)--(1.067,8.218)--(1.074,8.195)--(1.082,8.171)--(1.090,8.150)% + --(1.098,8.126)--(1.106,8.103)--(1.114,8.081)--(1.121,8.058)--(1.129,8.035)--(1.137,8.013)% + --(1.145,7.991)--(1.153,7.968)--(1.160,7.946)--(1.168,7.924)--(1.176,7.901)--(1.184,7.879)% + --(1.192,7.858)--(1.199,7.836)--(1.207,7.814)--(1.215,7.792)--(1.223,7.771)--(1.231,7.749)% + --(1.239,7.727)--(1.246,7.705)--(1.254,7.684)--(1.262,7.662)--(1.270,7.642)--(1.278,7.620)% + --(1.285,7.598)--(1.293,7.578)--(1.301,7.556)--(1.309,7.535)--(1.317,7.514)--(1.324,7.493)% + --(1.332,7.472)--(1.340,7.452)--(1.348,7.431)--(1.356,7.410)--(1.363,7.390)--(1.371,7.370)% + --(1.379,7.348)--(1.387,7.328)--(1.395,7.308)--(1.403,7.288)--(1.410,7.267)--(1.418,7.247)% + --(1.426,7.227)--(1.434,7.207)--(1.442,7.187)--(1.449,7.168)--(1.457,7.148)--(1.465,7.128)% + --(1.473,7.108)--(1.481,7.089)--(1.488,7.069)--(1.496,7.049)--(1.504,7.030)--(1.512,7.010)% + --(1.520,6.991)--(1.528,6.971)--(1.535,6.952)--(1.543,6.934)--(1.551,6.913)--(1.559,6.895)% + --(1.567,6.876)--(1.574,6.858)--(1.582,6.837)--(1.590,6.819)--(1.598,6.800)--(1.606,6.781)% + --(1.613,6.763)--(1.621,6.744)--(1.629,6.726)--(1.637,6.707)--(1.645,6.688)--(1.652,6.670)% + --(1.660,6.653)--(1.668,6.634)--(1.676,6.615)--(1.684,6.597)--(1.692,6.580)--(1.699,6.561)% + --(1.707,6.542)--(1.715,6.525)--(1.723,6.507)--(1.731,6.489)--(1.738,6.471)--(1.746,6.454)% + --(1.754,6.437)--(1.762,6.418)--(1.770,6.401)--(1.777,6.384)--(1.785,6.365)--(1.793,6.348)% + --(1.801,6.331)--(1.809,6.314)--(1.817,6.297)--(1.824,6.280)--(1.832,6.263)--(1.840,6.246)% + --(1.848,6.229)--(1.856,6.211)--(1.863,6.194)--(1.871,6.177)--(1.879,6.160)--(1.887,6.143)% + --(1.895,6.126)--(1.902,6.111)--(1.910,6.093)--(1.918,6.076)--(1.926,6.061)--(1.934,6.044)% + --(1.941,6.027)--(1.949,6.011)--(1.957,5.994)--(1.965,5.979)--(1.973,5.961)--(1.981,5.946)% + --(1.988,5.929)--(1.996,5.913)--(2.004,5.898)--(2.012,5.881)--(2.020,5.865)--(2.027,5.850)% + --(2.035,5.834)--(2.043,5.819)--(2.051,5.801)--(2.059,5.786)--(2.066,5.770)--(2.074,5.755)% + --(2.082,5.739)--(2.090,5.724)--(2.098,5.708)--(2.106,5.693)--(2.113,5.677)--(2.121,5.662)% + --(2.129,5.648)--(2.137,5.632)--(2.145,5.617)--(2.152,5.601)--(2.160,5.587)--(2.168,5.572)% + --(2.176,5.556)--(2.184,5.541)--(2.191,5.527)--(2.199,5.511)--(2.207,5.497)--(2.215,5.482)% + --(2.223,5.468)--(2.230,5.452)--(2.238,5.438)--(2.246,5.423)--(2.254,5.409)--(2.262,5.395)% + --(2.270,5.379)--(2.277,5.365)--(2.285,5.351)--(2.293,5.337)--(2.301,5.322)--(2.309,5.308)% + --(2.316,5.294)--(2.324,5.280)--(2.332,5.266)--(2.340,5.252)--(2.348,5.238)--(2.355,5.224)% + --(2.363,5.210)--(2.371,5.196)--(2.379,5.182)--(2.387,5.168)--(2.394,5.154)--(2.402,5.140)% + --(2.410,5.126)--(2.418,5.112)--(2.426,5.100)--(2.434,5.086)--(2.441,5.072)--(2.449,5.059)% + --(2.457,5.045)--(2.465,5.031)--(2.473,5.019)--(2.480,5.005)--(2.488,4.991)--(2.496,4.978)% + --(2.504,4.964)--(2.512,4.952)--(2.519,4.938)--(2.527,4.926)--(2.535,4.913)--(2.543,4.899)% + --(2.551,4.887)--(2.559,4.874)--(2.566,4.860)--(2.574,4.848)--(2.582,4.836)--(2.590,4.822)% + --(2.598,4.809)--(2.605,4.797)--(2.613,4.784)--(2.621,4.772)--(2.629,4.759)--(2.637,4.747)% + --(2.644,4.735)--(2.652,4.722)--(2.660,4.710)--(2.668,4.697)--(2.676,4.685)--(2.683,4.672)% + --(2.691,4.660)--(2.699,4.648)--(2.707,4.635)--(2.715,4.623)--(2.723,4.610)--(2.730,4.598)% + --(2.738,4.587)--(2.746,4.575)--(2.754,4.562)--(2.762,4.551)--(2.769,4.539)--(2.777,4.526)% + --(2.785,4.516)--(2.793,4.503)--(2.801,4.491)--(2.808,4.480)--(2.816,4.467)--(2.824,4.457)% + --(2.832,4.444)--(2.840,4.433)--(2.848,4.421)--(2.855,4.410)--(2.863,4.399)--(2.871,4.387)% + --(2.879,4.376)--(2.887,4.363)--(2.894,4.353)--(2.902,4.342)--(2.910,4.331)--(2.918,4.318)% + --(2.926,4.307)--(2.933,4.297)--(2.941,4.286)--(2.949,4.275)--(2.957,4.262)--(2.965,4.252)% + --(2.972,4.241)--(2.980,4.230)--(2.988,4.219)--(2.996,4.208)--(3.004,4.197)--(3.012,4.186)% + --(3.019,4.175)--(3.027,4.165)--(3.035,4.154)--(3.043,4.143)--(3.051,4.132)--(3.058,4.123)% + --(3.066,4.112)--(3.074,4.101)--(3.082,4.090)--(3.090,4.079)--(3.097,4.070)--(3.105,4.059)% + --(3.113,4.048)--(3.121,4.037)--(3.129,4.028)--(3.137,4.017)--(3.144,4.006)--(3.152,3.997)% + --(3.160,3.986)--(3.168,3.977)--(3.176,3.966)--(3.183,3.957)--(3.191,3.946)--(3.199,3.936)% + --(3.207,3.925)--(3.215,3.916)--(3.222,3.905)--(3.230,3.896)--(3.238,3.885)--(3.246,3.876)% + --(3.254,3.866)--(3.261,3.856)--(3.269,3.846)--(3.277,3.837)--(3.285,3.826)--(3.293,3.817)% + --(3.301,3.807)--(3.308,3.798)--(3.316,3.787)--(3.324,3.778)--(3.332,3.769)--(3.340,3.759)% + --(3.347,3.750)--(3.355,3.741)--(3.363,3.731)--(3.371,3.720)--(3.379,3.711)--(3.386,3.702)% + --(3.394,3.692)--(3.402,3.683)--(3.410,3.674)--(3.418,3.665)--(3.426,3.655)--(3.433,3.647)% + --(3.441,3.638)--(3.449,3.629)--(3.457,3.620)--(3.465,3.610)--(3.472,3.601)--(3.480,3.592)% + --(3.488,3.584)--(3.496,3.574)--(3.504,3.565)--(3.511,3.556)--(3.519,3.547)--(3.527,3.539)% + --(3.535,3.529)--(3.543,3.520)--(3.550,3.512)--(3.558,3.503)--(3.566,3.494)--(3.574,3.486)% + --(3.582,3.477)--(3.590,3.469)--(3.597,3.460)--(3.605,3.450)--(3.613,3.442)--(3.621,3.433)% + --(3.629,3.425)--(3.636,3.416)--(3.644,3.408)--(3.652,3.401)--(3.660,3.391)--(3.668,3.383)% + --(3.675,3.374)--(3.683,3.366)--(3.691,3.359)--(3.699,3.349)--(3.707,3.342)--(3.715,3.334)% + --(3.722,3.324)--(3.730,3.317)--(3.738,3.309)--(3.746,3.300)--(3.754,3.292)--(3.761,3.284)% + --(3.769,3.276)--(3.777,3.269)--(3.785,3.259)--(3.793,3.251)--(3.800,3.244)--(3.808,3.236)% + --(3.816,3.228)--(3.824,3.220)--(3.832,3.213)--(3.839,3.205)--(3.847,3.197)--(3.855,3.189)% + --(3.863,3.182)--(3.871,3.174)--(3.879,3.166)--(3.886,3.158)--(3.894,3.150)--(3.902,3.143)% + --(3.910,3.135)--(3.918,3.127)--(3.925,3.119)--(3.933,3.112)--(3.941,3.104)--(3.949,3.096)% + --(3.957,3.088)--(3.964,3.082)--(3.972,3.074)--(3.980,3.067)--(3.988,3.059)--(3.996,3.051)% + --(4.004,3.045)--(4.011,3.037)--(4.019,3.029)--(4.027,3.023)--(4.035,3.015)--(4.043,3.008)% + --(4.050,3.001)--(4.058,2.994)--(4.066,2.986)--(4.074,2.980)--(4.082,2.972)--(4.089,2.964)% + --(4.097,2.958)--(4.105,2.950)--(4.113,2.944)--(4.121,2.936)--(4.128,2.930)--(4.136,2.922)% + --(4.144,2.916)--(4.152,2.908)--(4.160,2.902)--(4.168,2.894)--(4.175,2.888)--(4.183,2.880)% + --(4.191,2.874)--(4.199,2.866)--(4.207,2.860)--(4.214,2.854)--(4.222,2.846)--(4.230,2.840)% + --(4.238,2.834)--(4.246,2.826)--(4.253,2.820)--(4.261,2.813)--(4.269,2.806)--(4.277,2.800)% + --(4.285,2.793)--(4.293,2.787)--(4.300,2.779)--(4.308,2.773)--(4.316,2.767)--(4.324,2.761)% + --(4.332,2.754)--(4.339,2.747)--(4.347,2.741)--(4.355,2.734)--(4.363,2.728)--(4.371,2.722)% + --(4.378,2.716)--(4.386,2.709)--(4.394,2.703)--(4.402,2.695)--(4.410,2.689)--(4.417,2.683)% + --(4.425,2.677)--(4.433,2.671)--(4.441,2.664)--(4.449,2.658)--(4.457,2.652)--(4.464,2.646)% + --(4.472,2.640)--(4.480,2.633)--(4.488,2.629)--(4.496,2.622)--(4.503,2.616)--(4.511,2.610)% + --(4.519,2.604)--(4.527,2.598)--(4.535,2.591)--(4.542,2.585)--(4.550,2.579)--(4.558,2.574)% + --(4.566,2.568)--(4.574,2.562)--(4.581,2.556)--(4.589,2.549)--(4.597,2.545)--(4.605,2.539)% + --(4.613,2.532)--(4.621,2.526)--(4.628,2.522)--(4.636,2.515)--(4.644,2.509)--(4.652,2.504)% + --(4.660,2.498)--(4.667,2.492)--(4.675,2.487)--(4.683,2.481)--(4.691,2.475)--(4.699,2.470)% + --(4.706,2.464)--(4.714,2.458)--(4.722,2.453)--(4.730,2.447)--(4.738,2.442)--(4.746,2.436)% + --(4.753,2.430)--(4.761,2.425)--(4.769,2.419)--(4.777,2.414)--(4.785,2.408)--(4.792,2.404)% + --(4.800,2.397)--(4.808,2.393)--(4.816,2.386)--(4.824,2.382)--(4.831,2.377)--(4.839,2.371)% + --(4.847,2.366)--(4.855,2.360)--(4.863,2.355)--(4.870,2.349)--(4.878,2.344)--(4.886,2.340)% + --(4.894,2.334)--(4.902,2.329)--(4.910,2.324)--(4.917,2.318)--(4.925,2.313)--(4.933,2.309)% + --(4.941,2.303)--(4.949,2.298)--(4.956,2.293)--(4.964,2.289)--(4.972,2.282)--(4.980,2.278)% + --(4.988,2.273)--(4.995,2.268)--(5.003,2.262)--(5.011,2.258)--(5.019,2.253)--(5.027,2.248)% + --(5.035,2.244)--(5.042,2.237)--(5.050,2.233)--(5.058,2.228)--(5.066,2.223)--(5.074,2.219)% + --(5.081,2.214)--(5.089,2.209)--(5.097,2.203)--(5.105,2.199)--(5.113,2.194)--(5.120,2.189)% + --(5.128,2.185)--(5.136,2.180)--(5.144,2.175)--(5.152,2.171)--(5.159,2.166)--(5.167,2.161)% + --(5.175,2.157)--(5.183,2.152)--(5.191,2.147)--(5.199,2.143)--(5.206,2.138)--(5.214,2.133)% + --(5.222,2.129)--(5.230,2.124)--(5.238,2.119)--(5.245,2.115)--(5.253,2.110)--(5.261,2.105)% + --(5.269,2.101)--(5.277,2.096)--(5.284,2.093)--(5.292,2.088)--(5.300,2.084)--(5.308,2.079)% + --(5.316,2.074)--(5.324,2.070)--(5.331,2.065)--(5.339,2.062)--(5.347,2.057)--(5.355,2.053)% + --(5.363,2.048)--(5.370,2.043)--(5.378,2.040)--(5.386,2.035)--(5.394,2.031)--(5.402,2.026)% + --(5.409,2.023)--(5.417,2.018)--(5.425,2.014)--(5.433,2.009)--(5.441,2.006)--(5.448,2.001)% + --(5.456,1.997)--(5.464,1.994)--(5.472,1.989)--(5.480,1.984)--(5.488,1.980)--(5.495,1.976)% + --(5.503,1.972)--(5.511,1.969)--(5.519,1.964)--(5.527,1.959)--(5.534,1.956)--(5.542,1.952)% + --(5.550,1.947)--(5.558,1.944)--(5.566,1.939)--(5.573,1.936)--(5.581,1.931)--(5.589,1.927)% + --(5.597,1.924)--(5.605,1.919)--(5.613,1.916)--(5.620,1.911)--(5.628,1.908)--(5.636,1.903)% + --(5.644,1.900)--(5.652,1.896)--(5.659,1.893)--(5.667,1.888)--(5.675,1.885)--(5.683,1.880)% + --(5.691,1.877)--(5.698,1.872)--(5.706,1.869)--(5.714,1.865)--(5.722,1.862)--(5.730,1.858)% + --(5.737,1.854)--(5.745,1.851)--(5.753,1.846)--(5.761,1.843)--(5.769,1.840)--(5.777,1.835)% + --(5.784,1.832)--(5.792,1.827)--(5.800,1.824)--(5.808,1.821)--(5.816,1.816)--(5.823,1.813)% + --(5.831,1.810)--(5.839,1.806)--(5.847,1.802)--(5.855,1.799)--(5.862,1.795)--(5.870,1.792)% + --(5.878,1.789)--(5.886,1.785)--(5.894,1.781)--(5.902,1.778)--(5.909,1.775)--(5.917,1.770)% + --(5.925,1.767)--(5.933,1.764)--(5.941,1.761)--(5.948,1.756)--(5.956,1.753)--(5.964,1.750)% + --(5.972,1.747)--(5.980,1.743)--(5.987,1.739)--(5.995,1.736)--(6.003,1.733)--(6.011,1.730)% + --(6.019,1.726)--(6.026,1.723)--(6.034,1.719)--(6.042,1.716)--(6.050,1.712)--(6.058,1.709)% + --(6.066,1.706)--(6.073,1.703)--(6.081,1.700)--(6.089,1.695)--(6.097,1.692)--(6.105,1.689)% + --(6.112,1.686)--(6.120,1.683)--(6.128,1.680)--(6.136,1.677)--(6.144,1.674)--(6.151,1.670)% + --(6.159,1.667)--(6.167,1.664)--(6.175,1.661)--(6.183,1.658)--(6.191,1.655)--(6.198,1.650)% + --(6.206,1.647)--(6.214,1.644)--(6.222,1.641)--(6.230,1.638)--(6.237,1.635)--(6.245,1.632)% + --(6.253,1.629)--(6.261,1.625)--(6.269,1.624)--(6.276,1.621)--(6.284,1.618)--(6.292,1.615)% + --(6.300,1.611)--(6.308,1.608)--(6.315,1.605)--(6.323,1.602)--(6.331,1.599)--(6.339,1.596)% + --(6.347,1.593)--(6.355,1.590)--(6.362,1.587)--(6.370,1.584)--(6.378,1.582)--(6.386,1.579)% + --(6.394,1.576)--(6.401,1.573)--(6.409,1.570)--(6.417,1.566)--(6.425,1.563)--(6.433,1.560)% + --(6.440,1.559)--(6.448,1.556)--(6.456,1.552)--(6.464,1.549)--(6.472,1.546)--(6.480,1.545)% + --(6.487,1.542)--(6.495,1.538)--(6.503,1.535)--(6.511,1.532)--(6.519,1.531)--(6.526,1.528)% + --(6.534,1.525)--(6.542,1.521)--(6.550,1.518)--(6.558,1.517)--(6.565,1.514)--(6.573,1.511)% + --(6.581,1.507)--(6.589,1.506)--(6.597,1.503)--(6.604,1.500)--(6.612,1.497)--(6.620,1.495)% + --(6.628,1.492)--(6.636,1.489)--(6.644,1.487)--(6.651,1.484)--(6.659,1.481)--(6.667,1.479)% + --(6.675,1.476)--(6.683,1.473)--(6.690,1.470)--(6.698,1.469)--(6.706,1.465)--(6.714,1.464)% + --(6.722,1.461)--(6.729,1.458)--(6.737,1.456)--(6.745,1.453)--(6.753,1.450)--(6.761,1.448)% + --(6.768,1.445)--(6.776,1.442)--(6.784,1.441)--(6.792,1.438)--(6.800,1.436)--(6.808,1.433)% + --(6.815,1.430)--(6.823,1.428)--(6.831,1.425)--(6.839,1.424)--(6.847,1.420)--(6.854,1.419)% + --(6.862,1.416)--(6.870,1.413)--(6.878,1.411)--(6.886,1.408)--(6.893,1.406)--(6.901,1.403)% + --(6.909,1.402)--(6.917,1.399)--(6.925,1.397)--(6.933,1.394)--(6.940,1.393)--(6.948,1.389)% + --(6.956,1.388)--(6.964,1.385)--(6.972,1.383)--(6.979,1.380)--(6.987,1.379)--(6.995,1.375)% + --(7.003,1.374)--(7.011,1.371)--(7.018,1.369)--(7.026,1.366)--(7.034,1.365)--(7.042,1.361)% + --(7.050,1.360)--(7.057,1.357)--(7.065,1.355)--(7.073,1.352)--(7.081,1.351)--(7.089,1.349)% + --(7.097,1.346)--(7.104,1.344)--(7.112,1.341)--(7.120,1.340)--(7.128,1.337)--(7.136,1.335)% + --(7.143,1.333)--(7.151,1.330)--(7.159,1.329)--(7.167,1.326)--(7.175,1.324)--(7.182,1.323)% + --(7.190,1.320)--(7.198,1.318)--(7.206,1.316)--(7.214,1.313)--(7.222,1.312)--(7.229,1.309)% + --(7.237,1.307)--(7.245,1.306)--(7.253,1.302)--(7.261,1.301)--(7.268,1.299)--(7.276,1.296)% + --(7.284,1.295)--(7.292,1.293)--(7.300,1.290)--(7.307,1.288)--(7.315,1.287)--(7.323,1.285)% + --(7.331,1.282)--(7.339,1.281)--(7.346,1.279)--(7.354,1.276)--(7.362,1.274)--(7.370,1.273)% + --(7.378,1.270)--(7.386,1.268)--(7.393,1.267)--(7.401,1.265)--(7.409,1.262)--(7.417,1.260)% + --(7.425,1.259)--(7.432,1.257)--(7.440,1.254)--(7.448,1.253)--(7.456,1.251)--(7.464,1.250)% + --(7.471,1.247)--(7.479,1.245)--(7.487,1.243)--(7.495,1.242)--(7.503,1.239)--(7.511,1.237)% + --(7.518,1.236)--(7.526,1.234)--(7.534,1.233)--(7.542,1.229)--(7.550,1.228)--(7.557,1.226)% + --(7.565,1.225)--(7.573,1.223)--(7.581,1.220)--(7.589,1.219)--(7.596,1.217)--(7.604,1.215)% + --(7.612,1.214)--(7.620,1.212)--(7.628,1.209)--(7.635,1.208)--(7.643,1.206)--(7.651,1.205)% + --(7.659,1.203)--(7.667,1.201)--(7.675,1.200)--(7.682,1.197)--(7.690,1.195)--(7.698,1.194)% + --(7.706,1.192)--(7.714,1.191)--(7.721,1.189)--(7.729,1.188)--(7.737,1.186)--(7.745,1.183)% + --(7.753,1.181)--(7.760,1.180)--(7.768,1.178)--(7.776,1.177)--(7.784,1.175)--(7.792,1.174)% + --(7.800,1.172)--(7.807,1.170)--(7.815,1.169)--(7.823,1.167)--(7.831,1.164)--(7.839,1.163)% + --(7.846,1.161)--(7.854,1.160)--(7.862,1.158)--(7.870,1.156)--(7.878,1.155)--(7.885,1.153)% + --(7.893,1.152)--(7.901,1.150)--(7.909,1.149)--(7.917,1.147)--(7.924,1.146)--(7.932,1.144)% + --(7.940,1.142)--(7.948,1.141)--(7.956,1.139)--(7.964,1.138)--(7.971,1.136)--(7.979,1.135)% + --(7.987,1.133)--(7.995,1.132)--(8.003,1.130)--(8.010,1.128)--(8.018,1.127)--(8.026,1.125)% + --(8.034,1.124)--(8.042,1.122)--(8.049,1.121)--(8.057,1.119)--(8.065,1.118)--(8.073,1.116)% + --(8.081,1.115)--(8.089,1.113)--(8.096,1.111)--(8.104,1.110)--(8.112,1.108)--(8.120,1.107)% + --(8.128,1.105)--(8.135,1.104)--(8.143,1.102)--(8.151,1.101)--(8.159,1.099)--(8.167,1.097)% + --(8.174,1.096)--(8.182,1.094)--(8.190,1.093)--(8.198,1.091)--(8.206,1.091)--(8.213,1.090)% + --(8.221,1.088)--(8.229,1.087)--(8.237,1.085)--(8.245,1.083)--(8.253,1.082)--(8.260,1.080)% + --(8.268,1.079)--(8.276,1.077)--(8.284,1.076)--(8.292,1.074)--(8.299,1.074)--(8.307,1.073)% + --(8.315,1.071)--(8.323,1.069)--(8.331,1.068)--(8.338,1.066)--(8.346,1.065)--(8.354,1.063)% + --(8.362,1.063)--(8.370,1.062)--(8.378,1.060)--(8.385,1.059)--(8.393,1.057)--(8.401,1.055)% + --(8.409,1.054)--(8.417,1.052)--(8.424,1.052)--(8.432,1.051)--(8.440,1.049)--(8.448,1.048)% + --(8.456,1.046)--(8.463,1.045)--(8.471,1.045)--(8.479,1.043)--(8.487,1.042)--(8.495,1.040)% + --(8.502,1.038)--(8.510,1.037)--(8.518,1.037)--(8.526,1.035)--(8.534,1.034)--(8.542,1.032)% + --(8.549,1.031)--(8.557,1.031)--(8.565,1.029)--(8.573,1.028)--(8.581,1.026)--(8.588,1.024)% + --(8.596,1.024)--(8.604,1.023)--(8.612,1.021)--(8.620,1.020)--(8.627,1.018)--(8.635,1.018)% + --(8.643,1.017)--(8.651,1.015)--(8.659,1.014)--(8.667,1.012)--(8.674,1.012)--(8.682,1.010)% + --(8.690,1.009)--(8.698,1.007)--(8.706,1.007)--(8.713,1.006)--(8.721,1.004)--(8.729,1.003)% + --(8.737,1.003)--(8.745,1.001)--(8.752,1.000)--(8.760,0.998)--(8.768,0.998)--(8.776,0.996)% + --(8.784,0.995)--(8.791,0.993)--(8.799,0.993)--(8.807,0.992)--(8.815,0.990)--(8.823,0.989)% + --(8.831,0.989)--(8.838,0.987)--(8.846,0.986)--(8.854,0.984)--(8.862,0.984)--(8.870,0.983)% + --(8.877,0.981)--(8.885,0.981)--(8.893,0.979)--(8.901,0.978)--(8.909,0.978)--(8.916,0.976)% + --(8.924,0.975)--(8.932,0.973)--(8.940,0.973)--(8.948,0.972)--(8.955,0.970)--(8.963,0.970)% + --(8.971,0.969)--(8.979,0.967)--(8.987,0.967)--(8.995,0.965)--(9.002,0.964)--(9.010,0.964)% + --(9.018,0.962)--(9.026,0.961)--(9.034,0.959)--(9.041,0.959)--(9.049,0.958)--(9.057,0.956)% + --(9.065,0.956)--(9.073,0.955)--(9.080,0.953)--(9.088,0.953)--(9.096,0.951)--(9.104,0.951)% + --(9.112,0.950)--(9.120,0.948)--(9.127,0.948)--(9.135,0.947)--(9.143,0.945)--(9.151,0.945)% + --(9.159,0.944)--(9.166,0.942)--(9.174,0.942)--(9.182,0.941)--(9.190,0.939)--(9.198,0.939)% + --(9.205,0.937)--(9.213,0.937)--(9.221,0.936)--(9.229,0.934)--(9.237,0.934)--(9.244,0.933)% + --(9.252,0.931)--(9.260,0.931)--(9.268,0.930)--(9.276,0.930)--(9.284,0.928)--(9.291,0.927)% + --(9.299,0.927)--(9.307,0.925)--(9.315,0.925)--(9.323,0.923)--(9.330,0.922)--(9.338,0.922)% + --(9.346,0.920)--(9.354,0.920)--(9.362,0.919)--(9.369,0.917)--(9.377,0.917)--(9.385,0.916)% + --(9.393,0.916)--(9.401,0.914)--(9.409,0.913)--(9.416,0.913)--(9.424,0.911)--(9.432,0.911)% + --(9.440,0.910)--(9.448,0.910)--(9.455,0.908)--(9.463,0.906)--(9.471,0.906)--(9.479,0.905)% + --(9.487,0.905)--(9.494,0.903)--(9.502,0.903)--(9.510,0.902)--(9.518,0.900)--(9.526,0.900)% + --(9.533,0.899)--(9.541,0.899)--(9.549,0.897)--(9.557,0.897)--(9.565,0.896)--(9.573,0.896)% + --(9.580,0.894)--(9.588,0.894)--(9.596,0.892)--(9.604,0.891)--(9.612,0.891)--(9.619,0.889)% + --(9.627,0.889)--(9.635,0.888)--(9.643,0.888)--(9.651,0.886)--(9.658,0.886)--(9.666,0.885)% + --(9.674,0.885)--(9.682,0.883)--(9.690,0.883)--(9.698,0.882)--(9.705,0.882)--(9.713,0.880)% + --(9.721,0.880)--(9.729,0.878)--(9.737,0.878)--(9.744,0.877)--(9.752,0.877)--(9.760,0.875)% + --(9.768,0.875)--(9.776,0.874)--(9.783,0.874)--(9.791,0.872)--(9.799,0.872)--(9.807,0.871)% + --(9.815,0.871)--(9.822,0.869)--(9.830,0.869)--(9.838,0.868)--(9.846,0.868)--(9.854,0.866)% + --(9.862,0.866)--(9.869,0.864)--(9.877,0.864)--(9.885,0.863)--(9.893,0.863)--(9.901,0.861)% + --(9.908,0.861)--(9.916,0.860)--(9.924,0.860)--(9.932,0.858)--(9.940,0.858)--(9.947,0.857)% + --(9.955,0.857)--(9.963,0.855)--(9.971,0.855)--(9.979,0.854)--(9.987,0.854)--(9.994,0.852)% + --(10.002,0.852)--(10.010,0.852)--(10.018,0.851)--(10.026,0.851)--(10.033,0.849)--(10.041,0.849)% + --(10.049,0.847)--(10.057,0.847)--(10.065,0.846)--(10.072,0.846)--(10.080,0.844)--(10.088,0.844)% + --(10.096,0.844)--(10.104,0.843)--(10.111,0.843)--(10.119,0.841)--(10.127,0.841)--(10.135,0.840)% + --(10.143,0.840)--(10.151,0.840)--(10.158,0.838)--(10.166,0.838)--(10.174,0.837)--(10.182,0.837)% + --(10.190,0.835)--(10.197,0.835)--(10.205,0.833)--(10.213,0.833)--(10.221,0.833)--(10.229,0.832)% + --(10.236,0.832)--(10.244,0.830)--(10.252,0.830)--(10.260,0.830)--(10.268,0.829)--(10.276,0.829)% + --(10.283,0.827)--(10.291,0.827)--(10.299,0.826)--(10.307,0.826)--(10.315,0.826)--(10.322,0.824)% + --(10.330,0.824)--(10.338,0.823)--(10.346,0.823)--(10.354,0.823)--(10.361,0.821)--(10.369,0.821)% + --(10.377,0.819)--(10.385,0.819)--(10.393,0.819)--(10.400,0.818)--(10.408,0.818)--(10.416,0.816)% + --(10.424,0.816)--(10.432,0.816)--(10.440,0.815)--(10.447,0.815)--(10.455,0.813)--(10.463,0.813)% + --(10.471,0.813)--(10.479,0.812)--(10.486,0.812)--(10.494,0.812)--(10.502,0.810)--(10.510,0.810)% + --(10.518,0.809)--(10.525,0.809)--(10.533,0.809)--(10.541,0.807)--(10.549,0.807)--(10.557,0.807)% + --(10.565,0.805)--(10.572,0.805)--(10.580,0.804)--(10.588,0.804)--(10.596,0.804)--(10.604,0.802)% + --(10.611,0.802)--(10.619,0.802)--(10.627,0.801)--(10.635,0.801)--(10.643,0.801)--(10.650,0.799)% + --(10.658,0.799)--(10.666,0.798)--(10.674,0.798)--(10.682,0.798)--(10.689,0.796)--(10.697,0.796)% + --(10.705,0.796)--(10.713,0.795)--(10.721,0.795)--(10.729,0.795)--(10.736,0.793)--(10.744,0.793)% + --(10.752,0.793)--(10.760,0.791)--(10.768,0.791)--(10.775,0.791)--(10.783,0.790)--(10.791,0.790)% + --(10.799,0.790)--(10.807,0.788)--(10.814,0.788)--(10.822,0.788)--(10.830,0.787)--(10.838,0.787)% + --(10.846,0.787)--(10.854,0.785)--(10.861,0.785)--(10.869,0.785)--(10.877,0.784)--(10.885,0.784)% + --(10.893,0.784)--(10.900,0.782)--(10.908,0.782)--(10.916,0.782)--(10.924,0.781)--(10.932,0.781)% + --(10.939,0.781)--(10.947,0.779)--(10.955,0.779)--(10.963,0.779)--(10.971,0.778)--(10.978,0.778)% + --(10.986,0.778)--(10.994,0.776)--(11.002,0.776)--(11.010,0.776)--(11.018,0.774)--(11.025,0.774)% + --(11.033,0.774)--(11.041,0.774)--(11.049,0.773)--(11.057,0.773)--(11.064,0.773)--(11.072,0.771)% + --(11.080,0.771)--(11.088,0.771)--(11.096,0.770)--(11.103,0.770)--(11.111,0.770)--(11.119,0.768)% + --(11.127,0.768)--(11.135,0.768)--(11.142,0.768)--(11.150,0.767)--(11.158,0.767)--(11.166,0.767)% + --(11.174,0.765)--(11.182,0.765)--(11.189,0.765)--(11.197,0.765)--(11.205,0.764)--(11.213,0.764)% + --(11.221,0.764)--(11.228,0.762)--(11.236,0.762)--(11.244,0.762)--(11.252,0.762)--(11.260,0.760)% + --(11.267,0.760)--(11.275,0.760)--(11.283,0.759)--(11.291,0.759)--(11.299,0.759)--(11.307,0.759)% + --(11.314,0.757)--(11.322,0.757)--(11.330,0.757)--(11.338,0.756)--(11.346,0.756); +\gpcolor{color=gp lt color border} +\node[gp node right] at (10.479,7.35) {Theorie}; +\gpcolor{rgb color={0.000,0.620,0.451}} +\draw[gp path] (10.663,7.35)--(11.579,7.35); +\draw[gp path] (1.012,8.381)--(1.020,8.358)--(1.028,8.334)--(1.035,8.311)--(1.043,8.288)% + --(1.051,8.265)--(1.059,8.241)--(1.067,8.218)--(1.074,8.195)--(1.082,8.171)--(1.090,8.150)% + --(1.098,8.126)--(1.106,8.103)--(1.114,8.081)--(1.121,8.058)--(1.129,8.036)--(1.137,8.013)% + --(1.145,7.991)--(1.153,7.969)--(1.160,7.946)--(1.168,7.924)--(1.176,7.903)--(1.184,7.881)% + --(1.192,7.858)--(1.199,7.836)--(1.207,7.814)--(1.215,7.792)--(1.223,7.771)--(1.231,7.749)% + --(1.239,7.727)--(1.246,7.707)--(1.254,7.685)--(1.262,7.664)--(1.270,7.642)--(1.278,7.620)% + --(1.285,7.600)--(1.293,7.578)--(1.301,7.558)--(1.309,7.536)--(1.317,7.516)--(1.324,7.494)% + --(1.332,7.474)--(1.340,7.452)--(1.348,7.432)--(1.356,7.412)--(1.363,7.392)--(1.371,7.370)% + --(1.379,7.350)--(1.387,7.330)--(1.395,7.309)--(1.403,7.289)--(1.410,7.269)--(1.418,7.249)% + --(1.426,7.229)--(1.434,7.208)--(1.442,7.188)--(1.449,7.170)--(1.457,7.149)--(1.465,7.129)% + --(1.473,7.109)--(1.481,7.090)--(1.488,7.070)--(1.496,7.052)--(1.504,7.031)--(1.512,7.013)% + --(1.520,6.993)--(1.528,6.974)--(1.535,6.954)--(1.543,6.935)--(1.551,6.917)--(1.559,6.896)% + --(1.567,6.878)--(1.574,6.859)--(1.582,6.840)--(1.590,6.822)--(1.598,6.803)--(1.606,6.783)% + --(1.613,6.764)--(1.621,6.746)--(1.629,6.729)--(1.637,6.710)--(1.645,6.691)--(1.652,6.673)% + --(1.660,6.654)--(1.668,6.635)--(1.676,6.618)--(1.684,6.600)--(1.692,6.581)--(1.699,6.564)% + --(1.707,6.545)--(1.715,6.528)--(1.723,6.510)--(1.731,6.493)--(1.738,6.474)--(1.746,6.457)% + --(1.754,6.438)--(1.762,6.421)--(1.770,6.404)--(1.777,6.385)--(1.785,6.368)--(1.793,6.351)% + --(1.801,6.334)--(1.809,6.317)--(1.817,6.298)--(1.824,6.281)--(1.832,6.264)--(1.840,6.247)% + --(1.848,6.230)--(1.856,6.213)--(1.863,6.197)--(1.871,6.180)--(1.879,6.163)--(1.887,6.146)% + --(1.895,6.129)--(1.902,6.112)--(1.910,6.097)--(1.918,6.079)--(1.926,6.062)--(1.934,6.047)% + --(1.941,6.030)--(1.949,6.014)--(1.957,5.997)--(1.965,5.982)--(1.973,5.965)--(1.981,5.949)% + --(1.988,5.932)--(1.996,5.916)--(2.004,5.901)--(2.012,5.884)--(2.020,5.868)--(2.027,5.853)% + --(2.035,5.837)--(2.043,5.822)--(2.051,5.805)--(2.059,5.789)--(2.066,5.774)--(2.074,5.758)% + --(2.082,5.742)--(2.090,5.727)--(2.098,5.711)--(2.106,5.696)--(2.113,5.680)--(2.121,5.666)% + --(2.129,5.651)--(2.137,5.635)--(2.145,5.620)--(2.152,5.604)--(2.160,5.590)--(2.168,5.575)% + --(2.176,5.559)--(2.184,5.545)--(2.191,5.530)--(2.199,5.516)--(2.207,5.500)--(2.215,5.485)% + --(2.223,5.471)--(2.230,5.457)--(2.238,5.441)--(2.246,5.427)--(2.254,5.412)--(2.262,5.398)% + --(2.270,5.384)--(2.277,5.368)--(2.285,5.354)--(2.293,5.340)--(2.301,5.326)--(2.309,5.311)% + --(2.316,5.297)--(2.324,5.283)--(2.332,5.269)--(2.340,5.255)--(2.348,5.241)--(2.355,5.227)% + --(2.363,5.213)--(2.371,5.199)--(2.379,5.185)--(2.387,5.171)--(2.394,5.157)--(2.402,5.145)% + --(2.410,5.131)--(2.418,5.117)--(2.426,5.103)--(2.434,5.089)--(2.441,5.076)--(2.449,5.062)% + --(2.457,5.048)--(2.465,5.036)--(2.473,5.022)--(2.480,5.008)--(2.488,4.995)--(2.496,4.981)% + --(2.504,4.969)--(2.512,4.955)--(2.519,4.943)--(2.527,4.930)--(2.535,4.916)--(2.543,4.904)% + --(2.551,4.890)--(2.559,4.877)--(2.566,4.865)--(2.574,4.851)--(2.582,4.839)--(2.590,4.826)% + --(2.598,4.814)--(2.605,4.801)--(2.613,4.787)--(2.621,4.775)--(2.629,4.763)--(2.637,4.750)% + --(2.644,4.738)--(2.652,4.725)--(2.660,4.713)--(2.668,4.700)--(2.676,4.688)--(2.683,4.676)% + --(2.691,4.663)--(2.699,4.651)--(2.707,4.640)--(2.715,4.627)--(2.723,4.615)--(2.730,4.603)% + --(2.738,4.590)--(2.746,4.579)--(2.754,4.567)--(2.762,4.554)--(2.769,4.542)--(2.777,4.531)% + --(2.785,4.519)--(2.793,4.508)--(2.801,4.495)--(2.808,4.483)--(2.816,4.472)--(2.824,4.460)% + --(2.832,4.449)--(2.840,4.436)--(2.848,4.426)--(2.855,4.415)--(2.863,4.402)--(2.871,4.391)% + --(2.879,4.379)--(2.887,4.368)--(2.894,4.357)--(2.902,4.346)--(2.910,4.334)--(2.918,4.323)% + --(2.926,4.312)--(2.933,4.301)--(2.941,4.289)--(2.949,4.278)--(2.957,4.267)--(2.965,4.256)% + --(2.972,4.245)--(2.980,4.234)--(2.988,4.224)--(2.996,4.213)--(3.004,4.202)--(3.012,4.191)% + --(3.019,4.180)--(3.027,4.169)--(3.035,4.158)--(3.043,4.148)--(3.051,4.137)--(3.058,4.126)% + --(3.066,4.115)--(3.074,4.106)--(3.082,4.095)--(3.090,4.084)--(3.097,4.073)--(3.105,4.064)% + --(3.113,4.053)--(3.121,4.042)--(3.129,4.031)--(3.137,4.022)--(3.144,4.011)--(3.152,4.002)% + --(3.160,3.991)--(3.168,3.980)--(3.176,3.970)--(3.183,3.960)--(3.191,3.950)--(3.199,3.939)% + --(3.207,3.930)--(3.215,3.919)--(3.222,3.910)--(3.230,3.901)--(3.238,3.890)--(3.246,3.880)% + --(3.254,3.870)--(3.261,3.860)--(3.269,3.851)--(3.277,3.840)--(3.285,3.831)--(3.293,3.821)% + --(3.301,3.812)--(3.308,3.801)--(3.316,3.792)--(3.324,3.783)--(3.332,3.773)--(3.340,3.764)% + --(3.347,3.755)--(3.355,3.744)--(3.363,3.734)--(3.371,3.725)--(3.379,3.716)--(3.386,3.706)% + --(3.394,3.697)--(3.402,3.688)--(3.410,3.679)--(3.418,3.669)--(3.426,3.660)--(3.433,3.651)% + --(3.441,3.641)--(3.449,3.633)--(3.457,3.624)--(3.465,3.615)--(3.472,3.606)--(3.480,3.596)% + --(3.488,3.587)--(3.496,3.579)--(3.504,3.570)--(3.511,3.560)--(3.519,3.551)--(3.527,3.543)% + --(3.535,3.534)--(3.543,3.525)--(3.550,3.515)--(3.558,3.508)--(3.566,3.498)--(3.574,3.491)% + --(3.582,3.481)--(3.590,3.472)--(3.597,3.464)--(3.605,3.455)--(3.613,3.447)--(3.621,3.438)% + --(3.629,3.430)--(3.636,3.421)--(3.644,3.413)--(3.652,3.404)--(3.660,3.396)--(3.668,3.387)% + --(3.675,3.379)--(3.683,3.371)--(3.691,3.362)--(3.699,3.354)--(3.707,3.346)--(3.715,3.337)% + --(3.722,3.329)--(3.730,3.321)--(3.738,3.312)--(3.746,3.304)--(3.754,3.296)--(3.761,3.289)% + --(3.769,3.281)--(3.777,3.272)--(3.785,3.264)--(3.793,3.256)--(3.800,3.248)--(3.808,3.241)% + --(3.816,3.233)--(3.824,3.225)--(3.832,3.216)--(3.839,3.208)--(3.847,3.200)--(3.855,3.192)% + --(3.863,3.185)--(3.871,3.177)--(3.879,3.169)--(3.886,3.161)--(3.894,3.154)--(3.902,3.146)% + --(3.910,3.138)--(3.918,3.132)--(3.925,3.124)--(3.933,3.116)--(3.941,3.109)--(3.949,3.101)% + --(3.957,3.093)--(3.964,3.085)--(3.972,3.079)--(3.980,3.071)--(3.988,3.064)--(3.996,3.056)% + --(4.004,3.048)--(4.011,3.042)--(4.019,3.034)--(4.027,3.026)--(4.035,3.020)--(4.043,3.012)% + --(4.050,3.005)--(4.058,2.998)--(4.066,2.991)--(4.074,2.983)--(4.082,2.977)--(4.089,2.969)% + --(4.097,2.963)--(4.105,2.955)--(4.113,2.947)--(4.121,2.941)--(4.128,2.933)--(4.136,2.927)% + --(4.144,2.919)--(4.152,2.913)--(4.160,2.905)--(4.168,2.899)--(4.175,2.891)--(4.183,2.885)% + --(4.191,2.879)--(4.199,2.871)--(4.207,2.865)--(4.214,2.857)--(4.222,2.851)--(4.230,2.845)% + --(4.238,2.837)--(4.246,2.831)--(4.253,2.824)--(4.261,2.817)--(4.269,2.810)--(4.277,2.804)% + --(4.285,2.798)--(4.293,2.790)--(4.300,2.784)--(4.308,2.778)--(4.316,2.772)--(4.324,2.764)% + --(4.332,2.758)--(4.339,2.751)--(4.347,2.745)--(4.355,2.739)--(4.363,2.733)--(4.371,2.727)% + --(4.378,2.719)--(4.386,2.713)--(4.394,2.706)--(4.402,2.700)--(4.410,2.694)--(4.417,2.688)% + --(4.425,2.681)--(4.433,2.675)--(4.441,2.669)--(4.449,2.663)--(4.457,2.657)--(4.464,2.650)% + --(4.472,2.644)--(4.480,2.638)--(4.488,2.632)--(4.496,2.626)--(4.503,2.619)--(4.511,2.613)% + --(4.519,2.608)--(4.527,2.602)--(4.535,2.596)--(4.542,2.590)--(4.550,2.584)--(4.558,2.577)% + --(4.566,2.571)--(4.574,2.567)--(4.581,2.560)--(4.589,2.554)--(4.597,2.548)--(4.605,2.542)% + --(4.613,2.537)--(4.621,2.531)--(4.628,2.525)--(4.636,2.520)--(4.644,2.514)--(4.652,2.508)% + --(4.660,2.501)--(4.667,2.497)--(4.675,2.490)--(4.683,2.484)--(4.691,2.480)--(4.699,2.473)% + --(4.706,2.469)--(4.714,2.463)--(4.722,2.456)--(4.730,2.452)--(4.738,2.445)--(4.746,2.441)% + --(4.753,2.435)--(4.761,2.430)--(4.769,2.424)--(4.777,2.417)--(4.785,2.413)--(4.792,2.407)% + --(4.800,2.402)--(4.808,2.396)--(4.816,2.391)--(4.824,2.386)--(4.831,2.380)--(4.839,2.376)% + --(4.847,2.369)--(4.855,2.365)--(4.863,2.358)--(4.870,2.354)--(4.878,2.349)--(4.886,2.343)% + --(4.894,2.338)--(4.902,2.334)--(4.910,2.327)--(4.917,2.323)--(4.925,2.318)--(4.933,2.312)% + --(4.941,2.307)--(4.949,2.303)--(4.956,2.296)--(4.964,2.292)--(4.972,2.287)--(4.980,2.282)% + --(4.988,2.276)--(4.995,2.271)--(5.003,2.267)--(5.011,2.262)--(5.019,2.256)--(5.027,2.251)% + --(5.035,2.247)--(5.042,2.242)--(5.050,2.237)--(5.058,2.233)--(5.066,2.226)--(5.074,2.222)% + --(5.081,2.217)--(5.089,2.212)--(5.097,2.208)--(5.105,2.203)--(5.113,2.199)--(5.120,2.194)% + --(5.128,2.189)--(5.136,2.183)--(5.144,2.178)--(5.152,2.174)--(5.159,2.169)--(5.167,2.164)% + --(5.175,2.160)--(5.183,2.155)--(5.191,2.150)--(5.199,2.146)--(5.206,2.141)--(5.214,2.136)% + --(5.222,2.132)--(5.230,2.127)--(5.238,2.122)--(5.245,2.119)--(5.253,2.115)--(5.261,2.110)% + --(5.269,2.105)--(5.277,2.101)--(5.284,2.096)--(5.292,2.091)--(5.300,2.087)--(5.308,2.082)% + --(5.316,2.079)--(5.324,2.074)--(5.331,2.070)--(5.339,2.065)--(5.347,2.060)--(5.355,2.056)% + --(5.363,2.053)--(5.370,2.048)--(5.378,2.043)--(5.386,2.039)--(5.394,2.034)--(5.402,2.031)% + --(5.409,2.026)--(5.417,2.021)--(5.425,2.017)--(5.433,2.014)--(5.441,2.009)--(5.448,2.004)% + --(5.456,2.001)--(5.464,1.997)--(5.472,1.992)--(5.480,1.987)--(5.488,1.984)--(5.495,1.980)% + --(5.503,1.975)--(5.511,1.972)--(5.519,1.967)--(5.527,1.964)--(5.534,1.959)--(5.542,1.955)% + --(5.550,1.952)--(5.558,1.947)--(5.566,1.944)--(5.573,1.939)--(5.581,1.934)--(5.589,1.931)% + --(5.597,1.927)--(5.605,1.924)--(5.613,1.919)--(5.620,1.916)--(5.628,1.911)--(5.636,1.908)% + --(5.644,1.903)--(5.652,1.899)--(5.659,1.896)--(5.667,1.893)--(5.675,1.888)--(5.683,1.885)% + --(5.691,1.880)--(5.698,1.877)--(5.706,1.872)--(5.714,1.869)--(5.722,1.865)--(5.730,1.862)% + --(5.737,1.857)--(5.745,1.854)--(5.753,1.851)--(5.761,1.846)--(5.769,1.843)--(5.777,1.838)% + --(5.784,1.835)--(5.792,1.832)--(5.800,1.827)--(5.808,1.824)--(5.816,1.821)--(5.823,1.816)% + --(5.831,1.813)--(5.839,1.810)--(5.847,1.806)--(5.855,1.802)--(5.862,1.799)--(5.870,1.795)% + --(5.878,1.792)--(5.886,1.789)--(5.894,1.784)--(5.902,1.781)--(5.909,1.778)--(5.917,1.775)% + --(5.925,1.770)--(5.933,1.767)--(5.941,1.764)--(5.948,1.761)--(5.956,1.756)--(5.964,1.753)% + --(5.972,1.750)--(5.980,1.747)--(5.987,1.743)--(5.995,1.739)--(6.003,1.736)--(6.011,1.733)% + --(6.019,1.730)--(6.026,1.726)--(6.034,1.722)--(6.042,1.719)--(6.050,1.716)--(6.058,1.712)% + --(6.066,1.709)--(6.073,1.706)--(6.081,1.703)--(6.089,1.698)--(6.097,1.695)--(6.105,1.692)% + --(6.112,1.689)--(6.120,1.686)--(6.128,1.683)--(6.136,1.680)--(6.144,1.677)--(6.151,1.674)% + --(6.159,1.670)--(6.167,1.667)--(6.175,1.664)--(6.183,1.661)--(6.191,1.658)--(6.198,1.655)% + --(6.206,1.652)--(6.214,1.647)--(6.222,1.644)--(6.230,1.641)--(6.237,1.638)--(6.245,1.635)% + --(6.253,1.632)--(6.261,1.630)--(6.269,1.627)--(6.276,1.624)--(6.284,1.621)--(6.292,1.618)% + --(6.300,1.615)--(6.308,1.611)--(6.315,1.608)--(6.323,1.605)--(6.331,1.602)--(6.339,1.599)% + --(6.347,1.596)--(6.355,1.593)--(6.362,1.590)--(6.370,1.587)--(6.378,1.585)--(6.386,1.582)% + --(6.394,1.579)--(6.401,1.576)--(6.409,1.573)--(6.417,1.570)--(6.425,1.566)--(6.433,1.563)% + --(6.440,1.562)--(6.448,1.559)--(6.456,1.556)--(6.464,1.552)--(6.472,1.549)--(6.480,1.546)% + --(6.487,1.545)--(6.495,1.542)--(6.503,1.538)--(6.511,1.535)--(6.519,1.532)--(6.526,1.531)% + --(6.534,1.528)--(6.542,1.525)--(6.550,1.521)--(6.558,1.520)--(6.565,1.517)--(6.573,1.514)% + --(6.581,1.511)--(6.589,1.509)--(6.597,1.506)--(6.604,1.503)--(6.612,1.500)--(6.620,1.498)% + --(6.628,1.495)--(6.636,1.492)--(6.644,1.489)--(6.651,1.487)--(6.659,1.484)--(6.667,1.481)% + --(6.675,1.479)--(6.683,1.476)--(6.690,1.473)--(6.698,1.472)--(6.706,1.469)--(6.714,1.465)% + --(6.722,1.464)--(6.729,1.461)--(6.737,1.458)--(6.745,1.456)--(6.753,1.453)--(6.761,1.450)% + --(6.768,1.448)--(6.776,1.445)--(6.784,1.444)--(6.792,1.441)--(6.800,1.438)--(6.808,1.436)% + --(6.815,1.433)--(6.823,1.431)--(6.831,1.428)--(6.839,1.425)--(6.847,1.424)--(6.854,1.420)% + --(6.862,1.419)--(6.870,1.416)--(6.878,1.414)--(6.886,1.411)--(6.893,1.408)--(6.901,1.406)% + --(6.909,1.403)--(6.917,1.402)--(6.925,1.399)--(6.933,1.397)--(6.940,1.394)--(6.948,1.393)% + --(6.956,1.389)--(6.964,1.388)--(6.972,1.385)--(6.979,1.383)--(6.987,1.380)--(6.995,1.379)% + --(7.003,1.375)--(7.011,1.374)--(7.018,1.371)--(7.026,1.369)--(7.034,1.366)--(7.042,1.365)% + --(7.050,1.361)--(7.057,1.360)--(7.065,1.358)--(7.073,1.355)--(7.081,1.354)--(7.089,1.351)% + --(7.097,1.349)--(7.104,1.346)--(7.112,1.344)--(7.120,1.343)--(7.128,1.340)--(7.136,1.338)% + --(7.143,1.335)--(7.151,1.333)--(7.159,1.332)--(7.167,1.329)--(7.175,1.327)--(7.182,1.324)% + --(7.190,1.323)--(7.198,1.321)--(7.206,1.318)--(7.214,1.316)--(7.222,1.313)--(7.229,1.312)% + --(7.237,1.310)--(7.245,1.307)--(7.253,1.306)--(7.261,1.304)--(7.268,1.301)--(7.276,1.299)% + --(7.284,1.298)--(7.292,1.295)--(7.300,1.293)--(7.307,1.292)--(7.315,1.288)--(7.323,1.287)% + --(7.331,1.285)--(7.339,1.284)--(7.346,1.281)--(7.354,1.279)--(7.362,1.278)--(7.370,1.274)% + --(7.378,1.273)--(7.386,1.271)--(7.393,1.268)--(7.401,1.267)--(7.409,1.265)--(7.417,1.264)% + --(7.425,1.260)--(7.432,1.259)--(7.440,1.257)--(7.448,1.256)--(7.456,1.253)--(7.464,1.251)% + --(7.471,1.250)--(7.479,1.248)--(7.487,1.245)--(7.495,1.243)--(7.503,1.242)--(7.511,1.240)% + --(7.518,1.239)--(7.526,1.236)--(7.534,1.234)--(7.542,1.233)--(7.550,1.231)--(7.557,1.229)% + --(7.565,1.226)--(7.573,1.225)--(7.581,1.223)--(7.589,1.222)--(7.596,1.220)--(7.604,1.217)% + --(7.612,1.215)--(7.620,1.214)--(7.628,1.212)--(7.635,1.211)--(7.643,1.209)--(7.651,1.206)% + --(7.659,1.205)--(7.667,1.203)--(7.675,1.201)--(7.682,1.200)--(7.690,1.198)--(7.698,1.197)% + --(7.706,1.194)--(7.714,1.192)--(7.721,1.191)--(7.729,1.189)--(7.737,1.188)--(7.745,1.186)% + --(7.753,1.184)--(7.760,1.183)--(7.768,1.181)--(7.776,1.178)--(7.784,1.177)--(7.792,1.175)% + --(7.800,1.174)--(7.807,1.172)--(7.815,1.170)--(7.823,1.169)--(7.831,1.167)--(7.839,1.166)% + --(7.846,1.164)--(7.854,1.163)--(7.862,1.161)--(7.870,1.160)--(7.878,1.156)--(7.885,1.155)% + --(7.893,1.153)--(7.901,1.152)--(7.909,1.150)--(7.917,1.149)--(7.924,1.147)--(7.932,1.146)% + --(7.940,1.144)--(7.948,1.142)--(7.956,1.141)--(7.964,1.139)--(7.971,1.138)--(7.979,1.136)% + --(7.987,1.135)--(7.995,1.133)--(8.003,1.132)--(8.010,1.130)--(8.018,1.128)--(8.026,1.127)% + --(8.034,1.125)--(8.042,1.124)--(8.049,1.122)--(8.057,1.121)--(8.065,1.119)--(8.073,1.118)% + --(8.081,1.116)--(8.089,1.115)--(8.096,1.113)--(8.104,1.111)--(8.112,1.110)--(8.120,1.108)% + --(8.128,1.107)--(8.135,1.105)--(8.143,1.104)--(8.151,1.102)--(8.159,1.101)--(8.167,1.101)% + --(8.174,1.099)--(8.182,1.097)--(8.190,1.096)--(8.198,1.094)--(8.206,1.093)--(8.213,1.091)% + --(8.221,1.090)--(8.229,1.088)--(8.237,1.087)--(8.245,1.085)--(8.253,1.083)--(8.260,1.082)% + --(8.268,1.080)--(8.276,1.080)--(8.284,1.079)--(8.292,1.077)--(8.299,1.076)--(8.307,1.074)% + --(8.315,1.073)--(8.323,1.071)--(8.331,1.069)--(8.338,1.068)--(8.346,1.068)--(8.354,1.066)% + --(8.362,1.065)--(8.370,1.063)--(8.378,1.062)--(8.385,1.060)--(8.393,1.059)--(8.401,1.057)% + --(8.409,1.057)--(8.417,1.055)--(8.424,1.054)--(8.432,1.052)--(8.440,1.051)--(8.448,1.049)% + --(8.456,1.048)--(8.463,1.048)--(8.471,1.046)--(8.479,1.045)--(8.487,1.043)--(8.495,1.042)% + --(8.502,1.040)--(8.510,1.040)--(8.518,1.038)--(8.526,1.037)--(8.534,1.035)--(8.542,1.034)% + --(8.549,1.034)--(8.557,1.032)--(8.565,1.031)--(8.573,1.029)--(8.581,1.028)--(8.588,1.026)% + --(8.596,1.026)--(8.604,1.024)--(8.612,1.023)--(8.620,1.021)--(8.627,1.021)--(8.635,1.020)% + --(8.643,1.018)--(8.651,1.017)--(8.659,1.015)--(8.667,1.015)--(8.674,1.014)--(8.682,1.012)% + --(8.690,1.010)--(8.698,1.010)--(8.706,1.009)--(8.713,1.007)--(8.721,1.006)--(8.729,1.004)% + --(8.737,1.004)--(8.745,1.003)--(8.752,1.001)--(8.760,1.000)--(8.768,1.000)--(8.776,0.998)% + --(8.784,0.996)--(8.791,0.995)--(8.799,0.995)--(8.807,0.993)--(8.815,0.992)--(8.823,0.992)% + --(8.831,0.990)--(8.838,0.989)--(8.846,0.987)--(8.854,0.987)--(8.862,0.986)--(8.870,0.984)% + --(8.877,0.983)--(8.885,0.983)--(8.893,0.981)--(8.901,0.979)--(8.909,0.979)--(8.916,0.978)% + --(8.924,0.976)--(8.932,0.975)--(8.940,0.975)--(8.948,0.973)--(8.955,0.972)--(8.963,0.972)% + --(8.971,0.970)--(8.979,0.969)--(8.987,0.969)--(8.995,0.967)--(9.002,0.965)--(9.010,0.965)% + --(9.018,0.964)--(9.026,0.962)--(9.034,0.962)--(9.041,0.961)--(9.049,0.959)--(9.057,0.959)% + --(9.065,0.958)--(9.073,0.956)--(9.080,0.956)--(9.088,0.955)--(9.096,0.953)--(9.104,0.953)% + --(9.112,0.951)--(9.120,0.950)--(9.127,0.950)--(9.135,0.948)--(9.143,0.947)--(9.151,0.947)% + --(9.159,0.945)--(9.166,0.944)--(9.174,0.944)--(9.182,0.942)--(9.190,0.941)--(9.198,0.941)% + --(9.205,0.939)--(9.213,0.939)--(9.221,0.937)--(9.229,0.936)--(9.237,0.936)--(9.244,0.934)% + --(9.252,0.933)--(9.260,0.933)--(9.268,0.931)--(9.276,0.931)--(9.284,0.930)--(9.291,0.928)% + --(9.299,0.928)--(9.307,0.927)--(9.315,0.927)--(9.323,0.925)--(9.330,0.923)--(9.338,0.923)% + --(9.346,0.922)--(9.354,0.922)--(9.362,0.920)--(9.369,0.919)--(9.377,0.919)--(9.385,0.917)% + --(9.393,0.917)--(9.401,0.916)--(9.409,0.914)--(9.416,0.914)--(9.424,0.913)--(9.432,0.913)% + --(9.440,0.911)--(9.448,0.911)--(9.455,0.910)--(9.463,0.908)--(9.471,0.908)--(9.479,0.906)% + --(9.487,0.906)--(9.494,0.905)--(9.502,0.905)--(9.510,0.903)--(9.518,0.902)--(9.526,0.902)% + --(9.533,0.900)--(9.541,0.900)--(9.549,0.899)--(9.557,0.899)--(9.565,0.897)--(9.573,0.897)% + --(9.580,0.896)--(9.588,0.894)--(9.596,0.894)--(9.604,0.892)--(9.612,0.892)--(9.619,0.891)% + --(9.627,0.891)--(9.635,0.889)--(9.643,0.889)--(9.651,0.888)--(9.658,0.888)--(9.666,0.886)% + --(9.674,0.886)--(9.682,0.885)--(9.690,0.885)--(9.698,0.883)--(9.705,0.882)--(9.713,0.882)% + --(9.721,0.880)--(9.729,0.880)--(9.737,0.878)--(9.744,0.878)--(9.752,0.877)--(9.760,0.877)% + --(9.768,0.875)--(9.776,0.875)--(9.783,0.874)--(9.791,0.874)--(9.799,0.872)--(9.807,0.872)% + --(9.815,0.871)--(9.822,0.871)--(9.830,0.869)--(9.838,0.869)--(9.846,0.868)--(9.854,0.868)% + --(9.862,0.866)--(9.869,0.866)--(9.877,0.864)--(9.885,0.864)--(9.893,0.863)--(9.901,0.863)% + --(9.908,0.861)--(9.916,0.861)--(9.924,0.861)--(9.932,0.860)--(9.940,0.860)--(9.947,0.858)% + --(9.955,0.858)--(9.963,0.857)--(9.971,0.857)--(9.979,0.855)--(9.987,0.855)--(9.994,0.854)% + --(10.002,0.854)--(10.010,0.852)--(10.018,0.852)--(10.026,0.851)--(10.033,0.851)--(10.041,0.851)% + --(10.049,0.849)--(10.057,0.849)--(10.065,0.847)--(10.072,0.847)--(10.080,0.846)--(10.088,0.846)% + --(10.096,0.844)--(10.104,0.844)--(10.111,0.843)--(10.119,0.843)--(10.127,0.843)--(10.135,0.841)% + --(10.143,0.841)--(10.151,0.840)--(10.158,0.840)--(10.166,0.838)--(10.174,0.838)--(10.182,0.838)% + --(10.190,0.837)--(10.197,0.837)--(10.205,0.835)--(10.213,0.835)--(10.221,0.833)--(10.229,0.833)% + --(10.236,0.833)--(10.244,0.832)--(10.252,0.832)--(10.260,0.830)--(10.268,0.830)--(10.276,0.829)% + --(10.283,0.829)--(10.291,0.829)--(10.299,0.827)--(10.307,0.827)--(10.315,0.826)--(10.322,0.826)% + --(10.330,0.826)--(10.338,0.824)--(10.346,0.824)--(10.354,0.823)--(10.361,0.823)--(10.369,0.823)% + --(10.377,0.821)--(10.385,0.821)--(10.393,0.819)--(10.400,0.819)--(10.408,0.819)--(10.416,0.818)% + --(10.424,0.818)--(10.432,0.816)--(10.440,0.816)--(10.447,0.816)--(10.455,0.815)--(10.463,0.815)% + --(10.471,0.813)--(10.479,0.813)--(10.486,0.813)--(10.494,0.812)--(10.502,0.812)--(10.510,0.812)% + --(10.518,0.810)--(10.525,0.810)--(10.533,0.809)--(10.541,0.809)--(10.549,0.809)--(10.557,0.807)% + --(10.565,0.807)--(10.572,0.805)--(10.580,0.805)--(10.588,0.805)--(10.596,0.804)--(10.604,0.804)% + --(10.611,0.804)--(10.619,0.802)--(10.627,0.802)--(10.635,0.802)--(10.643,0.801)--(10.650,0.801)% + --(10.658,0.799)--(10.666,0.799)--(10.674,0.799)--(10.682,0.798)--(10.689,0.798)--(10.697,0.798)% + --(10.705,0.796)--(10.713,0.796)--(10.721,0.796)--(10.729,0.795)--(10.736,0.795)--(10.744,0.795)% + --(10.752,0.793)--(10.760,0.793)--(10.768,0.793)--(10.775,0.791)--(10.783,0.791)--(10.791,0.791)% + --(10.799,0.790)--(10.807,0.790)--(10.814,0.790)--(10.822,0.788)--(10.830,0.788)--(10.838,0.788)% + --(10.846,0.787)--(10.854,0.787)--(10.861,0.787)--(10.869,0.785)--(10.877,0.785)--(10.885,0.785)% + --(10.893,0.784)--(10.900,0.784)--(10.908,0.784)--(10.916,0.782)--(10.924,0.782)--(10.932,0.782)% + --(10.939,0.781)--(10.947,0.781)--(10.955,0.781)--(10.963,0.779)--(10.971,0.779)--(10.978,0.779)% + --(10.986,0.778)--(10.994,0.778)--(11.002,0.778)--(11.010,0.776)--(11.018,0.776)--(11.025,0.776)% + --(11.033,0.774)--(11.041,0.774)--(11.049,0.774)--(11.057,0.774)--(11.064,0.773)--(11.072,0.773)% + --(11.080,0.773)--(11.088,0.771)--(11.096,0.771)--(11.103,0.771)--(11.111,0.770)--(11.119,0.770)% + --(11.127,0.770)--(11.135,0.768)--(11.142,0.768)--(11.150,0.768)--(11.158,0.768)--(11.166,0.767)% + --(11.174,0.767)--(11.182,0.767)--(11.189,0.765)--(11.197,0.765)--(11.205,0.765)--(11.213,0.765)% + --(11.221,0.764)--(11.228,0.764)--(11.236,0.764)--(11.244,0.762)--(11.252,0.762)--(11.260,0.762)% + --(11.267,0.762)--(11.275,0.760)--(11.283,0.760)--(11.291,0.760)--(11.299,0.759)--(11.307,0.759)% + --(11.314,0.759)--(11.322,0.759)--(11.330,0.757)--(11.338,0.757)--(11.346,0.757); +\gpcolor{color=gp lt color border} +\draw[gp path] (1.012,8.381)--(1.012,0.616)--(11.947,0.616)--(11.947,8.381)--cycle; +%% coordinates of the plot area +\gpdefrectangularnode{gp plot 1}{\pgfpoint{1.012cm}{0.616cm}}{\pgfpoint{11.947cm}{8.381cm}} +\end{tikzpicture} +%% gnuplot variables diff --git a/20231123/loesung-3.c b/20231123/loesung-3.c new file mode 100644 index 0000000000000000000000000000000000000000..872058ac9fecdcb59ac1104ca67841cb3dc974a9 --- /dev/null +++ b/20231123/loesung-3.c @@ -0,0 +1,28 @@ +#include <stdio.h> + +int read_hex (char c) +{ + if (c >= '0' && c <= '9') + return c - '0'; + else if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + else if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + else + { + fprintf (stderr, "invalid hex digit '%c'\n", c); + return 0; + } +} + +int main (void) +{ + char buffer[100]; + fgets (buffer, 100, stdin); + for (char *p = buffer; p[0] && p[1]; p += 2) + { + char c = 16 * read_hex (p[0]) + read_hex (p[1]); + printf ("%c", c); + } + printf ("\n"); +} diff --git a/20231123/logo-hochschule-bochum-cvh-text-v2.pdf b/20231123/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/20231123/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20231123/logo-hochschule-bochum.pdf b/20231123/logo-hochschule-bochum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1 --- /dev/null +++ b/20231123/logo-hochschule-bochum.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20231123/pendulum.pdf b/20231123/pendulum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..7d1d87305cdb8840a248ff2207538d758464f452 --- /dev/null +++ b/20231123/pendulum.pdf @@ -0,0 +1 @@ +../common/pendulum.pdf \ No newline at end of file diff --git a/20231123/pgscript.sty b/20231123/pgscript.sty new file mode 120000 index 0000000000000000000000000000000000000000..95c888478c99ea7fda0fd11ccf669ae91be7178b --- /dev/null +++ b/20231123/pgscript.sty @@ -0,0 +1 @@ +../common/pgscript.sty \ No newline at end of file diff --git a/20231123/pgslides.sty b/20231123/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/20231123/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file diff --git a/README.md b/README.md index 492885ffb1e1a03c045faef9bc843c1335247f98..e381558054eaaca6545c8ce2c2028d3b9cd25a55 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ Vortragsfolien und Beispiele: * [26.10.2023: Einführung in C: String-Operationen; Bibliotheken](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231026/hp-20231026.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231026/) * [02.11.2023: Bibliotheken](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231102/hp-20231102.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231102/) * [09.11.2023: Hardwarenahe Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231109/hp-20231109.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231109/) - * [16.11.2023: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen, Speicherausrichtung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-20231116.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231116/) + * [16.11.2023: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-20231116.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231116/) + * [23.11.2023: Speicherausrichtung, Algorithmen: Differentialgleichungen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231123/hp-20231123.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231123/) * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/hp-slides-2023ws.pdf) Übungsaufgaben: @@ -35,6 +36,7 @@ Vortragsfolien und Beispiele: * [02.11.2023: Zahlensysteme, Ausgabe von Hexadezimalzahlen, Einfügen in Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231102/hp-uebung-20231102.pdf) * [09.11.2023: Text-Grafik-Bibliothek, Mikrocontroller, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231109/hp-uebung-20231109.pdf) * [16.11.2023: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, Speicherformate von Zahlen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-uebung-20231116.pdf) + * [23.11.2023: Kondensator, Personen-Datenbank, Hexdumps](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231123/hp-uebung-20231123.pdf) Musterlösungen: --------------- @@ -44,6 +46,7 @@ Musterlösungen: * [02.11.2023: Zahlensysteme, Ausgabe von Hexadezimalzahlen, Einfügen in Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231102/hp-musterloesung-20231102.pdf) * [09.11.2023: Text-Grafik-Bibliothek, Mikrocontroller, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231109/hp-musterloesung-20231109.pdf) * [16.11.2023: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, Speicherformate von Zahlen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-musterloesung-20231116.pdf) + * [23.11.2023: Kondensator, Personen-Datenbank, Hexdumps](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231123/hp-musterloesung-20231123.pdf) Praktikumsunterlagen: --------------------- diff --git a/hp-slides-2023ws.pdf b/hp-slides-2023ws.pdf index f4b1aafb1a74f044ff673ee7270568b722418c96..4194a11bffce9b374c9a4ac056895cf9b987e760 100644 Binary files a/hp-slides-2023ws.pdf and b/hp-slides-2023ws.pdf differ diff --git a/hp-slides-2023ws.tex b/hp-slides-2023ws.tex index f7cd9bd26bcb913256ca6d6966191fa8a8735bb9..f577a24e6499716afb7c5732b60640c4a6bc1ff7 100644 --- a/hp-slides-2023ws.tex +++ b/hp-slides-2023ws.tex @@ -23,6 +23,8 @@ \includepdf[pages=-]{20231102/hp-20231102.pdf} \pdfbookmark[1]{09.11.2023: Hardwarenahe Programmierung}{20231109} \includepdf[pages=-]{20231109/hp-20231109.pdf} - \pdfbookmark[1]{16.11.2023: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen, Speicherausrichtung}{20231116} + \pdfbookmark[1]{16.11.2023: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen}{20231116} \includepdf[pages=-]{20231116/hp-20231116.pdf} + \pdfbookmark[1]{23.11.2023: Speicherausrichtung}{20231123} + \includepdf[pages=-]{20231123/hp-20231123.pdf} \end{document}