Aufgaben Notebook 1
Contents
Aufgaben Notebook 1#
Für die ersten Termine des Kurses nutzen wir jupyter-Notebooks, um C++ als interpretierten Code direkt im Browser laufen zu lassen. Dadurch entfallen natürlich die Optimierungsvorteile von C++ durch Kompilierung etc. Dies erlaubt aber so einen schnellen einfachen Einstieg. Die Umsetzung erfolgt über Xeus-Cling und wir nutzen hierbei für diese allgemeinen Features einfach den C++17 Standard.
Wichtig: Es gibt zwei Dinge, die zusätzlich dabei zu beachten sind:
Interpretieren eines Codeblocks im Notebook:
Shift
+Enter
gleichzeitig drückenDie
main
-Methode muss explizit aufgerufen werden.
Dies Notebook kann auf dem JupyterHub der Universität direkt gestartet werden unter diesem link – dabei muss das “Software Development” Image (3.0.1) ausgewählt werden.
Jupyter notebooks#
Was sind Jupyter-Notebooks? Im Grunde ist die Verwendung von Jupyter-Notebooks vergleichbar mit der Verwendung eines Webbrowsers als eine Art Editor, mit dem sie Code direkt ausführen können. Wie bei jedem Editor wird der Code in Jupyter-Notebooks von C++ (oder meist Python) auf Ihrem Computer (oder auf einem entfernten Server) interpretiert und ausgeführt, und die Ergebnisse werden zur Anzeige zurückgegeben.
So ermöglichen Notebooks, dass Code-“Zellen” und Text-“Zellen” (wie diese hier) miteinander gemischt werden können. Die (gedruckten) Ausgaben von Codeblöcken werden direkt unter den Codeblöcken selbst angezeigt.
Jupyter-Notebooks haben zwei Modi: den Bearbeitungsmodus und den Befehlsmodus.
Der Befehlsmodus wird durch einen grauen Zellenrand mit einem blauen linken Rand angezeigt: Im Befehlsmodus können Sie das Notebook als Ganzes bearbeiten, aber nicht in einzelne Zellen tippen. Entscheidend im Befehlsmodus: über Shortcuts können sie das Notebook direkt ausführen und effizient Aktionen anwenden. Über Esc gelangen sie in den Modus oder wenn sie mit der Maus ausserhalb einer Zelle klicken.
Der Bearbeitungsmodus wird durch einen grünen Zellrand und eine Eingabeaufforderung im Editorbereich angezeigt: Wenn sich eine Zelle im Bearbeitungsmodus befindet, können sie wie in einem normalen Texteditor in die Zelle schreiben. Sie können den Bearbeitungsmodus aktivieren, indem Sie die Eingabetaste drücken oder mit der Maus auf den Editorbereich einer Zelle doppelklicken.
Wenn sie die Tutorials lesen und durchblättern, werden sie sich meistens im Befehlsmodus befinden. Sobald sie aber selbst etwas programmieren (oder schreiben) müssen, müssen Sie in den Bearbeitungsmodus wechseln. Zunächst werden wir etwas über die beiden Arten von Zellen erklären: Codezellen und Textzellen.
Code-Zellen#
Codezellen sind der Platz, an dem sie Ihren Code schreiben können. Im Gegensatz zu interaktiven Editoren wie RStudio und MATLAB kann eine Codezelle in Jupyter-Notebooks nur auf einmal ausgeführt werden. Das bedeutet, dass sie sie nicht Zeile für Zeile ausführen können, sondern dass sie die gesamte Zelle ausführen müssen!
Zellen ausführen#
Als Beispiel: Unten sehen sie eine Code-Zelle mit mit einer Ausgabe-Anweisung. Um die Zelle auszuführen, markieren sie diese (d.h. die Zelle sollte einen grünen oder blauen Rahmen haben; es spielt keine Rolle, ob Sie sich im Bearbeitungs- oder im Befehlsmodus befinden), und klicken Sie auf das “▶ Ausführen”-Symbol oder drücken Sie ctr+Enter
). Probieren sie dies mit den nächsten beiden Zellen unten! Für C++ muss hier jeweils noch explizit die main
Methode aufgerufen werden, da C++ an sich nicht eine interpretierte Sprache ist.
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
// In addition, we have to explicitly call the main() function instead of executing the program.
main();
// It is important that you compute these two cells in the correct order!
Hello World!
0
Ausführung von Zellen stoppen#
Wenn sie die Ausführung einer Code-Zelle beenden wollen, weil sie zu lange dauert (oder schlimmer noch, sie haben eine Endlosschleife erzeugt!): Klicken Sie dazu auf das Stop-Symbol ■ im oberen Menü!
Neustart des Kernels#
Manchmal stürzt ein Notebook ab, z. B. wenn eine Endlosschleife entsteht oder wenn zu viele Daten geladen werden. Sie wissen, dass Ihr Notebook ‘abgestürzt’ ist, wenn das Anhalten der Zelle (■) nicht funktioniert und Ihre Zelle ihre Ausführung fortsetzt, was durch die Eingabeaufforderung In [*]:
neben der Zelle angezeigt wird. In solchen Fällen müssen Sie das Notebook komplett neu starten (Sie müssen den “Kernel neu starten”). Dazu klicken Sie auf Kernel
und Neustart
.
Wichtig ist, dass beim Neustart des Kernels der gesamte Text/Code, den Sie geschrieben haben, erhalten bleibt, aber er merkt sich nicht alle Variablen, die Sie vor dem Neustart des Kernels definiert haben.
Zellen einfügen#
Wie oben gesehen, können Sie nur die gesamte Zelle ausführen. Manchmal möchten Sie natürlich den Code über mehrere Zellen hinweg organisieren. Dazu können Sie einfach neue Blöcke (Zellen) einfügen, indem Sie in der Symbolleiste “Einfügen → Zelle darunter einfügen” wählen (oder das Tastenkürzel verwenden, indem Sie im Befehlsmodus die Taste “B” drücken; “B” steht für “bunten”). Dadurch wird eine neue Codezelle unterhalb der markierten Zelle eingefügt (die markierte Zelle ist mit einem blauen Rahmen umgeben).
Hilfe zu C++#
Sie können direkt in Codezellen auch auf die Referenz für die Standard-Library zu C++ zugreifen, in dem sie einfach ein Fragezeichen gefolgt von dem entsprechenden Begriff angeben:
?std::vector
schlägt in der Referenz zu vector
nach (dies dauert ein paar Sekunden).