Skip to content

Commit 7330fd9

Browse files
fschledornf-elserdheidemannchristian-heuselTim-Grube
authored
Inhaltliche Änderungen für den Vorkurs 2024 (#128)
* initial commit fuer eigen computer * added eigene computer part to main script * small ansible changes * updated readme #124 * Section für Windows leicht überarbeitet und aktualisiert auf WSL2. * Update build.yml Updated from upload-artifact@v2 to @v4, as @V3 will be deprecated as of Nov. 30 2024 (1,5months) * Windows section aktualisiert, hello world angepasst auf vscode * In Kapitel 10 werden jetzt for und while Loops vorgestellt. Außerdem wurden Aufgaben hinzugefügt um for-loops zu benutzen und einen for-loop in einen while-loop umzuwandeln * kleine rechtschreibkorrektur im diagramm * Dopplung entfernt * Kapitel Vektoren leicht überarbeitet: Einen while-loop durch einen for-loop ersetut, kleine aufgabenstellung hinzugefügt zur verhinderung von out-of bounce zugriffen. kleine fehlerkorrektur in prim-for-loop * preprocessing hinzugefügt * huch ist mir ein fehler durchgerutscht * added missing escape symbol * rechtschreibfehler korrigiert Co-authored-by: Christian Heusel <christian@heusel.eu> * clarification Co-authored-by: Christian Heusel <christian@heusel.eu> * Delete vorkurs_log.txt no idea why this got committed * renamed lesson 18 * of course i forgot to edit the script to include the new name for lesson 18 * Update basics/schleifen.tex * rechtschreibfehler und clion footnote hinzugefügt * Update hello_world.tex fix broken link --------- Co-authored-by: Felix <github@elsermail.com> Co-authored-by: holyaltbier <mail@dheidemann.de> Co-authored-by: Christian Heusel <christian@heusel.eu> Co-authored-by: Tim Grube <115377141+Plebysnacc@users.noreply.github.com> Co-authored-by: Felix Schledorn <107950614+fschledorn@users.noreply.github.com>
1 parent 01118c9 commit 7330fd9

18 files changed

Lines changed: 245 additions & 46 deletions
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
\lesson{Compiler, Assembler, Linker}
1+
\lesson{Preprocessing, Compiler, Assembler, Linker}
22

33
In der letzten Lektion klang es bereits an -- was der Befehl \texttt{g++}
44
eigentlich tut, ist mehr, als nur Kompilieren im strengen Sinne des Wortes. Wir
@@ -11,9 +11,11 @@
1111
In Lektion 1 haben wir vereinfacht dargestellt, dass der Compiler eine
1212
Quelltextdatei mit der Endung \texttt{.cpp} nimmt und daraus direkt eine
1313
ausführbare Datei erstellt. Die Schritte, die hier eigentlich in einem Befehl
14-
durchgeführt werden, aber zu trennen sind, sind das \emph{Kompilieren}, das
14+
durchgeführt werden, aber zu trennen sind, sind das \emph{Preprocessing}, das \emph{Kompilieren}, das
1515
\emph{Assemblieren} und das \emph{Linken}.
1616

17+
Beim Preprocessing werden alle \texttt{\#include}-Anweisungen aufgelöst und so etwas wie Makros ersetzt. Das ist der erste Schritt, der passiert, wenn wir \texttt{g++} aufrufen. Das Ergebnis des Preprocessings ist ein \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, obwohl wir in \texttt{helloworld.cpp} auch \texttt{\#include <iostream>} stehen haben -- der Compiler hat das schon für uns erledigt.
18+
1719
Das Kompilieren übersetzt unseren \Cpp-Code in eine Zwischenform, so genannten
1820
\emph{Assembler}. In Lektion 1 haben wir den Maschinencode angesprochen, in der
1921
Befehle und Parameter an Befehle in 1en und 0en dargestellt werden. Assembler

basics/funktionen.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
\[
1313
\smashoperator{\mathop{\underbrace{\text{\cppinline{double}}}}_{\text{Rückgabetyp}}}\quad
1414
\smashoperator{\mathop{\overbrace{\text{\cppinline{my_func}}}}^{\text{Name}}}
15-
(\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Paramter 1}}},\
16-
\smashoperator{\mathop{\overbrace{\text{\cppinline{int n}}}^{\text{Paramter 2}}}})
15+
(\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Parameter 1}}},\
16+
\smashoperator{\mathop{\overbrace{\text{\cppinline{int n}}}^{\text{Parameter 2}}}})
1717
\]
1818
%sorry etwas hässlich
1919

