Einführung in Jupyter

In diesem Praktikum wird Jupyter verwendet, um Ihnen die grundlegende Funktionsweise von C++ näher zu bringen. Weder das Beschäftigen mit den Jupyter-Dateien, noch die Bearbeitung der Aufgaben in den Jupyter-Dateien ist verpflichtend. Ziel der Jupyter-Dateien ist es, Ihnen die Sprache C++ näher zu bringen, falls Sie bis jetzt wenig oder gar keine Erfahrung mit C++ haben.

Die Funktionsweise von Jupyter unterscheidet sich an einigen Stellen recht stark von dedizierten Entwicklungsumgebungen, die meistens einen deutlich größeren Funktionsumfang zur Fehlerbehebung und Organisation umfangreicher Softwareprojekte aufweisen. Für die hier vorgestellten Beispiele ist dieser allerdings nicht unbedingt notwendig; darüberhinaus entfällt so anfangs die individuelle Installation und Konfiguration, bei der sich erfahrungsgemäß häufig Probleme ergeben können. Jupyter kann von Ihnen einfach im Browser verwendet werden, wobei eine Instanz auf den Servern der RWTH läuft. Es ist ebenfalls möglich, Jupyter lokal zu installieren, was für die Bearbeitung dieses Praktikums aber nicht notwendig ist. Im folgenden soll Ihnen ein kurzer Überblick darüber gegeben werden, wie Sie mit Jupyter arbeiten können.

Sollten Sie bereits eine funktionierende Installation von Visual Studio oder einer anderen C++ Entwicklungsumgebung haben, ist es natürlich ebenfalls möglich, die Übungsaufgaben darin zu lösen.

Zellen

In Jupyter-Notebooks wird Text und Code in Zellen aufgeteilt. Diese sind prinzipiell frei verschiebbar und können auch kopiert oder gelöscht werden, jedoch sind Reihenfolge und Anzahl in den folgenden Notebooks aus naheliegenden Gründen bereits passend gewählt und müssen im Allgemeinen nicht von Ihnen verändert werden. Zellen können (mit Markdown formatierten) Text oder Code beinhalten. Die Auswahl geschieht je Zelle über ein Dropdown-Menü in der Toolbar.

New View for Notebook Ergebnis
       
// Beispiel: Führen Sie diese Zelle aus!

#include <iostream>

std::cout << "Hello World" << std::endl;

Kernel

Hin und wieder kann es notwenig sein, den Kernel neu zu starten (-Button). Dies ist vor allem dann erforderlich, wenn Code in einer falschen Reihenfolge ausgeführt wird. Da Jupyter dazu ermuntert, Zellen nicht nur linear von oben nach unten auszuführen, kann dies häufiger auftreten.

Operatorenüberladung

In dem verwendeten Kernel gibt es in Zusammenhang mit der Operatorenüberladung einen Fehler. Daher ist in Jupyter-Dateien ein zusätzlicher Schritt notwendig:

std::ostream & operator<<(std::ostream& out, const Train& train)
{
    train.vPrintProperties(out);
    return out;
}
#define OPERATOR operator<<

std::ostream & OPERATOR(std::ostream& out, const Train& train)
{
    train.vPrintProperties(out);
    return out;
}

#undef OPERATOR

Hier wird also temporär eine Präprozessorkonstante definiert, die in der folgenden Funktionsdefinition verwendet werden kann. Für die Verwendung des auf diese Weise überladenen Operators ergeben sich keinerlei Unterschiede.

Shortcuts

Folgende Tastenkombinationen können beim Arbeiten mit Jupyter hilfreich sein: