Skip to content

Commit 5f9b5df

Browse files
Renewal cap1 (#111)
* Trennung Shell und Texteditor ausgearbeitet * Minor fixes in vorkurs.tex
1 parent 3eb36df commit 5f9b5df

2 files changed

Lines changed: 89 additions & 69 deletions

File tree

basics/hello_world.tex

Lines changed: 71 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,89 @@
22

33
Die erste Lektion beschäftigt sich alleine mit der Frage, was eigentlich eine
44
Programmiersprache überhaupt ist und wie wir den Computer dazu bringen können,
5-
daraus etwas zu machen, was er ausführen kann. In guter alter
6-
Programmiertradition tun wir das an dem simpelsten aller Programme: Einem, was
7-
einfach nur ein „Hallo Welt!“ ausgibt.
8-
9-
Wie bringen wir also den Computer dazu, diese Ausgabe zu generieren? Dass er
10-
keine natürliche Sprache versteht, sollte klar sein -- intern besteht er aus
11-
lauter Transistoren (wenn ihr nicht wisst, was das ist, denkt an winzige
12-
Schalter), die nur die Zustände „an“ und „aus“ kennen, wir müssen also die
13-
Anweisung „gebe Hallo Welt aus“ in ein Format übersetzen, was nur „an“ und
14-
„aus“ benutzt.
15-
16-
Früher wurde genau dies benutzt - meistens über Lochkarten, die vom Computer
17-
gelesen wurden, „ein Loch“ war dann zum Beispiel ein „an“ und „kein Loch“ war
18-
„aus“, so wurde dann das Programm in Reihen angeordnet und jede Reihe entsprach
19-
einem Befehl oder einem Parameter für diesen Befehl. Dieses Format nennt sich
20-
„Maschinensprache“ und ist immer noch das, was wir heute dem Computer
21-
übergeben, nur, dass wir keine Lochkarten mehr benutzen, sondern Dateien, in
22-
denen lange Ströme von codierten 0en und 1en stehen.
23-
24-
Nun kann man sich vorstellen, dass es ganz schön anstrengend ist, ein
25-
umfangreiches Programm in 0en und 1en zu beschreiben. Deswegen benutzt man
5+
daraus etwas zu machen, was er ausführen kann.
6+
Traditionell wird hierfür ein Programm herangezogen, das „Hallo Welt!“ ausgibt. \\
7+
8+
9+
\textbf{Wie entsteht ein Programm?}
10+
11+
Wie bringen wir also den Computer dazu, diese Ausgabe zu generieren? - intern besteht er aus
12+
vielen Transistoren (wenn ihr nicht wisst, was das ist, denkt an winzige
13+
Schalter - näheres folgt im späteren Studium), die nur die Zustände „an“ und „aus“ kennen.
14+
Wir müssen also die Anweisung „gebe Hallo Welt aus“ in ein Format übersetzen, was nur „an“ und
15+
„aus“ bzw. „0“ und „1“ benutzt.
16+
17+
Nun ist es umständlich, ein umfangreiches Programm in 0en und 1en zu schreiben. Deswegen benutzt man
2618
heutzutage so genannte Hochsprachen, um Programme zu beschreiben. Wir
2719
beschreiben also den Programmablauf in einer von Menschen lesbaren und
28-
verstehbaren Sprache -- wir benutzen hier \Cpp. Die Programmbeschreibung in
29-
\Cpp legen wir dabei in einer Textdatei ab, meistens hat diese die Endung
30-
\texttt{.cpp}.
20+
(leicht) verstehbaren Sprache, welche später in 0en und 1en übersetzt wird und anschließend vom Computer lesbar ist und ausgeführt werden kann.
21+
Wir benutzen die Hochsprache \Cpp. Die Programmbeschreibung in
22+
\Cpp legen wir dabei in einer einfachen Textdatei ab. Damit wir auf anhieb erkennen, um welche Hochsprache es sich handelt, hat es sich etabliert die Endung
23+
\texttt{.cpp} an den Dateinamen anzuhängen.
3124

32-
Diese Beschreibung des Programms übergeben wir dann an einen \emph{Compiler},
33-
der daraus dann Maschinencode generiert, den wir wiederum dem Computer zur
34-
Ausführung geben können. Der Compiler für \Cpp, den wir in diesem Kurs
25+
Die Übersetzung aus der von Menschen lesbarer Hochsprache in Maschinensprache erledigt für uns der \emph{Compiler}.
26+
Der Compiler generiert aus der Textdatei also Maschinencode generiert. Der Compiler für \Cpp, den wir in diesem Kurs
3527
benutzen wollen, heißt \texttt{g++}.
3628

37-
Dem Compiler übergeben wir die zu kompilierende Datei als Parameter, indem wir
38-
sie im Terminal dahinter schreiben:
39-
\begin{center}
40-
\texttt{g++ zuKompilierendeDatei.cpp}
41-
\end{center}
42-
Wir können zusätzlich den Namen der Ausgabedatei festlegen, indem wir vor diese
43-
ein \texttt{-o} (o für output) schreiben:
29+
Vereinfacht sieht der Prozess zur Programmerstellung also wie folgt aus:
30+
31+
\begin{tikzpicture}
32+
\node (1) at (0,0) [rectangle, draw] {Programmcode schreiben (Hochsprache)};
33+
\node (2) at (6,0) [rectangle, draw] {Compilieren};
34+
\node (3) at (9,0) [rectangle, draw] {Ausführen};
35+
\draw[->, blue!50, very thick] (1) to (2);
36+
\draw[->, blue!50, very thick] (2) to (3);
37+
\end{tikzpicture} \\
38+
39+
\textbf{Wie gehe ich dabei vor?}
40+
41+
Um den Programmcode in 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+
46+
Um dem Compiler zusagen, welche Textdatei er in ein Programm übersetzen soll, verwenden wird die sogenannte Shell. Vorerst reicht uns zu Wissen, dass die Shell
47+
ein Werkzeug ist, dem Computer spezifisch zusagen, was er machen soll (mehr dazu im Folgenden Kapitel). In Ubuntu verwenden wir hierzu das Terminal, ebenso in MacOS,
48+
unter Windows CMD oder Powershell. Die Befehle für \texttt{g++} (dem Compiler für \Cpp) sehen beispielsweise wie folgt aus.
49+
4450
\begin{center}
4551
\texttt{g++ -o outputDatei zuKompilierendeDatei.cpp}
4652
\end{center}
53+
Hierbei legen wir mit dem Parameter \texttt{-o} (o für output) und dem ersten darauf folgenden Argument den Namen der Ausgabedatei fest.
4754

48-
Nachdem \texttt{g++} uns also ein Maschinencodefile \texttt{outputDatei}
49-
erzeugt hat, können wir es zur Ausführung bringen. Wir tun das, indem wir in
50-
einem Terminal
55+
Nachdem \texttt{g++} uns also ein Maschinencodefile -- die \texttt{outputDatei} --
56+
erzeugt hat, können wir es zur Ausführung bringen. Die kann im Terminal mit einem Punkt und einem Slash vor dem Dateinamen geschehen. Also:
5157
\begin{center}
5258
\texttt{./outputDatei}
5359
\end{center}
54-
eingeben, also einen Punkt, ein Slash und dann den Dateinamen.
60+
61+
62+
63+
\begin{praxis}
64+
65+
\textbf{Erstes Programm in \Cpp schreiben}
66+
67+
\begin{enumerate}
68+
\item Öffne einen Texteditor (In Ubuntu unter „Zubehör“ den Editor gedit).
69+
70+
\item Kopiere folgenden Programmcode in den Texteditor und speichere ihn in einer Datei mit dem Namen „helloworld.cpp“ ab.
71+
Ein näheres Verständnis, des Programmcodes ist an dieser Stelle nicht notwendig.
72+
\end{enumerate}
73+
74+
\inputcpp{helloworld.cpp}
75+
76+
\textbf{\Cpp-Code komplieren und Programm erstellen }
77+
78+
\begin{enumerate}
79+
\item Öffne ein Terminal (Konsole), ihr findet sie unter Ubuntu oben links unter „Applications“ als „Terminal Emulator“ oder mittig unten als das zweite Symbol von links.
80+
\item Wechselt mit \textit{cd [PFAD]} in das Verzeichnis (Ordner), indem ihr eure Textdatei erstellt habt. Was dieser Befehl genau tut und wie er funktioniert, erfahrt ihr in Lektion 2.
81+
\item In diesem Verzeichnis liegt nun eine Datei mit dem Namen \texttt{helloworld.cpp}.
82+
Benutzt \texttt{g++}, um diese zu einer Datei \texttt{hello} zu
83+
kompilieren. Orientiert euch dazu an den folgenden Befehlen.
84+
\item Führt die Datei \texttt{hello} aus.
85+
\end{enumerate}
86+
\end{praxis}
87+
5588

5689
Zur besseren Übersichtlichkeit hier der ganze Vorgang noch mal in einem
5790
Diagramm:
@@ -69,20 +102,6 @@
69102
}
70103
\end{center}
71104

72-
\begin{praxis}
73-
\begin{enumerate}
74-
\item Öffnet ein Terminal (Konsole), ihr findet dies oben links unter „Applications“ als „Terminal Emulator“ oder mittig unten als das zweite Symbol von links.
75-
\item Wechselt in das Verzeichnis \texttt{vorkurs/lektion01}, indem ihr
76-
\texttt{cd vorkurs/lektion01}\footnote{was dieser Befehl genau tut und wie er funktioniert, erfahrt ihr in Lektion 2} eingebt und enter drückt.
77-
\item In diesem Verzeichnis liegt eine Datei \texttt{helloworld.cpp}.
78-
Benutzt \texttt{g++}, um diese zu einer Datei \texttt{hello} zu
79-
kompilieren. Orientiert euch dazu an den Befehlen von oben.
80-
\item Führt die Datei \texttt{hello} aus.
81-
\end{enumerate}
82-
\end{praxis}
83-
84-
\inputcpp{helloworld.cpp}
85-
86105
\begin{spiel}
87106

88107
Ihr könnt nun versuchen, den Quellcode selbst zu verändern und damit ein wenig

vorkurs.tex

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -79,43 +79,44 @@ \chapter*{Vorwort}
7979
wissen, wie man eine Fehlermeldung liest, wo man bei Wissenslücken nachschauen
8080
kann und wen man fragen kann, wenn man mal nicht weiter weiß.
8181

