From 27c2f608298c1c5002b747dbb7ded92d83e3fa21 Mon Sep 17 00:00:00 2001 From: flavis Date: Mon, 13 Jan 2020 14:13:22 +0100 Subject: [PATCH] update ipi10 --- lecture.cls | 23 +++++++ ws2019/ipi/uebungen/ipi10.pdf | Bin 29610 -> 49570 bytes ws2019/ipi/uebungen/ipi10.tex | 114 +++++++++++++++++++++++-------- ws2019/ipi/uebungen/virtuals.cpp | 54 ++++++++------- 4 files changed, 135 insertions(+), 56 deletions(-) diff --git a/lecture.cls b/lecture.cls index 7ee281e..5f7f034 100644 --- a/lecture.cls +++ b/lecture.cls @@ -18,6 +18,7 @@ \RequirePackage{tikz} \RequirePackage{pgfplots} \RequirePackage[nobottomtitles]{titlesec} +\RequirePackage{listings} \usetikzlibrary{quotes, angles} @@ -81,3 +82,25 @@ Punkte & & & & & & \\[5mm] \hline \end{tabular} } + +% code listings, define style +\lstdefinestyle{mystyle}{ + commentstyle=\color{gray}, + keywordstyle=\color{blue}, + numberstyle=\tiny\color{gray}, + stringstyle=\color{black}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} + +% activate my colour style +\lstset{style=mystyle} diff --git a/ws2019/ipi/uebungen/ipi10.pdf b/ws2019/ipi/uebungen/ipi10.pdf index e73482f3efb2fe3a7bd0e19f42e4994833617044..eec5a69bf0bbebf11466d05d0eafb5b005c1a0fd 100644 GIT binary patch delta 23688 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 delta 7098 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 diff --git a/ws2019/ipi/uebungen/ipi10.tex b/ws2019/ipi/uebungen/ipi10.tex index 77ad7e3..f283325 100644 --- a/ws2019/ipi/uebungen/ipi10.tex +++ b/ws2019/ipi/uebungen/ipi10.tex @@ -3,38 +3,58 @@ \title{IPI: Übungsblatt 10} \author{Samuel Weidemaier, Christian Merten} -\usepackage[]{listings} - -\usepackage{xcolor} - -\lstdefinestyle{mystyle}{ - commentstyle=\color{gray}, - language=C++, - keywordstyle=\color{blue}, - numberstyle=\tiny\color{gray}, - stringstyle=\color{black}, - basicstyle=\ttfamily\footnotesize, - breakatwhitespace=false, - breaklines=true, - captionpos=b, - keepspaces=true, - numbers=left, - numbersep=5pt, - showspaces=false, - showstringspaces=false, - showtabs=false, - tabsize=2 -} - -\lstset{style=mystyle} - \begin{document} -\begin{aufgabe} - siehe \textit{readfiles.cpp} +\begin{tabular}{|c|m{1cm}|m{1cm}|m{1cm}|m{1cm}|@{}m{0cm}@{}} + \hline + Aufgabe & \centering A1 & \centering A2 & \centering A3 & \centering $\sum$ & \\[5mm] \hline + Punkte & & & & & \\[5mm] \hline +\end{tabular} + +\begin{aufgabe} Lesen und Schreiben von Dateien + \begin{lstlisting}[language=C++, title=readfiles.cpp, captionpos=b] +#include +#include +#include + +using namespace std; + +int main(int argc, char* argv[]) { + // check if correct argument count + if (argc < 2) { + printf("Dateiname erwartet\n"); + return 1; + } + + // get filename from argument list + string filename = argv[1]; + // open input file + ifstream fileIn; + fileIn.open(filename + ".txt"); + // open output file + ofstream fileOut; + fileOut.open(filename + "-a.txt"); + // check if we could open the files + if (!fileIn.good() || !fileOut.good()) { + // could not open files + cout << "Konnte Datei " + filename + ".txt nicht lesen" << endl; + return 1; + } + string input; // variable containing line + int lineNo = 1; // count lines + while(getline(fileIn, input)) { // while there is still a line left + // write out line with prepended line number to output file + fileOut << to_string(lineNo) + ": " + input << endl; + // increment line counter + lineNo += 1; + } + // close files + fileIn.close(); + fileOut.close(); +}\end{lstlisting} \end{aufgabe} -\begin{aufgabe} +\begin{aufgabe} Fehler sind im Quellcode markiert \begin{lstlisting}[language=C++, title=Fehlersuche, captionpos=b] #include class A @@ -103,8 +123,42 @@ int main() b.ap = c.ap; return 0; -} - \end{lstlisting} +}\end{lstlisting} +\end{aufgabe} + +\begin{aufgabe} + Fehler wurden wegkommentiert mit Begründung dahinter, hinter den + korrekten Aufrufen steht jeweils, welche Implementation aufgerufen wird. + \begin{lstlisting}[language=C++, title=Virtuelle Methoden, captionpos=b] +// A a; A abstrakte Klasse +B b; +C c; +A* pa=&b; +B* pb=&c; +float x = 1.2; +pa->a(); // A::a() +pa->va(); // B::va() +pa->a(1); // B::a(int) +// pa->c(); A::c() private, hier nicht sichtbar +// pa->b(); pa ist vom Typ A* und kennt deswegen b() nicht +// pa->vb(); pa ist vom Typ A* und kennt deswegen vb() nicht +pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet +// pb->a(); pb ist vom Typ B*, hier ist A::a() ueberladen durch +// entweder B::a(double) bzw. B::a(int), deswegen existiert B::a() nicht +pb->va(); // C::va() +pb->a(1); // B::a(int) +// pb->c(); A::c() private, deswegen hier nicht sichtbar +pb->b(); // B::b() +pb->vb(); // B::vb() +pb->a(x); // B::a(double) +pa = &c; +pa->a(); // A::a() +pa->va(); // C::va() +pa->a(1); // B::a(int) +// pa->c(); A::c() private, hier nicht sichtbar +// pa->b(); pa ist vom Typ A*, kennt deswegen b() nicht +// pa->vb(); pa ist vom Typ A*, kennt deswegen vb() nicht +pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet\end{lstlisting} \end{aufgabe} \end{document} diff --git a/ws2019/ipi/uebungen/virtuals.cpp b/ws2019/ipi/uebungen/virtuals.cpp index ca2d8c4..31d96c6 100644 --- a/ws2019/ipi/uebungen/virtuals.cpp +++ b/ws2019/ipi/uebungen/virtuals.cpp @@ -1,27 +1,29 @@ +#include + class A { public: - void a() { }; + void a() { printf("A::a()\n");}; virtual void va() = 0; - virtual void a(int n); + virtual void a(int n) { printf("A::a(int %d)\n", n); }; private: - void c() { }; + void c() { printf("A::c()\n");}; }; class B : public A { public: - void b() { }; - virtual void vb(); - void a(double d) { }; - void a(int i) { }; - virtual void va(); + void b() { printf("B::b()\n");}; + virtual void vb() {printf("B::vb()\n"); }; + void a(double d) {printf("B::a(double %f)\n", d); }; + void a(int i) {printf("B::a(int %d)\n", i); }; + virtual void va() {printf("B::va()\n"); }; }; class C : public B { public: - virtual void c(); - void a(float) { }; - virtual void a(); - virtual void va(); + virtual void c() {printf("C::c()\n"); }; + void a(float d) {printf("C::a(float %f)\n", d); }; + virtual void a() {printf("C::a()\n"); }; + virtual void va() {printf("C::va()\n"); }; }; int main() { @@ -31,27 +33,27 @@ int main() { A* pa=&b; B* pb=&c; float x = 1.2; - pa->a(); - pa->va(); - pa->a(1); + pa->a(); // A::a() + pa->va(); // B::va() + pa->a(1); // B::a(int) // pa->c(); A::c() private, hier nicht sichtbar // pa->b(); pa ist vom Typ A* und kennt deswegen b() nicht // pa->vb(); pa ist vom Typ A* und kennt deswegen vb() nicht - pa->a(x); + pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet // pb->a(); pb ist vom Typ B*, hier ist A::a() überladen durch - // entweder B::a(double) bzw. B::a(int) nicht durch B::a() - pb->va(); - pb->a(1); + // entweder B::a(double) bzw. B::a(int), deswegen existiert B::a() nicht + pb->va(); // C::va() + pb->a(1); // B::a(int) // pb->c(); A::c() private, deswegen hier nicht sichtbar - pb->b(); - pb->vb(); - pb->a(x); + pb->b(); // B::b() + pb->vb(); // B::vb() + pb->a(x); // B::a(double) pa = &c; - pa->a(); - pa->va(); - pa->a(1); + pa->a(); // A::a() + pa->va(); // C::va() + pa->a(1); // B::a(int) // pa->c(); A::c() private, hier nicht sichtbar // pa->b(); pa ist vom Typ A*, kennt deswegen b() nicht // pa->vb(); pa ist vom Typ A*, kennt deswegen vb() nicht - pa->a(x); + pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet }