You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
6.7 KiB
TeX
183 lines
6.7 KiB
TeX
\documentclass[a4paper,fontsize=12pt,listof=totoc,toc=sectionentrywithdots,table,hyphens]{scrartcl}
|
|
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{emoji}
|
|
\usepackage{polyglossia}
|
|
\setdefaultlanguage{german}
|
|
\usepackage{lmodern}
|
|
\usepackage[explicit]{titlesec} % for changing section titles
|
|
\titleformat{\section}[hang]{\Large\scshape}{}{0pt}{#1\hspace{0.3cm}\thesection}[] %
|
|
\titleformat{\subsection}[hang]{\Large\scshape}{}{0pt}{#1\hspace{0.3cm}\thesubsection}[] %
|
|
\titleformat{\paragraph}[hang]{\bfseries}{}{0pt}{#1\hspace{0.3cm}}[] %
|
|
\usepackage[onehalfspacing]{setspace}
|
|
\setcounter{secnumdepth}{5} % numbered paragraphs
|
|
\usepackage{fancyhdr}
|
|
\setlength{\headheight}{15.2pt}
|
|
\pagestyle{fancy}
|
|
\fancyhf{}
|
|
\fancyhead[R]{Übung 1 2023}
|
|
\fancyhead[L]{OOP mit C++ $\vert$ Isabell Pflug}
|
|
\fancyfoot[C]{\thepage}
|
|
|
|
%
|
|
% math packages
|
|
%
|
|
|
|
\usepackage{mathtools}
|
|
\usepackage{amsxtra,amssymb,amsthm,amstext,amsfonts}
|
|
\usepackage{thmtools}
|
|
\usepackage{calrsfs} % for changing \mathcal to beauty
|
|
\usepackage{physics}
|
|
\usepackage{xpatch} % for fixing thmtools
|
|
|
|
%
|
|
% microtype setting
|
|
%
|
|
|
|
\usepackage{float} % better control of placements
|
|
|
|
%
|
|
% tables
|
|
%
|
|
|
|
\usepackage{booktabs} % optimised display of tables
|
|
\usepackage{tabularx} % more modern display of tables with \toprule,\midrule,\bottomrule
|
|
\usepackage{multirow} % allows table cells over multiple rows within a column
|
|
\usepackage{tablefootnote} % allows usage of footnotes in tables
|
|
|
|
%
|
|
% misc packages
|
|
%
|
|
|
|
\usepackage[atend]{bookmark}
|
|
\bookmarksetup{numbered}
|
|
\usepackage{xifthen} % for better fachbegriff environment
|
|
\usepackage{enumitem} % to change enumerate symbols
|
|
\setlist[enumerate,1]{label=\alph*)}
|
|
\usepackage{cprotect} % to be able to use verbatim in a caption
|
|
\usepackage[extendedchars]{grffile} % for spaces and special chars in file paths
|
|
\usepackage{xcolor} % adds colours
|
|
\usepackage{subcaption}
|
|
\usepackage{csquotes}
|
|
\usepackage{pdfpages}
|
|
\usepackage{multicol} % allows dividing (parts of) the page into multiple columns
|
|
\usepackage{url} % adds hyperlinks
|
|
\usepackage[]{hyperref} % adds links to toc
|
|
|
|
%
|
|
% define custom colors
|
|
%
|
|
|
|
\definecolor{bmpink}{HTML}{FF91AF}
|
|
\definecolor{mauve}{HTML}{BB85AB}
|
|
\definecolor{pastyel}{HTML}{FFFFCA}
|
|
\definecolor{grey}{HTML}{F2F2F2}
|
|
\definecolor{pastgreen}{HTML}{CCFFCC}
|
|
\definecolor{pastred}{HTML}{FFCCCC}
|
|
\definecolor{deepurple}{HTML}{730099}
|
|
\definecolor{mint}{HTML}{00e699}
|
|
|
|
%
|
|
% listings
|
|
%
|
|
|
|
\usepackage{listings}
|
|
|
|
%
|
|
% custom commands
|
|
%
|
|
|
|
\newcommand{\Autor}{Isabell Pflug} % your name here
|
|
\newcommand{\parabreak}{\phantom{angy} \\}
|
|
|
|
%
|
|
% math related custom commands
|
|
%
|
|
|
|
\renewcommand{\epsilon}{\varepsilon}
|
|
\renewcommand{\phi}{\varphi}
|
|
|
|
%
|
|
% theorems
|
|
%
|
|
|
|
\theoremstyle{definition}
|
|
\newtheorem{lemma}{Lemma}[section]
|
|
|
|
\renewcommand{\qed}{%
|
|
\ifmmode
|
|
\intertext{\hfill \emoji{feet} \nonumber}
|
|
\else
|
|
\hfill \emoji{feet}
|
|
\fi
|
|
}
|
|
|
|
\newcommand{\Aufgabe}{\section{Aufgabe}}
|
|
|
|
%
|
|
% make title
|
|
%
|
|
|
|
\title{OOP mit C++ \\
|
|
{\Large Aufgabenblatt 1}}
|
|
\author{\Autor}
|
|
\date{\today}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\Aufgabe
|
|
|
|
\begin{table}[h!]
|
|
\centering
|
|
\begingroup
|
|
\setlength{\tabcolsep}{12pt}
|
|
\renewcommand{\arraystretch}{1.5}
|
|
\begin{tabular}{rlll}
|
|
\toprule
|
|
Zeile & Ausdruck & Wert & Typ \\
|
|
\midrule
|
|
\verb|1:| & \verb|int a = 5; int b = 2; double c = b;| \qquad \qquad \qquad & -- & -- \\
|
|
\verb|2:| & \verb|a * b - - - - - - 12.0f| & \verb|22| & \verb|float| \tablefootnote{32-bit single precision floating-point, IEEE-754} \\
|
|
\verb|3:| & \verb|a / b / c| & \verb|1.0| & \verb|double| \tablefootnote{64-bit double precision floating-point, IEEE-754} \\
|
|
\verb|4:| & \verb|a / c / b| & \verb|1.25| & \verb|double| \\
|
|
\verb|5:| & \verb|-1.0f - a * 2E-1 + a / 2| & \verb|0| & \verb|double| \\
|
|
\verb|6:| & \verb|1.0 + (a *= (2 / - b - (c += .0E2 )))| & \verb|-14| & \verb|double| \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\endgroup
|
|
\end{table}\parabreak
|
|
|
|
Begründungen:
|
|
\begin{enumerate}[font=\texttt, label=\arabic*: ]
|
|
\setcounter{enumi}{1}
|
|
\item \begin{itemize}
|
|
\item {\itshape Wert:} Das unäre \verb|-| hat eine höhere Priorität als das \verb|*|, somit werten wir zunächst \verb|- 12.0f| aus, daraufhin dann \verb|-(-12.0f)|, usw., bis dann das letzte \verb|-| als binäres \verb|-| bleibt, welches allerdings eine geringere Priorität als das binäre \verb|*|, wodurch wir also als Zwischenergebnis \verb|a*b - (-12.0f)| stehen haben, und dann nach der Multiplikation die Subtraktion (bzw. Addition) haben.
|
|
\item {\itshape Datentyp:} Die Rangfolge der Datentyp-Konvertierung durch Operatoren ist von niedrig nach hoch. Da \verb|a| und \verb|b| integer sind, aber ein \verb|float| im Ausdruck vorkommt, ist \verb|float| der kleinste oberste Datentyp.
|
|
\end{itemize}
|
|
\item In diesem Ausdruck stehen zwei binäre \verb|/| Operatoren, die aufgrund gleicher Priorität von links nach rechts ausgewertet werden. Da \verb|a / b| eine Operation auf zwei integern ist, ist das Zwischenergebnis dieser Operation ebenfalls ein integer, und zwar \verb|2| (der Rest wird verworfen). \verb|c| ist ebenfalls 2, also rechnen wir am Ende \verb|2 / 2.0|, was \verb|1.0| ergibt, und aufgrund obiger Erklärung diesmal im \verb|double| Format ist.
|
|
\item Gleiche Reihenfolge wie in \verb|3:|, doch diesmal sind \verb|c| und \verb|b| vertauscht. Dies führt dazu, dass wir direkt auf den Datentyp \verb|double| springen, und die Division 5/2 diesmal nicht mehr ganzzahlig abläuft. Unser Zwischenergebnis ist also \verb|5 / 2.0 = 2.5|. Das nochmal durch 2 geteilt führt zum Ergebnis von \verb|1.25|, auch wieder im Datenformat \verb|double|
|
|
\item \begin{enumerate}[label=\arabic*) ]
|
|
\item Unäres \verb|-| bei \verb|-1.0f|
|
|
\item Multiplikation von \verb|a * 2E-1 = a * 0.2 = 1.0|, Division von \verb|a / 2 = 2|
|
|
\item Addition/Subtraktion \verb|-1.0f - 1.0 + 2 = 0.0|
|
|
\end{enumerate} (ich werde mir eine Wiederholung der Erläuterung, warum das wieder \verb|double| ist, diesmal sparen)
|
|
\item \begin{enumerate}[label=\arabic*) ]
|
|
\item Innerste Klammer wird zuerst ausgewertet: \verb|c += .0E2| $\Leftrightarrow$ \verb|c = c + (.0E2)| $\Leftrightarrow$ \verb|c = 2.0 + 0.0| $\Leftrightarrow$ \verb|c = 2.0|
|
|
\item Unäres \verb|-| bei \verb|-b| $\curvearrowright$ \verb|2 / (-2) - (2.0)|
|
|
\item Division: \verb|2 / (-2) = -1|
|
|
\item Addition: \verb|-1 - (2.0) = -3.0|
|
|
\item Multiplikations-Zuweisungs-Kombi-Dingens: \verb|a *= (-3.0)| $\Leftrightarrow$ \verb|a = a * (-3.0)| $\Leftrightarrow$ \verb|a = 5 * (-3.0)| $\Leftrightarrow$ \verb|a = -15.0|
|
|
\item Addition: \verb|1.0 + (-15.0) = -14.0|
|
|
\end{enumerate}
|
|
\end{enumerate}
|
|
|
|
\pagebreak
|
|
\Aufgabe
|
|
\lstinputlisting[language=C++, breaklines=true]{01_2.cpp}
|
|
|
|
|
|
\end{document}
|