Einführung in die Programmierung mit Processing

Aufgabe 1: "Hello World" Sketch

Im Rahmen dieses Übungsblatts werden wir zunächst ein einfaches Programm "Hello World" erstellen, das nur diese Meldung ausgibt und danach terminiert, d. h. beendet wird.
Der Begriff »Hello World!« markiert für viele Entwickler den Start ihres Lernprozesses beim Programmieren. Das »Hallo Welt!«-Programm wurde erstmals im Lernbuch für die Programmiersprache C der Bell Laboratories "Programming in C – A Tutorial" (Autor Brian Kernighan im Jahr 1974) verwendet.

Die Programmentwicklung in Processing findet in einer integrierten Programmentwicklungsumgebungen statt (engl.: integrated development environment oder kurz: IDE). Neben einem Editor, d. h. einem Textverarbeitungsprogramm für das Eingeben des Programm- bzw. Quellcodes (engl. source code) eines Programms, umfasst diese alle Werkzeuge, um den Quellcode in ein ausführbares Programm zu übersetzen und um dieses schließlich auszuführen.

Starten Sie zunächst bitte Processing ...

Processing starten
Abb. 1: Processing starten

.. und tippen Sie dann in den Editor bitte folgendes ein:

println("Hello World");
Erstes Sketch
Abb. 2: Unsere erste Sketch

Durch Drücken auf den Start-Button Bild
          des Start Buttons können Sie das Programm ausführen. Hierfür wird es von der IDE in ausführbaren Maschinencode übersetzt. Der im Programm enthaltene Befehl println gibt die angegebene Zeichenkette "Hello World" in das Konsolenfenster bzw. einfach "auf die Konsole" aus. Dieser Begriff kommt von den frühesten Computern, bei denen die Benutzer nur über eine einfache Tastatur-Monitor-Kombination - die sogenannte "Konsole" - an einen Zentralrechner angeschlossen waren und mit diesem arbeiteten.

Wir haben damit unser erstes Programm (in Processing nennt man das Sketch ("Skizze")) erstellt und ausgeführt.

Während Sie Inhalte eingeben, startet die IDE regelmäßig im Hintergrund den Übersetzungsvorgang, bei dem der Dateiinhalt zu ausführbarem Programmcode übersetzt wird. Dieser Vorgang wird als Kompilieren (engl.: compile) bezeichnet. Das Kompilieren der Programmdatei in ausführbaren Programmcode geschieht bei Processing also im Hintergrund, ohne dass hierfür ein bestimmter Knopf zu drücken wäre.

Solange Ihr Programm grammatikalische Fehler oder Schreibfehler enthält, d. h. Fehler der Syntax, signalisiert dies die IDE, indem sie die betreffenden Zeilen, wie in der Abbildung unten, rot unterkringelt und darunter eine rot markierte Fehlerbeschreibung ausgibt. In der Abbildung unten wurde z. B. das Wort println falsch geschrieben. Die IDE signalisiert mit diesem Fehler ebenfalls, dass das Programm nicht übersetzt und damit auch nicht ausgeführt werden kann. In Zukunft müssen Sie also solange den Programmcode überarbeiten, bis die IDE keine Fehler mehr anzeigt. Erst dann wird das Programm übersetzt und kann schließlich auch ausgeführt werden.

Screenshot einer Fehlermeldung
Abb. 3: Fehlermeldung

Neben der Möglichkeit einfache Textausgaben auf die Konsole durchzuführen, bietet Processing als multimediales Werkzeug auch vielfältige Möglichkeiten zu grafischen Ausgaben bis hin zu Animationen. Diese Themen werden wir erst später behandeln, wenn wir thematisch so weit sind. Für die anstehenden Übungen reichen uns vorerst einfache Textausgaben "auf die Konsole".

Um die Sketch schließlich abzuspeichern wählen Sie Datei > Speichern. Als Name können Sie z. B. "Uebungsblatt1" wählen. Unter macOS und Windows legen Sie Ihre Sketch-Dateien dieses Kurses am besten alle in einen Ordner unter

/Benutzer/Dokumente/Processing

Processing erstellt für jede neue Sketch automatisch einen Unterordner. Im weiteren Verlauf der Vorlesung, werden wir Processing noch um Libraries und sogenannte Tools erweitern, die ebenfalls in einem Unterordner "Libraries" bzw. "Tools" dieses Verzeichnisses gespeichert werden bzw. dort auch gesucht werden können.


Aufgabe 2: Zahlen in Variablen speichern und ausgeben

In den Vorlesungsfolien (Seite 51) haben wir die Ausgabe des Beispielprogramms ebenfalls mit einer Textausgabe über die Konsole realisiert. Versuchen wir nun das ganze praktisch umzusetzen.
Verwenden Sie dafür den folgenden Code:

//Uebungsblatt 1

/*
//Aufgabe 1
println("Hello World");
*/

//Aufgabe 2
int hoursWorked = 40;
println("Hours Worked: " + hoursWorked);

In diesem ist der bereits vorhandene Programmcode in Kommentarzeichen gesetzt, um diesen zu deaktivieren. Man spricht in diesem Zusammenhang von "Auskommentieren". Darunter steht als neuer aktiver Code der Programmcode von der Folie.
Speichern Sie das Programm (Uebungsblatt1) und führen Sie es aus. Es sollte folgende Ausgabe im Konsolenfenster erscheinen:

aufgabe3
Abb. 4: Hours Worked: 40

Um in einem Programm Zahlenwerte zwischenspeichern zu können, werden Variablen benötigt. Hier dient die Variable hoursWorked dazu, den Wert 40 zwischenzuspeichern.

Definieren Sie nun in ihrer Sketch zwei weitere Variablen für den Stundenlohn ("hourly rate") und die Anzahl der Arbeitstage ("workdays"), sodass z. B. folgende Ausgabe erscheint, wenn der Stundenlohn 35 ist und die Anzahl der Arbeitstage gleich 5:

aufgabe3
Abb. 5: Ausgabe

Erweitern Sie ihre Sketch danach in der Weise, dass die Variablen für den Stundenlohn etc., nachdem ihr Wert auf die Konsole ausgegeben wurde, neue Werte zugewiesen bekommen. Danach geben Sie die Variablen erneut aus, sodass sich z. B. folgende Ausgabe ergibt:

aufgabe3
Abb. 6: Ausgabe

Zeilenwechsel innerhalb einer Ausgabe lassen sich auch durch Hinzufügen von \n am Ende der auszugebenden Zeichenkette auslösen.


Aufgabe 3: Wertebereiche von Datentypen

Kommentieren Sie den vorhandenen Code wieder aus und ergänzen Sie die Sketch durch die folgenden zwei Anweisungen:

//Aufgabe 3
short val = 32;
println("A value of data type short: " + val);

Wie sie sehen, verwenden wir pro Übungsblatt nur eine einzige Sketch. Die einzelnen Aufgabenlösungen kommentieren wir im Quellcode jeweils aus, wenn die betreffende Aufgabe fertig ist, um immer nur die aktuelle Aufgabe aktiv zu haben.

Führen Sie die Sketch wieder aus. In der Konsole sollte nun 32 erscheinen. Erhöhen Sie den Wert danach auf z. B. 1000 und wiederholen Sie das Ausführen. Es sollte immer noch alles wie gehabt funktionieren.

Probieren Sie danach den folgenden Wert: 35000. Nun wird es beim Kompilieren ein Problem geben und die Sketch wird nicht starten. Um eine Erläuterung zu dem Problem zu erhalten, schauen wir uns unten wieder die Fehlermeldung an. Für Fehlermeldungen gibt es zusätzlich einen Reiter "Fehler", der aktiviert werden kann und gegebenenfalls weitere Informationen zu den aktuellen Fehlern anzeigt.

aufgabe4
Abb. 7: Fehlermeldung

Wie lässt sich das Problem mit dem Fehler bei dem vorhandenen Zahlenwert lösen?

Diese Aufgabe war ein Beispiel für Aufgaben aus dem Online-Kurs von Bradley Kjell für die Programmiersprache Java. Die Aufgabe entstammte den Aufgaben zu Kapitel 8 des Kurses und entspricht dort inhaltlich Aufgabe 1. Da sich diese Aufgaben in adaptierter Form auch gut für das Lernen der Programmierung mit Processing eignen, werden wir im Rahmen dieser Veranstaltung - insbesondere zu Beginn - eine Anzahl der Aufgaben aus dem Online-Kurs bearbeiten.


Aufgabe 4: Schriftzeichen ausgeben

Hier eine weitere Aufgabe aus dem Kurs. Kommentieren Sie zuerst Aufgabe 3 aus und ergänzen Sie dann ihre Sketch zu Übungsblatt 1 (Uebungsblatt1.pde) um die folgenden zwei Befehle und führen diese aus:

//Aufgabe 4
char ch = 'A' ;
println("Ein Character: " + ch);

Führen Sie danach die folgenden Änderungen durch. Prüfen Sie nach jeder Änderung, ob das Programm erstellt und ausgeführt werden kann:

  1. Ändern Sie 'A' in 'Z'.

  2. Ändern Sie 'Z' in 'AA'. Nun gibt es ein Problem. Was könnte die Ursache hierfür sein?

  3. Ändern Sie 'AA' in '˽' (˽ steht für ein Leerzeichen). Hier gibt es kein Problem. Warum?

  4. Ändern Sie '˽' in ''.
  5. Ändern Sie '' in "A".

Aufgabe 5: Lohnprogramm

Fügen Sie Ihrem Programm folgenden Programmcode hinzu:

int gearbeiteteStunden = 40;
int stundenLohn = 10, steuerSatz = 10;
println("Arbeitszeit: " + gearbeiteteStunden);
println("Bruttolohn: " + (gearbeiteteStunden * stundenLohn));
println("Steuerbetrag: " + (gearbeiteteStunden * stundenLohn / steuerSatz));

Aufgabe 6: Wert einer Quadratgleichung

Erweitern Sie ihre vorhandene Sketch um Programmcode zur Berechnung der Quadratgleichung:

x2 - 7x + 10

Deklarieren Sie hierzu eine Variable x vom Typ int. Weisen Sie der Variablen einen Wert zu. Schreiben Sie eine Anweisung, die den Wert der Quadratgleichung berechnet und das Ergebnis in eine andere Variable vom Typ int schreibt. Lassen Sie das Ergebnis ausgeben, ungefähr in der Form:

aufgabe7

Der Aufbau der auszugebenden Zeichenkette ist wie folgt:

Teilzeichenkette + Variable + Teilzeichenkette + Variable

Mit Hilfe des + Operators können also beliebig komplexe Zeichenketten konstruiert werden.

Führen Sie das Programm für verschiedene Werte von x aus und betrachten Sie das Ergebnis. Verwenden Sie große und kleine Werte, negative Werte und Nullwerte.


Aufgabe 7: Erneute Wertzuweisung an eine Variable

Die Quadratgleichung ergibt bei x = 2 und bei x = 5 Null. Verändern Sie das Programm aus der vorigen Aufgabe, so dass es die verschiedenen Ergebnisse für die Werte 6, 2 und 5 von x während des gleichen Programmlaufs nacheinander berechnet und ausgibt.

Verwenden Sie für dieses Programm NUR zwei Variablen mit den Namen x und wert. Hieraus folgt, dass Sie den Variablen verschiedene Werte an verschiedenen Stellen des Programms zuweisen müssen.

Nutzen Sie beim Schreiben von Programmen die Kopieren- und Einfügen-Funktionen des Editors.


Aufgabe 8: Gläser verpacken

