<jupyter_start><jupyter_text>Einführung in Jupyter notebooks <NAME>, Departement Mathematik und Informatik, Universität Basel In diesem Notebook geben wir eine kleine Einführung in Jupyter Notebooks und zeigen wie man einfache Java Programme schreibt. Ausserdem führen wir Turtlegrafik ein, die wir während dem Kurs immer wieder verwenden werden um Programmierkonzepte zu illustrieren.   Einfache Java Programme in Jupyter Notebooks Jupyter Notebooks sind im Dokumente, die neben Text auch Programmcode enthalten. aus einer Sequenz von einzelnen Zellen bestehen. Die aktuelle Zelle erkennt man jeweils daran, dass diese umrahmt ist. Jede Zelle ist entweder eine Textzelle oder eine Code Zelle. Codezellen erkennt man dadurch, dass diese mit ```In [..]``` gekennzeichnet sind. Codezellen enthalten ausführbaren Java Code und können durch drücken von ```Shift+Enter``` ausgeführt werden. Die folgenden zwei Zellen sind Codezellen und können ausgeführt werden.<jupyter_code>int a = 5 + 3;
System.out.println(a);
System.out.println("Willkommen zu Grundlagen der Programmierung");<jupyter_output>Willkommen zu Grundlagen der Programmierung<jupyter_text>Mini-Übung:* Führen Sie die obigen 2 Codezellen aus.   Turtlegrafik Wir werden in diesem Kurs häufig Turtle Grafik einsetzen um Konzepte zu illustrieren. Man kann sich vorstellen, dass eine Stifttragende Schildkröte sich auf einer Zeichnungsebene bewegt, und dabei eine Zeichnung erstellt. Die Bewegungen der Schildkröte folgen genau unseren Befehlen. Damit wir Turtlegrafik nutzen können, müssen wir zuerst eine Programmbibliothek in Jupyter laden:<jupyter_code>%mavenRepo shapemodelling-repo https://shapemodelling.cs.unibas.ch/repo/
%maven ch.unibas.informatik:jturtle:0.6
import static ch.unibas.informatik.jturtle.TurtleCommands.*<jupyter_output><empty_output><jupyter_text>Danach können wir die Schildkröte mit Java-Befehlen steuern:<jupyter_code>clear();
home();
penDown();
forward(100);
turnRight(120);
forward(100);
turnRight(120);
forward(100);

display(drawing());<jupyter_output><empty_output><jupyter_text>Die Prinzipien von Turtlegrafik sind sehr einfach zu verstehen. Turtle wurde ursprünglich auch dazu entwickelt, Kindern das Programmieren beizubringen. Mithilfe von Turtlegrafik können jedoch auch sehr komplexe und abstrakte Konzepte graphisch illustriert werden. Das folgende Programm ist ein Beispiel für ein komplexes Programm. Es illustriert auch eine wichtige Eigenschaft des Programmierens, nämlich dass wir weniger einfacher Befehle sehr komplexe Verhaltensweisen erreichen können. *Zu diesem Zeitpunkt können und müssen Sie das Programm noch nicht verstehen. Bis wir alle Konzepte eingeführt haben, die in diesem Programm vorkommen, dauert es ungefähr 6 Wochen. Führen Sie das Programm jedoch einfach mal aus, indem Sie die folgenden 2 Zellen ausführen.*<jupyter_code>import java.util.Random;
class RandomTree {
    
    static Random random = new Random();
    
    static void randomTree(double length, double minLength, int thickness, int minThickness, double minAngle, double maxAngle, double minShrink, double maxShrink) {
        if (length < minLength || thickness < minThickness) {
            return;
        } else {
            double angle1 = minAngle + random.nextDouble() * (maxAngle - minAngle);
             double angle2 = minAngle + random.nextDouble() * (maxAngle - minAngle);
             double shrink1 = minShrink + random.nextDouble() * (maxShrink - minShrink);
             double shrink2 = minShrink + random.nextDouble() * (maxShrink - minShrink);
             penSize(thickness);
             forward(length);
             turnRight(angle1);
             randomTree(length*shrink1, minLength, (int) (thickness * shrink1),  minThickness, minAngle, maxAngle, minShrink, maxShrink);
             turnLeft(angle1 + angle2);         
             randomTree(length*shrink2, minLength, (int) (thickness * shrink2), minThickness, minAngle, maxAngle, minShrink, maxShrink);
             turnRight(angle2);
             penSize(thickness);
             backward(length);
        }
    }
    
    static void drawTree(double length, double minLength, int thickness, int minThickness, double minAngle, double maxAngle, double minShrink, double maxShrink) {
        clear();
        reset();
        penUp();
        turnRight(180);
        forward(100);
        turnRight(180);
        penColor(java.awt.Color.BLACK);
        penDown();
        RandomTree.randomTree(length, minLength, thickness, minThickness, minAngle, maxAngle, minShrink, maxShrink);
        display(drawing());
    }
};
RandomTree.drawTree(20, 2, 12, 1, 10, 30, 0.75, 1.0);<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07566988210075026, 'fraction_numerical': 0.012433011789924973, 'mean_word_length': 4.272316384180791, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 17, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '652996', 'license': 'Unlicense', 'n_tokens_mistral': 1505, 'n_tokens_neox': 1483, 'n_words': 453, 'path': 'JupyterEinfuehrung.ipynb', 'repo_name': 'marcelluethi/ijava-binder', 'size': '4671'}