82-
Um diese Ziele zu erreichen, haben wir den Kurs aufgeteilt in viele kleine
83-
Lektionen. Jede Lektion stellt im Wesentlichen eine abgeschlossene Einheit da,
82+
Um diese Ziele zu erreichen, haben wir den Kurs in kleine
83+
Lektionen aufgeteilt. Jede Lektion stellt im Wesentlichen eine abgeschlossene Einheit dar,
8484
die eigenständig (mit bedarfsorientierter Hilfestellung) bearbeitet werden
8585
sollen. Primär geht es dabei nicht um den dargestellten Inhalt, sondern darum,
8686
mit diesem herumzuspielen und selbst die Spezialfälle zu entdecken.
8787
Insbesondere solltet ihr die Lektionen also \emph{nicht} unter künstlichem
88-
Zeitdruck bearbeiten, das Ziel ist nicht, jede Lektion bearbeitet zu haben,
88+
Zeitdruck bearbeiten. Das Ziel ist nicht, jede Lektion bearbeitet zu haben,
8989
sondern jede Lektion entdeckt zu haben. Selbstverantwortliches Lernen ist
90-
tragender Gedanke des Kurses und sollte entsprechend ernst genommen werden;
91-
entscheidet selbst, wie viel Zeit ihr in welche Lektionen stecken wollt.
90+
tragender Gedanke dieses Kurses und sollte entsprechend ernst genommen werden.
91+
Entscheidet selbst, wie viel Zeit ihr in welche Lektionen stecken wollt.
9292