basics/hello_world.tex

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,7 @@
3939
\textbf{Wie gehe ich dabei vor?}
4040

4141
Um den Programmcode in eine Textdatei zu schreiben verwenden wir einen Texteditor.
42-
Dies kann mit fast jedem einfachen Texteditor bewerkstelligt werden. Wir verwenden beispielsweise im Vokurs gedit unter Ubuntu.
43-
Unter Windows kannst du den Editor oder notepad++ verwenden, unter MacOS Textedit.
44-
In der fortgeschrittenen Programmierung werden intelligente Programmierumgebungen verwendet, die jedoch in diesem Kurs vernachlässigt werden.
45-
42+
Dies kann mit fast jedem einfachen Texteditor bewerkstelligt werden. Populäre konsolenbasierte Editoren sind \texttt{vim} und \texttt{nano}. Es existieren aber auch grafische Editoren, die speziell für das Schreiben von Programmcode entwickelt wurden, wie \texttt{Visual Studio Code} oder \texttt{CLion}\footnote{https://www.jetbrains.com/community/education}.
4643
Um dem Compiler zusagen, welche Textdatei er in ein Programm übersetzen soll, verwenden wir die sogenannte Shell. Vorerst reicht uns zu wissen, dass die Shell
4744
ein Werkzeug ist, um dem Computer spezifisch zu sagen, was er machen soll (mehr dazu im folgenden Kapitel). In Ubuntu verwenden wir hierzu das Terminal, ebenso in MacOS,
4845
unter Windows CMD oder Powershell. Ein Befehl für \texttt{g++} (dem Compiler für \Cpp) sieht beispielsweise wie folgt aus:
@@ -65,7 +62,7 @@
6562
\textbf{Erstes Programm in \Cpp schreiben}
6663

6764
\begin{enumerate}
68-
\item Öffne einen Texteditor (In Ubuntu unter „Zubehör“ den Editor gedit).
65+
\item Erstelle eine neue, leere Datei in einem Editor deiner Wahl.
6966

7067
\item Kopiere folgenden Programmcode in den Texteditor und speichere ihn in einer Datei mit dem Namen „helloworld.cpp“ ab.
7168
Das nähere Verständnis des Programmcodes ist an dieser Stelle nicht notwendig.
@@ -81,7 +78,7 @@
8178
Was dieser Befehl genau tut und wie er funktioniert, erfahrt ihr in Lektion 2.
8279
\item In diesem Verzeichnis liegt nun eine Datei mit dem Namen \texttt{helloworld.cpp}.
8380
Benutzt \texttt{g++}, um diese zu einer Datei (in diesem Fall dem Programm) \texttt{hello} zu
84-
kompilieren. Orientiert euch dazu an den folgenden Befehlen.
81+
kompilieren. Orientiert euch dazu an den folgenden Befehlen. (siehe Diagramm)
8582
\item Führt die Datei \texttt{hello} aus.
8683
\end{enumerate}
8784
\end{praxis}
@@ -90,7 +87,7 @@
9087
Zur besseren Übersichtlichkeit hier der ganze Vorgang noch mal in einem
9188
Diagramm:
9289

93-
% TODO: Buttugly, but well...
90+
% TODO: Buttugly, but well... - its gonna stay this way
9491
\begin{center}
9592
\resizebox{\textwidth}{!}{
9693
\begin{tikzpicture}
@@ -108,11 +105,8 @@
108105
\begin{spiel}
109106

110107
Ihr könnt nun versuchen, den Quellcode selbst zu verändern und damit ein wenig
111-
herumzuspielen. Öffnet dazu einen Editor (in den Anwendungen findet ihr z.B.
112-
unter „Zubehör“ den Editor gedit) und öffnet die Datei
113-
\texttt{vorkurs/lektion01/helloworld.cpp}\footnote{entweder mittels
114-
\glqq{}Datei/Öffnen\grqq{} in gedit oder über das Terminal mittels \texttt{gedit
115-
helloworld.cpp}}. Denkt daran, nach jeder Änderung die Datei zu speichern und
108+
herumzuspielen. Öffnet dazu einen Editor und öffnet die Datei
109+
\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
116110
im Terminal neu zu kompilieren und auszuführen.
117111

118112
Dinge, die ihr ausprobieren könntet sind zum Beispiel:
@@ -134,4 +128,4 @@
134128
\item Es gibt einen Fehler
135129
\item Das Programm tut garnichts mehr
136130
\item Das Programm gibt trotzdem \texttt{Hello world} aus
137-
\end{enumerate}
131+
\end{enumerate}

basics/intro.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ \chapter{Die Basics}
2727
\input{basics/vektoren}
2828
\input{basics/warning}
2929
\input{basics/tictactoe1}
30-
\input{basics/linker}
30+
\input{basics/compiling.tex}
3131
\input{basics/tictactoe2}
3232

3333
\clearpage

basics/schleifen.tex

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@
7171
ihr könnt alleine mit den Mitteln, die ihr bisher kennen gelernt habt,
7272
\emph{jede} mögliche Berechnung anstellen!
7373

74+
Es gibt noch eine weitere Art von Schleifen, die \texttt{for}-Schleife. Die for-Schleife hat folgende Struktur:
75+
\begin{center}
76+
\texttt{for (Initialisierung; Bedingung; Inkrementierung) \{ Code-Fragment \}}
77+
\end{center}
78+
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.
79+
80+
Der Unterschied zwischen den beiden Schleifenarten liegt hauptsächlich in ihrer Struktur:
81+
\begin{itemize}
82+
\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.
83+
\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.
84+
\end{itemize}
85+
86+
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
87+
Die \texttt{while}-Schleife aus dem vorherigen Beispiel mit den Primzahlen könnte also auch so aussehen:
88+
\inputcpp{prim-for-loop.cpp}
89+
7490
\begin{praxis}
7591
\begin{enumerate}
7692
\item Versucht, die Arbeitsweise des Programms zu simulieren. Geht selbst
@@ -79,9 +95,10 @@
7995
Computer (bei Kontrollflussstrukturen) als nächstes springen würde.
8096
\item Warum funktioniert das Programm für den Fall $n = 2$?
8197
\item Schreibt selbst ein Programm, welches eine Zahl von der Nutzerin
82-
entgegennimmt und dann alle Zahlen bis zu dieser Zahl ausgibt.
98+
entgegennimmt und dann alle Zahlen bis zu dieser Zahl ausgibt. Nutz dafür eine \texttt{for}-Schleife.
99+
\item Versucht nun das gleiche mit einer \texttt{while}-Schleife.
83100
\item Modifiziert euer Programm, sodass es von dieser Zahl bis zu 0
84-
hinunterzählt.
101+
hinunterzählt, jeweils wieder mit einer \texttt{while}-Schleife und mit einer \texttt{for}-Schleife.
85102
\end{enumerate}
86103
\end{praxis}
87104

basics/stdbib.tex

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,7 @@
6767
\end{enumerate}
6868
\end{praxis}
6969

70-
\textbf{Praxis:}
71-
\begin{enumerate}
72-
\item Findet in der \Cpp-Referenz eine Funktion, um die aktuelle Zeit
73-
auszugeben. Schreibt ein Programm, welches die Aktuelle Zeit ausgibt
74-
(es reicht, einen so genannten \emph{Unix timestamp}\footnote{Der
75-
Unix-Timestamp ist eine einzelne Zahl, die alle Sekunden seit dem
76-
1.1.1970 anzeigt und die also jede Sekunde eins größer wird} auszugeben).
77-
Ihr könnt die Ausgabe eures Programms mit der Ausgabe von \texttt{date
78-
+\%s} vergleichen, um es zu testen.
79-
\item Mit der Funktion \texttt{rand()} könnt ihr Zufallszahlen generieren
80-
(ihr braucht dazu den Header \texttt{<cstdlib>}). Schreibt ein
81-
Programm, welches vom Benutzer eine Zahl entgegennimmt und diese Anzahl
82-
Zufallszahlen ausgibt. Führt das Programm mehrfach aus. Was fällt auf?
83-
\item Konsultiert die \Cpp-Referenz, um heraus zu finden, wo das Problem
84-
liegt. Könnt ihr es beheben?
85-
\end{enumerate}
70+
8671

8772
\newpage
8873

basics/vektoren.tex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,17 @@
5252
\end{enumerate}
5353
\end{praxis}
5454

55-
Sollte euer Programm einmal nicht korrekt kompilieren, denkt daran die Fehlermeldung sorgfältig zu lesen, damit sie euch Aufschluss über die Fehlerursache gibt.
56-
Sollte euer Programm zwar kompilieren, sich dann aber komisch verhalten, denkt daran, den debugger zu benutzen und es Schritt für Schritt durchzugehen, um die Fehlerquelle zu finden. Solltet ihr trotz alledem nicht weiter kommen, oder nicht wissen, was von euch erwartet wird, fragt einen
57-
von uns.
55+
Sollte euer Programm einmal nicht korrekt kompilieren, denkt daran die Fehlermeldung sorgfältig zu lesen, damit sie euch Aufschluss über die Fehlerursache gibt.\\
56+
Sollte euer Programm zwar kompilieren, sich dann aber komisch verhalten, denkt daran, den Debugger zu benutzen und es Schritt für Schritt durchzugehen, um die Fehlerquelle zu finden. Solltet ihr trotz alledem nicht weiter kommen, oder nicht wissen, was von euch erwartet wird, fragt einen von uns.
5857

5958

6059
\begin{spiel}
6160
\begin{enumerate}
6261
\item
6362
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.
6463
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}
64+
\item
65+
Überlegt euch wie ihr verhindern könnt, dass über den Rand des Vektors hinaus geschrieben oder gelesen wird.
6566
\item
6667
Implementiert das \emph{Sieb des Eratosthenes}\footnote{\url{https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes}}, wenn ihr noch nicht ausgelastet seid.
6768
Denkt daran, es initial zu befüllen und denkt euch eine clevere Möglichkeit aus, das „Streichen“ zu realisieren.

eigene_computer/intro.tex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
\setcounter{chapter}{-1}
2+
\chapter{Vorbereitung eigener Computer}
3+
\pagestyle{empty}
4+
Dieses Kapitel dient der Vorbereitung privater Computer, um daran den Kurs zu bearbeiten.
5+
Wir werden in diesem Fall den proprietären Editor „Visual Studio Code“ verwenden, welcher \href{https://code.visualstudio.com/Download}{hier} heruntergeladen werden kann.\\
6+
7+
\pagestyle{fancy}
8+
\input{eigene_computer/windows.tex}
9+
\input{eigene_computer/macos.tex}
10+
\input{eigene_computer/linux.tex}

eigene_computer/linux.tex

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
\textbf{Linux}
2+
3+
\pagestyle{empty}
4+
5+
Falls ihr privat bereits ein Linux-System nutzt.
6+
\begin{enumerate}
7+
\item Optional: Alternativ zu Visual Studio Code, könnt ihr auch eine Quelloffene Version des Editors verwenden.
8+
Da die Installation dieser Version je nach Distribution variiert, verweisen wir euch an dieser Stelle an eine kurze Internetrecherche.
9+
\item Installiert mit eurem Packagemanager \texttt{g++} und ggf. \texttt{unzip}, sowie \texttt{wget}.
10+
\item Das Archiv mit den Vorkursdateien könnt ihr mit \\
11+
\texttt{wget https://mathphys.info/vorkurs/pvk/vorkurs.zip} herunterladen.
12+
\item Mit \texttt{unzip vorkurs.zip} könnt ihr dieses entpacken.
13+
\end{enumerate}

eigene_computer/macos.tex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
\textbf{MacOS}
2+
3+
\pagestyle{empty}
4+
5+
Das Setup unter MacOS ist im Vergleich zu Windows recht einfach.
6+
7+
\begin{enumerate}
8+
\item Öffnet ein Terminal.
9+
\item Tippt \texttt{g++} ein.
10+
\item Bestätigt in dem erscheinenden Fenster die Installation.
11+
\item Die Dateien des Vorkurses können \href{https://mathphys.info/vorkurs/pvk/vorkurs.zip}{hier} heruntergeladen werden.
12+
\item Entpackt die Dateien in ein Verzeichnis eurer Wahl.
13+
\item In Visual Studio Code könnt ihr dann über den Explorer auf die Dateien des Kurses zugreifen.
14+
\end{enumerate}

0 commit comments

Comments
 (0)