Gläser sollen in Kartons verpackt werden. Schreiben Sie ein Programm, das für eine gegebene Anzahl Gläser ausrechnet, wie viele Gläser übrig bleiben, wenn in jeden Karton 6 Gläser passen und dieses Ergebnis wie folgt ausgibt:

aufgabe3

Legen Sie für die Anzahl Gläser eine Variable an und initialisieren Sie diese mit einem Wert, z. B. dem Wert 44. Verwenden Sie Ganzzahl-Arithmetik und den Modulo-Operator. Ändern Sie den Wert der Variable für die Anzahl Gläser einige Male. Es werden immer mindestens 6 Gläser verpackt. Kompilieren Sie das Programm jeweils, führen Sie es aus und kontrollieren Sie das Ergebnis.

Es müssen keine Werte über die Programmoberfläche eingegeben werden. Das Eingeben von Werten werden wir erst später behandeln.


Aufgabe 9: Uhrzeit

Schreiben Sie ein Programm, das mit Hilfe des Modulo-Operators für eine gegebene Uhrzeit ausrechnet, wie spät es nach einer gegebenen Anzahl von Stunden sein wird und das Ergebnis wie folgt ausgibt:

aufgabe3

Verwenden Sie unterschiedliche Variablen für die Uhrzeiten und die Anzahl an Stunden. Es müssen nur ganzzahlige Werte für die Stunden berücksichtigt werden. Weisen Sie auch hier den Variablen für die Uhrzeit und die Anzahl an Stunden unterschiedliche Werte zu, kompilieren Sie das Programm jeweils, führen Sie es aus und kontrollieren Sie das Ergebnis.


Aufgabe 10: Cent zu Dollar

Schreiben Sie ein Programm, in dem eine int-Variable mit dem Namen cent deklariert wird. Initialisieren Sie die Variable z. B. mit dem Wert 384. Schreiben Sie dann Programmcode, der diesen Wert in Euro und Cent zerlegt und das Ergebnis wie folgt ausgibt:

aufgabe3

Verwenden Sie für dieses Programm Ganzzahl-Arithmetik. Schauen Sie sich ggf. noch einmal den Modulo-Operator an.


Aufgabe 11: Karussell

Ein Karussell besitzt eine gegebene Anzahl von Armen, auf denen jeweils eine Gondel montiert ist. In jeder Gondel finden eine gegebene Anzahl von Fahrgästen Platz. Schreiben Sie ein Programm, das für eine anstehende Karussellfahrt und eine gegebene Anzahl von Fahrgästen mit Hilfe des Modulo-Operators ausrechnet, wie viele Fahrgäste auf die nächste Fahrt warten müssen und das Ergebnis wie folgt ausgibt:

aufgabe3

Sie können davon ausgehen, dass die Karussellfahrt so begehrt ist, dass die Anzahl der Interessenten bzw. Fahrgäste immer größer gleich der Anzahl der Plätze im Karussell ist.


Aufgabe 12: Wechselgeld

Wenn Sie in einem amerikanischen Geschäft an der Kasse Ihr Wechselgeld bekommen, gibt Ihnen der Kassenmitarbeiter zuerst Dollar, dann Quarter (25 Cent), dann Dime (10 Cent), dann Nickel (5 Cent) und schließlich Cent zurück. 163 Cent teilen sich dabei z. B. wie folgt auf:

Ihr Wechselgeld ist dann also: 1 Dollar, 2 Quarter, 1 Dime, 0 Nickel, 3 Cent

Schreiben Sie ein Programm, das für einen in einer Variable gegebenen Cent-Wert die darin enthaltene Anzahl an Dollar, Quarter, Dime, Nickel und Cent ausgibt. Alle mathematischen Operationen sind ganzzahlig. Wenn Sie nicht mehr weiter wissen, hilft es oft, das Problem zunächst exemplarisch mit Papier und Stift anzugehen.

Programmausgabe:

aufgabe3

Kommentar