diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index d219eca..3cc9eb5 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -55,3 +55,23 @@ jobs: - name: Run compilability checker run: python .github/workflows/test_scripts/check_compilability.py + + latexindent-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: xu-cheng/texlive-action@v2 + with: + scheme: full + run: | + apk add --no-cache perl perl-app-cpanminus perl-yaml-tiny perl-file-homedir perl-file-find-rule + cpanm Unicode::GCString + find . -name "*.tex" | while read file; do + perl $(kpsewhich latexindent.pl) "$file" > "$file.formatted" + if ! diff -q "$file" "$file.formatted" > /dev/null; then + echo "::error file=$file::File is not properly formatted. Run 'make format' locally." + exit 1 + fi + rm "$file.formatted" + done diff --git a/.gitignore b/.gitignore index 585224f..6da317a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ title.pdf .vscode/ .DS_Store *.dSYM +_minted/ +*synctex.gz +*.bak* \ No newline at end of file diff --git a/Makefile b/Makefile index 3e9f9e4..be5d7f3 100644 --- a/Makefile +++ b/Makefile @@ -69,4 +69,8 @@ zip: dir @zip -r vorkurs.zip vorkurs vorkurs.pdf @echo "Zip-File erstellt. Fertig zum hochladen." +format: + @echo "Formatieren des LaTeX-Projekts…" + @bash scripts/format_latex.sh + @echo "Fertig." diff --git a/README.md b/README.md index 2860bc7..e6bb4c1 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,29 @@ Das Makefile stellt die folgenden Befehle bereit: make clean - räumt mit allen temporären Dateien auf make dir - erstellt das Vorkurs-Verzeichnis make nodir - löscht das Vorkurs-Verzeichnis - make zip - erstellt ein zip-file um es online zu stellen + make zip - erstellt ein zip-file um es online zu stellen + make format - formatiert alle Latex files automatisch (siehe section Formatierung) + +Formatierung +------------ + +Mit + + make format + +werden alle `.tex`-Dateien im Projekt automatisch mit `latexindent` formatiert. Dabei werden eventuell fehlende Perl-Module erkannt und du kannst auswählen, ob sie automatisch installiert werden sollen. Nach dem Formatieren werden alle von `latexindent` erzeugten Backup-Dateien (z.B. `.bak0`) automatisch entfernt. + +**Voraussetzungen:** +- `latexindent.pl` muss installiert sein (enthalten in TeX Live oder MacTeX). +- Die Perl-Module `YAML::Tiny`, `File::HomeDir`, `Unicode::GCString` und `File::Find::Rule` müssen installiert sein (das Skript hilft bei der Installation). +- Für die automatische Installation der Module kann ggf. `sudo` benötigt werden. + +**Ablauf:** +1. `make format` ausführen. +2. Fehlende Module werden angezeigt und können installiert werden. +3. Alle `.tex`-Dateien werden formatiert. +4. Backup-Dateien werden entfernt. + Skript ------ diff --git a/appendix/cheatsheet_shortcuts.tex b/appendix/cheatsheet_shortcuts.tex index e69de29..82876c7 100644 --- a/appendix/cheatsheet_shortcuts.tex +++ b/appendix/cheatsheet_shortcuts.tex @@ -0,0 +1,2 @@ +\chapter{cheatsheet: Shortcuts} +\label{sec:cheatsheet-shortcuts} \ No newline at end of file diff --git a/appendix/coding_style.tex b/appendix/coding_style.tex index 06b1e8c..8945e81 100644 --- a/appendix/coding_style.tex +++ b/appendix/coding_style.tex @@ -11,66 +11,66 @@ unterstützen, gibt es mehrere Dinge, auf die man achten kann. \begin{description} - \item[Einrückung] - Wie euch vermutlich aufgefallen ist, sind an verschiedenen Stellen im - Code einzelne Zeilen ein wenig eingerückt. Dies ist vermutlich das - wichtigste Werkzeug, welches zur Verfügung steht, um die Lesbarkeit von - Code zu unterstützen (auch, wenn es nicht nötig ist, um formal korrekte - Programme zu schreiben). Die einzelnen Einheiten des Kontrollflusss - werden dadurch visuell voneinander abgegrenzt, was es einfacher macht, - den Programmverlauf zu verfolgen. + \item[Einrückung] + Wie euch vermutlich aufgefallen ist, sind an verschiedenen Stellen im + Code einzelne Zeilen ein wenig eingerückt. Dies ist vermutlich das + wichtigste Werkzeug, welches zur Verfügung steht, um die Lesbarkeit von + Code zu unterstützen (auch, wenn es nicht nötig ist, um formal korrekte + Programme zu schreiben). Die einzelnen Einheiten des Kontrollflusss + werden dadurch visuell voneinander abgegrenzt, was es einfacher macht, + den Programmverlauf zu verfolgen. - Wie genau eingerückt werden sollte, darüber scheiden sich die Geister. - Man kann mit mehreren Leerzeichen oder durch Tabulatoren einrücken. - Empfehlenswert ist auf jeden Fall, mehrere gleichförmige „Ebenen“ zu - haben (z.B. 4, 8, 12, \dots\ Leerzeichen zu Beginn der Zeile). Tabulatoren - haben den Vorteil, dass sie, in der Theorie, über Programme hinweg “standartisiert” sind, - weswegen man denselben Code in mehreren Editoren öffnen und - überall problemlos mit Tabulatoren arbeiten kann. Eine - Faustregel für gut lesbare Einrückung ist, immer wenn man eine - geschweifte Klammer öffnet, eine Ebene tiefer einzurücken und immer, - wenn man eine geschweifte Klammer schließt, wieder eine Ebene zurück zu - nehmen. - \item[Klammern] - Aus der Schule kennt ihr das Prinzip „Punkt- vor Strichrechnung“. Dies - ist eine Regel, die so genannte \emph{Präzedenz} ausdrückt, also die - Reihenfolge, in der Operatoren ausgewertet werden. Punkt vor Strich ist - allerdings nicht aussreichend, um vollständig zu beschreiben, wie sich - Operatoren in Gruppen verhalten. Schaut euch z.B. den Ausdruck - \texttt{3 * 2 / 3} an. Da der Computer Ganzzahldivision benutzt, kommen - hier unterschiedliche Ergebniss raus, je nachdem, ob zunächst das - \texttt{*} oder das \texttt{/} ausgewertet wird. Im ersten Fall - erhalten wir \texttt{6 / 3 == 2}, wie wir erwarten würden. Im zweiten - Fall wird aber abgerundet, sodass wir \texttt{3 * 0 == 0} erhalten. + Wie genau eingerückt werden sollte, darüber scheiden sich die Geister. + Man kann mit mehreren Leerzeichen oder durch Tabulatoren einrücken. + Empfehlenswert ist auf jeden Fall, mehrere gleichförmige „Ebenen“ zu + haben (z.B. 4, 8, 12, \dots\ Leerzeichen zu Beginn der Zeile). Tabulatoren + haben den Vorteil, dass sie, in der Theorie, über Programme hinweg “standartisiert” sind, + weswegen man denselben Code in mehreren Editoren öffnen und + überall problemlos mit Tabulatoren arbeiten kann. Eine + Faustregel für gut lesbare Einrückung ist, immer wenn man eine + geschweifte Klammer öffnet, eine Ebene tiefer einzurücken und immer, + wenn man eine geschweifte Klammer schließt, wieder eine Ebene zurück zu + nehmen. + \item[Klammern] + Aus der Schule kennt ihr das Prinzip „Punkt- vor Strichrechnung“. Dies + ist eine Regel, die so genannte \emph{Präzedenz} ausdrückt, also die + Reihenfolge, in der Operatoren ausgewertet werden. Punkt vor Strich ist + allerdings nicht aussreichend, um vollständig zu beschreiben, wie sich + Operatoren in Gruppen verhalten. Schaut euch z.B. den Ausdruck + \texttt{3 * 2 / 3} an. Da der Computer Ganzzahldivision benutzt, kommen + hier unterschiedliche Ergebniss raus, je nachdem, ob zunächst das + \texttt{*} oder das \texttt{/} ausgewertet wird. Im ersten Fall + erhalten wir \texttt{6 / 3 == 2}, wie wir erwarten würden. Im zweiten + Fall wird aber abgerundet, sodass wir \texttt{3 * 0 == 0} erhalten. - Um solche und ähnliche Uneindeutigkeiten zu vermeiden, bietet es sich - an, Klammerung zu verwenden. Selbst wenn wir im obigen Fall - \emph{wissen} in welcher Reihenfolge die Operatoren ausgewertet werden, - jemand der unseren Code liest, weiß das vielleicht nicht. Einfach von - vornherein die gewollte Reihenfolge der Auswertung zu klammern, - verhindert Verwirrung bei uns über das Verhalten des Computers, als - auch bei Menschen, die später wissen wollen, was wir meinten. + Um solche und ähnliche Uneindeutigkeiten zu vermeiden, bietet es sich + an, Klammerung zu verwenden. Selbst wenn wir im obigen Fall + \emph{wissen} in welcher Reihenfolge die Operatoren ausgewertet werden, + jemand der unseren Code liest, weiß das vielleicht nicht. Einfach von + vornherein die gewollte Reihenfolge der Auswertung zu klammern, + verhindert Verwirrung bei uns über das Verhalten des Computers, als + auch bei Menschen, die später wissen wollen, was wir meinten. - Ihr könnt übrigens nicht nur einzeilige Kommentare erstellen, die mit \cppinline{//} beginnen, sondern auch mehrzeilige, und zwar so: \cppinline{/* Dies ist ein ganz langer mehrzeiliger Kommentar. */} . Alles zwischen den Slashes und Sternchen ist dann ein Kommentar und wird vom Computer ignoriert. Dies könnt ihr als kleinen Trick verwenden, um euren Code zu debuggen, ohne ständig alles neu zu schreiben. Ihr könnt stattdessen einfach den nicht benötigten Code auskommentieren und wenn ihr ihn wieder verwenden wollt, die Kommentarzeichen am Anfang und Ende wieder entfernen. - \item[Kommentare] - Wir haben schon in mehreren Quellcodedateien Kommentare verwendet, um - einzelne Dinge zu erklären. Insgesamt bietet es sich an, dies selbst - ebenfalls zu tun, um den Programmfluss der Leserin von Quellcode klar zu - machen. Das heißt nicht, dass man jede Anweisung noch einmal mit einem - Kommantar versehen sollte, der sie ausführlich erklärt, aber an - wichtigen Punkten können einem kurze Kommentare das Leben enorm - vereinfachen. Und ihr dürft nicht vergessen, dass ihr euch vielleicht - selbst in ein oder zwei Jahren noch einmal euren eigenen Quellcode - anschauen müsst und ihr werdet wirklich überrascht sein, wie wenig ihr - von dem Zeug, welches ihr selbst geschrieben habt, verstehen werdet. - \item [Benennungen] - Wenn ihr eure Variablen -- und später auch eure Funktionen und Klassen -- präzise benennt, dann vereinfacht ihr das Lesen eures Codes extrem. Durch Bezeichnungen, die für sich sprechen, könnt ihr euch außerdem Kommentare etwas ersparen, weil die Variablennamen dann schon viel erklären. Es ist zum Beispiel ungeschickt, seine Variablen wie in der Mathematik üblich einfach nur mit einzelnen Buchstaben zu benennen, statt \cppinline{int a = 42;} sollte man lieber \cppinline{int alter = 42;} verwenden, da die Leserin direkt weiß, dass in dieser Variablen das Alter gespeichert wird. Zu dieser coding style Richtlinie gibt es jedoch auch eine Ausnahme: Bei Zählervariablen, die einfach nur die Anzahl der Schleifeniterationen hochzählen, verwendet man meist einzelne Buchstaben, wie \cppinline{i} oder \cppinline{n}. Das ist schön kurz und praktisch, jedoch muss man etwas aufpassen, denn man kann schnell mit diesen Indices durcheinander kommen -- genau so wie in der Mathematik. - \item[Leerzeichen und -zeilen] - Weniger wichtig als die ersten vier Punkte können trotzdem gezielte - Leerzeichen (z.B. zwischen Operatoren und Operanden in arithmetischen - Ausdrücken) die Lesbarkeit enorm erhöhen. Gerade in arithmetischen - Ausdrücken ist es eine gute Angewohnheit. - Ebenso sind Leerzeilen zwischen logischen Abschnitten sehr hilfreich. Zu Beginn eines Abschnittes kann man dann noch einen kurzen Kommentar hinzufügen, was in dem Abschnitt passiert und schon fällt das Lesen des Codes deutlich leichter. + Ihr könnt übrigens nicht nur einzeilige Kommentare erstellen, die mit \cppinline{//} beginnen, sondern auch mehrzeilige, und zwar so: \cppinline{/* Dies ist ein ganz langer mehrzeiliger Kommentar. */} . Alles zwischen den Slashes und Sternchen ist dann ein Kommentar und wird vom Computer ignoriert. Dies könnt ihr als kleinen Trick verwenden, um euren Code zu debuggen, ohne ständig alles neu zu schreiben. Ihr könnt stattdessen einfach den nicht benötigten Code auskommentieren und wenn ihr ihn wieder verwenden wollt, die Kommentarzeichen am Anfang und Ende wieder entfernen. + \item[Kommentare] + Wir haben schon in mehreren Quellcodedateien Kommentare verwendet, um + einzelne Dinge zu erklären. Insgesamt bietet es sich an, dies selbst + ebenfalls zu tun, um den Programmfluss der Leserin von Quellcode klar zu + machen. Das heißt nicht, dass man jede Anweisung noch einmal mit einem + Kommantar versehen sollte, der sie ausführlich erklärt, aber an + wichtigen Punkten können einem kurze Kommentare das Leben enorm + vereinfachen. Und ihr dürft nicht vergessen, dass ihr euch vielleicht + selbst in ein oder zwei Jahren noch einmal euren eigenen Quellcode + anschauen müsst und ihr werdet wirklich überrascht sein, wie wenig ihr + von dem Zeug, welches ihr selbst geschrieben habt, verstehen werdet. + \item [Benennungen] + Wenn ihr eure Variablen -- und später auch eure Funktionen und Klassen -- präzise benennt, dann vereinfacht ihr das Lesen eures Codes extrem. Durch Bezeichnungen, die für sich sprechen, könnt ihr euch außerdem Kommentare etwas ersparen, weil die Variablennamen dann schon viel erklären. Es ist zum Beispiel ungeschickt, seine Variablen wie in der Mathematik üblich einfach nur mit einzelnen Buchstaben zu benennen, statt \cppinline{int a = 42;} sollte man lieber \cppinline{int alter = 42;} verwenden, da die Leserin direkt weiß, dass in dieser Variablen das Alter gespeichert wird. Zu dieser coding style Richtlinie gibt es jedoch auch eine Ausnahme: Bei Zählervariablen, die einfach nur die Anzahl der Schleifeniterationen hochzählen, verwendet man meist einzelne Buchstaben, wie \cppinline{i} oder \cppinline{n}. Das ist schön kurz und praktisch, jedoch muss man etwas aufpassen, denn man kann schnell mit diesen Indices durcheinander kommen -- genau so wie in der Mathematik. + \item[Leerzeichen und -zeilen] + Weniger wichtig als die ersten vier Punkte können trotzdem gezielte + Leerzeichen (z.B. zwischen Operatoren und Operanden in arithmetischen + Ausdrücken) die Lesbarkeit enorm erhöhen. Gerade in arithmetischen + Ausdrücken ist es eine gute Angewohnheit. + Ebenso sind Leerzeilen zwischen logischen Abschnitten sehr hilfreich. Zu Beginn eines Abschnittes kann man dann noch einen kurzen Kommentar hinzufügen, was in dem Abschnitt passiert und schon fällt das Lesen des Codes deutlich leichter. \end{description} Es gibt sicher noch viele Regeln, über die ihr im Laufe eures Lebens stolpern @@ -82,34 +82,34 @@ aufzuspüren. Auch wenn es coding style Richtlinien für verschiedene Programmiersprachen gibt, die größtenteils relativ ähnlich sind, gewöhnt man sich meist einen eigenen Stil mit der Zeit an. Es ist allerdings wichtig, früh auf guten Stil zu achten, denn wenn man erst einmal damit anfängt, unübersichtlichen Code zu schreiben, gewöhnt man sich diese Unart an und das will schließlich niemand. \begin{praxis} - \begin{enumerate} - \item Eine weit verbreitete einfache Aufgabe, die in Bewerbungsgesprächen - auf Stellen als Programmiererin häufig gestellt wird, ist - \emph{FizzBuzz}. In \texttt{fizzbuzz.cpp} ist eine möglich Lösung für - diese Aufgabe gegeben. Könnt ihr (nur mittels des Quellcodes) sagen, - was das Programm tut? - \item Nutzt die oben gegebenen Faustregeln, um den Quellcode lesbarer zu - machen. Ihr müsst nicht alles bis aufs Wort befolgen, macht einfach so - lange weiter, bis ihr findet, man kann hinreichend schnell verstehen, - was hier passieren soll. - \end{enumerate} + \begin{enumerate} + \item Eine weit verbreitete einfache Aufgabe, die in Bewerbungsgesprächen + auf Stellen als Programmiererin häufig gestellt wird, ist + \emph{FizzBuzz}. In \texttt{fizzbuzz.cpp} ist eine möglich Lösung für + diese Aufgabe gegeben. Könnt ihr (nur mittels des Quellcodes) sagen, + was das Programm tut? + \item Nutzt die oben gegebenen Faustregeln, um den Quellcode lesbarer zu + machen. Ihr müsst nicht alles bis aufs Wort befolgen, macht einfach so + lange weiter, bis ihr findet, man kann hinreichend schnell verstehen, + was hier passieren soll. + \end{enumerate} - \inputcpp{fizzbuzz.cpp} + \inputcpp{fizzbuzz.cpp} \end{praxis} \begin{spiel} - \begin{enumerate} - \item Entfernt in eurem veränderten Quellcode eine geschweifte Klammer - eurer Wahl. Lasst eure Sitznachbarin über den Quellcode schauen und die - fehlende Klammer finden. - \end{enumerate} + \begin{enumerate} + \item Entfernt in eurem veränderten Quellcode eine geschweifte Klammer + eurer Wahl. Lasst eure Sitznachbarin über den Quellcode schauen und die + fehlende Klammer finden. + \end{enumerate} \end{spiel} \textbf{Quiz 12}\\ \textit{Was gehört zu gutem Coding style?} \begin{enumerate}[label=\alph*)] - \item Sinnvolle Kommentare - \item Möglichst keine Leerzeilen lassen - \item Variablennamen möglichst kurz wählen - \item Einrückungen vornehmen + \item Sinnvolle Kommentare + \item Möglichst keine Leerzeilen lassen + \item Variablennamen möglichst kurz wählen + \item Einrückungen vornehmen \end{enumerate} diff --git a/appendix/intro.tex b/appendix/intro.tex index 91fbe28..05aa543 100644 --- a/appendix/intro.tex +++ b/appendix/intro.tex @@ -8,6 +8,8 @@ \chapter{Appendix} \input{appendix/coding_style} %ToDo, partially done \input{appendix/error_messages} % ToDo needs to be added +\input{appendix/vscode_tutorial} + \clearpage \pagestyle{empty} diff --git a/appendix/vscode_tutorial.tex b/appendix/vscode_tutorial.tex new file mode 100644 index 0000000..6750bda --- /dev/null +++ b/appendix/vscode_tutorial.tex @@ -0,0 +1,61 @@ +\chapter{Visual Studio Code: Einstieg und Tipps} +\label{sec:vscode} + +Visual Studio Code (VS Code) ist ein moderner, kostenloser Editor, der besonders für Programmieranfänger:innen viele Vorteile bietet. +In diesem Abschnitt zeigen wir, wie ihr VS Code installiert, sinnvoll einrichtet und für den Vorkurs nutzt. + +\section{Installation} +\begin{enumerate} + \item Ladet VS Code von \url{https://code.visualstudio.com/Download} herunter und installiert es. + \item Öffnet VS Code nach der Installation. +\end{enumerate} + +\section{Empfohlene Erweiterungen} +\begin{itemize} + \item \textbf{C/C++} (Microsoft): Syntax-Highlighting, Autovervollständigung und Debugging für C++. + \item \textbf{CodeLLDB} oder \textbf{C/C++ Extension Pack}: Für erweitertes Debugging. + \item \textbf{Remote - WSL} (nur Windows): Für die Verbindung zu WSL (Windows Subsystem for Linux). + \item \textbf{Better Comments}, \textbf{Bracket Pair Colorizer}, \textbf{GitLens}: Für mehr Übersicht und Komfort. +\end{itemize} + +\section{VS Code mit WSL verbinden (nur Windows)} +\begin{enumerate} + \item Installiert das Windows-Subsystem für Linux (siehe Kapitel \ref{sec:windows}). + \item Installiert die Erweiterung \textbf{Remote - WSL} in VS Code. + \item Öffnet die WSL-Konsole und gebt \texttt{code .} ein, um das aktuelle Verzeichnis in VS Code zu öffnen. + \item VS Code erkennt automatisch, dass ihr im WSL arbeitet. +\end{enumerate} + +\section{Debugger einrichten} +\begin{enumerate} + \item Öffnet die Datei, die ihr debuggen wollt. + \item Klickt links auf das Symbol für „Run and Debug“ (\texttt{Play}-Button mit Käfer). + \item Wählt „C++ (GDB/LLDB)“ oder „C++ (Windows)“ aus. + \item Erstellt ggf. eine \texttt{launch.json} (VS Code bietet eine automatische Konfiguration an). + \item Setzt Breakpoints durch Klick auf die Zeilennummer. + \item Startet das Debugging mit F5. +\end{enumerate} + +\section{Nützliche Shortcuts} +Eine vollständige Übersicht findet ihr im Anhang \ref{sec:cheatsheet-shortcuts}. Hier die wichtigsten: +\begin{itemize} + \item \texttt{Strg + P}: Datei schnell öffnen + \item \texttt{Strg + Shift + P}: Befehlspalette öffnen + \item \texttt{Strg + \textasciigrave}: Terminal öffnen/schließen + \item \texttt{F5}: Debugging starten + \item \texttt{F9}: Breakpoint setzen/entfernen +\end{itemize} + +\section{Weitere Tipps} +\begin{itemize} + \item Ihr könnt mehrere Terminals gleichzeitig öffnen (z.B. Bash und PowerShell). + \item Die integrierte Git-Unterstützung hilft beim Versionsmanagement. + \item Mit \texttt{settings.json} könnt ihr VS Code individuell anpassen. +\end{itemize} + +\section{Fehlerbehebung} +\begin{itemize} + \item Prüft, ob alle benötigten Erweiterungen installiert sind. + \item Bei Problemen mit WSL: VS Code und WSL neu starten. + \item Compiler-Fehler erscheinen im „Problems“-Tab unten. +\end{itemize} \ No newline at end of file diff --git a/eigener_computer/intro.tex b/eigener_computer/intro.tex index 2a03a25..15d3eb2 100644 --- a/eigener_computer/intro.tex +++ b/eigener_computer/intro.tex @@ -1,7 +1,8 @@ \setcounter{chapter}{-1} \chapter{Vorbereitung eigener Computer} +\label{chap:eigener_computer} \pagestyle{empty} -Dieses Kapitel dient der Vorbereitung privater Computer, um daran den Kurs zu bearbeiten. +Dieses Kapitel dient der Vorbereitung privater Computer, um daran den Kurs zu bearbeiten. 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} diff --git a/eigener_computer/linux.tex b/eigener_computer/linux.tex index 530db67..39142ef 100644 --- a/eigener_computer/linux.tex +++ b/eigener_computer/linux.tex @@ -1,13 +1,14 @@ \textbf{Linux} +\label{sec:linux} \pagestyle{empty} Falls ihr privat bereits ein Linux-System nutzt. \begin{enumerate} \item Optional: Alternativ zu Visual Studio Code, könnt ihr auch eine Quelloffene Version des Editors verwenden. - Da die Installation dieser Version je nach Distribution variiert, verweisen wir euch an dieser Stelle an eine kurze Internetrecherche. + Da die Installation dieser Version je nach Distribution variiert, verweisen wir euch an dieser Stelle an eine kurze Internetrecherche. \item Installiert mit eurem Packagemanager \texttt{g++} und ggf. \texttt{unzip}, sowie \texttt{wget}. \item Das Archiv mit den Vorkursdateien könnt ihr mit \\ - \texttt{wget https://mathphys.info/vorkurs/pvk/vorkurs.zip} herunterladen. + \texttt{wget https://mathphys.info/vorkurs/pvk/vorkurs.zip} herunterladen. \item Mit \texttt{unzip vorkurs.zip} könnt ihr dieses entpacken. \end{enumerate} \ No newline at end of file diff --git a/eigener_computer/macos.tex b/eigener_computer/macos.tex index e1a675f..03ab039 100644 --- a/eigener_computer/macos.tex +++ b/eigener_computer/macos.tex @@ -1,4 +1,5 @@ \textbf{MacOS} +\label{sec:macos} \pagestyle{empty} diff --git a/eigener_computer/windows.tex b/eigener_computer/windows.tex index c5fb4ae..001af83 100644 --- a/eigener_computer/windows.tex +++ b/eigener_computer/windows.tex @@ -1,4 +1,5 @@ \textbf{Windows} +\label{sec:windows} \pagestyle{empty} Um dem Kurs unter Windows folgen zu können sollte zunächst eine Linux-Umgebung erzeugt werden, in der die entsprechenden Tools zur Verfügung stehen. Dafür muss zunächst das so genannte Windows-Subsystem für Linux (kurz WSL) aktiviert werden. @@ -6,22 +7,22 @@ In dieser werden wir dann die nötigen Tools installieren. \begin{enumerate} \item Zunächst muss mittels PowerShell das WSL aktiviert werden. Dafür kann man im Suchfeld des Windows-Desktops einfach nach „PowerShell“ suchen. - Durch einen Rechtsklick kann diese als Administrator gestartet werden, was für die Aktivierung notwendig ist. + Durch einen Rechtsklick kann diese als Administrator gestartet werden, was für die Aktivierung notwendig ist. \item Hat man die PowerShell als Administrator geöffnet, kann das WSL durch den Befehl \texttt{wsl -{}-install} aktivieren. \item Das System startet danach einen Download, diesen durchlaufen lassen, und anschließend den PC neu starten. - \item Nach dem Neustart kann in den Programmen „Ubuntu“ gestartet werden. - Wenn ihr an dieser Stelle „Ubuntu“ nicht auswählen könnt, dann ist die Installation unter Umständen noch nicht fertig. - Startet in diesem Fall die PowerShell erneut als Administrator und führt erneut \texttt{wsl -{}-install} aus. - \item In dem erscheinenden Terminal wird zunächst um die Erstellung eines neuen Nutzers für die Linux-Umgebung gebeten. - Hierbei könnt ihr Nutzername und Passwort frei wählen. Bitte notiert euch diese, da ihr sie noch braucht.\\ - \textbf{Hinweis zum setzen des Passworts:} Anders als bei Windows werden hier bei der Eingabe keine Sternchen, oder ähnliche Symbole erscheinen, die als Platzhalter für bereits eingegebene Symbole erscheinen. - Das Passwort muss also „blind“ eingegeben werden. Um hier ein eventuelles Vertippen auszuschließen, muss das Passwort nach der ersten Eingabe erneut bestätigt werden. + \item Nach dem Neustart kann in den Programmen „Ubuntu“ gestartet werden. + Wenn ihr an dieser Stelle „Ubuntu“ nicht auswählen könnt, dann ist die Installation unter Umständen noch nicht fertig. + Startet in diesem Fall die PowerShell erneut als Administrator und führt erneut \texttt{wsl -{}-install} aus. + \item In dem erscheinenden Terminal wird zunächst um die Erstellung eines neuen Nutzers für die Linux-Umgebung gebeten. + Hierbei könnt ihr Nutzername und Passwort frei wählen. Bitte notiert euch diese, da ihr sie noch braucht.\\ + \textbf{Hinweis zum setzen des Passworts:} Anders als bei Windows werden hier bei der Eingabe keine Sternchen, oder ähnliche Symbole erscheinen, die als Platzhalter für bereits eingegebene Symbole erscheinen. + Das Passwort muss also „blind“ eingegeben werden. Um hier ein eventuelles Vertippen auszuschließen, muss das Passwort nach der ersten Eingabe erneut bestätigt werden. \item Bevor ihr neue Tools installiert, solltet ihr euer System updaten. Gebt dazu ins Terminal folgende Befehle ein: \texttt{sudo apt update} und danach \texttt{sudo apt upgrade}. Im Allgemeinen empfiehlt es sich, diese Befehle im regelmäßigen Abstand auszuführen um euer System aktuell zu halten. Ihr werdet hier eventuell nach einem Passwort gefragt, ihr müsst hier das eben von euch gesetzte verwenden. - \item Im Anschluss müssen im Terminal mittels \texttt{sudo apt install gdb g++ unzip -y} die nötigen Tools installiert werden. - Der Start des Vorgangs muss dabei wieder mit dem vorhin gesetzten Passwort bestätigt werden. - (Auch hier werden keine Sternchen oder Ähnliches für bereits eingegeben Symbole angezeigt) + \item Im Anschluss müssen im Terminal mittels \texttt{sudo apt install gdb g++ unzip -y} die nötigen Tools installiert werden. + Der Start des Vorgangs muss dabei wieder mit dem vorhin gesetzten Passwort bestätigt werden. + (Auch hier werden keine Sternchen oder Ähnliches für bereits eingegeben Symbole angezeigt) \item Jetzt könnt ihr die Dateien des Kurses mittels \\ - \texttt{wget https://mathphys.info/vorkurs/pvk/vorkurs.zip} herunterladen. + \texttt{wget https://mathphys.info/vorkurs/pvk/vorkurs.zip} herunterladen. \item Abschließend könnt ihr das Archiv mit \texttt{unzip vorkurs.zip} entpacken. \item Die Dateien des Vorkurses können nun mittels \texttt{code vorkurs} über das Terminal geöffnet werden. \end{enumerate} diff --git a/folien/folien-eigene-computer.tex b/folien/folien-eigene-computer.tex index dab8791..1fa3e78 100644 --- a/folien/folien-eigene-computer.tex +++ b/folien/folien-eigene-computer.tex @@ -4,103 +4,103 @@ \input{header} \begin{document} - \begin{frame}[plain] - \bookmark[level=0, page=1]{Titel} - \titlepage - \tikz[,overlay] - \node at - (current page.south) - {\includegraphics[width=5cm]{media/MathPhysLogo.pdf}}; - \end{frame} - - \begin{frame} - \begin{center} - \Huge Eine kurze Einführung - \end{center} - \begin{center} - \pause\Huge Weil das doch ein bisschen anders laufen wird, als ihr es - gewohnt seid\dots - \end{center} - \end{frame} - - \begin{frame} - \frametitle{Worum es geht} - \begin{itemize} - \item Ihr habt (fast) noch nie programmiert - \pause\item Ihr müsst alle programmieren - \pause\item Eine Woche Vorbereitung - \pause\item Programmieren kann man nicht „beibringen“, man muss es „lernen“ - \item[] - \pause\item[$\Ra$] Wir bringen euch bei, Programmieren zu lernen - \end{itemize} - \end{frame} - - \begin{frame} - \frametitle{Was wir von euch erwarten} - \begin{itemize} - \item Ihr seid nicht hier, um ein Zertifikat zu bekommen - \pause\item Ihr wollt euch den Programmiervorkurs nicht in den Lebenslauf schreiben - \pause\item Ihr wollt keine Zeit totschlagen - \pause\item Ihr erwartet keinen „Trichter“ von uns - \item[] - \pause\item[$\Ra$] Ihr seid hier, um zu lernen (aktiv) - \end{itemize} - \end{frame} - - \begin{frame} - \frametitle{Was ihr von uns erwarten könnt} - \begin{itemize} - \item Wir geben euch Hilfsmittel um zu lernen - \pause\item Wir helfen euch, diese Hilfsmittel zu interpretieren - \pause\item Wir helfen euch, weitere Informationen zu finden - \pause\item Wir erklären euch Dinge, die nicht im Skript stehen - \pause\item Wir helfen euch, wenn etwas nicht funktioniert - \pause\item Wir loben euch, wenn ihr mit eurem Können angeben wollt ;) - \end{itemize} - \end{frame} - - \begin{frame} - \frametitle{Wie das Skript funktioniert} - \begin{itemize} - \item Ihr bekommt von uns ein Skript - \pause\item Das Skript ist aufgeteilt in \emph{Lektionen} - \pause\item Ihr arbeitet die in eurem eigenen Tempo durch - \pause\item Jede Lektion hat einen \emph{Theorie-}, einen - \emph{Praxis-} und einen \emph{Spiel}teil - \pause\item \emph{Theorie}: Wall of Text. Aufmerksam lesen, ggf. später - als Referenz nutzen - \pause\item \emph{Praxis}: (Relativ) einfache Aufgaben, lassen sich - ohne großes Verständnis machen - \pause\item \emph{Spiel}: Herausforderndere, freiere Aufgaben. Hier - sollt ihr selbst erkunden - \end{itemize} - \end{frame} - - \begin{frame} - \frametitle{Das sollt ihr „lernen“} +\begin{frame}[plain] + \bookmark[level=0, page=1]{Titel} + \titlepage + \tikz[,overlay] + \node at + (current page.south) + {\includegraphics[width=5cm]{media/MathPhysLogo.pdf}}; +\end{frame} + +\begin{frame} + \begin{center} + \Huge Eine kurze Einführung + \end{center} + \begin{center} + \pause\Huge Weil das doch ein bisschen anders laufen wird, als ihr es + gewohnt seid\dots + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Worum es geht} + \begin{itemize} + \item Ihr habt (fast) noch nie programmiert + \pause\item Ihr müsst alle programmieren + \pause\item Eine Woche Vorbereitung + \pause\item Programmieren kann man nicht „beibringen“, man muss es „lernen“ + \item[] + \pause\item[$\Ra$] Wir bringen euch bei, Programmieren zu lernen + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Was wir von euch erwarten} + \begin{itemize} + \item Ihr seid nicht hier, um ein Zertifikat zu bekommen + \pause\item Ihr wollt euch den Programmiervorkurs nicht in den Lebenslauf schreiben + \pause\item Ihr wollt keine Zeit totschlagen + \pause\item Ihr erwartet keinen „Trichter“ von uns + \item[] + \pause\item[$\Ra$] Ihr seid hier, um zu lernen (aktiv) + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Was ihr von uns erwarten könnt} + \begin{itemize} + \item Wir geben euch Hilfsmittel um zu lernen + \pause\item Wir helfen euch, diese Hilfsmittel zu interpretieren + \pause\item Wir helfen euch, weitere Informationen zu finden + \pause\item Wir erklären euch Dinge, die nicht im Skript stehen + \pause\item Wir helfen euch, wenn etwas nicht funktioniert + \pause\item Wir loben euch, wenn ihr mit eurem Können angeben wollt ;) + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Wie das Skript funktioniert} + \begin{itemize} + \item Ihr bekommt von uns ein Skript + \pause\item Das Skript ist aufgeteilt in \emph{Lektionen} + \pause\item Ihr arbeitet die in eurem eigenen Tempo durch + \pause\item Jede Lektion hat einen \emph{Theorie-}, einen + \emph{Praxis-} und einen \emph{Spiel}teil + \pause\item \emph{Theorie}: Wall of Text. Aufmerksam lesen, ggf. später + als Referenz nutzen + \pause\item \emph{Praxis}: (Relativ) einfache Aufgaben, lassen sich + ohne großes Verständnis machen + \pause\item \emph{Spiel}: Herausforderndere, freiere Aufgaben. Hier + sollt ihr selbst erkunden + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Das sollt ihr „lernen“} + \begin{itemize} + \item Ein Computer ist keine schwarze Magie + \pause\item Eine Konsole ist keine schwarze Magie + \pause\item Programmieren ist keine schwarze Magie + \pause\item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt + ein Programm, das\dots“ + \pause\item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen + \pause\item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert + \end{itemize} +\end{frame} + +\begin{frame} + \begin{center} + \Huge Einführung Ende + \end{center} + \begin{center} \begin{itemize} - \item Ein Computer ist keine schwarze Magie - \pause\item Eine Konsole ist keine schwarze Magie - \pause\item Programmieren ist keine schwarze Magie - \pause\item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt - ein Programm, das\dots“ - \pause\item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen - \pause\item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert + \huge\pause\item Fragen? + \huge\pause\item Öffentliches WLAN:\\ + heidelberg4you \end{itemize} - \end{frame} - - \begin{frame} - \begin{center} - \Huge Einführung Ende - \end{center} - \begin{center} - \begin{itemize} - \huge\pause\item Fragen? - \huge\pause\item Öffentliches WLAN:\\ - heidelberg4you - \end{itemize} - - \end{center} - \end{frame} - + + \end{center} +\end{frame} + \end{document} diff --git a/folien/folien.tex b/folien/folien.tex index ef5dc75..f985d53 100644 --- a/folien/folien.tex +++ b/folien/folien.tex @@ -5,109 +5,109 @@ \begin{document} \begin{frame}[plain] - \bookmark[level=0, page=1]{Titel} - \titlepage - \tikz[,overlay] - \node at - (current page.south) - {\includegraphics[width=5cm]{media/MathPhysLogo.pdf}}; + \bookmark[level=0, page=1]{Titel} + \titlepage + \tikz[,overlay] + \node at + (current page.south) + {\includegraphics[width=5cm]{media/MathPhysLogo.pdf}}; \end{frame} \begin{frame} - \begin{center} - \Huge Eine kurze Einführung - \end{center} - \begin{center} - \pause\Huge Weil das doch ein bisschen anders laufen wird, als ihr es - gewohnt seid\dots - \end{center} + \begin{center} + \Huge Eine kurze Einführung + \end{center} + \begin{center} + \pause\Huge Weil das doch ein bisschen anders laufen wird, als ihr es + gewohnt seid\dots + \end{center} \end{frame} \begin{frame} - \frametitle{Worum es geht} - \begin{itemize} - \item Ihr habt (fast) noch nie programmiert - \pause\item Ihr müsst alle programmieren - \pause\item Eine Woche Vorbereitung - \pause\item Programmieren kann man nicht „beibringen“, man muss es „lernen“ - \item[] - \pause\item[$\Ra$] Wir bringen euch bei, Programmieren zu lernen - \end{itemize} + \frametitle{Worum es geht} + \begin{itemize} + \item Ihr habt (fast) noch nie programmiert + \pause\item Ihr müsst alle programmieren + \pause\item Eine Woche Vorbereitung + \pause\item Programmieren kann man nicht „beibringen“, man muss es „lernen“ + \item[] + \pause\item[$\Ra$] Wir bringen euch bei, Programmieren zu lernen + \end{itemize} \end{frame} \begin{frame} - \frametitle{Was wir von euch erwarten} - \begin{itemize} - \item Ihr seid nicht hier, um ein Zertifikat zu bekommen - \pause\item Ihr wollt euch den Programmiervorkurs nicht in den Lebenslauf schreiben - \pause\item Ihr wollt keine Zeit totschlagen - \pause\item Ihr erwartet keinen „Trichter“ von uns - \item[] - \pause\item[$\Ra$] Ihr seid hier, um zu lernen (aktiv) - \end{itemize} + \frametitle{Was wir von euch erwarten} + \begin{itemize} + \item Ihr seid nicht hier, um ein Zertifikat zu bekommen + \pause\item Ihr wollt euch den Programmiervorkurs nicht in den Lebenslauf schreiben + \pause\item Ihr wollt keine Zeit totschlagen + \pause\item Ihr erwartet keinen „Trichter“ von uns + \item[] + \pause\item[$\Ra$] Ihr seid hier, um zu lernen (aktiv) + \end{itemize} \end{frame} \begin{frame} - \frametitle{Was ihr von uns erwarten könnt} - \begin{itemize} - \item Wir geben euch Hilfsmittel um zu lernen - \pause\item Wir helfen euch, diese Hilfsmittel zu interpretieren - \pause\item Wir helfen euch, weitere Informationen zu finden - \pause\item Wir erklären euch Dinge, die nicht im Skript stehen - \pause\item Wir helfen euch, wenn etwas nicht funktioniert - \pause\item Wir loben euch, wenn ihr mit eurem Können angeben wollt ;) - \end{itemize} + \frametitle{Was ihr von uns erwarten könnt} + \begin{itemize} + \item Wir geben euch Hilfsmittel um zu lernen + \pause\item Wir helfen euch, diese Hilfsmittel zu interpretieren + \pause\item Wir helfen euch, weitere Informationen zu finden + \pause\item Wir erklären euch Dinge, die nicht im Skript stehen + \pause\item Wir helfen euch, wenn etwas nicht funktioniert + \pause\item Wir loben euch, wenn ihr mit eurem Können angeben wollt ;) + \end{itemize} \end{frame} \begin{frame} - \frametitle{Wie das Skript funktioniert} - \begin{itemize} - \item Auf eurem Desktop liegt eine vorkurs.pdf - \pause\item Das Skript ist aufgeteilt in \emph{Lektionen} - \pause\item Ihr arbeitet die in eurem eigenen Tempo durch - \pause\item Jede Lektion hat einen \emph{Theorie-}, einen - \emph{Praxis-} und einen \emph{Spiel}teil - \pause\item \emph{Theorie}: Wall of Text. Aufmerksam lesen, ggf. später - als Referenz nutzen - \pause\item \emph{Praxis}: (Relativ) einfache Aufgaben, lassen sich - ohne großes Verständnis machen - \pause\item \emph{Spiel}: Herausforderndere, freiere Aufgaben. Hier - sollt ihr selbst erkunden - \end{itemize} + \frametitle{Wie das Skript funktioniert} + \begin{itemize} + \item Auf eurem Desktop liegt eine vorkurs.pdf + \pause\item Das Skript ist aufgeteilt in \emph{Lektionen} + \pause\item Ihr arbeitet die in eurem eigenen Tempo durch + \pause\item Jede Lektion hat einen \emph{Theorie-}, einen + \emph{Praxis-} und einen \emph{Spiel}teil + \pause\item \emph{Theorie}: Wall of Text. Aufmerksam lesen, ggf. später + als Referenz nutzen + \pause\item \emph{Praxis}: (Relativ) einfache Aufgaben, lassen sich + ohne großes Verständnis machen + \pause\item \emph{Spiel}: Herausforderndere, freiere Aufgaben. Hier + sollt ihr selbst erkunden + \end{itemize} \end{frame} \begin{frame} - \frametitle{Das sollt ihr „lernen“} - \begin{itemize} - \item Ein Computer ist keine schwarze Magie - \pause\item Eine Konsole ist keine schwarze Magie - \pause\item Programmieren ist keine schwarze Magie - \pause\item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt - ein Programm, das\dots“ - \pause\item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen - \pause\item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert - \end{itemize} + \frametitle{Das sollt ihr „lernen“} + \begin{itemize} + \item Ein Computer ist keine schwarze Magie + \pause\item Eine Konsole ist keine schwarze Magie + \pause\item Programmieren ist keine schwarze Magie + \pause\item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt + ein Programm, das\dots“ + \pause\item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen + \pause\item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert + \end{itemize} \end{frame} \begin{frame} - \frametitle{Organisatorisches} - \begin{itemize} - \item 50 Accounts: \texttt{\input{accounts}} - \pause\item \#\#\# ist die Nummer eures Computers - \pause\item Initiales Passwort: \texttt{\input{passwort}} (ändern) - \pause\item Merkt euch eure Nummer! Sie bleibt euer Account (auch, wenn - ihr morgen woanders sitzt) - \pause\item Tragt euch in die Liste ein - \end{itemize} + \frametitle{Organisatorisches} + \begin{itemize} + \item 50 Accounts: \texttt{\input{accounts}} + \pause\item \#\#\# ist die Nummer eures Computers + \pause\item Initiales Passwort: \texttt{\input{passwort}} (ändern) + \pause\item Merkt euch eure Nummer! Sie bleibt euer Account (auch, wenn + ihr morgen woanders sitzt) + \pause\item Tragt euch in die Liste ein + \end{itemize} \end{frame} \begin{frame} - \begin{center} - \Huge Einführung Ende - \end{center} - \begin{center} - \pause\Huge Fragen? - \end{center} + \begin{center} + \Huge Einführung Ende + \end{center} + \begin{center} + \pause\Huge Fragen? + \end{center} \end{frame} \end{document} diff --git a/folien/header.tex b/folien/header.tex index 81507a2..1c5ff71 100644 --- a/folien/header.tex +++ b/folien/header.tex @@ -4,65 +4,65 @@ \documentclass[t, ngerman, aspectratio=1610]{beamer} %% Pakete laden... - \usepackage[T1]{fontenc} - \usepackage[utf8]{inputenc} - \usepackage{ - amsmath, - amsthm, - amssymb, - babel, - bookmark, - booktabs, - graphicx, - microtype, - nicefrac, - pifont, - pgfpages, - tikz, - } - \usepackage[overlay, absolute]{textpos} - \setlength{\TPHorizModule}{1mm} - \setlength{\TPVertModule}{1mm} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{ + amsmath, + amsthm, + amssymb, + babel, + bookmark, + booktabs, + graphicx, + microtype, + nicefrac, + pifont, + pgfpages, + tikz, +} +\usepackage[overlay, absolute]{textpos} +\setlength{\TPHorizModule}{1mm} +\setlength{\TPVertModule}{1mm} %% Design festlegen... - \mode{ -% \useoutertheme[subsection=false]{smoothbars} - \useinnertheme{rectangles} % rectangles, circles, rounded - \usecolortheme[RGB={153,0,0}]{structure} - \definecolor{unihd}{RGB}{153,0,0} - \definecolor{dark}{RGB}{115,0,0} - \definecolor{light}{RGB}{241,229,229} - \usecolortheme{whale} - \usecolortheme{orchid} -% \usecolortheme{beaver} -% \setbeamercovered{transparent} - \beamertemplatenavigationsymbolsempty -% \setbeameroption{show notes on second screen} - \setbeamertemplate{note page}[plain] - \logo{\includegraphics[width=3.5cm]{fs-logo-small}} - } +\mode{ + % \useoutertheme[subsection=false]{smoothbars} + \useinnertheme{rectangles} % rectangles, circles, rounded + \usecolortheme[RGB={153,0,0}]{structure} + \definecolor{unihd}{RGB}{153,0,0} + \definecolor{dark}{RGB}{115,0,0} + \definecolor{light}{RGB}{241,229,229} + \usecolortheme{whale} + \usecolortheme{orchid} + % \usecolortheme{beaver} + % \setbeamercovered{transparent} + \beamertemplatenavigationsymbolsempty + % \setbeameroption{show notes on second screen} + \setbeamertemplate{note page}[plain] + \logo{\includegraphics[width=3.5cm]{fs-logo-small}} +} %% nützliche Definitionen... - \graphicspath{{media/}} +\graphicspath{{media/}} %% Titelinformationen... - \title[Programmiervorkurs]{Willkommen beim Vorkurs} - \author[ - koebi - ]{ - Jakob Schnell, Friedrich Schwedler,\\ Jonas Müller und Patrick Dammann - } +\title[Programmiervorkurs]{Willkommen beim Vorkurs} +\author[ + koebi +]{ + Jakob Schnell, Friedrich Schwedler,\\ Jonas Müller und Patrick Dammann +} - \date{\vspace*{-2em}\\ \today} +\date{\vspace*{-2em}\\ \today} - \hypersetup{ - pdfauthor={Jakob Schnell}, - pdftitle={Programmiervorkurs}, - pdfsubject={hihi}, - pdfkeywords={1}, - pdfpagelayout={SinglePage}, - } +\hypersetup{ + pdfauthor={Jakob Schnell}, + pdftitle={Programmiervorkurs}, + pdfsubject={hihi}, + pdfkeywords={1}, + pdfpagelayout={SinglePage}, +} %% Nützliche Commands... \newcommand{\Ra}{\Rightarrow} diff --git a/folien_abschied/folien_abschied.tex b/folien_abschied/folien_abschied.tex index 65fb8be..8e41588 100644 --- a/folien_abschied/folien_abschied.tex +++ b/folien_abschied/folien_abschied.tex @@ -9,101 +9,101 @@ \titlepage \tikz[,overlay] \node at - (current page.south) - {\includegraphics[width=5cm]{fs-logo-big}}; + (current page.south) + {\includegraphics[width=5cm]{fs-logo-big}}; \end{frame} \begin{frame} -\titlepage + \titlepage \end{frame} \begin{frame} - \begin{center} - \Huge Ein paar Worte zum Abschied - \end{center} - \pause\begin{center} - \Huge Zuerst: Danke fürs Teilnehmen, bitte gebt Feedback! - \end{center} + \begin{center} + \Huge Ein paar Worte zum Abschied + \end{center} + \pause\begin{center} + \Huge Zuerst: Danke fürs Teilnehmen, bitte gebt Feedback! + \end{center} \end{frame} \begin{frame} - \frametitle{Das, würden wir uns wünschen, habt ihr „gelernt“} - \begin{itemize} - \pause\item Ein Computer ist keine schwarze Magie - \pause\item Eine Konsole ist keine schwarze Magie - \pause\item Programmieren ist keine schwarze Magie - \pause\item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt - ein Programm, das\dots“ - \pause\item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen - \pause\item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert - \end{itemize} + \frametitle{Das, würden wir uns wünschen, habt ihr „gelernt“} + \begin{itemize} + \pause\item Ein Computer ist keine schwarze Magie + \pause\item Eine Konsole ist keine schwarze Magie + \pause\item Programmieren ist keine schwarze Magie + \pause\item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt + ein Programm, das\dots“ + \pause\item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen + \pause\item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert + \end{itemize} \end{frame} \begin{frame} - \frametitle{Where do we go from here?} - \begin{itemize} - \pause\item Der Vorkurs ist nicht dazu gedacht, unbedingt abgeschlossen - zu werden - \pause\item Nächste Woche beginnt der „richtige“ Vorkurs (Montag, 10 - Uhr, INF 306, HS 1) - \pause\item Wenn ihr unbedingt zu Hause weiter arbeiten wollt, gibt es - mehrere Möglichkeiten\dots - \pause\item (\dots die Folien stelle ich online. Ihr müsst nicht - mitschreiben) - \pause\item Alle Materialien und Folien findet ihr (heute abend - spätestens auch aktuell) auf \url{https://mathphys.info/vorkurs/programmier} - \end{itemize} + \frametitle{Where do we go from here?} + \begin{itemize} + \pause\item Der Vorkurs ist nicht dazu gedacht, unbedingt abgeschlossen + zu werden + \pause\item Nächste Woche beginnt der „richtige“ Vorkurs (Montag, 10 + Uhr, INF 306, HS 1) + \pause\item Wenn ihr unbedingt zu Hause weiter arbeiten wollt, gibt es + mehrere Möglichkeiten\dots + \pause\item (\dots die Folien stelle ich online. Ihr müsst nicht + mitschreiben) + \pause\item Alle Materialien und Folien findet ihr (heute abend + spätestens auch aktuell) auf \url{https://mathphys.info/vorkurs/programmier} + \end{itemize} \end{frame} \begin{frame} - \frametitle{Codeblocks} + \frametitle{Codeblocks} - \begin{itemize} - \pause\item „Integrated Development Environment“ (IDE) - \pause\item Integriert den Compiler, einen debugger, einen Editor und - mehr - \pause\item Ist die „offiziell empfohlene“ IDE in der Einführung in die - praktische Informatik - \pause\item Läuft unter Windows, Linux und Mac - \end{itemize} + \begin{itemize} + \pause\item „Integrated Development Environment“ (IDE) + \pause\item Integriert den Compiler, einen debugger, einen Editor und + mehr + \pause\item Ist die „offiziell empfohlene“ IDE in der Einführung in die + praktische Informatik + \pause\item Läuft unter Windows, Linux und Mac + \end{itemize} \end{frame} \begin{frame} - \frametitle{Linux Install Party} + \frametitle{Linux Install Party} - \begin{itemize} - \pause\item Workshop im Vorkurs - \pause\item Bringt einen Laptop -- wir installieren mit euch Linux - \pause\item Hier ist ein „Debian Wheezy mit xfce“ installiert - \pause\item Ihr braucht \texttt{g++} und \texttt{gdb} zusätzlich - \pause\item Linux ist toll! - \pause\item Aber gewöhnungsbedürftig. - \pause\item Aber es lohnt sich ;) - \end{itemize} + \begin{itemize} + \pause\item Workshop im Vorkurs + \pause\item Bringt einen Laptop -- wir installieren mit euch Linux + \pause\item Hier ist ein „Debian Wheezy mit xfce“ installiert + \pause\item Ihr braucht \texttt{g++} und \texttt{gdb} zusätzlich + \pause\item Linux ist toll! + \pause\item Aber gewöhnungsbedürftig. + \pause\item Aber es lohnt sich ;) + \end{itemize} \end{frame} \begin{frame} - \frametitle{Wubi} + \frametitle{Wubi} - \begin{itemize} - \pause\item Installiert euch ein Ubuntu-Linux, das ihr aus Windows - starten könnt - \pause\item Nutzt Google für Hilfe und Installationsanleitung - \pause\item Ubuntu nutzt einen Unity-Desktop -- der sieht ganz anders - aus als hier, ihr müsst mal schauen, wie ihr klar kommt - \pause\item Ihr braucht mindestens folgende Zusatzpakete (nutzt - Google): - \texttt{build-essential}, \texttt{g++}, \texttt{gdb} - \end{itemize} + \begin{itemize} + \pause\item Installiert euch ein Ubuntu-Linux, das ihr aus Windows + starten könnt + \pause\item Nutzt Google für Hilfe und Installationsanleitung + \pause\item Ubuntu nutzt einen Unity-Desktop -- der sieht ganz anders + aus als hier, ihr müsst mal schauen, wie ihr klar kommt + \pause\item Ihr braucht mindestens folgende Zusatzpakete (nutzt + Google): + \texttt{build-essential}, \texttt{g++}, \texttt{gdb} + \end{itemize} \end{frame} \begin{frame} - \begin{center} - \Huge Fragen? - \end{center} - \pause\begin{center} - \Huge Tschüss! - \end{center} + \begin{center} + \Huge Fragen? + \end{center} + \pause\begin{center} + \Huge Tschüss! + \end{center} \end{frame} diff --git a/folien_abschied/header.tex b/folien_abschied/header.tex index bbd1600..28df549 100644 --- a/folien_abschied/header.tex +++ b/folien_abschied/header.tex @@ -4,65 +4,65 @@ \documentclass[t, ngerman]{beamer} %% Pakete laden... - \usepackage[T1]{fontenc} - \usepackage[utf8]{inputenc} - \usepackage{ - amsmath, - amsthm, - amssymb, - babel, - bookmark, - booktabs, - graphicx, - microtype, - nicefrac, - pifont, - pgfpages, - tikz, - } - \usepackage[overlay, absolute]{textpos} - \setlength{\TPHorizModule}{1mm} - \setlength{\TPVertModule}{1mm} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{ + amsmath, + amsthm, + amssymb, + babel, + bookmark, + booktabs, + graphicx, + microtype, + nicefrac, + pifont, + pgfpages, + tikz, +} +\usepackage[overlay, absolute]{textpos} +\setlength{\TPHorizModule}{1mm} +\setlength{\TPVertModule}{1mm} %% Design festlegen... - \mode{ -% \useoutertheme[subsection=false]{smoothbars} - \useinnertheme{rectangles} % rectangles, circles, rounded - \usecolortheme[RGB={153,0,0}]{structure} - \definecolor{unihd}{RGB}{153,0,0} - \definecolor{dark}{RGB}{115,0,0} - \definecolor{light}{RGB}{241,229,229} - \usecolortheme{whale} - \usecolortheme{orchid} -% \usecolortheme{beaver} -% \setbeamercovered{transparent} - \beamertemplatenavigationsymbolsempty -% \setbeameroption{show notes on second screen} - \setbeamertemplate{note page}[plain] - \logo{\includegraphics[width=3.5cm]{fs-logo-small}} - } +\mode{ + % \useoutertheme[subsection=false]{smoothbars} + \useinnertheme{rectangles} % rectangles, circles, rounded + \usecolortheme[RGB={153,0,0}]{structure} + \definecolor{unihd}{RGB}{153,0,0} + \definecolor{dark}{RGB}{115,0,0} + \definecolor{light}{RGB}{241,229,229} + \usecolortheme{whale} + \usecolortheme{orchid} + % \usecolortheme{beaver} + % \setbeamercovered{transparent} + \beamertemplatenavigationsymbolsempty + % \setbeameroption{show notes on second screen} + \setbeamertemplate{note page}[plain] + \logo{\includegraphics[width=3.5cm]{fs-logo-small}} +} %% nützliche Definitionen... - \graphicspath{{media/}} +\graphicspath{{media/}} %% Titelinformationen... - \title[Programmiervorkurs]{Abschlussworte} - \author[ +\title[Programmiervorkurs]{Abschlussworte} +\author[ koebi - ]{ +]{ Jakob Schnell, Friedrich Schwedler und Patrick Dammann - } +} - \date{\vspace*{-2em}\\ \today} +\date{\vspace*{-2em}\\ \today} - \hypersetup{ - pdfauthor={Jakob Schnell}, - pdftitle={Programmiervorkurs}, - pdfsubject={hihi}, - pdfkeywords={1}, - pdfpagelayout={SinglePage}, - } +\hypersetup{ + pdfauthor={Jakob Schnell}, + pdftitle={Programmiervorkurs}, + pdfsubject={hihi}, + pdfkeywords={1}, + pdfpagelayout={SinglePage}, +} %% Nützliche Commands... \newcommand{\Ra}{\Rightarrow} diff --git a/lektionen/arithmetics.tex b/lektionen/arithmetics.tex index 63a5091..279efda 100644 --- a/lektionen/arithmetics.tex +++ b/lektionen/arithmetics.tex @@ -29,61 +29,61 @@ \inputcpp{arith2.cpp} \begin{praxis} - \begin{enumerate} - \item Was gibt dieses Programm aus? Überlegt es euch zuerst und kompiliert - es dann, um es auszuprobieren. - \end{enumerate} + \begin{enumerate} + \item Was gibt dieses Programm aus? Überlegt es euch zuerst und kompiliert + es dann, um es auszuprobieren. + \end{enumerate} - Obwohl \texttt{a = a + 19} mathematisch überhaupt keinen Sinn ergibt, ist doch - klar, was passiert, wenn man sich den Quellcode eben nicht als Reihe von - Aussagen, sondern als Folge von \emph{Anweisungen} vorstellt. Das - Gleichheitszeichen bedeutet dann nicht, dass beide Seiten gleich sein sollen, - sondern dass der Wert auf der linken Seite den Wert auf der rechten Seite - annehmen soll. + Obwohl \texttt{a = a + 19} mathematisch überhaupt keinen Sinn ergibt, ist doch + klar, was passiert, wenn man sich den Quellcode eben nicht als Reihe von + Aussagen, sondern als Folge von \emph{Anweisungen} vorstellt. Das + Gleichheitszeichen bedeutet dann nicht, dass beide Seiten gleich sein sollen, + sondern dass der Wert auf der linken Seite den Wert auf der rechten Seite + annehmen soll. - Wie wir in diesem Beispiel ausserdem sehen, können wir nicht nur Strings - ausgeben, sondern auch Zahlen. \texttt{std::cout} gibt sie in einer Form aus, - in der wir etwas damit anfangen können. Genauso können wir auch über - \texttt{std::cin} Zahlen vom Benutzer entgegen nehmen: + Wie wir in diesem Beispiel ausserdem sehen, können wir nicht nur Strings + ausgeben, sondern auch Zahlen. \texttt{std::cout} gibt sie in einer Form aus, + in der wir etwas damit anfangen können. Genauso können wir auch über + \texttt{std::cin} Zahlen vom Benutzer entgegen nehmen: - \inputcpp{arith3.cpp} + \inputcpp{arith3.cpp} - Langsam aber sicher tasten wir uns an nützliche Programme heran! + Langsam aber sicher tasten wir uns an nützliche Programme heran! - \begin{enumerate}[resume] - \item Schreibt ein Programm, welches von der Nutzerin zwei ganze Zahlen - entgegen nimmt und anschließend Summe, Differenz, Produkt und Quotient - ausspuckt. - \item Was fällt auf, wenn ihr z.B. 19 und 7 eingebt? - \item Findet heraus (Google ist euer Freund), wie man in \Cpp Division mit - Rest durchführt und gebt diese zusätzlich zu den bisherigen Operationen - mit aus\footnote{Falls ihr nicht weiterkommt, hilft euch vielleicht das - Stichwort „modulo“ oder „modulo-operator“ weiter.}. - \item Was passiert, wenn ihr als zweite Zahl eine 0 eingebt? - \end{enumerate} + \begin{enumerate}[resume] + \item Schreibt ein Programm, welches von der Nutzerin zwei ganze Zahlen + entgegen nimmt und anschließend Summe, Differenz, Produkt und Quotient + ausspuckt. + \item Was fällt auf, wenn ihr z.B. 19 und 7 eingebt? + \item Findet heraus (Google ist euer Freund), wie man in \Cpp Division mit + Rest durchführt und gebt diese zusätzlich zu den bisherigen Operationen + mit aus\footnote{Falls ihr nicht weiterkommt, hilft euch vielleicht das + Stichwort „modulo“ oder „modulo-operator“ weiter.}. + \item Was passiert, wenn ihr als zweite Zahl eine 0 eingebt? + \end{enumerate} \end{praxis} \begin{spiel} -\begin{enumerate} - \item Findet heraus, was die größte positive (und was die kleinste - negative) Zahl ist, die ihr in einem \texttt{int} speichern könnt. - Faulpelze nutzen Google, Lernbegierige versuchen sie experimentell zu - ermitteln. Was passiert, wenn ihr eine größere Zahl eingebt? - \item Wir arbeiten bisher nur mit \texttt{int}s für ganze Zahlen. Wenn wir - mit gebrochenen Zahlen rechnen wollen brauchen wir den Datentyp - \texttt{double}. Schreibt euer Mini Rechenprogramm so um, dass es statt - \texttt{int}s nur noch \texttt{double} benutzt und probiert es aus. - Achtet darauf, dass es Dezimalpunkte und Dezimalkommata gibt, wenn ihr - überraschende Ergebnisse erhaltet. -\end{enumerate} + \begin{enumerate} + \item Findet heraus, was die größte positive (und was die kleinste + negative) Zahl ist, die ihr in einem \texttt{int} speichern könnt. + Faulpelze nutzen Google, Lernbegierige versuchen sie experimentell zu + ermitteln. Was passiert, wenn ihr eine größere Zahl eingebt? + \item Wir arbeiten bisher nur mit \texttt{int}s für ganze Zahlen. Wenn wir + mit gebrochenen Zahlen rechnen wollen brauchen wir den Datentyp + \texttt{double}. Schreibt euer Mini Rechenprogramm so um, dass es statt + \texttt{int}s nur noch \texttt{double} benutzt und probiert es aus. + Achtet darauf, dass es Dezimalpunkte und Dezimalkommata gibt, wenn ihr + überraschende Ergebnisse erhaltet. + \end{enumerate} \end{spiel} \textbf{Quiz 7}\\ \textit{Was passiert, wenn ihr \texttt{int} verwendet, aber eine Kommazahl eingebt?} \begin{enumerate}[label=\alph*)] - \item Alles hinter dem Komma wird abgeschnitten - \item Es tritt ein Fehler auf - \item Das Programm kompiliert nicht - \item statt \texttt{int} wird automatisch \texttt{double} genommen + \item Alles hinter dem Komma wird abgeschnitten + \item Es tritt ein Fehler auf + \item Das Programm kompiliert nicht + \item statt \texttt{int} wird automatisch \texttt{double} genommen \end{enumerate} diff --git a/lektionen/arrays_vectors.tex b/lektionen/arrays_vectors.tex index 23cae4e..81c026e 100644 --- a/lektionen/arrays_vectors.tex +++ b/lektionen/arrays_vectors.tex @@ -47,20 +47,20 @@ 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. + \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 @@ -73,16 +73,16 @@ \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. + \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} @@ -145,23 +145,23 @@ \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} + \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 + \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 9a8577b..853a06b 100644 --- a/lektionen/compiling.tex +++ b/lektionen/compiling.tex @@ -1,8 +1,8 @@ \lesson{Preprocessing, Compiler, Assembler, Linker} In der letzten Lektion habt ihr bereits das erste mal ein Programm kompiliert, -d.h. ihr habt eine für Menschen lesbare Datei in eine für Computer lesbare Datei -übersetzt. Jetzt wollen wir uns etwas genauer anschauen was dabei eigentlich passiert. +d.h. ihr habt eine für Menschen lesbare Datei in eine für Computer lesbare Datei +übersetzt. Jetzt wollen wir uns etwas genauer anschauen was dabei eigentlich passiert. Ihr müsst dabei jetzt nicht jedes Detail vestehen, aber es ist praktisch zu wissen, wie der Compile Vorgang funktioniert um manche Fehlermeldungen zu verstehen. @@ -13,7 +13,7 @@ \emph{Assemblieren} und das \emph{Linken}. Beim Preprocessing werden alle \texttt{\#include}-Anweisungen aufgelöst. -Das ist der erste Schritt, der passiert, wenn wir \texttt{g++} +Das ist der erste Schritt, der passiert, wenn wir \texttt{g++} aufrufen. Das Ergebnis des Preprocessings ist ein erweitertes\Cpp-Programm, das nur noch die \Cpp-Features enthält, die wir auch wirklich benutzen. Das ist der Grund, warum wir in den bisherigen Lektionen immer \texttt{g++ -o helloworld helloworld.cpp} benutzt haben, @@ -56,7 +56,7 @@ Objectfiles eine \texttt{main}-Funktion existiert, wird diese als 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 +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). Linkerfehler deuten also darauf hin, dass wir vergessen haben, alle relevanten Dateien auf der Kommandozeile anzugeben, oder dass eine @@ -67,18 +67,18 @@ folgendes: \begin{tikzpicture} - \tikzstyle{block} = [ shape=rectangle, rounded corners = 0.1cm, draw=black, inner xsep=0.5cm, inner ysep = 0.3cm ]; - \tikzstyle{arr} = [ ->, thick, shorten >= 2pt, shorten <= 2pt ]; + \tikzstyle{block} = [ shape=rectangle, rounded corners = 0.1cm, draw=black, inner xsep=0.5cm, inner ysep = 0.3cm ]; + \tikzstyle{arr} = [ ->, thick, shorten >= 2pt, shorten <= 2pt ]; - \node (nHelloWorldCpp) [block] {\texttt{helloworld.cpp}}; - \node (nHelloWorldS) [block, right of = nHelloWorldCpp, node distance = 12cm] {\texttt{helloworld.S}}; - \draw [arr] (nHelloWorldCpp) -- (nHelloWorldS) node [midway,above,font=\small] {\texttt{g++ -S -o helloworld.S helloworld.cpp}}; - \node (nHelloWorldO) [block, below of = nHelloWorldCpp, node distance = 2cm] {\texttt{helloworld.o}}; - \draw [arr] (nHelloWorldS) -- (nHelloWorldO) node [pos=0.56,above,sloped,font=\small] {\texttt{g++ -c -o helloworld.o helloworld.S}}; - \node (nAnderesO) [block, below of = nHelloWorldO, node distance = 1cm] {\texttt{anderes.o}}; - \node (nHelloWorld) [block, below of = nHelloWorldS, node distance = 2cm] {\texttt{helloworld}}; - \draw [arr] (nHelloWorldO) -- (nHelloWorld) node [midway,below,font=\small] {\texttt{g++ -o helloworld helloworld.o anderes.o}}; - \draw [arr] (nAnderesO) -| (nHelloWorld) node {}; + \node (nHelloWorldCpp) [block] {\texttt{helloworld.cpp}}; + \node (nHelloWorldS) [block, right of = nHelloWorldCpp, node distance = 12cm] {\texttt{helloworld.S}}; + \draw [arr] (nHelloWorldCpp) -- (nHelloWorldS) node [midway,above,font=\small] {\texttt{g++ -S -o helloworld.S helloworld.cpp}}; + \node (nHelloWorldO) [block, below of = nHelloWorldCpp, node distance = 2cm] {\texttt{helloworld.o}}; + \draw [arr] (nHelloWorldS) -- (nHelloWorldO) node [pos=0.56,above,sloped,font=\small] {\texttt{g++ -c -o helloworld.o helloworld.S}}; + \node (nAnderesO) [block, below of = nHelloWorldO, node distance = 1cm] {\texttt{anderes.o}}; + \node (nHelloWorld) [block, below of = nHelloWorldS, node distance = 2cm] {\texttt{helloworld}}; + \draw [arr] (nHelloWorldO) -- (nHelloWorld) node [midway,below,font=\small] {\texttt{g++ -o helloworld helloworld.o anderes.o}}; + \draw [arr] (nAnderesO) -| (nHelloWorld) node {}; \end{tikzpicture} Der bisherige Befehl, den wir zum Kompilieren benutzt haben, ist tatsächlich @@ -91,31 +91,31 @@ \texttt{-S} angegeben haben) und dass er dafür preprocessen, kompilieren, assemblieren und linken muss (da wir ihm eine \texttt{.cpp} Datei gegeben haben). \begin{praxis} - \begin{enumerate} - \item \texttt{assemble.cpp} enthält ein kleines (ziemlich nutzloses) - Programm, welches zwei Zahlen addiert und das Ergebnis ausgibt. - Kompiliert es (nun nur der erste Schritt in dem Diagramm, nicht so, wie - in den vergangenen Lektionen) und schaut euch das resultierende - \texttt{.S}-file in einem Editor an. Ihr müsst nicht verstehen, - was genau hier überall passiert, aber vielleicht findet ihr ja die - \texttt{main}-Funktion, die Definition der Variablen und die Addition? + \begin{enumerate} + \item \texttt{assemble.cpp} enthält ein kleines (ziemlich nutzloses) + Programm, welches zwei Zahlen addiert und das Ergebnis ausgibt. + Kompiliert es (nun nur der erste Schritt in dem Diagramm, nicht so, wie + in den vergangenen Lektionen) und schaut euch das resultierende + \texttt{.S}-file in einem Editor an. Ihr müsst nicht verstehen, + was genau hier überall passiert, aber vielleicht findet ihr ja die + \texttt{main}-Funktion, die Definition der Variablen und die Addition? - Wir können nun mal Optimierung anschalten -- gebt dazu zusätzlich den - Parameter \texttt{-O3} direkt nach dem \texttt{g++} an. Schaut euch das - \texttt{.S}-file nun wieder im Editor an. Was fällt euch - (im Vergleich zu vorher) auf? - \item Assembliert eines der im vorigen Schritt erzeugten \texttt{.S} files - in ein \texttt{.o}-File. - \item Benennt in einem eurer bisherigen Programme die - \texttt{main}-Funktion um und versucht, es zu kompilieren (wie in den - bisherigen Lektionen, also alle Schritte auf einmal). Schaut euch die - resultierenden Fehlermeldungen an. Wo wird euch der Linkerfehler - ausgegeben? - \item Macht die Umbenennung wieder rückgängig und kompiliert das Programm - erneut -- übergebt aber dieses mal den Quellcode doppelt (also z.B. - \texttt{g++ -o helloworld helloworld.cpp helloworld.cpp}). Was - beobachtet ihr? Könnt ihr die Beobachtung erklären? - \end{enumerate} + Wir können nun mal Optimierung anschalten -- gebt dazu zusätzlich den + Parameter \texttt{-O3} direkt nach dem \texttt{g++} an. Schaut euch das + \texttt{.S}-file nun wieder im Editor an. Was fällt euch + (im Vergleich zu vorher) auf? + \item Assembliert eines der im vorigen Schritt erzeugten \texttt{.S} files + in ein \texttt{.o}-File. + \item Benennt in einem eurer bisherigen Programme die + \texttt{main}-Funktion um und versucht, es zu kompilieren (wie in den + bisherigen Lektionen, also alle Schritte auf einmal). Schaut euch die + resultierenden Fehlermeldungen an. Wo wird euch der Linkerfehler + ausgegeben? + \item Macht die Umbenennung wieder rückgängig und kompiliert das Programm + erneut -- übergebt aber dieses mal den Quellcode doppelt (also z.B. + \texttt{g++ -o helloworld helloworld.cpp helloworld.cpp}). Was + beobachtet ihr? Könnt ihr die Beobachtung erklären? + \end{enumerate} - \inputcpp{assemble.cpp} + \inputcpp{assemble.cpp} \end{praxis} diff --git a/lektionen/control_flow.tex b/lektionen/control_flow.tex index 8a11c6d..b751fb2 100644 --- a/lektionen/control_flow.tex +++ b/lektionen/control_flow.tex @@ -29,21 +29,21 @@ \emph{Kontrollfluss}, man kann das mit einem Diagramm verdeutlichen: \begin{center} - \begin{tikzpicture}[auto, node distance=3cm,>=latex'] - \tikzstyle{block} = [draw, fill=blue!20, rectangle, minimum height=3em, minimum width=6em] - - \node [block] (start) {Input}; - \node [block, right of=start] (if) { $a=0$? }; - \node [block, right of=if, node distance=4cm] (fehler) { Gib Fehler aus }; - \node [block, below of=fehler,node distance = 2cm] (quotient) { Gib Quotient aus }; - \node [block, right of=fehler, node distance = 3.5cm] (ende) { Ende }; - - \draw [->] (start) -- node {} (if); - \draw [->] (if) -- node {\texttt{ja}} (fehler); - \draw [->] (if.south) |- node [above, near end] {\texttt{nein}} (quotient); - \draw [->] (quotient) -| node {} (ende); - \draw [->] (fehler) -- node {} (ende); - \end{tikzpicture} + \begin{tikzpicture}[auto, node distance=3cm,>=latex'] + \tikzstyle{block} = [draw, fill=blue!20, rectangle, minimum height=3em, minimum width=6em] + + \node [block] (start) {Input}; + \node [block, right of=start] (if) { $a=0$? }; + \node [block, right of=if, node distance=4cm] (fehler) { Gib Fehler aus }; + \node [block, below of=fehler,node distance = 2cm] (quotient) { Gib Quotient aus }; + \node [block, right of=fehler, node distance = 3.5cm] (ende) { Ende }; + + \draw [->] (start) -- node {} (if); + \draw [->] (if) -- node {\texttt{ja}} (fehler); + \draw [->] (if.south) |- node [above, near end] {\texttt{nein}} (quotient); + \draw [->] (quotient) -| node {} (ende); + \draw [->] (fehler) -- node {} (ende); + \end{tikzpicture} \end{center} Die einfachste Möglichkeit, den Kontrollfluss zu ändern, besteht in so @@ -61,36 +61,36 @@ einfaches Gleichheitszeichen bedeutet Zuweisung („mache diese beiden gleich!“). \begin{praxis} - \begin{enumerate} - \item Nutzt Google, um herauszufinden, welche anderen Vergleichsoperatoren - es in \Cpp noch gibt. Versucht, das Programm so zu verändern, dass es - auf Ungleichheit testet, statt auf Gleichheit (sich sonst aber genauso - verhält). - - \item Wie würdet ihr testen, ob zwei Zahlen durch einander teilbar sind - (Tipp: Ihr kennt bereits die Division mit Rest in \Cpp (modulo))? - Schreibt ein Programm, welches zwei Zahlen von der Nutzerin entgegen - nimmt und ausgibt, ob die zweite Zahl die erste teilt. - \end{enumerate} + \begin{enumerate} + \item Nutzt Google, um herauszufinden, welche anderen Vergleichsoperatoren + es in \Cpp noch gibt. Versucht, das Programm so zu verändern, dass es + auf Ungleichheit testet, statt auf Gleichheit (sich sonst aber genauso + verhält). + + \item Wie würdet ihr testen, ob zwei Zahlen durch einander teilbar sind + (Tipp: Ihr kennt bereits die Division mit Rest in \Cpp (modulo))? + Schreibt ein Programm, welches zwei Zahlen von der Nutzerin entgegen + nimmt und ausgibt, ob die zweite Zahl die erste teilt. + \end{enumerate} \end{praxis} \begin{spiel} -\begin{enumerate} - \item Testet mit verschiedenen Eingaben, was passiert, wenn ihr in - \texttt{if.cpp} statt zwei Gleichheitszeichen nur eines benutzt. - - \item Schreibt ein Programm, welches die Benutzerin fragt, wie sie heißt. - Gibt sie euren eigenen Namen ein, soll das Programm begeistert über die - Namensgleichheit sein, sonst sie einfach begrüßen. -\end{enumerate} + \begin{enumerate} + \item Testet mit verschiedenen Eingaben, was passiert, wenn ihr in + \texttt{if.cpp} statt zwei Gleichheitszeichen nur eines benutzt. + + \item Schreibt ein Programm, welches die Benutzerin fragt, wie sie heißt. + Gibt sie euren eigenen Namen ein, soll das Programm begeistert über die + Namensgleichheit sein, sonst sie einfach begrüßen. + \end{enumerate} \end{spiel} \textbf{Quiz 8}\\ \textit{Welche Aussagen sind korrekt?} \begin{enumerate}[label=\alph*)] - \item Mit \texttt{=} vergleicht man. - \item Es darf immer nur ein \texttt{if} vor einem \texttt{else} kommen. - \item Es darf nur ein else pro Fallunterscheidung geben - \item Bei falscher Einrückung funktioniert das Programm nicht + \item Mit \texttt{=} vergleicht man. + \item Es darf immer nur ein \texttt{if} vor einem \texttt{else} kommen. + \item Es darf nur ein else pro Fallunterscheidung geben + \item Bei falscher Einrückung funktioniert das Programm nicht \end{enumerate} diff --git a/lektionen/debbugging.tex b/lektionen/debbugging.tex index 1228bba..c4331ef 100644 --- a/lektionen/debbugging.tex +++ b/lektionen/debbugging.tex @@ -46,51 +46,51 @@ \begin{praxis} - Wir möchten uns nun den Ablauf des Programms \texttt{debugger.cpp} anschauen. - \inputcpp{debugger.cpp} + Wir möchten uns nun den Ablauf des Programms \texttt{debugger.cpp} anschauen. + \inputcpp{debugger.cpp} - \begin{enumerate} - \item Kompiliert das Programm mit den neuen Optionen für den debugger. Ihr - könnt es dann mittels \verb|gdb ./debugger| im gdb starten. Ihr solltet - nun ein wenig Text ausgegeben bekommen und einen anderen prompt - (\texttt{(gdb)}). Ihr könnt den debugger jederzeit wieder verlassen, - indem ihr \texttt{quit} eingebt (falls ihr gefragt werdet, ob ihr euch - sicher seid, gebt \texttt{y} ein und drückt enter) - \item Zu allererst müssen wir einen so genannten \emph{breakpoint} setzen, - das ist ein Punkt im Programmablauf, an dem es stoppen soll, damit wir - entscheiden können, was wir tun wollen. \texttt{main} ist für die - meisten unserer Programme eine sichere Wahl: - \mint{text}|break main| - Dann können wir das Programm mit \texttt{run} starten. Wir sollten die - erste Anweisung unseres Programmes angezeigt bekommen. - \item Der Debugger wird euch jetzt immer sagen, welches die nächste - Anweisung ist, die er ausführen möchte. Mit \texttt{next} könnt ihr sie - ausführen lassen, mit \texttt{print a} könnt ihr euch den Inhalt von - \texttt{a} zu diesem Zeitpunkt anschauen, mit \texttt{print b} den von - \texttt{b} und so weiter. Geht das Programm Schritt für Schritt durch - und lasst euch die Werte von \texttt{a}, \texttt{b} und \texttt{c} in - jedem Schritt ausgeben. Wenn der debugger euch sagt, dass euer Programm - beendet wurde, gebt \texttt{quit} ein und beendet ihn. - \end{enumerate} + \begin{enumerate} + \item Kompiliert das Programm mit den neuen Optionen für den debugger. Ihr + könnt es dann mittels \verb|gdb ./debugger| im gdb starten. Ihr solltet + nun ein wenig Text ausgegeben bekommen und einen anderen prompt + (\texttt{(gdb)}). Ihr könnt den debugger jederzeit wieder verlassen, + indem ihr \texttt{quit} eingebt (falls ihr gefragt werdet, ob ihr euch + sicher seid, gebt \texttt{y} ein und drückt enter) + \item Zu allererst müssen wir einen so genannten \emph{breakpoint} setzen, + das ist ein Punkt im Programmablauf, an dem es stoppen soll, damit wir + entscheiden können, was wir tun wollen. \texttt{main} ist für die + meisten unserer Programme eine sichere Wahl: + \mint{text}|break main| + Dann können wir das Programm mit \texttt{run} starten. Wir sollten die + erste Anweisung unseres Programmes angezeigt bekommen. + \item Der Debugger wird euch jetzt immer sagen, welches die nächste + Anweisung ist, die er ausführen möchte. Mit \texttt{next} könnt ihr sie + ausführen lassen, mit \texttt{print a} könnt ihr euch den Inhalt von + \texttt{a} zu diesem Zeitpunkt anschauen, mit \texttt{print b} den von + \texttt{b} und so weiter. Geht das Programm Schritt für Schritt durch + und lasst euch die Werte von \texttt{a}, \texttt{b} und \texttt{c} in + jedem Schritt ausgeben. Wenn der debugger euch sagt, dass euer Programm + beendet wurde, gebt \texttt{quit} ein und beendet ihn. + \end{enumerate} \end{praxis} \begin{spiel} -\begin{enumerate} - \item Im folgenden Programm \texttt{factorial.cpp} haben sich zwei Fehler eingeschlichen. Versucht diese mit \texttt{gdb} zu finden und zu beheben. - - \inputcpp{factorial.cpp} - - \item Ihr habt nun schon einige Programme kennen gelernt. Kompiliert sie - für den Debugger neu und untersucht sie genauso wie obiges Programm, - solange ihr Lust habt. -\end{enumerate} + \begin{enumerate} + \item Im folgenden Programm \texttt{factorial.cpp} haben sich zwei Fehler eingeschlichen. Versucht diese mit \texttt{gdb} zu finden und zu beheben. + + \inputcpp{factorial.cpp} + + \item Ihr habt nun schon einige Programme kennen gelernt. Kompiliert sie + für den Debugger neu und untersucht sie genauso wie obiges Programm, + solange ihr Lust habt. + \end{enumerate} \end{spiel} \textbf{Quiz 11}\\ \textit{Was kann der Debugger?} \begin{enumerate}[label=\alph*)] - \item Beim Fehler finden helfen - \item Fehler automatisch korrigieren - \item Das Programm Befehl für Befehl durchgehen - \item Dateien, die eigentlich einen Fehler werfen kompilieren + \item Beim Fehler finden helfen + \item Fehler automatisch korrigieren + \item Das Programm Befehl für Befehl durchgehen + \item Dateien, die eigentlich einen Fehler werfen kompilieren \end{enumerate} diff --git a/lektionen/errors_warnings.tex b/lektionen/errors_warnings.tex index 22a95ff..631df98 100644 --- a/lektionen/errors_warnings.tex +++ b/lektionen/errors_warnings.tex @@ -23,9 +23,9 @@ Wenn wir versuchen, dieses zu kompilieren, gibt uns \texttt{g++} folgendes aus: \begin{textcode*}{label=g++ -o fehler1 noImport\_broken.cpp} - noImport\_broken.cpp: In function 'int main()': - noImport\_broken.cpp:2:5: error: 'cout' is not a member of 'std' - noImport\_broken.cpp:2:35: error: 'endl' is not a member of 'std' + noImport\_broken.cpp: In function 'int main()': + noImport\_broken.cpp:2:5: error: 'cout' is not a member of 'std' + noImport\_broken.cpp:2:35: error: 'endl' is not a member of 'std' \end{textcode*} Je nach Compiler und Betriebssystem kann die Nachricht abweichen, im generellen ist der Fehler @@ -59,8 +59,8 @@ entgegengespuckt: \begin{textcode*}{label=g++ -o fehler2 noSemicolon\_broken.cpp} - noSemicolon\_broken.cpp: In function 'int main()': - noSemicolon\_broken.cpp:5:1: error: expected ';' before '\}' token + noSemicolon\_broken.cpp: In function 'int main()': + noSemicolon\_broken.cpp:5:1: error: expected ';' before '\}' token \end{textcode*} Wiederum sagt uns die erste Zeile, in welcher Datei und Funktion der Fehler @@ -83,27 +83,27 @@ \textbf{Praxis:} \begin{enumerate} - \item Versucht, folgende Dateien zu kompilieren und schaut euch die - Fehlermeldung an. In welcher Zeile, in welcher Spalte liegt der Fehler? - Was gibt euch der Compiler als Fehlermeldung aus? - \item Versucht, die aufgetretenen Fehler zu korrigieren. Bekommt ihr es - hin, dass der Compiler sich nicht mehr beschwert und das Programm - korrekt arbeitet (schaut euch ggf. die bisher gezeigten Quellcodes an)? + \item Versucht, folgende Dateien zu kompilieren und schaut euch die + Fehlermeldung an. In welcher Zeile, in welcher Spalte liegt der Fehler? + Was gibt euch der Compiler als Fehlermeldung aus? + \item Versucht, die aufgetretenen Fehler zu korrigieren. Bekommt ihr es + hin, dass der Compiler sich nicht mehr beschwert und das Programm + korrekt arbeitet (schaut euch ggf. die bisher gezeigten Quellcodes an)? \end{enumerate} \inputcpp{noBracket\string_broken.cpp} \inputcpp{wrongDirection\string_broken.cpp} \begin{spiel} -\begin{enumerate} - \item Das folgende Programm enthält mehrere Fehler. Bekommt ihr trotzdem - raus, welche das sind und könnt ihr sie beheben (Tipp: „c++ math“ zu - \href{https://lmgtfy.com/?q=c\%2B\%2B+math}{googlen} kann euch hier vielleicht weiter bringen)? - \item Wenn ihr in den vergangenen Lektionen ein bisschen gespielt habt und - vereinzelt versucht habt, Dinge zu löschen, werden euch viele - Fehlermeldungen begegnet sein, versucht, diese zu lesen und - interpretiert, was euch der compiler hier sagen will. -\end{enumerate} + \begin{enumerate} + \item Das folgende Programm enthält mehrere Fehler. Bekommt ihr trotzdem + raus, welche das sind und könnt ihr sie beheben (Tipp: „c++ math“ zu + \href{https://lmgtfy.com/?q=c\%2B\%2B+math}{googlen} kann euch hier vielleicht weiter bringen)? + \item Wenn ihr in den vergangenen Lektionen ein bisschen gespielt habt und + vereinzelt versucht habt, Dinge zu löschen, werden euch viele + Fehlermeldungen begegnet sein, versucht, diese zu lesen und + interpretiert, was euch der compiler hier sagen will. + \end{enumerate} \end{spiel} \inputcpp{noSemicolon2\string_broken.cpp} @@ -111,8 +111,8 @@ \textbf{Quiz 4}\\ \textit{Was hiervon sind Fehler, die dazu führen, dass eine Datei nicht kompiliert werden kann?} \begin{enumerate}[label=\alph*)] - \item Semikolon vergessen - \item include vergessen - \item return vergessen - \item Einrückung falsch + \item Semikolon vergessen + \item include vergessen + \item return vergessen + \item Einrückung falsch \end{enumerate} diff --git a/lektionen/functions.tex b/lektionen/functions.tex index 77071e3..1cba996 100644 --- a/lektionen/functions.tex +++ b/lektionen/functions.tex @@ -19,7 +19,7 @@ \begin{itemize} \item Rückgabetyp: Bestimmt welchen Datentyp die Rückgabe der Funktion hat - \item Name: Ein frei wählbarer Name für die Funktion + \item Name: Ein frei wählbarer Name für die Funktion \item Parameter: Besteht aus dem Datentype des Parameters und dem beliebig wählbaren Parameternamen. \\Mehrere Parameter können angegeben werden, indem man diese durch Kommata voneinander trennt. \end{itemize} @@ -76,39 +76,39 @@ \textbf{Praxis:}\footnote{In dieser Lektion gibt es ein paar mehr Aufgaben als in anderen Lektionen, lasst euch davon nicht entmutigen!} \begin{enumerate} \item Verändert das Programm in \texttt{funktion.cpp} so, dass es nicht die einzelnen Zahlen \texttt{x1}, \texttt{x2} und \texttt{x3}, sondern die Summe dieser ausgibt. -%Wirkt wie Kinderkram nicht zum Funktionskapitel, möchte aber nochmal den Unterschied zwischen Ausgabe und Rückgabe dadurch nochmal klarer machen + %Wirkt wie Kinderkram nicht zum Funktionskapitel, möchte aber nochmal den Unterschied zwischen Ausgabe und Rückgabe dadurch nochmal klarer machen \item Kompiliert das angepasste Programm und lasst es im debugger Schritt für Schritt durchlaufen, setzt dafür wieder einen breakpoint für die \texttt{main}-Funktion. - Sobald der debugger euch anzeigt, als nächstes die Funktion ausführen zu wollen, \texttt{step} statt \texttt{next} aufrufen, sodass der debugger in die Funktion hineinspringt. + Sobald der debugger euch anzeigt, als nächstes die Funktion ausführen zu wollen, \texttt{step} statt \texttt{next} aufrufen, sodass der debugger in die Funktion hineinspringt. \item Schreibt eine Funktion die ein \texttt{double} entgegen nimmt und das Quadrat davon zurück gibt. - (Hierbei sollt ihr keine Pakete wie \texttt{math.h} oder \texttt{cmath} benutzen.) + (Hierbei sollt ihr keine Pakete wie \texttt{math.h} oder \texttt{cmath} benutzen.) \end{enumerate} \begin{spiel} -\begin{enumerate} - \item Schreibt eine Funktion (nach der Funktion \texttt{collatz} und vor \texttt{main}), die einen \texttt{int} entgegen nimmt und die Anzahl der Schritte bestimmt bis die Folge bei der 1 angekommen ist und diese als \texttt{int} zurückgibt. - (Die Funktion sollte also die Signatur \cppinline{int schritte(int x)} haben.) - Probiert die Funktion aus. - \item Versucht jetzt zwei Zahlen von der Nutzerin entgegen zu nehmen und vergleicht mithilfe von der gerade geschriebenen Funktion, welche Zahl mehr Schritte bis zur 1 braucht. - \item Was passiert, wenn ihr in einer Funktion den \texttt{return}-Ausdruck vor dem Ende eurer Funktion benutzt? - \item Vertauscht in \texttt{funktion.cpp} die Funktion \texttt{collatz} mit der Funktion \texttt{main} (verschiebt also die gesamte Funktion \texttt{collatz} an das Ende der Datei). - Versucht, die Datei zu kompilieren. - Was ist die Fehlermeldung des Compilers? - \item Verschiebt die Funktion \texttt{collatz} \emph{in} die \texttt{main}-Funktion (also irgendwo nach der öffnenden geschweiften Klammern, aber vor die dazu gehörige schließende). - Versucht, die Datei zu kompilieren. Was ist die Fehlermeldung des Compilers? - \item Implementiert die Funktion, die $x^n$ umsetzt, ignoriert dabei zunächst negative Exponenten. \\ - (Wie in Praxis 3, sollt ihr auch hier keine vorgefertigten Pakete benutzen. \emph{Tipp:} Die Signatur ist bereits oben gegeben, für den Funktionsrumpf könnten sich Schleifen eignen.) - \item Eure Funktion kann sich auch selbst aufrufen. Versucht damit eure Funktion auf negative Exponenten zu erweitern, indem ihr benutzt, dass gilt $x^{-n} = \Bigl(\frac{1.0}{x}\Bigr)^n$. - \item Schaut euch eure bisherigen Lösungen an. - Findet ihr noch häufiger Stellen, an denen ihr einzelne Teilprogramme in Funktionen auslagern könnt? -\end{enumerate} + \begin{enumerate} + \item Schreibt eine Funktion (nach der Funktion \texttt{collatz} und vor \texttt{main}), die einen \texttt{int} entgegen nimmt und die Anzahl der Schritte bestimmt bis die Folge bei der 1 angekommen ist und diese als \texttt{int} zurückgibt. + (Die Funktion sollte also die Signatur \cppinline{int schritte(int x)} haben.) + Probiert die Funktion aus. + \item Versucht jetzt zwei Zahlen von der Nutzerin entgegen zu nehmen und vergleicht mithilfe von der gerade geschriebenen Funktion, welche Zahl mehr Schritte bis zur 1 braucht. + \item Was passiert, wenn ihr in einer Funktion den \texttt{return}-Ausdruck vor dem Ende eurer Funktion benutzt? + \item Vertauscht in \texttt{funktion.cpp} die Funktion \texttt{collatz} mit der Funktion \texttt{main} (verschiebt also die gesamte Funktion \texttt{collatz} an das Ende der Datei). + Versucht, die Datei zu kompilieren. + Was ist die Fehlermeldung des Compilers? + \item Verschiebt die Funktion \texttt{collatz} \emph{in} die \texttt{main}-Funktion (also irgendwo nach der öffnenden geschweiften Klammern, aber vor die dazu gehörige schließende). + Versucht, die Datei zu kompilieren. Was ist die Fehlermeldung des Compilers? + \item Implementiert die Funktion, die $x^n$ umsetzt, ignoriert dabei zunächst negative Exponenten. \\ + (Wie in Praxis 3, sollt ihr auch hier keine vorgefertigten Pakete benutzen. \emph{Tipp:} Die Signatur ist bereits oben gegeben, für den Funktionsrumpf könnten sich Schleifen eignen.) + \item Eure Funktion kann sich auch selbst aufrufen. Versucht damit eure Funktion auf negative Exponenten zu erweitern, indem ihr benutzt, dass gilt $x^{-n} = \Bigl(\frac{1.0}{x}\Bigr)^n$. + \item Schaut euch eure bisherigen Lösungen an. + Findet ihr noch häufiger Stellen, an denen ihr einzelne Teilprogramme in Funktionen auslagern könnt? + \end{enumerate} \end{spiel} \textbf{Quiz 13}\\ \textit{Welche Aussagen sind korrekt?} \begin{enumerate}[label=\alph*)] - \item Unabhängig von den Parametern geben Funktionen immer den gleichen Wert zurück - \item Rückgaben einer Funktion müssen erst in einer Variable gespeichert werden, bevor sie weiterverwendet werden - \item Der Rückgabetyp muss mit einem der Parametertypen übereinstimmen - \item Eine Funktion kann beliebig viele Parameter haben + \item Unabhängig von den Parametern geben Funktionen immer den gleichen Wert zurück + \item Rückgaben einer Funktion müssen erst in einer Variable gespeichert werden, bevor sie weiterverwendet werden + \item Der Rückgabetyp muss mit einem der Parametertypen übereinstimmen + \item Eine Funktion kann beliebig viele Parameter haben \end{enumerate} diff --git a/lektionen/input.tex b/lektionen/input.tex index 015a604..ed280fe 100644 --- a/lektionen/input.tex +++ b/lektionen/input.tex @@ -25,32 +25,32 @@ 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} + \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} + \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} + \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 + \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/input_output_hello_world.tex b/lektionen/input_output_hello_world.tex index b5c93b5..ea930b8 100644 --- a/lektionen/input_output_hello_world.tex +++ b/lektionen/input_output_hello_world.tex @@ -29,11 +29,11 @@ Vereinfacht sieht der Prozess zur Programmerstellung also wie folgt aus: \begin{tikzpicture} - \node (1) at (0,0) [rectangle, draw] {Programmcode schreiben (Hochsprache)}; - \node (2) at (6,0) [rectangle, draw] {Kompilieren}; - \node (3) at (9,0) [rectangle, draw] {Ausführen}; - \draw[->, blue!50, very thick] (1) to (2); - \draw[->, blue!50, very thick] (2) to (3); + \node (1) at (0,0) [rectangle, draw] {Programmcode schreiben (Hochsprache)}; + \node (2) at (6,0) [rectangle, draw] {Kompilieren}; + \node (3) at (9,0) [rectangle, draw] {Ausführen}; + \draw[->, blue!50, very thick] (1) to (2); + \draw[->, blue!50, very thick] (2) to (3); \end{tikzpicture} \\ \textbf{Wie gehe ich dabei vor?} @@ -45,42 +45,42 @@ unter Windows CMD oder Powershell. Ein Befehl für \texttt{g++} (dem Compiler für \Cpp) sieht beispielsweise wie folgt aus: \begin{center} - \texttt{g++ -o outputDatei zuKompilierendeDatei.cpp} + \texttt{g++ -o outputDatei zuKompilierendeDatei.cpp} \end{center} Hierbei legen wir mit dem Parameter \texttt{-o} (o für output) und dem ersten darauf folgenden Argument den Namen der Ausgabedatei fest. Nachdem \texttt{g++} uns also ein Maschinencodefile -- die \texttt{outputDatei} -- erzeugt hat, können wir es zur Ausführung bringen. Dies kann im Terminal mit einem Punkt und einem Slash vor dem Dateinamen geschehen. Also: \begin{center} - \texttt{./outputDatei} + \texttt{./outputDatei} \end{center} \begin{praxis} - \textbf{Erstes Programm in \Cpp schreiben} - - \begin{enumerate} - \item Erstelle eine neue, leere Datei in einem Editor deiner Wahl. - - \item Kopiere folgenden Programmcode in den Texteditor und speichere ihn in einer Datei mit dem Namen „helloworld.cpp“ ab. - Das nähere Verständnis des Programmcodes ist an dieser Stelle nicht notwendig. - \end{enumerate} - - \inputcpp{helloworld.cpp} - - \textbf{\Cpp-Code komplieren und Programm erstellen } - - \begin{enumerate} - \item Öffne ein Terminal (Konsole), ihr findet das Terminal unter Ubuntu oben links unter „Applications“ als „Terminal“ oder mittig unten als das zweite Symbol von links. - \item Wechselt mit dem Befehl \texttt{cd [PFAD]} in das Verzeichnis (Ordner), indem ihr eure Textdatei erstellt habt (\texttt{[PFAD]} muss hierbei durch den Speicherort der Datei ersetzt werden). - Was dieser Befehl genau tut und wie er funktioniert, erfahrt ihr in Lektion 2. - \item In diesem Verzeichnis liegt nun eine Datei mit dem Namen \texttt{helloworld.cpp}. - Benutzt \texttt{g++}, um diese zu einer Datei (in diesem Fall dem Programm) \texttt{hello} zu - kompilieren. Orientiert euch dazu an den folgenden Befehlen. (siehe Diagramm) - \item Führt die Datei \texttt{hello} aus. - \end{enumerate} + \textbf{Erstes Programm in \Cpp schreiben} + + \begin{enumerate} + \item Erstelle eine neue, leere Datei in einem Editor deiner Wahl. + + \item Kopiere folgenden Programmcode in den Texteditor und speichere ihn in einer Datei mit dem Namen „helloworld.cpp“ ab. + Das nähere Verständnis des Programmcodes ist an dieser Stelle nicht notwendig. + \end{enumerate} + + \inputcpp{helloworld.cpp} + + \textbf{\Cpp-Code komplieren und Programm erstellen } + + \begin{enumerate} + \item Öffne ein Terminal (Konsole), ihr findet das Terminal unter Ubuntu oben links unter „Applications“ als „Terminal“ oder mittig unten als das zweite Symbol von links. + \item Wechselt mit dem Befehl \texttt{cd [PFAD]} in das Verzeichnis (Ordner), indem ihr eure Textdatei erstellt habt (\texttt{[PFAD]} muss hierbei durch den Speicherort der Datei ersetzt werden). + Was dieser Befehl genau tut und wie er funktioniert, erfahrt ihr in Lektion 2. + \item In diesem Verzeichnis liegt nun eine Datei mit dem Namen \texttt{helloworld.cpp}. + Benutzt \texttt{g++}, um diese zu einer Datei (in diesem Fall dem Programm) \texttt{hello} zu + kompilieren. Orientiert euch dazu an den folgenden Befehlen. (siehe Diagramm) + \item Führt die Datei \texttt{hello} aus. + \end{enumerate} \end{praxis} @@ -89,45 +89,45 @@ % TODO: Buttugly, but well... - its gonna stay this way \begin{center} - \resizebox{\textwidth}{!}{ - \begin{tikzpicture} - \node (nHelloWorldCpp) [ shape=rectangle, rounded corners = 0.1cm, draw=black, inner xsep=0.5cm, inner ysep = 0.3cm ] {\texttt{helloworld.cpp}}; - \node (nHello) [ right of = nHelloWorldCpp, node distance = 9.5cm, shape=rectangle, rounded corners = 0.1cm, draw = black, inner xsep = 0.5cm, inner ysep = 0.3cm ] {\texttt{hello}}; - \draw [->, thick, shorten >= 2pt, shorten <= 2pt ] (nHelloWorldCpp) -- (nHello) node [ midway, above, font = \small ] { \texttt{g++ -o hello helloworld.cpp}} ; - \node (nOutput) [ right of = nHello, node distance = 5cm, shape=rectangle ] {\texttt{"Hallo Welt!"}}; - \draw [->, thick, shorten <= 2pt] (nHello) -- (nOutput) node [ midway, above ] {\texttt{./hello}}; - \end{tikzpicture} - } + \resizebox{\textwidth}{!}{ + \begin{tikzpicture} + \node (nHelloWorldCpp) [ shape=rectangle, rounded corners = 0.1cm, draw=black, inner xsep=0.5cm, inner ysep = 0.3cm ] {\texttt{helloworld.cpp}}; + \node (nHello) [ right of = nHelloWorldCpp, node distance = 9.5cm, shape=rectangle, rounded corners = 0.1cm, draw = black, inner xsep = 0.5cm, inner ysep = 0.3cm ] {\texttt{hello}}; + \draw [->, thick, shorten >= 2pt, shorten <= 2pt ] (nHelloWorldCpp) -- (nHello) node [ midway, above, font = \small ] { \texttt{g++ -o hello helloworld.cpp}} ; + \node (nOutput) [ right of = nHello, node distance = 5cm, shape=rectangle ] {\texttt{"Hallo Welt!"}}; + \draw [->, thick, shorten <= 2pt] (nHello) -- (nOutput) node [ midway, above ] {\texttt{./hello}}; + \end{tikzpicture} + } \end{center} \newpage \begin{spiel} -Ihr könnt nun versuchen, den Quellcode selbst zu verändern und damit ein wenig -herumzuspielen. Öffnet dazu einen Editor und öffnet die Datei -\texttt{vorkurs/lektion01/helloworld.cpp}\footnote{am besten öffnet ihr in VSCode den gesamten Vorkurs-Ordner}. Denkt daran, nach jeder Änderung die Datei zu speichern und -im Terminal neu zu kompilieren und auszuführen. - -Dinge, die ihr ausprobieren könntet sind zum Beispiel: -\begin{enumerate} - \item Was passiert, wenn ihr „Hello world!“ in etwas anderes ändert? - \item Was passiert, wenn ihr die erste Zeile löscht (der Originalquellcode - ist in diesem pdf enthalten, ihr könnt sie also später wieder - herstellen)? - \item Was passiert, wenn ihr das „\verb|<< std::endl|“ löscht? - \item Wie könnte man mehrere Sätze ausgeben? Wie könnte man mehrere Zeilen - ausgeben? -\end{enumerate} + Ihr könnt nun versuchen, den Quellcode selbst zu verändern und damit ein wenig + herumzuspielen. Öffnet dazu einen Editor und öffnet die Datei + \texttt{vorkurs/lektion01/helloworld.cpp}\footnote{am besten öffnet ihr in VSCode den gesamten Vorkurs-Ordner}. Denkt daran, nach jeder Änderung die Datei zu speichern und + im Terminal neu zu kompilieren und auszuführen. + + Dinge, die ihr ausprobieren könntet sind zum Beispiel: + \begin{enumerate} + \item Was passiert, wenn ihr „Hello world!“ in etwas anderes ändert? + \item Was passiert, wenn ihr die erste Zeile löscht (der Originalquellcode + ist in diesem pdf enthalten, ihr könnt sie also später wieder + herstellen)? + \item Was passiert, wenn ihr das „\verb|<< std::endl|“ löscht? + \item Wie könnte man mehrere Sätze ausgeben? Wie könnte man mehrere Zeilen + ausgeben? + \end{enumerate} \end{spiel} \textbf{Quiz 1}\\ \textit{Was passiert, wenn ihr \texttt{Hello world} durch etwas anderes ersetzt?} \begin{enumerate}[label=\alph*)] - \item Das andere wird ausgegeben - \item Es gibt einen Fehler - \item Das Programm tut garnichts mehr - \item Das Programm gibt trotzdem \texttt{Hello world} aus + \item Das andere wird ausgegeben + \item Es gibt einen Fehler + \item Das Programm tut garnichts mehr + \item Das Programm gibt trotzdem \texttt{Hello world} aus \end{enumerate} \lesson{Input und Output} @@ -157,32 +157,32 @@ 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} + \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} + \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 + \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 eaf77ca..ed20b9d 100644 --- a/lektionen/intro.tex +++ b/lektionen/intro.tex @@ -21,7 +21,7 @@ \chapter{Die Basics} \input{lektionen/functions} \input{lektionen/stdlib} \input{lektionen/arrays_vectors} -\input{lektionen/recursion} +\input{lektionen/recursion} \input{lektionen/errors_warnings} \input{lektionen/tictactoe} \input{lektionen/exercises/intro} %ToDo, also needs to bed added @@ -36,13 +36,13 @@ \chapter{Die Basics} Rekapitulieren wir noch einmal unsere Eingangs formulierten „Lernziele“, was wir uns wünschen würden, dass ihr aus diesem Vorkurs mitnehmt: \begin{itemize} - \item Ein Computer ist keine schwarze Magie - \item Eine Konsole ist keine schwarze Magie - \item Programmieren ist keine schwarze Magie - \item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt ein - Programm, das\dots“ - \item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen - \item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert + \item Ein Computer ist keine schwarze Magie + \item Eine Konsole ist keine schwarze Magie + \item Programmieren ist keine schwarze Magie + \item Ihr wisst, wo ihr anfangt, wenn die Aufgabe ist „schreibt ein + Programm, das\dots“ + \item Ihr entwickelt Spaß daran, Programmieraufgaben zu lösen + \item Ihr wisst, was ihr tun könnt, wenn etwas nicht funktioniert \end{itemize} Von wie vielen davon habt ihr das Gefühl, sie erreicht zu haben? Wir würden uns diff --git a/lektionen/loops.tex b/lektionen/loops.tex index db80fec..82107af 100644 --- a/lektionen/loops.tex +++ b/lektionen/loops.tex @@ -28,32 +28,32 @@ an, ob wir schon einen Teiler gefunden haben): \begin{center} - \begin{tikzpicture}[auto, node distance=3cm,>=latex'] - \tikzstyle{block} = [draw, fill=blue!20, rectangle, minimum height=3em, minimum width=6em] - \tikzstyle{border} = [very thick, dashed, red] - - \node [block, align=center] (start) {$i = 2$ \\ \texttt{hat\_teiler} $=$ \texttt{false}}; - \node [block, right of=start, node distance=4cm] (cond) {$i < n$?}; - \node [block, right of=cond, node distance=3.5cm] (if) {$i\mid n$?}; - \node [block, right of=if, node distance=4cm] (teiler) {\texttt{hat\_teiler} $\leftarrow$ \texttt{true}}; - \node [block, above of=if, node distance=2cm] (incr) {$i \leftarrow i+1$}; - \node [block, below of=cond, node distance=3cm] (prim?) {\texttt{hat\_teiler}?}; - \node [block, below of=teiler, node distance=3cm] (yipp) {$n$ Primzahl}; - \node [block, below of=yipp, node distance=1.5cm] (nope) {$n$ keine Primzahl}; - - \draw [border] ($(cond) + (-1.5, 0)$) |- ($(if) + (0, -1)$) -| ($(teiler) + (2, 0)$) |- ($(incr) + (0, 1)$) -| cycle; - \node [border] at ($(cond) + (-.8, 3.3)$) {Schleife}; - - \draw [->] (start) -- node {} (cond); - \draw [->] (cond) -- node {ja} (if); - \draw [->] (cond) -- node [near end] {nein} (prim?); - \draw [->] (prim?) -- node {nein} (yipp); - \draw [->] (if) -- node {ja} (teiler); - \draw [->] (if) -- node {nein} (incr); - \draw [->] (incr) -| node {} (cond); - \draw [->] (teiler) |- (incr); - \draw [->] (prim?) |- node [near end] {ja} (nope); - \end{tikzpicture} + \begin{tikzpicture}[auto, node distance=3cm,>=latex'] + \tikzstyle{block} = [draw, fill=blue!20, rectangle, minimum height=3em, minimum width=6em] + \tikzstyle{border} = [very thick, dashed, red] + + \node [block, align=center] (start) {$i = 2$ \\ \texttt{hat\_teiler} $=$ \texttt{false}}; + \node [block, right of=start, node distance=4cm] (cond) {$i < n$?}; + \node [block, right of=cond, node distance=3.5cm] (if) {$i\mid n$?}; + \node [block, right of=if, node distance=4cm] (teiler) {\texttt{hat\_teiler} $\leftarrow$ \texttt{true}}; + \node [block, above of=if, node distance=2cm] (incr) {$i \leftarrow i+1$}; + \node [block, below of=cond, node distance=3cm] (prim?) {\texttt{hat\_teiler}?}; + \node [block, below of=teiler, node distance=3cm] (yipp) {$n$ Primzahl}; + \node [block, below of=yipp, node distance=1.5cm] (nope) {$n$ keine Primzahl}; + + \draw [border] ($(cond) + (-1.5, 0)$) |- ($(if) + (0, -1)$) -| ($(teiler) + (2, 0)$) |- ($(incr) + (0, 1)$) -| cycle; + \node [border] at ($(cond) + (-.8, 3.3)$) {Schleife}; + + \draw [->] (start) -- node {} (cond); + \draw [->] (cond) -- node {ja} (if); + \draw [->] (cond) -- node [near end] {nein} (prim?); + \draw [->] (prim?) -- node {nein} (yipp); + \draw [->] (if) -- node {ja} (teiler); + \draw [->] (if) -- node {nein} (incr); + \draw [->] (incr) -| node {} (cond); + \draw [->] (teiler) |- (incr); + \draw [->] (prim?) |- node [near end] {ja} (nope); + \end{tikzpicture} \end{center} Das Besondere an Schleifen ist, dass sie geschlossene Kreise zum Kontrollflussdiagramm hinzufügen. Das erlaubt es uns, die gleiche Anweisung @@ -73,14 +73,14 @@ Es gibt noch eine weitere Art von Schleifen, die \texttt{for}-Schleife. Die for-Schleife hat folgende Struktur: \begin{center} - \texttt{for (Initialisierung; Bedingung; Inkrementierung) \{ Code-Fragment \}} + \texttt{for (Initialisierung; Bedingung; Inkrementierung) \{ Code-Fragment \}} \end{center} Die Initialisierung wird nur einmal ausgeführt, bevor die Schleife beginnt. Die Bedingung wird vor jedem Durchlauf der Schleife überprüft. Wenn die Bedingung wahr ist, wird das Code-Fragment ausgeführt. Nachdem das Code-Fragment ausgeführt wurde, wird die Inkrementierung ausgeführt. Danach wird die Bedingung erneut überprüft. Wenn die Bedingung nicht mehr wahr, also falsch ist, wird die Schleife beendet. Der Unterschied zwischen den beiden Schleifenarten liegt hauptsächlich in ihrer Struktur: \begin{itemize} - \item \texttt{for}-Schleife: Ideal, wenn du im Voraus weißt, wie oft die Schleife laufen soll. Sie hat eine eingebaute Zählervariable (oft i), eine Bedingung, die überprüft, ob der Zähler einen bestimmten Wert erreicht hat, und eine Inkrementierung, die den Zähler bei jedem Durchlauf erhöht. - \item \texttt{while}-Schleife: Flexibler, da sie für verschiedene Arten von Abbruchbedingungen verwendet werden kann. Sie läuft so lange, bis die angegebene Bedingung falsch wird. + \item \texttt{for}-Schleife: Ideal, wenn du im Voraus weißt, wie oft die Schleife laufen soll. Sie hat eine eingebaute Zählervariable (oft i), eine Bedingung, die überprüft, ob der Zähler einen bestimmten Wert erreicht hat, und eine Inkrementierung, die den Zähler bei jedem Durchlauf erhöht. + \item \texttt{while}-Schleife: Flexibler, da sie für verschiedene Arten von Abbruchbedingungen verwendet werden kann. Sie läuft so lange, bis die angegebene Bedingung falsch wird. \end{itemize} Wie ihr später im Studium beweisen werdet, lassen sich die beiden Ausdrücke immer ineinander überführen. Sie sind also gleichmächtig, d.h. jede \texttt{for}-Schleife kann in eine \texttt{while}-Schleife umgewandelt werden und umgekehrt. Es ist also erst einmal egal, welche Schleife ihr verwendet, nutzt einfach die, die euch am meisten zusagt.\newline @@ -88,39 +88,39 @@ \inputcpp{prim-for-loop.cpp} \begin{praxis} - \begin{enumerate} - \item Versucht, die Arbeitsweise des Programms zu simulieren. Geht selbst - den Quellcode Zeile für Zeile durch. Überlegt euch hierbei, was die Zeile tut - und welchen Inhalt die Variablen haben. Überlegt euch dann, wohin der - Computer (bei Kontrollflussstrukturen) als nächstes springen würde. - \item Warum funktioniert das Programm für den Fall $n = 2$? - \item Schreibt selbst ein Programm, welches eine Zahl von der Nutzerin - entgegennimmt und dann alle Zahlen bis zu dieser Zahl ausgibt. Nutz dafür eine \texttt{for}-Schleife. - \item Versucht nun das gleiche mit einer \texttt{while}-Schleife. - \item Modifiziert euer Programm, sodass es von dieser Zahl bis zu 0 - hinunterzählt, jeweils wieder mit einer \texttt{while}-Schleife und mit einer \texttt{for}-Schleife. - \end{enumerate} + \begin{enumerate} + \item Versucht, die Arbeitsweise des Programms zu simulieren. Geht selbst + den Quellcode Zeile für Zeile durch. Überlegt euch hierbei, was die Zeile tut + und welchen Inhalt die Variablen haben. Überlegt euch dann, wohin der + Computer (bei Kontrollflussstrukturen) als nächstes springen würde. + \item Warum funktioniert das Programm für den Fall $n = 2$? + \item Schreibt selbst ein Programm, welches eine Zahl von der Nutzerin + entgegennimmt und dann alle Zahlen bis zu dieser Zahl ausgibt. Nutz dafür eine \texttt{for}-Schleife. + \item Versucht nun das gleiche mit einer \texttt{while}-Schleife. + \item Modifiziert euer Programm, sodass es von dieser Zahl bis zu 0 + hinunterzählt, jeweils wieder mit einer \texttt{while}-Schleife und mit einer \texttt{for}-Schleife. + \end{enumerate} \end{praxis} \begin{spiel} - \begin{enumerate} - \item Das Programm funktioniert noch nicht korrekt, wenn man 1 eingibt - (denn 1 ist keine Primzahl). Modifiziert es, sodass es auch für 1 - funktioniert. - \item Kompiliert \texttt{whiletrue.cpp} und führt es aus. Was beobachtet - ihr? Warum? (Ihr könnt das Programm abbrechen, indem ihr - \texttt{Strg+C} drückt) - \end{enumerate} - - \inputcpp{whiletrue.cpp} + \begin{enumerate} + \item Das Programm funktioniert noch nicht korrekt, wenn man 1 eingibt + (denn 1 ist keine Primzahl). Modifiziert es, sodass es auch für 1 + funktioniert. + \item Kompiliert \texttt{whiletrue.cpp} und führt es aus. Was beobachtet + ihr? Warum? (Ihr könnt das Programm abbrechen, indem ihr + \texttt{Strg+C} drückt) + \end{enumerate} + + \inputcpp{whiletrue.cpp} \end{spiel} \textbf{Quiz 10}\\ \textit{Was kann bei der Verwendung von Schleifen passieren?} \begin{enumerate}[label=\alph*)] - \item Die Schleife wiederholt sich endlos oft - \item Die Schleife endet - \item Die Schleife bricht nach einer gewissen Anzahl Durchläufe immer von allein ab - \item Am Ende der Schleife werden alle Variablenänderungen durch die Schleife rückgängig gemacht + \item Die Schleife wiederholt sich endlos oft + \item Die Schleife endet + \item Die Schleife bricht nach einer gewissen Anzahl Durchläufe immer von allein ab + \item Am Ende der Schleife werden alle Variablenänderungen durch die Schleife rückgängig gemacht \end{enumerate} diff --git a/lektionen/manpages.tex b/lektionen/manpages.tex index 740a0b9..d492f48 100644 --- a/lektionen/manpages.tex +++ b/lektionen/manpages.tex @@ -10,103 +10,103 @@ der Befehl zum Kopieren von Dateien). \begin{praxis} - \begin{enumerate} - \item Öffnet eine Konsole und gebt \texttt{man cp} ein. - \end{enumerate} + \begin{enumerate} + \item Öffnet eine Konsole und gebt \texttt{man cp} ein. + \end{enumerate} \end{praxis} - Die man page besteht aus mehreren \emph{Sections}. Welche sections genau es - gibt, hängt von der man page ab, aber meistens gibt es mindestens die folgenden - sections: - \begin{description} - \item[\texttt{NAME}] - Gibt euch den Namen des Befehls und eine Einzeilige Beschreibung an - \item[\texttt{SYNOPSIS}] - Gibt euch die generelle Benutzung des Befehls an. In diesem Fall gibt - es drei mögliche Formen. Allen gemein ist, dass man zunächst - \texttt{cp} eingibt, darauf folgen Optionen. Wie der Rest interpretiert - wird, hängt dann vom Rest ab. Werden zwei weitere Parameter angegeben, - wird der erste als Quelle, der zweite als Ziel interpretiert (erste - Form). Werden mehr Parameter angegeben, wird das letzte als - Verzeichnis, in das man alle anderen kopieren will interpretiert - (zweite Form). In der dritten Form (wenn \texttt{-t} angegeben wird) - wird hingegen der \emph{erste} Parameter als das Zielverzeichnis - interpretiert, in das alle anderen Dateien kopiert wird. +Die man page besteht aus mehreren \emph{Sections}. Welche sections genau es +gibt, hängt von der man page ab, aber meistens gibt es mindestens die folgenden +sections: +\begin{description} + \item[\texttt{NAME}] + Gibt euch den Namen des Befehls und eine Einzeilige Beschreibung an + \item[\texttt{SYNOPSIS}] + Gibt euch die generelle Benutzung des Befehls an. In diesem Fall gibt + es drei mögliche Formen. Allen gemein ist, dass man zunächst + \texttt{cp} eingibt, darauf folgen Optionen. Wie der Rest interpretiert + wird, hängt dann vom Rest ab. Werden zwei weitere Parameter angegeben, + wird der erste als Quelle, der zweite als Ziel interpretiert (erste + Form). Werden mehr Parameter angegeben, wird das letzte als + Verzeichnis, in das man alle anderen kopieren will interpretiert + (zweite Form). In der dritten Form (wenn \texttt{-t} angegeben wird) + wird hingegen der \emph{erste} Parameter als das Zielverzeichnis + interpretiert, in das alle anderen Dateien kopiert wird. - Es gibt eine Vielzahl von Konventionen für diesen Bereich, eckige - Klammern bedeuten z.B. dass dieser Teil auch weggelassen werden darf, - drei Punkte bedeuten, dass hier mehrere solche Dinge stehen können. + Es gibt eine Vielzahl von Konventionen für diesen Bereich, eckige + Klammern bedeuten z.B. dass dieser Teil auch weggelassen werden darf, + drei Punkte bedeuten, dass hier mehrere solche Dinge stehen können. - Dieser Bereich ist der, der am Interessantesten für euch ist, wenn ihr - „einfach schnell wissen wollt, wie es funktioniert“. - \item[\texttt{DESCRIPTION}] - Hier wird ausführlicher beschrieben, was der Befehl tut. Hier werden - auch alle möglichen Optionen beschrieben, die wir dem Befehl bei - \texttt{[OPTION]...} mitgeben können. Die wichtigen Informationen - stehen meistens irgendwo in diesem Bereich. - \item[\texttt{AUTHOR}, \texttt{REPORTING BUGS}, \dots] - Hier stehen weitere Hintergrundinformationen, die meistens eher für - Entwicklerinnen interessant sind. - \item[\texttt{SEE ALSO}] - Auch eine wichtige section für euch: Wenn ihr die gewünschte - Information nicht gefunden habt, oder ihr nicht den richtigen Befehl - gefunden habt, stehen hier manchmal verwandte Befehle oder Quellen - weiterer Informationen. - \end{description} + Dieser Bereich ist der, der am Interessantesten für euch ist, wenn ihr + „einfach schnell wissen wollt, wie es funktioniert“. + \item[\texttt{DESCRIPTION}] + Hier wird ausführlicher beschrieben, was der Befehl tut. Hier werden + auch alle möglichen Optionen beschrieben, die wir dem Befehl bei + \texttt{[OPTION]...} mitgeben können. Die wichtigen Informationen + stehen meistens irgendwo in diesem Bereich. + \item[\texttt{AUTHOR}, \texttt{REPORTING BUGS}, \dots] + Hier stehen weitere Hintergrundinformationen, die meistens eher für + Entwicklerinnen interessant sind. + \item[\texttt{SEE ALSO}] + Auch eine wichtige section für euch: Wenn ihr die gewünschte + Information nicht gefunden habt, oder ihr nicht den richtigen Befehl + gefunden habt, stehen hier manchmal verwandte Befehle oder Quellen + weiterer Informationen. +\end{description} - Man pages sind häufig sehr umfangreich und enthalten viel mehr Informationen, - als ihr euch gerade wünscht. Es ist nicht immer einfach, die gerade relevanten - Informationen heraus zu filtern und es gibt nichts frustrierenderes, als einen - Befehl gerade dringend zu brauchen, aber nicht zu kennen und sich erst durch - eine lange man page lesen zu müssen. +Man pages sind häufig sehr umfangreich und enthalten viel mehr Informationen, +als ihr euch gerade wünscht. Es ist nicht immer einfach, die gerade relevanten +Informationen heraus zu filtern und es gibt nichts frustrierenderes, als einen +Befehl gerade dringend zu brauchen, aber nicht zu kennen und sich erst durch +eine lange man page lesen zu müssen. - Dennoch ist es eine sehr hilfreiche Fähigkeit, zu wissen, wie man man pages - liest und sich einfach in einem ruhigen Moment mal durch die ein oder andere - man page durch zu lesen. Häufig lernt man dabei neue Dinge, manchmal macht es - einem das Leben irgendwann sehr viel leichter, sie zu wissen. +Dennoch ist es eine sehr hilfreiche Fähigkeit, zu wissen, wie man man pages +liest und sich einfach in einem ruhigen Moment mal durch die ein oder andere +man page durch zu lesen. Häufig lernt man dabei neue Dinge, manchmal macht es +einem das Leben irgendwann sehr viel leichter, sie zu wissen. - Habt von daher Geduld, wenn euch eine wirsche Linux-Expertin auf die Frage, wie - ihr unter Linux euren Laptop in den Ruhemodus versetzt ein schnelles „man - pm-suspend“ antwortet. Mit ein bisschen Übung wird euch das tatsächlich - hinreichend schnell zur richtigen Lösung verhelfen. +Habt von daher Geduld, wenn euch eine wirsche Linux-Expertin auf die Frage, wie +ihr unter Linux euren Laptop in den Ruhemodus versetzt ein schnelles „man +pm-suspend“ antwortet. Mit ein bisschen Übung wird euch das tatsächlich +hinreichend schnell zur richtigen Lösung verhelfen. Und wenn ihr mal wirklich keine Zeit habt, die ganze page zu lesen, könnt ihr mit \texttt{/} auch nach Begriffen innerhalb der page suchen: Zum Beispiel \texttt{/close} \begin{praxis} - \begin{enumerate}\addtocounter{enumi}{1} - \item Öffnet die man page von \texttt{ls}. Findet die Optionen fürs Lange - Listenformat (long listing format), zum Sortieren nach Dateigröße - und um auch versteckte Dateien (unter Linux sind das alle, die mit - \texttt{.} anfangen) anzuzeigen und probiert sie aus. - \item Was ist der Unterschied zwischen \texttt{ls -a} und \texttt{ls -A}? - Probiert beides aus. Das ist auf den ersten Blick nicht so leicht zu sehen - Fragt uns im einfach wenn ihr es nicht findest. - \item Nutzt \texttt{cp} um eine Datei zu kopieren. Sucht euch dafür - irgendeine \texttt{.cpp}-Datei aus dem Vorkurs-Programm und kopiert sie - in euer Homeverzeichnis (ihr könnt dafür eine Tilde (\texttt{\~}) - benutzen). - \end{enumerate} + \begin{enumerate}\addtocounter{enumi}{1} + \item Öffnet die man page von \texttt{ls}. Findet die Optionen fürs Lange + Listenformat (long listing format), zum Sortieren nach Dateigröße + und um auch versteckte Dateien (unter Linux sind das alle, die mit + \texttt{.} anfangen) anzuzeigen und probiert sie aus. + \item Was ist der Unterschied zwischen \texttt{ls -a} und \texttt{ls -A}? + Probiert beides aus. Das ist auf den ersten Blick nicht so leicht zu sehen + Fragt uns im einfach wenn ihr es nicht findest. + \item Nutzt \texttt{cp} um eine Datei zu kopieren. Sucht euch dafür + irgendeine \texttt{.cpp}-Datei aus dem Vorkurs-Programm und kopiert sie + in euer Homeverzeichnis (ihr könnt dafür eine Tilde (\texttt{\~}) + benutzen). + \end{enumerate} \end{praxis} \begin{spiel} - \begin{enumerate} - \item Wie über so gut wie jeden Befehl gibt es auch über \texttt{man} eine - manpage. Schaut euch mal \texttt{man man} an. - \item Befehle, die für euch im späteren Leben interessant sein könnten sind - z.B. \texttt{ls}, \texttt{cp}, \texttt{mkdir}, \texttt{grep}, \texttt{cat}, - \texttt{echo}, \texttt{mv}, \dots. Ihr könnt ja schon einmal in ein - oder zwei dieser manpages hinein schauen, und ein oder zwei Befehle - ausprobieren. Aber ihr müsst das jetzt auf keinen fall alles im Kopf - behalten. - \end{enumerate} + \begin{enumerate} + \item Wie über so gut wie jeden Befehl gibt es auch über \texttt{man} eine + manpage. Schaut euch mal \texttt{man man} an. + \item Befehle, die für euch im späteren Leben interessant sein könnten sind + z.B. \texttt{ls}, \texttt{cp}, \texttt{mkdir}, \texttt{grep}, \texttt{cat}, + \texttt{echo}, \texttt{mv}, \dots. Ihr könnt ja schon einmal in ein + oder zwei dieser manpages hinein schauen, und ein oder zwei Befehle + ausprobieren. Aber ihr müsst das jetzt auf keinen fall alles im Kopf + behalten. + \end{enumerate} \end{spiel} \textbf{Quiz 6}\\ \textit{Was findet man alles in einer Manpage?} \begin{enumerate}[label=\alph*)] - \item Nützliche Informationen - \item viel Text - \item wie man einen Befehl verwendet - \item warum der Befehl erfunden wurde + \item Nützliche Informationen + \item viel Text + \item wie man einen Befehl verwendet + \item warum der Befehl erfunden wurde \end{enumerate} diff --git a/lektionen/rechte.tex b/lektionen/rechte.tex index afe6d97..27663d9 100644 --- a/lektionen/rechte.tex +++ b/lektionen/rechte.tex @@ -26,69 +26,69 @@ mithilfe von \texttt{ls -l} anschauen. Der output von \texttt{ls -l} ist in mehreren Spalten angeordnet: \begin{enumerate} - \item In der ersten Spalte stehen die Dateiberechtigungen in Form eines 10 - Zeichen langen Strings. Jedes Zeichen steht dabei für ein permission - bit kann dabei entweder ein \texttt{-}, oder ein Buchstabe sein, wobei - \texttt{-} bedeutet, dass das entsprechende Bit nicht gesetzt ist. Die - Bits bedeuten (von links nach rechts gelesen) - \begin{itemize} - \item \texttt{\underline{d}irectory} - \item \texttt{\underline{r}eadable} für die Eigentümerin - \item \texttt{\underline{w}ritable} für die Eigentümerin - \item \texttt{e\underline{x}ecutable} für die Eigentümerin - \item \texttt{\underline{r}eadable} für die Gruppe - \item \texttt{\underline{w}ritable} für die Gruppe - \item \texttt{e\underline{x}ecutable} für die Gruppe - \item \texttt{\underline{r}eadable} für alle Nutzerinnen - \item \texttt{\underline{w}ritable} für alle Nutzerinnen - \item \texttt{e\underline{x}ecutable} für alle Nutzerinnen - \end{itemize} - \item Nummer an hardlinks (das braucht euch nicht sonderlich interessieren) - \item Nutzername der Eigentümerin - \item Gruppe, der die Datei gehört - \item Dateigröße - \item Datum der letzten Änderung - \item Dateiname + \item In der ersten Spalte stehen die Dateiberechtigungen in Form eines 10 + Zeichen langen Strings. Jedes Zeichen steht dabei für ein permission + bit kann dabei entweder ein \texttt{-}, oder ein Buchstabe sein, wobei + \texttt{-} bedeutet, dass das entsprechende Bit nicht gesetzt ist. Die + Bits bedeuten (von links nach rechts gelesen) + \begin{itemize} + \item \texttt{\underline{d}irectory} + \item \texttt{\underline{r}eadable} für die Eigentümerin + \item \texttt{\underline{w}ritable} für die Eigentümerin + \item \texttt{e\underline{x}ecutable} für die Eigentümerin + \item \texttt{\underline{r}eadable} für die Gruppe + \item \texttt{\underline{w}ritable} für die Gruppe + \item \texttt{e\underline{x}ecutable} für die Gruppe + \item \texttt{\underline{r}eadable} für alle Nutzerinnen + \item \texttt{\underline{w}ritable} für alle Nutzerinnen + \item \texttt{e\underline{x}ecutable} für alle Nutzerinnen + \end{itemize} + \item Nummer an hardlinks (das braucht euch nicht sonderlich interessieren) + \item Nutzername der Eigentümerin + \item Gruppe, der die Datei gehört + \item Dateigröße + \item Datum der letzten Änderung + \item Dateiname \end{enumerate} Wenn ihr die Berechtigungen von Dateien ändern wollt, könnt ihr dazu \texttt{chmod} benutzen (wenn ihr wissen wollt, wie man es benutzt: \texttt{man - chmod}), dazu muss sie euch aber gehören. Wenn ihr die Eigentümerin einer Datei + chmod}), dazu muss sie euch aber gehören. Wenn ihr die Eigentümerin einer Datei ändern wollt, könnt ihr dazu \texttt{chown} nutzen -- dazu müsst ihr aus Sicherheitsgründen allerdings Administratorin sein. \begin{praxis} - \begin{enumerate} - \item Geht in ein Verzeichnis, in dem eine \texttt{.cpp}-Datei liegt und - kompiliert sie. Macht ein \texttt{ls -l} und vergleicht die Rechte der - \texttt{.cpp}-Datei mit der kompilierten Datei. - \item In der Datei \texttt{/etc/shadow} stehen in verschlüsselter Form - gespeichert die Kennwörter aller Benutzerinnen auf dem System. Macht ein - \texttt{ls -l /etc/shadow} und schaut euch die Dateirechte an. Welche - Bits sind gesetzt? - \end{enumerate} + \begin{enumerate} + \item Geht in ein Verzeichnis, in dem eine \texttt{.cpp}-Datei liegt und + kompiliert sie. Macht ein \texttt{ls -l} und vergleicht die Rechte der + \texttt{.cpp}-Datei mit der kompilierten Datei. + \item In der Datei \texttt{/etc/shadow} stehen in verschlüsselter Form + gespeichert die Kennwörter aller Benutzerinnen auf dem System. Macht ein + \texttt{ls -l /etc/shadow} und schaut euch die Dateirechte an. Welche + Bits sind gesetzt? + \end{enumerate} \end{praxis} \begin{spiel} -\begin{enumerate} - \item Versucht, \texttt{/etc/shadow} in einem Editor zu öffnen. - \item Legt (z.B. mit dem Texteditor) eine Datei (Es geht nicht um - Kompilierung, also muss das keine \texttt{.cpp}-Datei sein. Gebt der - Datei am Besten die Erweiterung \texttt{.txt}) in Eurem Homeverzeichnis - an und macht sie dann mit \texttt{chmod a+w} world-writable - (\texttt{a+w} heißt „füge das Recht Schreibbarkeit für alle Nutzerinnen - hinzu“). Lasst eure Sitznachbarin die Datei an ihrem Rechner öffnen - (ihr könnt mittels \texttt{pwd} herausfinden, in welchem Ordner sie - suchen muss) und euch eine Nachricht hinein schreiben. Schaut nach - (indem ihr die Datei neu öffnet) ob ihr die Nachricht lesen könnt. -\end{enumerate} + \begin{enumerate} + \item Versucht, \texttt{/etc/shadow} in einem Editor zu öffnen. + \item Legt (z.B. mit dem Texteditor) eine Datei (Es geht nicht um + Kompilierung, also muss das keine \texttt{.cpp}-Datei sein. Gebt der + Datei am Besten die Erweiterung \texttt{.txt}) in Eurem Homeverzeichnis + an und macht sie dann mit \texttt{chmod a+w} world-writable + (\texttt{a+w} heißt „füge das Recht Schreibbarkeit für alle Nutzerinnen + hinzu“). Lasst eure Sitznachbarin die Datei an ihrem Rechner öffnen + (ihr könnt mittels \texttt{pwd} herausfinden, in welchem Ordner sie + suchen muss) und euch eine Nachricht hinein schreiben. Schaut nach + (indem ihr die Datei neu öffnet) ob ihr die Nachricht lesen könnt. + \end{enumerate} \end{spiel} \textbf{Quiz 9}\\ \textit{Welche Bits existieren?} \begin{enumerate}[label=\alph*)] - \item readable für Gruppe - \item Rechte dürfen nicht geändert werden - \item executable für alle Nutzerinnen - \item writable für Eigentümerin + \item readable für Gruppe + \item Rechte dürfen nicht geändert werden + \item executable für alle Nutzerinnen + \item writable für Eigentümerin \end{enumerate} diff --git a/lektionen/stdlib.tex b/lektionen/stdlib.tex index af74ca8..f05d3eb 100644 --- a/lektionen/stdlib.tex +++ b/lektionen/stdlib.tex @@ -29,42 +29,42 @@ \inputcpp{namespaces.cpp} \begin{praxis} - \begin{enumerate} - \item Was gibt dieses Programm aus, wenn man es kompiliert und ausführt? - Überlegt es euch zuerst selbst, dann probiert es aus. - \end{enumerate} + \begin{enumerate} + \item Was gibt dieses Programm aus, wenn man es kompiliert und ausführt? + Überlegt es euch zuerst selbst, dann probiert es aus. + \end{enumerate} - Wenn ihr wissen wollt, was die Standardbibliothek alles so für euch bereit - stellt, könnt ihr euch in der Referenz der Standardbibliothek unter + Wenn ihr wissen wollt, was die Standardbibliothek alles so für euch bereit + stellt, könnt ihr euch in der Referenz der Standardbibliothek unter - \url{https://www.cplusplus.com/reference/} + \url{https://www.cplusplus.com/reference/} - umschauen. Es ist nicht ganz einfach, zu wissen, wo man dort findet, was man - sucht, in dem Fall kann Google ein im Regelfall ganz gut helfen. Wenn man - einmal weiß, \emph{was} man sucht, findet man in der Referenz vor allem, - \emph{wie} man es benutzt. + umschauen. Es ist nicht ganz einfach, zu wissen, wo man dort findet, was man + sucht, in dem Fall kann Google ein im Regelfall ganz gut helfen. Wenn man + einmal weiß, \emph{was} man sucht, findet man in der Referenz vor allem, + \emph{wie} man es benutzt. - Die Standardbibliothek ist aufgeteilt auf so genannt \emph{Headerdateien}, die - wir mittels \texttt{\#include} benutzen können. Diese Header sind, worunter ihr - zuerst wählt, wenn ihr auf obige url geht. Jeder Header definiert dann eine - Menge an Funktionen, Typen und Klassen (was genau eine Klasse ist, lernt ihr - spätestens in der Vorlesung). + Die Standardbibliothek ist aufgeteilt auf so genannt \emph{Headerdateien}, die + wir mittels \texttt{\#include} benutzen können. Diese Header sind, worunter ihr + zuerst wählt, wenn ihr auf obige url geht. Jeder Header definiert dann eine + Menge an Funktionen, Typen und Klassen (was genau eine Klasse ist, lernt ihr + spätestens in der Vorlesung). - \begin{enumerate}[resume] - \item Findet in der \Cpp-Referenz eine Funktion, um die aktuelle Zeit - auszugeben. Schreibt ein Programm, welches die Aktuelle Zeit ausgibt - (es reicht, einen so genannten \emph{Unix timestamp}\footnote{Der - Unix-Timestamp ist eine einzelne Zahl, die alle Sekunden seit dem - 1.1.1970 anzeigt und die also jede Sekunde eins größer wird} auszugeben). - Ihr könnt die Ausgabe eures Programms mit der Ausgabe von \texttt{date - +\%s} vergleichen, um es zu testen. - \item Mit der Funktion \texttt{rand()} könnt ihr Zufallszahlen generieren - (ihr braucht dazu den Header \texttt{}). Schreibt ein - Programm, welches vom Benutzer eine Zahl entgegennimmt und diese Anzahl - Zufallszahlen ausgibt. Führt das Programm mehrfach aus. Was fällt auf? - \item Konsultiert die \Cpp-Referenz, um heraus zu finden, wo das Problem - liegt. Könnt ihr es beheben? - \end{enumerate} + \begin{enumerate}[resume] + \item Findet in der \Cpp-Referenz eine Funktion, um die aktuelle Zeit + auszugeben. Schreibt ein Programm, welches die Aktuelle Zeit ausgibt + (es reicht, einen so genannten \emph{Unix timestamp}\footnote{Der + Unix-Timestamp ist eine einzelne Zahl, die alle Sekunden seit dem + 1.1.1970 anzeigt und die also jede Sekunde eins größer wird} auszugeben). + Ihr könnt die Ausgabe eures Programms mit der Ausgabe von \texttt{date + +\%s} vergleichen, um es zu testen. + \item Mit der Funktion \texttt{rand()} könnt ihr Zufallszahlen generieren + (ihr braucht dazu den Header \texttt{}). Schreibt ein + Programm, welches vom Benutzer eine Zahl entgegennimmt und diese Anzahl + Zufallszahlen ausgibt. Führt das Programm mehrfach aus. Was fällt auf? + \item Konsultiert die \Cpp-Referenz, um heraus zu finden, wo das Problem + liegt. Könnt ihr es beheben? + \end{enumerate} \end{praxis} @@ -74,8 +74,8 @@ \textbf{Quiz 14}\\ \textit{Welche Funktionen sind in der Standardbibliothek?} \begin{enumerate}[label=\alph*)] - \item \texttt{cout} - \item \texttt{cin} - \item \texttt{sqrt} - \item \texttt{cerr} + \item \texttt{cout} + \item \texttt{cin} + \item \texttt{sqrt} + \item \texttt{cerr} \end{enumerate} diff --git a/lektionen/tictactoe.tex b/lektionen/tictactoe.tex index 6f4944e..adb6480 100644 --- a/lektionen/tictactoe.tex +++ b/lektionen/tictactoe.tex @@ -6,11 +6,11 @@ relativ überschaubare Spiellogik besitzt. Ein- und Ausgabe, werden wir über die Konsole machen. -In \texttt{vorkurs/lektion14} findet ihr eine Datei \texttt{tictactoe.cpp}. +In \texttt{vorkurs/lektion14} findet ihr eine Datei \texttt{tictactoe.cpp}. \inputcpp{tictactoe.cpp} -Das Spielfeld stellen wir intern als Array mit 9 Integern dar. Der Wert des Integers beschreibt wem das Feld gehört. -Wenn das Feld Spieler 1 gehört, steht dort eine 1, gehört es Spieler 2 steht dort eine 2 und gehört es noch niemandem, +Das Spielfeld stellen wir intern als Array mit 9 Integern dar. Der Wert des Integers beschreibt wem das Feld gehört. +Wenn das Feld Spieler 1 gehört, steht dort eine 1, gehört es Spieler 2 steht dort eine 2 und gehört es noch niemandem, dann steht da eine 0. Wir strukturieren die Spieleimplementierung, indem wir drei Hilfsfunktionen einführen. Diese übernehmen jeweils spezifische Aufgaben innerhalb der Spiellogik. @@ -40,25 +40,25 @@ \begin{praxis} \begin{enumerate} - \item Implementiert \texttt{frage\_feld\_nummer}. Ihr solltet darauf - achten, dass ihr in dieser Funktion auch testet, ob ein gültiges - Feld eingegeben wurde und ob das angegebene Feld leer ist. + \item Implementiert \texttt{frage\_feld\_nummer}. Ihr solltet darauf + achten, dass ihr in dieser Funktion auch testet, ob ein gültiges + Feld eingegeben wurde und ob das angegebene Feld leer ist. - \item Implementiert \texttt{gebe\_feld\_aus}. Ihr könnt euch selbst - aussuchen, wie ihr die Ausgabe gestalten wollt. - Wikipedia\footnote{\url{https://en.wikipedia.org/wiki/Box-drawing_character}} - kann euch z.B. helfen, ein schöneres Feld auszugeben. Fangt am Besten - mit einer einfachen Ausgabe an und macht sie dann immer „fancier“. + \item Implementiert \texttt{gebe\_feld\_aus}. Ihr könnt euch selbst + aussuchen, wie ihr die Ausgabe gestalten wollt. + Wikipedia\footnote{\url{https://en.wikipedia.org/wiki/Box-drawing_character}} + kann euch z.B. helfen, ein schöneres Feld auszugeben. Fangt am Besten + mit einer einfachen Ausgabe an und macht sie dann immer „fancier“. - \item Implementiert \texttt{gewinnerin}. Denkt daran, dass ihr alle - Möglichkeiten testet, die mit einem Gewinnen enden - also 3 - Möglichkeiten, eine Reihe zu bilden, 3 Möglichkeiten, eine Spalte zu - bilden und 2 Möglichkeiten für Diagonalen. Überlegt euch zunächst, wie - ihr zwischen Feldnummer (0-8) und Reihen- bzw. Spaltennummer hin- und - herrechnen könnt. Beachtet auch, dass es ein Unentschieden gibt, wenn - alle Felder belegt sind, aber keine von beiden Spielerinnen gewonnen - hat. - \item + \item Implementiert \texttt{gewinnerin}. Denkt daran, dass ihr alle + Möglichkeiten testet, die mit einem Gewinnen enden - also 3 + Möglichkeiten, eine Reihe zu bilden, 3 Möglichkeiten, eine Spalte zu + bilden und 2 Möglichkeiten für Diagonalen. Überlegt euch zunächst, wie + ihr zwischen Feldnummer (0-8) und Reihen- bzw. Spaltennummer hin- und + herrechnen könnt. Beachtet auch, dass es ein Unentschieden gibt, wenn + alle Felder belegt sind, aber keine von beiden Spielerinnen gewonnen + hat. + \item Das Grundgerüst des Spiels ist die \emph{input-update-display}-loop. Dies ist eine Endlosschleife, in der zunächst der \emph{input} der Spielerin abgefragt wird. Anschließend wird der interne Spielzustand aktualisiert (\emph{update}). diff --git a/lektionen/unix_shell.tex b/lektionen/unix_shell.tex index 1d50fbc..9778e79 100644 --- a/lektionen/unix_shell.tex +++ b/lektionen/unix_shell.tex @@ -42,29 +42,29 @@ \newpage \begin{praxis} - \begin{enumerate} - \item Öffnet ein Terminal und gebt die folgenden Befehle ein: - \inputshell{basics.sh} - \end{enumerate} + \begin{enumerate} + \item Öffnet ein Terminal und gebt die folgenden Befehle ein: + \inputshell{basics.sh} + \end{enumerate} \end{praxis} \begin{spiel} - \begin{enumerate} - \item Versucht selbst durch euer Nutzerverzeichnis (\emph{home}) zu navigieren. - Wie viele Lektionen hat der Vorkurs in diesem Verzeichnis? - \item Was passiert, wenn ihr euer Homeverzeichnis verlasst (\texttt{cd ..} - während ihr darin seid)? - \item Versucht in der manpage von ls (\texttt{man ls}) zu stöbern und die - verschiedenen Parameter, mit denen ihr das Verhalten steuern könnt zu - erforschen. Findet ihr heraus, wie ihr den Verzeichnisinhalt in einem - langen Listenformat (long listing format) anzeigen lassen könnt (in dem - unter anderem auch die Dateigröße zu jeder Datei steht). - Hinweis: mit \texttt{\textbackslash Suchbegriff} kann innerhalb von \texttt{man} gesucht werden. - \item Um schnell mit der Shell zu arbeiten gibt es einige Tricks. - Damit lange Dateinamen nicht immer komplett eingegeben werden müssen, gibt es die sogenannte \texttt{tab completion}. - Um bereits eingegebene Befehle nochmals auszuführen die \texttt{history}. Finde heraus wie diese funktionieren! - \end{enumerate} - \end{spiel} + \begin{enumerate} + \item Versucht selbst durch euer Nutzerverzeichnis (\emph{home}) zu navigieren. + Wie viele Lektionen hat der Vorkurs in diesem Verzeichnis? + \item Was passiert, wenn ihr euer Homeverzeichnis verlasst (\texttt{cd ..} + während ihr darin seid)? + \item Versucht in der manpage von ls (\texttt{man ls}) zu stöbern und die + verschiedenen Parameter, mit denen ihr das Verhalten steuern könnt zu + erforschen. Findet ihr heraus, wie ihr den Verzeichnisinhalt in einem + langen Listenformat (long listing format) anzeigen lassen könnt (in dem + unter anderem auch die Dateigröße zu jeder Datei steht). + Hinweis: mit \texttt{\textbackslash Suchbegriff} kann innerhalb von \texttt{man} gesucht werden. + \item Um schnell mit der Shell zu arbeiten gibt es einige Tricks. + Damit lange Dateinamen nicht immer komplett eingegeben werden müssen, gibt es die sogenannte \texttt{tab completion}. + Um bereits eingegebene Befehle nochmals auszuführen die \texttt{history}. Finde heraus wie diese funktionieren! + \end{enumerate} +\end{spiel} Falls euch das alles verwirrt, fragt entweder direkt nach oder wartet auf @@ -76,8 +76,8 @@ \textbf{Quiz 2}\\ \textit{Was passiert, wenn ihr \texttt{cd .} ausführt?} \begin{enumerate}[label=\alph*)] - \item Ihr geht in ein zufälliges Unterverzeichnis - \item Ihr bleibt im gleichen Verzeichnis - \item Ihr verlasst euer aktuelles Verzeichnis - \item Ihr geht direkt in euer Homeverzeichnis + \item Ihr geht in ein zufälliges Unterverzeichnis + \item Ihr bleibt im gleichen Verzeichnis + \item Ihr verlasst euer aktuelles Verzeichnis + \item Ihr geht direkt in euer Homeverzeichnis \end{enumerate} diff --git a/lektionen/variables_datatypes.tex b/lektionen/variables_datatypes.tex index 03e5496..684db8c 100644 --- a/lektionen/variables_datatypes.tex +++ b/lektionen/variables_datatypes.tex @@ -22,27 +22,27 @@ In der Lektion Arithmetik lernen wir mehr über Zahlen und deren Eigenheiten. \begin{praxis} - \begin{enumerate} - \item Was passiert, wenn ihr \cppinline{beschreibung} in Zeile 5 ein anderes Wort zuweist? - \item Definiert eine weitere Variable und schreibt einen weiteren Satz. - \end{enumerate} + \begin{enumerate} + \item Was passiert, wenn ihr \cppinline{beschreibung} in Zeile 5 ein anderes Wort zuweist? + \item Definiert eine weitere Variable und schreibt einen weiteren Satz. + \end{enumerate} \end{praxis} \begin{spiel} - \begin{enumerate} - \item Was passiert, wenn ihr euch im Namen einer Variable „vertippt“? - \item Definiert euch zwei Variablen, weist ihnen - irgendwelchen Text zu, versucht, sie zu addieren und das Ergebnis auszugeben. - \item Was passiert, wenn ihr eine Variable definiert, - ihr aber nichts zuweist und dann versucht, sie auszugeben? - \end{enumerate} + \begin{enumerate} + \item Was passiert, wenn ihr euch im Namen einer Variable „vertippt“? + \item Definiert euch zwei Variablen, weist ihnen + irgendwelchen Text zu, versucht, sie zu addieren und das Ergebnis auszugeben. + \item Was passiert, wenn ihr eine Variable definiert, + ihr aber nichts zuweist und dann versucht, sie auszugeben? + \end{enumerate} \end{spiel} \textbf{Quiz 5}\\ \textit{Wann wird eine Variable nicht mehr \glqq erkannt\grqq ?} \begin{enumerate}[label=\alph*)] - \item Wenn die Groß-/Kleinschreibung nicht mehr stimmt - \item Wenn ein Buchstabe vergessen wurde - \item Wenn ein Buchstabe zu viel verwendet wurde - \item Wenn der Variable ein neuer Wert zugewiesen wird + \item Wenn die Groß-/Kleinschreibung nicht mehr stimmt + \item Wenn ein Buchstabe vergessen wurde + \item Wenn ein Buchstabe zu viel verwendet wurde + \item Wenn der Variable ein neuer Wert zugewiesen wird \end{enumerate} \ No newline at end of file diff --git a/lektionen/vectors.tex b/lektionen/vectors.tex index 39169f4..a40e2c2 100644 --- a/lektionen/vectors.tex +++ b/lektionen/vectors.tex @@ -57,23 +57,23 @@ \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} + \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 + \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/warning.tex b/lektionen/warning.tex index 4765cb4..87ba35a 100644 --- a/lektionen/warning.tex +++ b/lektionen/warning.tex @@ -10,85 +10,85 @@ möglicherweise zu unerwartetem Verhalten führen können. \begin{praxis} - \begin{enumerate} - \item Kompiliert \texttt{warnings.cpp}. Testet das Program mit - verschiedenen Eingaben. Was beobachtet ihr? - \end{enumerate} - \inputcpp{warnings.cpp} + \begin{enumerate} + \item Kompiliert \texttt{warnings.cpp}. Testet das Program mit + verschiedenen Eingaben. Was beobachtet ihr? + \end{enumerate} + \inputcpp{warnings.cpp} - Fehler wie diese können nicht mehr auftreten, wenn ihr \emph{warnings} - anschaltet. Dies passiert über weitere Optionen, die wir dem Compiler mitgeben. + Fehler wie diese können nicht mehr auftreten, wenn ihr \emph{warnings} + anschaltet. Dies passiert über weitere Optionen, die wir dem Compiler mitgeben. - \begin{enumerate}[resume] - \item Kompiliert \texttt{warnings.cpp} mittels \texttt{g++ -Wall -o - warnings warnings.cpp}. - \end{enumerate} + \begin{enumerate}[resume] + \item Kompiliert \texttt{warnings.cpp} mittels \texttt{g++ -Wall -o + warnings warnings.cpp}. + \end{enumerate} - Warnings sehen im Wesentlichen genauso aus, wie Fehler. Der einzige Unterschied - ist, dass statt \texttt{error} in der Zeile ein \texttt{warning} steht und dass - der Compiler zwar die Meldung ausgibt, aber trotzdem ganz normal das Programm - erzeugt. Trotzdem solltet ihr warnings ernst nehmen. Die meisten „ernsthaften“ - Programmierer aktivieren warnings, da die meisten davon gefundenen Meldungen - tatsächlich behoben werden sollten. + Warnings sehen im Wesentlichen genauso aus, wie Fehler. Der einzige Unterschied + ist, dass statt \texttt{error} in der Zeile ein \texttt{warning} steht und dass + der Compiler zwar die Meldung ausgibt, aber trotzdem ganz normal das Programm + erzeugt. Trotzdem solltet ihr warnings ernst nehmen. Die meisten „ernsthaften“ + Programmierer aktivieren warnings, da die meisten davon gefundenen Meldungen + tatsächlich behoben werden sollten. - Ihr könnt mit verschiedenen Parametern beeinflussen, welche warnings euch der - Compiler anzeigt und wie er damit umgeht. Wir wollen hier nur drei nennen: + Ihr könnt mit verschiedenen Parametern beeinflussen, welche warnings euch der + Compiler anzeigt und wie er damit umgeht. Wir wollen hier nur drei nennen: - \begin{description} - \item[-Wall] - Aktiviert „alle“ warnings. Tatsächlich stimmt das so nicht, aber wenn - ihr immer daran denkt, diesen Parameter anzugeben, solltet ihr bereits - den allergrößten Teil der vom Compiler entdeckbaren Probleme, die ihr - erzeugt, abfangen können. - \item[-Wextra] - Aktiviert noch ein paar warnings (ihr seht, warum „alle“ in - Anführungszeichen stand). In einigen Fällen sind auch die hier - aktivierten warnings für euch relevant. - \item[-Werror] - Dieser Parameter führt dazu, dass jede warning als Fehler behandelt - wird, d.h. der Compiler bricht ab, wenn er eine warning produzieren - würde. Dieser Parameter ist hochumstritten und in der Praxis sollte man - ihn eigentlich nicht einsetzen. Für Beginner kann er aber hilfreich - sein, da er von vornherein antrainiert, warnings ernst zu nehmen und - sie nicht einfach zu ignorieren. - \end{description} + \begin{description} + \item[-Wall] + Aktiviert „alle“ warnings. Tatsächlich stimmt das so nicht, aber wenn + ihr immer daran denkt, diesen Parameter anzugeben, solltet ihr bereits + den allergrößten Teil der vom Compiler entdeckbaren Probleme, die ihr + erzeugt, abfangen können. + \item[-Wextra] + Aktiviert noch ein paar warnings (ihr seht, warum „alle“ in + Anführungszeichen stand). In einigen Fällen sind auch die hier + aktivierten warnings für euch relevant. + \item[-Werror] + Dieser Parameter führt dazu, dass jede warning als Fehler behandelt + wird, d.h. der Compiler bricht ab, wenn er eine warning produzieren + würde. Dieser Parameter ist hochumstritten und in der Praxis sollte man + ihn eigentlich nicht einsetzen. Für Beginner kann er aber hilfreich + sein, da er von vornherein antrainiert, warnings ernst zu nehmen und + sie nicht einfach zu ignorieren. + \end{description} - Wenn ihr bei jedem Compilerlauf nun warnings anschalten wollt -- und am Besten - auch noch für den debugger, falls ihr ihn braucht -- wird der Befehl zum - Kompilieren langsam sehr lang. Für die Dauer des Vorkurses könnt ihr euch - mittels + Wenn ihr bei jedem Compilerlauf nun warnings anschalten wollt -- und am Besten + auch noch für den debugger, falls ihr ihn braucht -- wird der Befehl zum + Kompilieren langsam sehr lang. Für die Dauer des Vorkurses könnt ihr euch + mittels - \begin{center} - \texttt{alias\footnote{alias ist ein shell-befehl, der euch eine Reihe von - Anweisungen und Befehlen neu benennen lässt. In diesem Fall ist danach zum - Beispiel der noch nicht existente Befehl \texttt{compile} ein neuer Name für - \texttt{g++ -Vall -Wextra -Werror -O0 -g3}. Beachtet, dass ihr hier genau das - abtippen müsst, was da steht, mit Leerzeichen und allem} compile="g++ -Wall - -Wextra -Werror -O0 -g3"} - \end{center} + \begin{center} + \texttt{alias\footnote{alias ist ein shell-befehl, der euch eine Reihe von + Anweisungen und Befehlen neu benennen lässt. In diesem Fall ist danach zum + Beispiel der noch nicht existente Befehl \texttt{compile} ein neuer Name für + \texttt{g++ -Vall -Wextra -Werror -O0 -g3}. Beachtet, dass ihr hier genau das + abtippen müsst, was da steht, mit Leerzeichen und allem} compile="g++ -Wall + -Wextra -Werror -O0 -g3"} + \end{center} - ein bisschen Arbeit ersparen. Ein einfaches \texttt{compile -o foo foo.cpp} - wird dann automatisch den Compiler mit allen angegebenen Optionen aufrufen. Den - \texttt{alias} müsst ihr allerdings jedes mal, wenn ihr in der Zwischenzeit ein - Terminal geschlossen habt, neu ausführen, denn er geht bei Schließung eines - Terminals verloren! + ein bisschen Arbeit ersparen. Ein einfaches \texttt{compile -o foo foo.cpp} + wird dann automatisch den Compiler mit allen angegebenen Optionen aufrufen. Den + \texttt{alias} müsst ihr allerdings jedes mal, wenn ihr in der Zwischenzeit ein + Terminal geschlossen habt, neu ausführen, denn er geht bei Schließung eines + Terminals verloren! - \begin{enumerate}[resume] - \item Mit der warning in \texttt{warnings.cpp} möchte euch der Compiler - darauf hinweisen, dass ihr hier eine Zuweisung macht, obwohl ein - Wahrheitswert\footnote{Ein Wahrheitswert (\cppinline{bool}) ist ein - Variablentyp, der die Werte wahr (\cppinline{true}) und falsch ( - \cppinline{false}) annehmen kann.} - erwartet wird. Es gibt zwei Möglichkeiten, die warning zu - beheben: Ihr könnt Klammern um die Zuweisung machen (und dem Compiler - so sagen, dass ihr euch sicher seid, dass hier eine Zuweisung hinsoll), - oder ihr könnt aus der Zuweisung einen Vergleich machen. Welche - Möglichkeit erscheint euch angebracht? Setzt sie um und kompiliert das - Programm erneut (mit warnings). - \item In \texttt{warnprim.cpp} haben wir einen Fehler eingebaut. Kompiliert - das Programm mit warnings und korrigiert ihn. - \end{enumerate} + \begin{enumerate}[resume] + \item Mit der warning in \texttt{warnings.cpp} möchte euch der Compiler + darauf hinweisen, dass ihr hier eine Zuweisung macht, obwohl ein + Wahrheitswert\footnote{Ein Wahrheitswert (\cppinline{bool}) ist ein + Variablentyp, der die Werte wahr (\cppinline{true}) und falsch ( + \cppinline{false}) annehmen kann.} + erwartet wird. Es gibt zwei Möglichkeiten, die warning zu + beheben: Ihr könnt Klammern um die Zuweisung machen (und dem Compiler + so sagen, dass ihr euch sicher seid, dass hier eine Zuweisung hinsoll), + oder ihr könnt aus der Zuweisung einen Vergleich machen. Welche + Möglichkeit erscheint euch angebracht? Setzt sie um und kompiliert das + Programm erneut (mit warnings). + \item In \texttt{warnprim.cpp} haben wir einen Fehler eingebaut. Kompiliert + das Programm mit warnings und korrigiert ihn. + \end{enumerate} - \inputcpp{warnprim.cpp} + \inputcpp{warnprim.cpp} \end{praxis} \ No newline at end of file diff --git a/namensliste/namensliste.tex b/namensliste/namensliste.tex index d9996d0..e1d3077 100644 --- a/namensliste/namensliste.tex +++ b/namensliste/namensliste.tex @@ -30,56 +30,56 @@ \Huge \begin{longtable}{|>{\rownumber\space} l | C{0.22\textwidth}|C{0.22\textwidth}|C{0.35\textwidth}| } - PC & Vorname & Name & Unterschrift \gdef\rownumber{\stepcounter{magicrownumbers}\arabic{magicrownumbers}} \\ \toprule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule - & & & \\ \midrule + PC & Vorname & Name & Unterschrift \gdef\rownumber{\stepcounter{magicrownumbers}\arabic{magicrownumbers}} \\ \toprule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule + & & & \\ \midrule \end{longtable} \end{document} diff --git a/scripts/format_latex.sh b/scripts/format_latex.sh new file mode 100644 index 0000000..1d1016e --- /dev/null +++ b/scripts/format_latex.sh @@ -0,0 +1,55 @@ +#!/bin/bash +set -e + +echo "=== LaTeX Auto-Formatter ===" + +if ! command -v latexindent &>/dev/null; then + echo "latexindent.pl not found. Please install TeX Live or MacTeX." + exit 1 +fi + +missing_modules=() +for module in YAML::Tiny File::HomeDir Unicode::GCString File::Find::Rule; do + perl -M$module -e1 2>/dev/null || missing_modules+=($module) +done + +if [ ${#missing_modules[@]} -ne 0 ]; then + echo "The following Perl modules are missing:" + for module in "${missing_modules[@]}"; do + echo " - $module" + done + echo "" + echo "Options:" + echo " [i] Install missing modules automatically (requires cpan, may need sudo)" + echo " [s] Skip installation and try formatting anyway" + echo " [a] Abort" + read -p "What do you want to do? [i/s/a]: " choice + case "$choice" in + i | I) + for module in "${missing_modules[@]}"; do + echo "Installing $module with cpan..." + if ! cpan -i $module; then + echo "Permission denied or install failed. Retrying with sudo..." + sudo cpan -i $module + fi + done + ;; + s | S) + echo "Skipping installation. Formatting may fail." + ;; + *) + echo "Aborted." + exit 1 + ;; + esac +else + echo "All required Perl modules are installed." +fi + +echo "Formatting all .tex files..." +find . -name "*.tex" -exec latexindent -w {} \; +echo "Done! All LaTeX files have been formatted." + +echo "Cleaning up backup files..." +find . -type f -name "*.bak*" -exec rm -v {} \; +echo "Cleanup complete." diff --git a/title.tex b/title.tex index c6d4b47..a885e78 100644 --- a/title.tex +++ b/title.tex @@ -2,19 +2,19 @@ \usepackage{graphicx} \begin{document} \begin{titlepage} - \centering - \includegraphics[width=0.7\textwidth]{folien/media/fs-logo-small.pdf}\par\vspace{1cm} - {\scshape\LARGE Universität Heidelberg \par} - \vspace{1cm} - {\scshape\Large Fakultät für Mathematik \& Informatik\par} - \vspace{1.5cm} - {\huge\bfseries Programmiervorkurs\par} - \vspace{2cm} - {\Large\itshape Fachschaft MathPhysInfo\par} + \centering + \includegraphics[width=0.7\textwidth]{folien/media/fs-logo-small.pdf}\par\vspace{1cm} + {\scshape\LARGE Universität Heidelberg \par} + \vspace{1cm} + {\scshape\Large Fakultät für Mathematik \& Informatik\par} + \vspace{1.5cm} + {\huge\bfseries Programmiervorkurs\par} + \vspace{2cm} + {\Large\itshape Fachschaft MathPhysInfo\par} - \vfill + \vfill -% Bottom of the page - {\large \today\par} + % Bottom of the page + {\large \today\par} \end{titlepage} \end{document} diff --git a/vorkurs.tex b/vorkurs.tex index f781b41..58a3296 100644 --- a/vorkurs.tex +++ b/vorkurs.tex @@ -92,32 +92,32 @@ \chapter*{Vorwort} Jede Lektion gliedert sich in drei oder vier Teile: \begin{enumerate} - \item Theorieteil: in dem ein Unterbau für die Lektion gegeben werden - soll. Ein tiefes Verständnis sollte für die Bearbeitung der Lektion - nicht notwendig sein. Es geht mehr darum, dass sich ein grober - Wiedererkennungseffekt einstellt, wenn die theoretischen Kenntnisse im - nächsten Teil vertieft werden. + \item Theorieteil: in dem ein Unterbau für die Lektion gegeben werden + soll. Ein tiefes Verständnis sollte für die Bearbeitung der Lektion + nicht notwendig sein. Es geht mehr darum, dass sich ein grober + Wiedererkennungseffekt einstellt, wenn die theoretischen Kenntnisse im + nächsten Teil vertieft werden. - Wenn du einen eher passiven Lernstil pflegst, kannst du dir hier auch - einen Tutor zur Seite stellen lassen, der dich kurz in das Thema - einführt. + Wenn du einen eher passiven Lernstil pflegst, kannst du dir hier auch + einen Tutor zur Seite stellen lassen, der dich kurz in das Thema + einführt. - \item Praxisteil: - Hier sollen selbstständig die im Theorieteil vermittelten Inhalte - in einer kurzen Fingerübung angewendet werden. + \item Praxisteil: + Hier sollen selbstständig die im Theorieteil vermittelten Inhalte + in einer kurzen Fingerübung angewendet werden. - Bei Fragen kann man aber natürlich auch hier einen Tutor zu Rate - ziehen. + Bei Fragen kann man aber natürlich auch hier einen Tutor zu Rate + ziehen. - \item Spielteil: Hier kann das Gelernte vertieft werden. - Es werden tiefergehende Informationen vermittelt. Darüberhinaus weitere Möglichkeiten, mit - dem Code zu interagieren, aufgezeigt. + \item Spielteil: Hier kann das Gelernte vertieft werden. + Es werden tiefergehende Informationen vermittelt. Darüberhinaus weitere Möglichkeiten, mit + dem Code zu interagieren, aufgezeigt. - Von diesem Teil sollte man sich am Wenigsten aufhalten und auch nicht verunsichern lassen. - - \item Quizteil: Am Ende der meisten Lektionen findet ihr ein paar Quizfragen, mit denen ihr testen könnt, - ob ihr den Inhalt auch verstanden habt. Beantwortet die Fragen und schaut dann in den Lösungen am Ende des - Skripts nach, ob eure Antworten richtig sind. + Von diesem Teil sollte man sich am Wenigsten aufhalten und auch nicht verunsichern lassen. + + \item Quizteil: Am Ende der meisten Lektionen findet ihr ein paar Quizfragen, mit denen ihr testen könnt, + ob ihr den Inhalt auch verstanden habt. Beantwortet die Fragen und schaut dann in den Lösungen am Ende des + Skripts nach, ob eure Antworten richtig sind. \end{enumerate} @@ -157,10 +157,10 @@ \chapter*{Vorwort} \textbf{Quiz 0}\\ \textit{Was könnt ihr vom Programmiervorkurs erwarten?} \begin{enumerate}[label=\alph*)] - \item Viel Frontalunterricht - \item Eigenständiges Lernen - \item Spaß - \item Hilfe, wenn ihr sie benötigt + \item Viel Frontalunterricht + \item Eigenständiges Lernen + \item Spaß + \item Hilfe, wenn ihr sie benötigt \end{enumerate} \tableofcontents