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 ...
Abb. 1:
Processing starten
.. und tippen Sie dann in den Editor bitte folgendes ein:
println("Hello World");
Abb. 2: Unsere
erste Sketch
Durch Drücken auf den Start-Button
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.
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:
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:
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:
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.
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:
-
Ändern Sie 'A' in 'Z'.
-
Ändern Sie 'Z' in 'AA'. Nun gibt es ein Problem. Was könnte
die Ursache hierfür sein?
-
Ändern Sie 'AA' in '˽' (˽ steht für ein Leerzeichen). Hier
gibt es kein Problem. Warum?
- Ändern Sie '˽' in ''.
- Hinweis: Es befindet sich KEIN Zeichen zwischen den beiden
Hochkommata.
- Nun geht es wieder nicht. Warum?
- Ä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));
- Führen Sie das Programm aus.
- Entfernen Sie dann eine der Variableninitialisierungen, z.
B. die Zeichen
= 40 für die Variable gearbeiteteStunden.
Wird das Problem von der Entwicklungsumgebung erkannt? Kann
das Programm ausgeführt werden?
- Im Programm werden die Variablen definiert. Modifizieren Sie
das Programm in der Weise, dass die Variablen deklariert und -
getrennt davon - initialisiert werden. Führen Sie danach das
Programm wieder aus und betrachten Sie die Ausgabe.
- Nun wollen wir einen Fehler produzieren. Entfernen Sie eine
der Deklarationen. Kann das Programm noch kompiliert werden?
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:
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:
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:
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:
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:
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:
- Ein Dollar passt in 163 Cent, Rest 63 Cent.
- Zwei Quarter passen in 63 Cent, Rest 13 Cent.
- Ein Dime passt in 13 Cent, Rest 3 Cent.
- Es wird kein Nickel gebraucht.
- Drei Cent bleiben übrig.
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:
Kommentar