Skip to content

Commit

Permalink
Renamed loads of files to fit the new structure
Browse files Browse the repository at this point in the history
  • Loading branch information
fschledorn committed Nov 24, 2024
1 parent 66cfcfd commit 8426ea8
Show file tree
Hide file tree
Showing 16 changed files with 156 additions and 13 deletions.
File renamed without changes.
81 changes: 81 additions & 0 deletions lektionen/arrays.tex → lektionen/arrays_vectors.tex
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,84 @@
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}
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions lektionen/eigener_computer/intro.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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}
\input{lektionen/eigener_computer/linux}
\input{lektionen/eigener_computer/windows}
\input{lektionen/eigener_computer/macos}
File renamed without changes.
5 changes: 5 additions & 0 deletions lektionen/exercises/intro.tex
Original file line number Diff line number Diff line change
@@ -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}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -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}
20 changes: 10 additions & 10 deletions lektionen/intro.tex
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@ \chapter{Die Basics}
\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} %ToDo, also needs to bed added
\input{lektionen/exercises/intro} %ToDo, also needs to bed added

\clearpage
\pagestyle{empty}
Expand Down
File renamed without changes.
Empty file added lektionen/recursion.tex
Empty file.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit 8426ea8

Please sign in to comment.