diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bdddb52..6cb5515 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,9 +6,10 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@v2 - - uses: xu-cheng/texlive-action/full@v1 - with: + uses: actions/checkout@v4 + - uses: xu-cheng/texlive-action@v2 + with: + scheme: full run: | apk add make apk add g++ diff --git a/.gitignore b/.gitignore index 9e5b0dc..585224f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ vorkurs/ vorkurs.zip pool_setup/poolpw title.pdf +.vscode/ +.DS_Store +*.dSYM diff --git a/appendix/cheatsheet_shellcomands.tex b/appendix/cheatsheet_shellcomands.tex new file mode 100644 index 0000000..e69de29 diff --git a/appendix/cheatsheet_shortcuts.tex b/appendix/cheatsheet_shortcuts.tex new file mode 100644 index 0000000..e69de29 diff --git a/appendix/error_messages.tex b/appendix/error_messages.tex new file mode 100644 index 0000000..e69de29 diff --git a/appendix/intro.tex b/appendix/intro.tex index 686bb13..91fbe28 100644 --- a/appendix/intro.tex +++ b/appendix/intro.tex @@ -3,10 +3,10 @@ \chapter{Appendix} \pagestyle{fancy} -\input{appendix/cheatsheet_shortcuts} -\input{appendix/cheatsheet_shellcomands} -\input{appendix/coding_style} -\input{appendix/fehler_fehlermeldungen} +\input{appendix/cheatsheet_shortcuts} %ToDo needs to be added +\input{appendix/cheatsheet_shellcomands} % ToDo needs to be added +\input{appendix/coding_style} %ToDo, partially done +\input{appendix/error_messages} % ToDo needs to be added \clearpage \pagestyle{empty} diff --git a/lektionen/eigene_computer/intro.tex b/eigener_computer/intro.tex similarity index 78% rename from lektionen/eigene_computer/intro.tex rename to eigener_computer/intro.tex index c420225..2a03a25 100644 --- a/lektionen/eigene_computer/intro.tex +++ b/eigener_computer/intro.tex @@ -5,6 +5,6 @@ \chapter{Vorbereitung eigener Computer} Wir werden in diesem Fall den proprietären Editor „Visual Studio Code“ verwenden, welcher \href{https://code.visualstudio.com/Download}{hier} heruntergeladen werden kann.\\ \pagestyle{fancy} -\input{eigene_computer/windows.tex} -\input{eigene_computer/macos.tex} -\input{eigene_computer/linux.tex} \ No newline at end of file +\input{eigener_computer/linux} +\input{eigener_computer/windows} +\input{eigener_computer/macos} diff --git a/lektionen/eigene_computer/linux.tex b/eigener_computer/linux.tex similarity index 100% rename from lektionen/eigene_computer/linux.tex rename to eigener_computer/linux.tex diff --git a/lektionen/eigene_computer/macos.tex b/eigener_computer/macos.tex similarity index 100% rename from lektionen/eigene_computer/macos.tex rename to eigener_computer/macos.tex diff --git a/lektionen/eigene_computer/windows.tex b/eigener_computer/windows.tex similarity index 100% rename from lektionen/eigene_computer/windows.tex rename to eigener_computer/windows.tex diff --git a/files/array.cpp b/files/array.cpp new file mode 100644 index 0000000..e69de29 diff --git a/lektionen/arith.tex b/lektionen/arithmetics.tex similarity index 100% rename from lektionen/arith.tex rename to lektionen/arithmetics.tex diff --git a/lektionen/arrays.tex b/lektionen/arrays.tex deleted file mode 100644 index 61f204a..0000000 --- a/lektionen/arrays.tex +++ /dev/null @@ -1,85 +0,0 @@ -\lesson{\texttt{C}-Arrays} - -Als nächstes wichtiges Konzept in \Cpp werden wir uns \emph{Arrays} anschauen. -Arrays sind eine Möglichkeit, mehrere Elemente des gleichen Typs zusammen zu -fassen. Statt also einer Stelle im Speicher, an der ein \texttt{int} liegt, -habt ihr einen ganzen Speicherbereich, in dem 100 (oder eine beliebige andere -Anzahl an) \texttt{int}s liegen. - -Die Elemente in einem Array sind durchnummeriert, man nennt die Nummer eines -Arrayelements seinen \emph{Index}. Das erste Element hat den Index 0, das -zweite den Index 1 und das 100te hat den Index 99 -- Vorsicht also, der höchste -Index in einem Array mit 100 Elementen ist 99, nicht 100! Um ein Array zu -definieren, schreibt ihr hinter seinen Namen eine eckige Klammer auf, die -Anzahl an Elementen, die es enthalten soll, und eine eckige Klammer zu. Auf ein -bestimmtes Arrayelement zuzugreifen könnt ihr tun, indem ihr seinen Index in -eckigen Klammern hinter den Namen schreibt. Folgendes Programm macht -hoffentlich die Syntax klar: -\inputcpp{array.cpp} - -Es gibt einige Dinge, zu beachnten, wenn ihr mit Arrays arbeitet. Das -wichtigste ist oben schon genannt -- sich davon verwirren zu lassen, dass -Indizes bei 0 anfangen und aus Versehen über das Array hinaus schreiben oder -lesen ist ein so häufiger Fehler, dass er seinen eigenen Namen bekommen hat: -„Off-by-one error“. Wichtig ist, dass der Compiler diesen Zugriff nicht -verhindern wird! Das ist von daher eine sehr fiese Sache, als dass dieser -Fehler auch beim Ausführen nicht immer Probleme machen wird -- aber manchmal -lässt er auch euer Programm spontan abstürzen in einem so genannten -\emph{segmentation fault}. - -Eine Limitation von Arrays, die ihr beachten solltet, ist, dass bereits zur -Compilezeit fest stehen muss, wie viele Elemente sie enthalten sollen. Ihr -könnt also z.B. nicht die Nutzerin fragen, wie viele Elemente in das Array -passen soll, denn dies würde erst zur Laufzeit feststehen (wir werden später -noch Wege um diese Limitation kennen lernen). - -Ihr könnt auch Arrays von Arrays (so genannte zweidimensionale Arrays) -erstellen, indem ihr zweimal in eckigen Klammern die Größe des Arrays -hinschreibt. Die erste Größe gibt dann die Anzahl der Zeilen an, die zweite die -Anzahl der Spalten. Auch beim Zugriff auf Arrayelemente müsst ihr dann zwei -Indizes angeben. Wir werden dies später noch nutzen, hier sei erst einmal nur -die generelle Möglichkeit genannt. - -\textbf{Praxis:} -Wir wollen die Seite \url{http://www.ich-kann-mich-nicht-entscheiden.de/} -nachmachen und eine Entscheidungshilfe programmieren, die aus mehreren von der -Nutzerin gegebenen Möglichkeiten eine per Zufall auswählt. - -\begin{enumerate} - \item Schreibt zunächst ein Programm, welches ein Array aus 10 Strings - erstellt und die Nutzerin 10 mal nach einer Antwortmöglichkeit fragt - und die gegebenen Antworten nacheinander in das Array schreibt. - \item Fügt nun die Möglichkeit zu, weniger Antworten anzugeben. Dazu könnt - ihr zum Beispiel zuerst fragen, wie viele Antwortmöglichkeiten es geben - soll und dann so oft fragen (und natürlich einen Fehler ausgeben, wenn - es mehr als 10 Antworten geben soll). - \item Ihr könnt dann (so wie in dem Programm oben) eine Zufallszahl - erzeugen. Um sicher zu gehen, dass sie nicht zu groß wird, könnt ihr - den Rest bei Teilung durch Anzahl der eingegebenen Antworten nehmen - (sind z.B. 7 Antworten angegeben und die Zufallszahl ist 25778, so wäre - der resultierende Index \texttt{25778 \% 7 == 4}). Gebt dann die - Antwortmöglichkeit aus, die dem zufallsgeneriertem Index - entspricht. -\end{enumerate} - -Sollte euer Programm einmal nicht korrekt kompilieren, denkt daran die -Fehlermeldung sorgfältig zu lesen, damit sie euch Aufschluss über die -Fehlerursache gibt. Sollte euer Programm zwar kompilieren, sich dann aber -komisch verhalten, denkt daran, den debugger zu benutzen und es Schritt für -Schritt durchzugehen, um die Fehlerquelle zu finden. Solltet ihr trotz alledem -nicht weiter kommen, oder nicht wissen, was von euch erwartet wird, fragt einen -von uns. - -\textbf{Spiel:} -\begin{enumerate} - \item Schreibt ein Progamm, welches ein Array beliebiger Größe erstellt und - dann auf einen Index weit ausserhalb des erlaubten Bereichs schreibt. - Was beobachtet ihr?\footnote{Es wird natürlich Quark sein was dabei - rauskommt, es geht hier haupsächlich darum das ihr seht was für - einen Fehler das gibt} - \item Implementiert das \emph{Sieb des Eratosthenes} - \footnote{\url{https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes}}, - wenn ihr noch nicht ausgelastet seid. - Denkt daran, es initial zu befüllen und denkt euch eine clevere - Möglichkeit aus, das „Streichen“ zu realisieren. -\end{enumerate} diff --git a/lektionen/arrays_vectors.tex b/lektionen/arrays_vectors.tex new file mode 100644 index 0000000..c742551 --- /dev/null +++ b/lektionen/arrays_vectors.tex @@ -0,0 +1,166 @@ +\lesson{\texttt{C}-Arrays} + +Als nächstes wichtiges Konzept in \Cpp werden wir uns \emph{Arrays} anschauen. +Arrays sind eine Möglichkeit, mehrere Elemente des gleichen Typs zusammen zu +fassen. Statt also einer Stelle im Speicher, an der ein \texttt{int} liegt, +habt ihr einen ganzen Speicherbereich, in dem 100 (oder eine beliebige andere +Anzahl an) \texttt{int}s liegen. + +Die Elemente in einem Array sind durchnummeriert, man nennt die Nummer eines +Arrayelements seinen \emph{Index}. Das erste Element hat den Index 0, das +zweite den Index 1 und das 100te hat den Index 99 -- Vorsicht also, der höchste +Index in einem Array mit 100 Elementen ist 99, nicht 100! Um ein Array zu +definieren, schreibt ihr hinter seinen Namen eine eckige Klammer auf, die +Anzahl an Elementen, die es enthalten soll, und eine eckige Klammer zu. Auf ein +bestimmtes Arrayelement zuzugreifen könnt ihr tun, indem ihr seinen Index in +eckigen Klammern hinter den Namen schreibt. Folgendes Programm macht +hoffentlich die Syntax klar: +\inputcpp{array.cpp} % ToDo: Add this file + +Es gibt einige Dinge, zu beachnten, wenn ihr mit Arrays arbeitet. Das +wichtigste ist oben schon genannt -- sich davon verwirren zu lassen, dass +Indizes bei 0 anfangen und aus Versehen über das Array hinaus schreiben oder +lesen ist ein so häufiger Fehler, dass er seinen eigenen Namen bekommen hat: +„Off-by-one error“. Wichtig ist, dass der Compiler diesen Zugriff nicht +verhindern wird! Das ist von daher eine sehr fiese Sache, als dass dieser +Fehler auch beim Ausführen nicht immer Probleme machen wird -- aber manchmal +lässt er auch euer Programm spontan abstürzen in einem so genannten +\emph{segmentation fault}. + +Eine Limitation von Arrays, die ihr beachten solltet, ist, dass bereits zur +Compilezeit fest stehen muss, wie viele Elemente sie enthalten sollen. Ihr +könnt also z.B. nicht die Nutzerin fragen, wie viele Elemente in das Array +passen soll, denn dies würde erst zur Laufzeit feststehen (wir werden später +noch Wege um diese Limitation kennen lernen). + +Ihr könnt auch Arrays von Arrays (so genannte zweidimensionale Arrays) +erstellen, indem ihr zweimal in eckigen Klammern die Größe des Arrays +hinschreibt. Die erste Größe gibt dann die Anzahl der Zeilen an, die zweite die +Anzahl der Spalten. Auch beim Zugriff auf Arrayelemente müsst ihr dann zwei +Indizes angeben. Wir werden dies später noch nutzen, hier sei erst einmal nur +die generelle Möglichkeit genannt. + +\textbf{Praxis:} +Wir wollen die Seite \url{http://www.ich-kann-mich-nicht-entscheiden.de/} +nachmachen und eine Entscheidungshilfe programmieren, die aus mehreren von der +Nutzerin gegebenen Möglichkeiten eine per Zufall auswählt. + +\begin{enumerate} + \item Schreibt zunächst ein Programm, welches ein Array aus 10 Strings + erstellt und die Nutzerin 10 mal nach einer Antwortmöglichkeit fragt + und die gegebenen Antworten nacheinander in das Array schreibt. + \item Fügt nun die Möglichkeit zu, weniger Antworten anzugeben. Dazu könnt + ihr zum Beispiel zuerst fragen, wie viele Antwortmöglichkeiten es geben + soll und dann so oft fragen (und natürlich einen Fehler ausgeben, wenn + es mehr als 10 Antworten geben soll). + \item Ihr könnt dann (so wie in dem Programm oben) eine Zufallszahl + erzeugen. Um sicher zu gehen, dass sie nicht zu groß wird, könnt ihr + den Rest bei Teilung durch Anzahl der eingegebenen Antworten nehmen + (sind z.B. 7 Antworten angegeben und die Zufallszahl ist 25778, so wäre + der resultierende Index \texttt{25778 \% 7 == 4}). Gebt dann die + Antwortmöglichkeit aus, die dem zufallsgeneriertem Index + entspricht. +\end{enumerate} + +Sollte euer Programm einmal nicht korrekt kompilieren, denkt daran die +Fehlermeldung sorgfältig zu lesen, damit sie euch Aufschluss über die +Fehlerursache gibt. Sollte euer Programm zwar kompilieren, sich dann aber +komisch verhalten, denkt daran, den debugger zu benutzen und es Schritt für +Schritt durchzugehen, um die Fehlerquelle zu finden. Solltet ihr trotz alledem +nicht weiter kommen, oder nicht wissen, was von euch erwartet wird, fragt einen +von uns. + +\textbf{Spiel:} +\begin{enumerate} + \item Schreibt ein Progamm, welches ein Array beliebiger Größe erstellt und + dann auf einen Index weit ausserhalb des erlaubten Bereichs schreibt. + Was beobachtet ihr?\footnote{Es wird natürlich Quark sein was dabei + rauskommt, es geht hier haupsächlich darum das ihr seht was für + einen Fehler das gibt} + \item Implementiert das \emph{Sieb des Eratosthenes} + \footnote{\url{https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes}}, + wenn ihr noch nicht ausgelastet seid. + Denkt daran, es initial zu befüllen und denkt euch eine clevere + Möglichkeit aus, das „Streichen“ zu realisieren. +\end{enumerate} + + +\lesson{Vektor} + +Als nächstes wichtiges Konzept in \Cpp werden wir uns \emph{Vektoren} anschauen. +Vektoren sind eine Möglichkeit, mehrere Elemente des gleichen Typs zusammen zu fassen. +Statt also einer Stelle im Speicher, an der ein \texttt{int} liegt, habt ihr einen ganzen Speicherbereich, in dem 100 (oder eine beliebige andere Anzahl an) \texttt{int}s liegen. + +Die Elemente in einem Vektor sind durchnummeriert, man nennt die Nummer eines Vektorelements seinen \emph{Index}. +Das erste Element hat den Index 0, das zweite den Index 1 und das 100te hat den Index 99 -- Vorsicht also, der höchste Index in einem Vektor mit 100 Elementen ist 99, nicht 100! +Um einen Vektor zu definieren, schreibt ihr: +\begin{center} + \cppinline{std::vector<}\emph{Datentyp}\cppinline{> einvektor;} +\end{center} +um den Datentypen schreibt ihr also noch \cppinline{std::vector<}\dots\cppinline{>}. +Um ein Element am Ende einzufügen gibt es +\begin{center} + \cppinline{einvektor.push_back(}\emph{Element}\cppinline{);} +\end{center} +und auf ein bestimmtes Vektorelement zugreifen könnt ihr indem ihr seinen Index in eckigen Klammern hinter den Namen schreibt. +\begin{center} + \cppinline{einvektor[}\emph{Index}\cppinline{]} +\end{center} +Wenn ihr die Größe eines Vektors wissen wollt könnt ihr +\begin{center} + \cppinline{einvektor.size()} +\end{center} +verwenden. + +Folgendes Programm macht hoffentlich die Syntax klar: + +\inputcpp{vector.cpp} + +Es gibt einige Dinge, zu beachten, wenn ihr mit Vektoren arbeitet. +Das wichtigste ist oben schon genannt -- lasst euch nicht davon verwirren, dass Indizes bei 0 anfangen. +Aus Versehen über den Vektor hinaus zu schreiben oder zu lesen ist ein so häufiger Fehler, dass er seinen eigenen Namen bekommen hat: \emph{Off-by-one} error. +Wichtig ist, dass der Compiler diesen Zugriff nicht verhindern wird! +Das ist von daher eine sehr fiese Sache, als dass dieser Fehler auch beim Ausführen nicht immer Probleme machen wird -- aber manchmal lässt er auch euer Programm spontan abstürzen in einem so genannten \emph{segmentation fault}. + +\begin{praxis} + + Wir wollen die Seite \url{http://www.ich-kann-mich-nicht-entscheiden.de/} nachmachen und eine Entscheidungshilfe programmieren, die aus mehreren von der Nutzerin gegebenen Möglichkeiten eine per Zufall auswählt. + + \begin{enumerate} + \item + Schreibt zunächst ein Programm, welches einen Vektor aus 10 Strings erstellt und die Nutzerin 10 mal nach einer Antwortmöglichkeit fragt und die gegebenen Antworten nacheinander in den Vektor schreibt. + \item + Fügt nun die Möglichkeit zu, weniger Antworten anzugeben. + Dazu könnt ihr zum Beispiel zuerst fragen, wie viele Antwortmöglichkeiten es geben soll und dann so oft fragen. + \item + Ihr könnt dann (so wie in dem Programm oben) eine Zufallszahl erzeugen. + Um sicher zu gehen, dass sie nicht zu groß wird, könnt ihr den Rest bei Teilung durch Anzahl der eingegebenen Antworten nehmen (sind z.B. 7 Antworten angegeben und die Zufallszahl ist 25778, so wäre der resultierende Index \texttt{25778 \% 7 == 4}). + Gebt dann die Antwortmöglichkeit aus, die dem zufallsgeneriertem Index entspricht. + \end{enumerate} +\end{praxis} + +Sollte euer Programm einmal nicht korrekt kompilieren, denkt daran die Fehlermeldung sorgfältig zu lesen, damit sie euch Aufschluss über die Fehlerursache gibt.\\ +Sollte euer Programm zwar kompilieren, sich dann aber komisch verhalten, denkt daran, den Debugger zu benutzen und es Schritt für Schritt durchzugehen, um die Fehlerquelle zu finden. Solltet ihr trotz alledem nicht weiter kommen, oder nicht wissen, was von euch erwartet wird, fragt einen von uns. + + +\begin{spiel} +\begin{enumerate} + \item + Schreibt ein Progamm, welches einen Vektor mit einer beliebigen Anzahl an Elementen befüllt und dann auf einen Index weit über der tatsächlichen Größe schreibt. + Was beobachtet ihr?\footnote{Es wird natürlich Quark sein was dabei rauskommt, es geht hier haupsächlich darum das ihr seht was für einen Fehler das gibt} + \item + Überlegt euch wie ihr verhindern könnt, dass über den Rand des Vektors hinaus geschrieben oder gelesen wird. + \item + Implementiert das \emph{Sieb des Eratosthenes}\footnote{\url{https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes}}, wenn ihr noch nicht ausgelastet seid. + Denkt daran, es initial zu befüllen und denkt euch eine clevere Möglichkeit aus, das „Streichen“ zu realisieren. +\end{enumerate} +\end{spiel} + +\textbf{Quiz 15}\\ +\textit{Welche Aussagen über Vektoren sind falsch?} +\begin{enumerate}[label=\alph*)] + \item Vektoren haben immer die Größe 3 + \item Vektoren können nur mit Elementen eines einzigen Datentyps befüllt werden + \item Der Index startet bei 0 + \item Der letzte Index ist immer die Größe - 1 +\end{enumerate} diff --git a/lektionen/compiling.tex b/lektionen/compiling.tex index 14bcb18..9a8577b 100644 --- a/lektionen/compiling.tex +++ b/lektionen/compiling.tex @@ -57,7 +57,7 @@ Eintrittspunkt für das Programm genommen, sonst gibt es einen \emph{Linkerfehler}. Ein Linkerfehler tritt auch auf, wenn wir versuchen, eine Funktion zu verwenden, die es nicht gibt (z.B. indem wir Funktionen aus einem -Headerfile benutzen ohne das Header-File mit \texttt{#include} auch tatsächlich einzubinden). +Headerfile benutzen ohne das Header-File mit \texttt{\#include} auch tatsächlich einzubinden). Linkerfehler deuten also darauf hin, dass wir vergessen haben, alle relevanten Dateien auf der Kommandozeile anzugeben, oder dass eine \texttt{main}-Funktion fehlt, oder dass wir in mehren Dateien eine Funktion diff --git a/lektionen/kontrollfluss.tex b/lektionen/control_flow.tex similarity index 100% rename from lektionen/kontrollfluss.tex rename to lektionen/control_flow.tex diff --git a/lektionen/gdb.tex b/lektionen/debbugging.tex similarity index 100% rename from lektionen/gdb.tex rename to lektionen/debbugging.tex diff --git a/lektionen/fehler.tex b/lektionen/errors_warnings.tex similarity index 100% rename from lektionen/fehler.tex rename to lektionen/errors_warnings.tex diff --git a/lektionen/exercises/intro.tex b/lektionen/exercises/intro.tex new file mode 100644 index 0000000..4029f80 --- /dev/null +++ b/lektionen/exercises/intro.tex @@ -0,0 +1,5 @@ +\chapter{Zusätzliche Übungen} +\pagestyle{empty} +Dieses Kapitel dient als Aufgabenpool für zusätzliche Übungen, die ihr bearbeiten könnt, um euer Wissen zu festigen. + +\pagestyle{fancy} diff --git a/lektionen/funktionen.tex b/lektionen/functions.tex similarity index 94% rename from lektionen/funktionen.tex rename to lektionen/functions.tex index edee670..77071e3 100644 --- a/lektionen/funktionen.tex +++ b/lektionen/functions.tex @@ -9,13 +9,13 @@ Die Kombination von Parametertypen und Rückgabetyp bildet die Signatur einer Funktion. Parameter sind Werte, die der Funktion übergeben werden, zum Beispiel das $x$ in $f(x)$. Für eine Funktion \cppinline{my_func}, die $x^n$ berechnen soll, könnte eine Signatur so aussehen: -\[ - \smashoperator{\mathop{\underbrace{\text{\cppinline{double}}}}_{\text{Rückgabetyp}}}\quad - \smashoperator{\mathop{\overbrace{\text{\cppinline{my_func}}}}^{\text{Name}}} - (\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Parameter 1}}},\ - \smashoperator{\mathop{\overbrace{\text{\cppinline{int n}}}^{\text{Parameter 2}}}}) -\] -%sorry etwas hässlich +%\[ +% \smashoperator{\mathop{\underbrace{\text{\cppinline{double}}}}_{\text{Rückgabetyp}}}\quad +% \smashoperator{\mathop{\overbrace{\text{\cppinline{my_func}}}}^{\text{Name}}} +% (\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Parameter 1}}},\ +% \smashoperator{\mathop{\overbrace{\text{\cppinline{int n}}}^{\text{Parameter 2}}}}) +%\] +% This structure currently causes the workflow to crash. It will need to be addressed in the future. \begin{itemize} \item Rückgabetyp: Bestimmt welchen Datentyp die Rückgabe der Funktion hat diff --git a/lektionen/hello_world.tex b/lektionen/input_output_hello_world.tex similarity index 72% rename from lektionen/hello_world.tex rename to lektionen/input_output_hello_world.tex index ef6c74c..b5c93b5 100644 --- a/lektionen/hello_world.tex +++ b/lektionen/input_output_hello_world.tex @@ -129,3 +129,60 @@ \item Das Programm tut garnichts mehr \item Das Programm gibt trotzdem \texttt{Hello world} aus \end{enumerate} + +\lesson{Input und Output} + +Nachdem wir ein bisschen Vertrauen in die shell entwickelt haben und zumindest +bereits unser erstes Programm kompiliert, wollen wir nun etwas spannendere +Dinge tun. Nach wie vor müsst ihr nicht jede Zeile eures Programmes verstehen. +Sollte euch bei einer bestimmten Zeile trotzdem interessieren, was genau sie +tut, versucht doch eventuell sie zu entfernen, das Programm zu kompilieren und +schaut, was sich ändert. + +Wir wollen uns nun mit grundlegendem input und output vertraut machen, denn +erst wenn euer Programm mit einer Benutzerin interagiert, wird es wirklich +nützlich. Wir haben in der ersten Lektion bereits \texttt{cout} (für +\emph{console out}) kennengelernt, um Dinge auszugeben. Nun nutzen wir +\texttt{cin}, um Eingaben des Benutzers entgegen zu nehmen. Jedes Programm +unter Linux (und übrigens auch Mac OS oder Windows) kann auf diese Weise +Eingaben von der Nutzerin entgegen nehmen und Ausgaben liefern. Das ist auch +der Grund, warum die Konsole so wichtig ist und es viele Dinge gibt, die nur +mittels einer Konsole gelöst werden können: Während es viele Stunden dauert, +ein grafisches Interface zu programmieren, über die man mit dem Programm mit +der Maus kommunizieren kann, kann praktisch jeder ein textbasiertes +Konsoleninterface schreiben. Linux ist ein Ökosystem mit einer gewaltigen +Anzahl tools für jeden denkbaren Zweck und bei den meisten haben die Autorinnen +sich nicht die Mühe gemacht, extra eine grafische Oberfläche zu entwickeln. + +Nun aber direkt zur Praxis: + +\begin{praxis} + \begin{enumerate} + \item Öffnet die Datei \texttt{vorkurs/lektion03/helloyou.cpp} in eurem Texteditor + \item Öffnet ein Terminal und wechselt in das Verzeichnis \texttt{vorkurs/lektion03} + \item Kompiliert im Terminal die Datei (\texttt{g++ -o helloyou + helloyou.cpp}) und führt sie aus (\texttt{./helloyou}) + \item Versucht verschiedene Eingaben an das Programm und beobachtet, was passiert + \end{enumerate} + + \inputcpp{helloyou.cpp} +\end{praxis} + +\begin{spiel} +\begin{enumerate} + \item Versucht, zu verstehen, was die einzelnen Teile des Programms tun. An + welcher Stelle erfolgt die Eingabe? Was passiert dann damit? + \item Erweitert das Programm um eigene Fragen und Ausgaben. Vergesst nicht, + dass ihr das Programm nach jeder Änderung neu kompilieren und testen + müsst. +\end{enumerate} +\end{spiel} + +\textbf{Quiz 3}\\ +\textit{Was passiert, wenn \texttt{std::cin >> eingabe;} vor \texttt{std::string eingabe;} steht?} +\begin{enumerate}[label=\alph*)] + \item Das Programm funktioniert ganz normal + \item Es wird \texttt{eingabe} ausgegeben + \item Es wird \texttt{Hello} ausgegeben + \item Das Programm kann nicht kompiliert werden +\end{enumerate} diff --git a/lektionen/intro.tex b/lektionen/intro.tex index 9a7cfb7..eaf77ca 100644 --- a/lektionen/intro.tex +++ b/lektionen/intro.tex @@ -10,22 +10,21 @@ \chapter{Die Basics} wir Vektoren kennenlernen und unser erstes nützliches Progamm schreiben. \pagestyle{fancy} -\input{lektionen/eigener_computer/intro} \input{lektionen/unix_shell} \input{lektionen/input_output_hello_world} \input{lektionen/compiling} -\input{lektionen/variablen_datatypes} -\input{lektionen/arith} -\input{lektionen/kontrollfluss} -\input{lektionen/schleifen} -\input{lektionen/debbuging} -\input{lektionen/funktionen} +\input{lektionen/variables_datatypes} +\input{lektionen/arithmetics} +\input{lektionen/control_flow} +\input{lektionen/loops} +\input{lektionen/debbugging} +\input{lektionen/functions} \input{lektionen/stdlib} -\input{lektionen/arrays_vektoren} -\input{lektionen/rekursion} -\input{lektionen/fehler_warnings} +\input{lektionen/arrays_vectors} +\input{lektionen/recursion} +\input{lektionen/errors_warnings} \input{lektionen/tictactoe} -\input{lektionen/aufgaben/intro} +\input{lektionen/exercises/intro} %ToDo, also needs to bed added \clearpage \pagestyle{empty} diff --git a/lektionen/schleifen.tex b/lektionen/loops.tex similarity index 100% rename from lektionen/schleifen.tex rename to lektionen/loops.tex diff --git a/lektionen/recursion.tex b/lektionen/recursion.tex new file mode 100644 index 0000000..e69de29 diff --git a/lektionen/stdbib.tex b/lektionen/stdlib.tex similarity index 100% rename from lektionen/stdbib.tex rename to lektionen/stdlib.tex diff --git a/lektionen/konsole.tex b/lektionen/unix_shell.tex similarity index 100% rename from lektionen/konsole.tex rename to lektionen/unix_shell.tex diff --git a/lektionen/variablen.tex b/lektionen/variables_datatypes.tex similarity index 100% rename from lektionen/variablen.tex rename to lektionen/variables_datatypes.tex diff --git a/lektionen/vektoren.tex b/lektionen/vectors.tex similarity index 100% rename from lektionen/vektoren.tex rename to lektionen/vectors.tex diff --git a/vorkurs.tex b/vorkurs.tex index ccd96a7..61f5751 100644 --- a/vorkurs.tex +++ b/vorkurs.tex @@ -165,6 +165,7 @@ \chapter*{Vorwort} \tableofcontents +\input{eigener_computer/intro.tex} \input{lektionen/intro.tex} \input{appendix/intro.tex}