93-
Jede Lektion gliedert sich wiederum in drei Teile:
93+
Jede Lektion gliedert sich in drei Teile:
9494
\begin{enumerate}
95-
\item Ein theoretischer, in dem ein Unterbau für die Lektion gegeben werden
95+
\item Theorieteil: in dem ein Unterbau für die Lektion gegeben werden
9696
soll. Ein tiefes Verständnis sollte für die Bearbeitung der Lektion
97-
nicht notwendig sein, es geht mehr darum, dass sich ein grober
97+
nicht notwendig sein. Es geht mehr darum, dass sich ein grober
9898
Wiedererkennungseffekt einstellt, wenn die theoretischen Kenntnisse im
9999
nächsten Teil vertieft werden.
100100

101101
Wenn du einen eher passiven Lernstil pflegst, kannst du dir hier auch
102102
einen Tutor zur Seite stellen lassen, der dich kurz in das Thema
103103
einführt.
104-
\item Dem Theorieteil schließt sich der Praxisteil an.
105-
Hier soll selbstständig das eben hoffentlich oberflächlich verstandene
104+
105+
\item Praxisteil:
106+
Hier sollen selbstständig die im Theorieteil vermittelten Inhalte
106107
in einer kurzen Fingerübung angewendet werden.
107108

108109
Bei Fragen kann man aber natürlich auch hier einen Tutor zu Rate
109110
ziehen.
110-
\item Zuletzt steht dann ein Spielteil. Hier soll mit das Gelernte vertieft und bespielt werden.
111-
Tiefer gehende Informationen werden vermittelt und Möglichkeiten, mit
112-
dem Code zu interagieren aufgezeigt.
113111

114-
Von diesem Teil sollte man sich am Wenigsten aufhalten, verunsichern
115-
oder deprimieren lassen.
112+
\item Spielteil: Hier kann das Gelernte vertieft werden.
113+
Es werden tiefergehende Informationen vermittelt. Darüberhinaus weitere Möglichkeiten, mit
114+
dem Code zu interagieren, aufgezeigt.
115+
116+
Von diesem Teil sollte man sich am Wenigsten aufhalten und auch nicht verunsichern lassen.
116117
\end{enumerate}
117118

118-
Als Sprache für den Kurs haben wir \Cpp gewählt. Diese Sprache stellt
119+
Als Programmiersprache für den Kurs haben wir \Cpp gewählt. Diese Sprache stellt
119120
vergleichsweise hohe Anforderungen an Anfänger, da sie relativ maschinennah
120121
ist, nicht „garbage-collected“ ist (was auch immer das heißen mag) und
121122
high-level Konstrukte wie Listen oder Hashtables keine Repräsentation in der
@@ -125,7 +126,7 @@ \chapter*{Vorwort}
125126
Der Grund, aus dem wir trotzdem \Cpp gewählt haben, ist, dass in den
126127
Anfängervorlesungen der Universität Heidelberg \Cpp verwendet wird und wir euch
127128
die Verwirrung ersparen wollen, direkt zu Beginn des Lernprozesses mit zwei
128-
verschiedenen Sprachen konfrontiert zu werden. Ausserdem gibt es uns
129+
verschiedenen Sprachen konfrontiert zu werden. Außerdem gibt es uns
129130
Gelegenheit, direkt wichtige Sprachidiome einzuführen, den Aufprall des ersten
130131
Kontaktes abzufedern und durch Demonstration sprachspezifischer Hilfswerkzeuge
131132
(wie zum Beispiel dem gdb) zu verhindern, dass ihr bei typischen Problemen der

0 commit comments

Comments
 (0)