Programmieren trainieren - Luigi Lo Iacono - E-Book

Programmieren trainieren E-Book

Luigi Lo Iacono

0,0

Beschreibung

Der Programmier-Trainingsplan für alle, die weiter kommen wollen.

In diesem Übungsbuch trainierst du anhand von kurzweiligen und praxisnahen Aufgaben deine Programmierfähigkeiten. Jedes Kapitel beginnt mit einem kurzen Warmup zum behandelten Programmierkonzept; die Umsetzung übst du dann anhand von zahlreichen Workout-Aufgaben. Du startest mit einfachen Aufgaben und steigerst dich hin zu komplexeren Fragestellungen. Damit dir nicht langweilig wird, gibt es über 150 praxisnahe Übungen. So lernst du z. B. einen BMI-Rechner oder einen PIN-Generator zu programmieren oder wie du eine Zeitangabe mit einer analogen Uhr anzeigen kannst.

Solltest du mal nicht selbstständig vorankommen, dann werden dir in jedem Workout Lösungshinweise als Hilfestellung angeboten. Die kommentierten Lösungen liegen für Dich in den Programmiersprachen Java und Python in GitHub oder auf der Hanser-Plus-Seite zum Download bereit. Für ein möglichst ballastfreies Training wird für die elementaren Programmierkonzepte die Entwicklungsumgebung Processing eingesetzt. Für fortgeschrittenere Anwender wird auch der Einsatz von Eclipse und PyCharm gezeigt. Die Installation und Verwendung der Tools ist im Buch beschrieben.

Ihr exklusiver Vorteil: E-Book inside beim Kauf des gedruckten Buches

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 697

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Luigi Lo IaconoStephan WieflingMichael Schneider

Programmieren trainieren

Mit über 150 Workouts in Java und Python

3., überarbeitete Auflage

Ihr Plus – digitale Zusatzinhalte!

Auf unserem Download-Portal finden Sie zu diesem Titel kostenloses Zusatzmaterial.

Geben Sie auf plus.hanser-fachbuch.de einfach diesen Code ein:

plus-23nr4-W2umK

Die Autoren:Prof. Dr.-Ing. Luigi Lo Iacono, BonnStephan Wiefling, KölnMichael Schneider, Daaden

Alle in diesem Werk enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Werk enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.Ebenso wenig übernehmen Autoren und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt also auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.Die endgültige Entscheidung über die Eignung der Informationen für die vorgesehene Verwendung in einer bestimmten Anwendung liegt in der alleinigen Verantwortung des Nutzers.

Aus Gründen der besseren Lesbarkeit wird auf die gleichzeitige Verwendung der Sprachformen männlich, weiblich und divers (m/w/d) verzichtet. Sämtliche Personenbezeichnungen gelten gleichermaßen für alle Geschlechter.

Bibliografische Information der Deutschen Nationalbibliothek:Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Dieses Werk ist urheberrechtlich geschützt.Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) auch nicht für Zwecke der Unterrichtsgestaltung – mit Ausnahme der in den §§ 53, 54 URG genannten Sonderfälle –, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

© 2023 Carl Hanser Verlag München, http://www.hanser-fachbuch.deLektorat: Sylvia HasselbachCopy editing: Sandra Gottmann, WasserburgLayout: le-tex publishing services GmbHUmschlagdesign: Marc Müller-Bremer, www.rebranding.de, MünchenUmschlagrealisation und Titelmotiv: ©Max Kostopoulos

Print-ISBN:        978-3-446-47766-7E-Book-ISBN:   978-3-446-47821-3E-Pub-ISBN:     978-3-446-47999-9

Inhalt

Titelei

Impressum

Inhalt

Vorwort

Neues in der 3. Auflage

Danksagung

1 Einleitung

1.1 Wozu sollte ich programmieren lernen?

1.2 Wie kann mir dieses Buch dabei helfen?

1.3 Was muss ich mitbringen?

1.4 Wie geht das vonstatten?

1.5 Was muss ich sonst noch wissen?

1.6 Wie kann und sollte ich ChatGPT & Co verwenden?

2 Einführung in die Programmierung

2.1 Warm-up

2.2 Workout

W.2.1 Three-Two-One –Mein erstes Programm

W.2.2 Weihnachtsbaum

W.2.3 Haus

W.2.4 Perlenkette

W.2.5 Die erste Zeichnung

W.2.6 Nachteule

W.2.7 Daumen

W.2.8 Tasse(Neu)

W.2.9 Raupe Allzeitappetit

W.2.10 Klötzchen-Kunst

W.2.11 Ghettoblaster

W.2.12 Gesichtsmaske(Neu)

W.2.13 Hallo Bello!

3 Variablen, Datentypen, Operatoren und Ausdrücke

3.1 Warm-up

3.2 Workout

W.3.1 Einfache Rechenaufgaben

W.3.2 Perlenkette 2.0

W.3.3 Blutalkoholkonzentration

W.3.4 Stoffwechselrate

W.3.5 Baumstammvolumen

W.3.6 Körperoberfläche

W.3.7 Schuhgröße(Neu)

W.3.8 Haus mit Garage

W.3.9 RGB nach CMYK

W.3.10 Tic-Tac-Toe-Spielfeld

W.3.11 Gamecontroller(Neu)

W.3.12 Fußballtor

4 Kontrollstrukturen

4.1 Warm-up

4.2 Workout

W.4.1 Maximum bestimmen

W.4.2 Summe berechnen

W.4.3 Tippspiel

W.4.4 PIN-Code-Generator

W.4.5 Ladevorgang-Rädchen

W.4.6 Windrad

W.4.7 Rotierte Dreiecke

W.4.8 Moderne Kunst

W.4.9 Schachbrett

W.4.10 Ebbe und Flut berechnen

W.4.11 Dominosteine

W.4.12 Radialer Farbverlauf

W.4.13 Sinuskurve

W.4.14 Sternzeichen bestimmen(Neu)

W.4.15 Zahlen-Palindrom

W.4.16 Titschender Ball

W.4.17 Interaktiver Button

W.4.18 CAPTCHA(Neu)

5 Funktionen

5.1 Warm-up

5.2 Workout

W.5.1 Endliches Produkt

W.5.2 Fakultät

W.5.3 Konfektionsgröße

W.5.4 Schaltjahr Prüfung

W.5.5 Literzahlen umwandeln

W.5.6 Analoger Uhrzeiger

W.5.7 Körperoberfläche 2.0

W.5.8 Sportwetten

W.5.9 Lkw-Maut

W.5.10 Wurfparabel

W.5.11 Tortendiagramm

W.5.12 Pixelart-Generator(Neu)

W.5.13 GPS-Luftlinie

W.5.14 IBAN-Generator

W.5.15 Sanduhr

W.5.16 Der faire Würfel

W.5.17 Quadrat mit Kreisausschnitten

W.5.18 Meme-Generator(Neu)

W.5.19 Mondphase berechnen

W.5.20 Pendelanimation

W.5.21 Bogenschießen-Spiel

6 Arrays

6.1 Warm-up

6.2 Workout

W.6.1 Tankladung

W.6.2 Rückwärtsausgabe

W.6.3 Minimale Distanz

W.6.4 Endlose Animation

W.6.5 Wochentag

W.6.6 Onlinedating

W.6.7 Sitzplatzreservierung

W.6.8 Platztausch

W.6.9 Spiegeln

W.6.10 Reflexion

W.6.11 Greenscreen

W.6.12 Bild umdrehen und invertieren

W.6.13 Bild mit Schatten

W.6.14 Bild rotieren

W.6.15 Bildverkleinerung

W.6.16 Bildvergrößerung

W.6.17 Durchschnittstemperatur(Neu)

W.6.18 Morsecode

W.6.19 Minimale Punktdistanz

W.6.20 Glatte Kurven

W.6.21 Bildausschnitt

W.6.22 Bild mit Rahmen

W.6.23 Memory-Spielfeldgenerator

W.6.24 Geldautomat

W.6.25 Sudoku-Check

W.6.26 Postleitzahlen visualisieren

W.6.27 Medianfilter

W.6.28 Dreiecksfilter

W.6.29 Gesichtserkennung(Neu)

7 Strings und Stringverarbeitung

7.1 Warm-up

7.2 Workout

W.7.1 String-Kompression

W.7.2 Leetspeak(Neu)

W.7.3 Split-Funktion

W.7.4 Geldschein-Blütencheck

W.7.5 E-Mail-Check

W.7.6 Prüfen auf eine korrekte Klammerung

W.7.7 URL-Encoding

W.7.8 Webserver-Antwort verarbeiten

W.7.9 IMDB-Einträge verarbeiten

W.7.10 Sternchenmuster

W.7.11 Geheimsprache

W.7.12 Ähnlich klingende Wörter

W.7.13 Textrahmen

W.7.14 Starkes Passwort

W.7.15 Telefonbuch bearbeiten

W.7.16 JSON-Array

W.7.17 Kennzeichenverarbeitung

W.7.18 Barcode-Generator

W.7.19 Datensatz-Vorverarbeitung(Neu)

W.7.20 Stimmungsbarometer(Neu)

8 Objektorientierung

8.1 Warm-up

8.2 Workout

W.8.1 Schrittzähler

W.8.2 Songtextsuche

W.8.3 Body-Mass-Index

W.8.4 Druckerwarteschlange

W.8.5 Stoppuhr

W.8.6 Parteistimmen

W.8.7 Kopffitness

W.8.8 Fernbedienung

W.8.9 Laufschrift(Neu)

W.8.10 Passwortklasse

W.8.11 Tic Tac Toe

W.8.12 Verschlüsselung

W.8.13 Zwischenablage

W.8.14 Temperaturgraph

W.8.15 Ambient Light

W.8.16 Autovervollständigung(Neu)

W.8.17 Mastermind

9 Referenzdatentypen

9.1 Warm-up

9.2 Workout

W.9.1 Kreis-Klasse

W.9.2 Mathematischer Bruch

W.9.3 Highscore-Liste

W.9.4 Adressbuch

W.9.5 Digitaler Bilderrahmen

W.9.6 Polygonzug

W.9.7 Flughafen-Check-in

W.9.8 Socialwall

W.9.9 Musikalbenanwendung

W.9.10 Koch-Website

W.9.11 Suchmaschinenranking(Neu)

W.9.12 Partygäste

W.9.13 Hotelzimmerverwaltung

W.9.14 Fototagebuch

W.9.15 Raumbelegung

W.9.16 Rotationspuzzle(Neu)

10 Vererbung

10.1 Warm-up

10.2 Workout

W.10.1 Lampen

W.10.2 Meeting-Protokoll

W.10.3 Online-Shop

W.10.4 Gewässer

W.10.5 Schere, Stein, Papier(Neu)

W.10.6 To-do-Liste

W.10.7 E-Book

W.10.8 Zoo

W.10.9 Audioeffekt-Player

W.10.10 Meetingplaner(Neu)

W.10.11 Tanzwettbewerb(Neu)

W.10.12 Fahrtenbuch

W.10.13 Webseitengenerator

A Installation Processing

A.1 Einleitung

A.2 Windows

A.3 macOS

A.4 Linux

A.5 Aktivierung des Python Mode

B Howto: Buch-Aufgaben ohne Processing lösen

B.1 Java

B.2 Python

B.3 Fazit

C Lösungen in Java

C.1 Download und Verwendung der elektronischen Lösungen

C.1.1 Download von GitHub

C.1.2 Download von Hanser Plus

C.1.3 Öffnen der Programme

C.1.4 Tipp: Debugger

C.2 Einführung in die Programmierung

C.2.1 Three-Two-One –Mein erstes Programm

C.2.2 Weihnachtsbaum

C.2.3 Haus

C.2.4 Perlenkette

C.2.5 Die erste Zeichnung

C.2.6 Nachteule

C.2.7 Daumen

C.2.8 Tasse

C.2.9 Raupe Allzeitappetit

C.2.10 Klötzchen-Kunst

C.2.11 Ghettoblaster

C.2.12 Gesichtsmaske

C.2.13 Hallo Bello!

C.3 Variablen, Datentypen, Operatoren und Ausdrücke

C.3.1 Einfache Rechenaufgaben

C.3.2 Perlenkette 2.0

C.3.3 Blutalkoholkonzentration

C.3.4 Stoffwechselrate

C.3.5 Baumstammvolumen

C.3.6 Körperoberfläche

C.3.7 Schuhgröße

C.3.8 Haus mit Garage

C.3.9 RGB nach CMYK

C.3.10 Tic-Tac-Toe-Spielfeld

C.3.11 Gamecontroller

C.3.12 Fußballtor

C.4 Kontrollstrukturen

C.4.1 Maximum bestimmen

C.4.2 Summe berechnen

C.4.3 Tippspiel

C.4.4 PIN-Code-Generator

C.4.5 Ladevorgang-Rädchen

C.4.6 Windrad

C.4.7 Rotierte Dreiecke

C.4.8 Moderne Kunst

C.4.9 Schachbrett

C.4.10 Ebbe und Flut berechnen

C.4.11 Dominosteine

C.4.12 Radialer Farbverlauf

C.4.13 Sinuskurve

C.4.14 Sternzeichen bestimmen

C.4.15 Zahlen-Palindrom

C.4.16 Titschender Ball

C.4.17 Interaktiver Button

C.4.18 CAPTCHA

C.5 Funktionen

C.5.1 Endliches Produkt

C.5.2 Fakultät

C.5.3 Konfektionsgröße

C.5.4 Schaltjahr Prüfung

C.5.5 Literzahlen umwandeln

C.5.6 Analoger Uhrzeiger

C.5.7 Körperoberfläche

C.5.8 Sportwetten

C.5.9 LKW-Maut

C.5.10 Wurfparabel

C.5.11 Tortendiagramm

C.5.12 Pixelart-Generator

C.5.13 GPS-Luftlinie

C.5.14 IBAN-Generator

C.5.15 Sanduhr

C.5.16 Der faire Würfel

C.5.17 Quadrat mit Kreisausschnitten

C.5.18 Meme-Generator

C.5.19 Mondphase berechnen

C.5.20 Pendelanimation

C.5.21 Bogenschießen-Spiel

C.6 Arrays

C.6.1 Tankladung

C.6.2 Rückwärtsausgabe

C.6.3 Bestimmung minimale Distanz

C.6.4 Endlose Animation

C.6.5 Wochentag

C.6.6 Onlinedating

C.6.7 Sitzplatzreservierung

C.6.8 Platztausch

C.6.9 Spiegeln

C.6.10 Reflexion

C.6.11 Greenscreen

C.6.12 Bild umdrehen und invertieren

C.6.13 Bild mit Schatten

C.6.14 Bild rotieren

C.6.15 Bildverkleinerung

C.6.16 Bildvergrößerung

C.6.17 Durchschnittstemperatur

C.6.18 Morsecode

C.6.19 Minimale Punktdistanz

C.6.20 Glatte Kurven

C.6.21 Bildausschnitt

C.6.22 Bild mit Rahmen

C.6.23 Memory-Spielfeldgenerator

C.6.24 Geldautomat

C.6.25 Sudoku-Check

C.6.26 Postleitzahlen visualisieren

C.6.27 Medianfilter

C.6.28 Dreiecksfilter

C.6.29 Gesichtserkennung

C.7 Strings und Stringverarbeitung

C.7.1 String-Kompression

C.7.2 Leetspeak

C.7.3 Split-Funktion

C.7.4 Geldschein-Blütencheck

C.7.5 E-Mail-Check

C.7.6 Prüfen auf eine korrekte Klammerung

C.7.7 URL-Encoding

C.7.8 Webserver-Antwort verarbeiten

C.7.9 IMDB-Einträge verarbeiten

C.7.10 Sternchenmuster

C.7.11 Geheimsprache

C.7.12 Ähnlich klingende Wörter

C.7.13 Textrahmen

C.7.14 Starkes Passwort

C.7.15 Telefonbuch bearbeiten

C.7.16 JSON-Array

C.7.17 Kennzeichenverarbeitung

C.7.18 Barcode-Generator

C.7.19 Datensatz-Vorverarbeitung

C.7.20 Stimmungsbarometer

C.8 Objektorientierung

C.8.1 Schrittzähler

C.8.2 Songtextsuche

C.8.3 Body-Mass-Index

C.8.4 Druckerwarteschlange

C.8.5 Stoppuhr

C.8.6 Parteistimmen

C.8.7 Kopffitness

C.8.8 Fernbedienung

C.8.9 Laufschrift

C.8.10 Passwortklasse

C.8.11 Tic Tac Toe

C.8.12 Verschlüsselung

C.8.13 Zwischenablage

C.8.14 Temperaturgraph

C.8.15 Ambient Light

C.8.16 Autovervollständigung

C.8.17 Mastermind

C.9 Referenzdatentypen

C.9.1 Kreis-Klasse

C.9.2 Mathematischer Bruch

C.9.3 Highscore-Liste

C.9.4 Adressbuch

C.9.5 Digitaler Bilderrahmen

C.9.6 Polygonzug

C.9.7 Flughafen-Check-in

C.9.8 Socialwall

C.9.9 Musikalbenanwendung

C.9.10 Koch-Website

C.9.11 Suchmaschinenranking

C.9.12 Partygäste

C.9.13 Hotelzimmerverwaltung

C.9.14 Fototagebuch

C.9.15 Raumbelegung

C.9.16 Rotationspuzzle

C.10 Vererbung

C.10.1 Lampen

C.10.2 Meeting-Protokoll

C.10.3 Online-Shop

C.10.4 Gewässer

C.10.5 Schere, Stein, Papier

C.10.6 To-do-Liste

C.10.7 E-Book

C.10.8 Zoo

C.10.9 Audioeffekt-Player

C.10.10 Meetingplaner

C.10.11 Tanzwettbewerb

C.10.12 Fahrtenbuch

C.10.13 Webseitengenerator

D Lösungen in Python

D.1 Download und Verwendung der elektronischen Lösungen

D.1.1 Download von GitHub

D.1.2 Download von Hanser Plus

D.1.3 Öffnen der Programme

D.2 Einführung in die Programmierung

D.2.1 Three-Two-One –Mein erstes Programm

D.2.2 Weihnachtsbaum

D.2.3 Haus

D.2.4 Perlenkette

D.2.5 Die erste Zeichnung

D.2.6 Nachteule

D.2.7 Daumen

D.2.8 Tasse

D.2.9 Raupe Allzeitappetit

D.2.10 Klötzchenkunst

D.2.11 Ghettoblaster

D.2.12 Gesichtsmaske

D.2.13 Hallo Bello!

D.3 Variablen, Datentypen, Operatoren und Ausdrücke

D.3.1 Einfache Rechenaufgaben

D.3.2 Perlenkette 2.0

D.3.3 Blutalkoholkonzentration

D.3.4 Stoffwechselrate

D.3.5 Baumstammvolumen

D.3.6 Körperoberfläche

D.3.7 Schuhgröße

D.3.8 Haus mit Garage

D.3.9 RGB nach CMYK

D.3.10 Tic-Tac-Toe-Spielfeld

D.3.11 Gamecontroller

D.3.12 Fußballtor

D.4 Kontrollstrukturen

D.4.1 Maximum bestimmen

D.4.2 Summe berechnen

D.4.3 Tippspiel

D.4.4 PIN-Code-Generator

D.4.5 Ladevorgang-Rädchen

D.4.6 Windrad

D.4.7 Rotierte Dreiecke

D.4.8 Moderne Kunst

D.4.9 Schachbrett

D.4.10 Ebbe und Flut berechnen

D.4.11 Dominosteine

D.4.12 Radialer Farbverlauf

D.4.13 Sinuskurve

D.4.14 Sternzeichen bestimmen

D.4.15 Zahlen-Palindrom

D.4.16 Titschender Ball

D.4.17 Interaktiver Button

D.4.18 CAPTCHA

D.5 Funktionen

D.5.1 Endliches Produkt

D.5.2 Fakultät

D.5.3 Konfektionsgröße

D.5.4 Schaltjahr Prüfung

D.5.5 Literzahlen umwandeln

D.5.6 Analoger Uhrzeiger

D.5.7 Körperoberfläche

D.5.8 Sportwetten

D.5.9 LKW-Maut

D.5.10 Wurfparabel

D.5.11 Tortendiagramm

D.5.12 Pixelart-Generator

D.5.13 GPS-Luftlinie

D.5.14 IBAN-Generator

D.5.15 Sanduhr

D.5.16 Der faire Würfel

D.5.17 Quadrat mit Kreisausschnitten

D.5.18 Meme-Generator

D.5.19 Mondphase berechnen

D.5.20 Pendelanimation

D.5.21 Bogenschießen-Spiel

D.6 Arrays

D.6.1 Tankladung

D.6.2 Rückwärtsausgabe

D.6.3 Bestimmung minimale Distanz

D.6.4 Endlose Animation

D.6.5 Wochentag

D.6.6 Onlinedating

D.6.7 Sitzplatzreservierung

D.6.8 Platztausch

D.6.9 Spiegeln

D.6.10 Reflexion

D.6.11 Greenscreen

D.6.12 Bild umdrehen und invertieren

D.6.13 Bild mit Schatten

D.6.14 Bild rotieren

D.6.15 Bildverkleinerung

D.6.16 Bildvergrößerung

D.6.17 Durchschnittstemperatur

D.6.18 Morsecode

D.6.19 Minimale Punktdistanz

D.6.20 Glatte Kurven

D.6.21 Bildausschnitt

D.6.22 Bild mit Rahmen

D.6.23 Memory-Spielfeldgenerator

D.6.24 Geldautomat

D.6.25 Sudoku-Check

D.6.26 Postleitzahlen visualisieren

D.6.27 Medianfilter

D.6.28 Dreiecksfilter

D.6.29 Gesichtserkennung

D.7 Strings und Stringverarbeitung

D.7.1 String-Kompression

D.7.2 Leetspeak

D.7.3 Split-Funktion

D.7.4 Geldschein-Blütencheck

D.7.5 E-Mail-Check

D.7.6 Prüfen auf eine korrekte Klammerung

D.7.7 URL-Encoding

D.7.8 Webserver-Antwort verarbeiten

D.7.9 IMDB-Einträge verarbeiten

D.7.10 Sternchenmuster

D.7.11 Geheimsprache

D.7.12 Ähnlich klingende Wörter

D.7.13 Textrahmen

D.7.14 Starkes Passwort

D.7.15 Telefonbuch bearbeiten

D.7.16 JSON-Array

D.7.17 Kennzeichenverarbeitung

D.7.18 Barcode-Generator

D.7.19 Datensatz-Vorverarbeitung

D.7.20 Stimmungsbarometer

D.8 Objektorientierung

D.8.1 Schrittzähler

D.8.2 Songtextsuche

D.8.3 Body-Mass-Index

D.8.4 Druckerwarteschlange

D.8.5 Stoppuhr

D.8.6 Parteistimmen

D.8.7 Kopffitness

D.8.8 Fernbedienung

D.8.9 Laufschrift

D.8.10 Passwortklasse

D.8.11 Tic Tac Toe

D.8.12 Verschlüsselung

D.8.13 Zwischenablage

D.8.14 Temperaturgraph

D.8.15 Ambient Light

D.8.16 Autovervollständigung

D.8.17 Mastermind

D.9 Referenzdatentypen

D.9.1 Kreis-Klasse

D.9.2 Mathematischer Bruch

D.9.3 Highscore-Liste

D.9.4 Adressbuch

D.9.5 Digitaler Bilderrahmen

D.9.6 Polygonzug

D.9.7 Flughafen-Check-in

D.9.8 Socialwall

D.9.9 Musikalbenanwendung

D.9.10 Koch-Website

D.9.11 Suchmaschinenranking

D.9.12 Partygäste

D.9.13 Hotelzimmerverwaltung

D.9.14 Fototagebuch

D.9.15 Raumbelegung

D.9.16 Rotationspuzzle

D.10 Vererbung

D.10.1 Lampen

D.10.2 Meeting-Protokoll

D.10.3 Online-Shop

D.10.4 Gewässer

D.10.5 Schere, Stein, Papier

D.10.6 To-do-Liste

D.10.7 E-Book

D.10.8 Zoo

D.10.9 Audioeffekt-Player

D.10.10 Meetingplaner

D.10.11 Tanzwettbewerb

D.10.12 Fahrtenbuch

D.10.13 Webseitengenerator

Vorwort

Der Messenger auf deinem Smartphone, der Bluetooth-Lautsprecher, mit dem du deine Lieblingsmusik abspielst, der Algorithmus, der auf Netflix die neueste Serie vorschlägt – jemand hat all das programmiert. Fast nichts in der Welt kommt noch ohne Code aus. Du bist grade auf dem besten Weg, ein Teil davon zu werden und die Zukunft mitzugestalten. Wie aufregend!

Klar, es gibt auch frustrierende Momente – wenn du nicht herausfinden kannst, wo der Fehler in deinem Code liegt, oder wenn du das Kapitel über Objektorientierung in deinem Lehrbuch nicht verstehst. Aber keine Sorge, wir alle haben diese Erfahrung gemacht. Es braucht Zeit und Übung, um wirklich gut im Programmieren zu werden.

Ich selbst habe angefangen, Informatik zu studieren, ohne jemals auch nur eine Zeile Code gesehen zu haben. Und oh boy, war das eine Herausforderung. Am Anfang fiel es mir echt schwer. Aber irgendwas hat mich gepackt, und mit jeder Übungsaufgabe wurde es ein bisschen einfacher. Und je mehr ich gelernt habe, desto mehr habe ich gemerkt, wie viel Spaß programmieren macht. Es ist einfach das beste Gefühl, wenn man den Fehler im Code dann irgendwann doch findet und das Programm endlich genau so funktioniert, wie man es sich vorgestellt hast.

Und irgendwann siehst du dann, was du mit diesem Handwerk alles anstellen und wie kreativ du mit Code werden kannst. In meiner Arbeit als Spieleprogrammiererin kann ich mit nur wenigen Zeilen Code die Steuerung für eine Spielfigur festlegen, eine Unterhaltung zwischen zwei Charakteren auf dem Bildschirmanzeigen oder ein ganzes Level automatisch generieren lassen. Die Möglichkeiten sind fast endlos! Und das Beste: Es gibt selten nur eine richtige Lösung für ein Problem. Das gibt uns beim Programmieren die Chance, unsere eigenen Ideen und Visionen umzusetzen. Und nein, wir sitzen nicht den ganzen Tag allein im Keller vor dem Bildschirm, wie Kriminelle beim Hacken in einem Hollywoodfilm. Wir arbeiten im Team an spannenden Projekten, um gemeinsam ein Ziel zu erreichen.

Mit den Übungsaufgaben in diesem Buch (in dieser Auflage übrigens mit 20 brandneuen Aufgaben) kannst du deine Fähigkeiten im Programmieren Schritt für Schritt ausbauen. Damit auch du dich bald an eigene und komplexere Projekte wagen kannst und mit deinem Code die Zukunft gestaltest!

Kathrin Radtke (Spellgarden Games), im Januar 2023

Neues in der 3. Auflage

Im Vergleich zu den ersten beiden Auflagen hat sich in der 3. Auflage erneut einiges geändert.

Wie du dir vorstellen kannst, sind neue Aufgaben hinzugekommen. Dieses Mal sind es zwanzig Aufgaben mehr im Vergleich zur 2. Auflage. Wir haben die neuen Aufgaben gekennzeichnet, damit du sie schnell finden kannst. Sowohl im Inhaltsverzeichnis als auch in der Aufgabenüberschrift befindet sich der Hinweis „Neu“, an dem du die neuen Aufgaben direkt erkennen kannst. Ansonsten sind die Aufgaben in den Kapiteln nach unserer subjektiven Einschätzung der Schwierigkeit, des Zeitaufwands und der erforderlichen Kreativität aufsteigend sortiert. Du kannst dich also auch gut von vorne nach hinten durcharbeiten.

Außerdem haben wir Fehler korrigiert, die uns von Leserinnen und Lesern zuletzt zur 2. Auflage zurückgemeldet wurden (siehe auch Danksagung). Es versteht sich von selbst, dass wir zudem alles Erforderliche auf den aktuellen Stand gebracht haben. Dies betrifft insbesondere alle Kapitel, in denen die dem Buch zugrunde gelegte Programmierumgebung „Processing“ behandelt wird. Auch hier haben wir für die 3. Auflage das Feedback unserer Leserschaft aufgegriffen und genauer beschrieben, wie die Beispiellösungen auch mit einer anderen Programmierumgebung verwendet werden können. Für die Aufgaben, für die die Verwendung außerhalb von Processing ohne größere Änderungen an der Musterlösung möglich ist, haben wir eine Kennzeichnung eingeführt, die dies ersichtlich macht. Das Icon, das an jeder Aufgabe zur visuellen Unterstützung steht, ist dann eingerahmt und mit dem Text „Auch ohne Processing lösbar“ versehen.

Eine weitere wichtige Neuerung der 3. Auflage ist, dass wir uns entschlossen haben, die Beispiellösungen nicht mehr im Buch mit abzudrucken. Der Grund dafür ist, dass wir wertvolles Papier einsparen möchten. Wie du es vermutlich schon von Hanser-Büchern und natürlich auch von unseren ersten beiden Auflagen gewohnt bist, hast du viele verschiedene Zugänge zu den Beispiellösungen. Diese sind z. B. im E-Book enthalten oder können als Programmtexte von GitHub oder direkt von Hanser heruntergeladen werden. Also wundere dich nicht, wenn bei den Anhängen C und D die Lösungen, die im E-Book enthalten sind, im gedruckten Buch fehlen. Jetzt weißt Du, warum dies der Fall ist.

Darüber hinaus erhältst du als Käufer:in des gedruckten Buches einen Code, mit dem du das komplette E-Book herunterladen kannst. Diesen Code findest du ganz vorne im Buch unter der Überschrift „E-Book inklusive“.

Danksagung

Ein Buchprojekt ist harte Arbeit. Ohne die Unterstützung vieler helfender Hände geht es nicht. Wir können uns gar nicht genug bei euch allen bedanken, versuchen es aber dennoch, so gut wir können.

Zeit ist wohl das Kostbarste, was wir haben. Darum bin ich umso dankbarer, dass meine liebe Familie mir diese für derartige und andere Projekte einräumt. Danke, Barbara, Giuliana, Antonio und Fabio.

Danke an Brigitte, Frank, Christian und alle anderen wundervollen Menschen, die mich bei der Arbeit an diesem Buch unterstützt haben. Außerdem danke ich allen Förderinnen und Förderern, besonders meinem damaligen Informatiklehrer „Herr Schepanek“.

Ich danke allen Kolleginnen und Kollegen, die mich im Laufe der Jahre begleitet haben. Besonders möchte ich mich bei Katrin für ihre Geduld und ihren Support sowie bei Juli und Lana für ihre Motivation bedanken.

Gemeinsam möchten wir uns bei Christian Ullenboom bedanken. Er hat das Buch kritisch durchgearbeitet und uns viele wertvolle Anmerkungen dazu gegeben. Gleiches gilt für Dirk Louis, der uns zudem freundlicherweise das Vorwort zur Erstauflage des Buches geschrieben hat. Bei Kathrin Radtke und Patrick Stenzel möchten wir uns für die Vorworte zur dritten bzw. zweiten Auflage bedanken. Dem Hanser Verlag und insbesondere Sylvia Hasselbach möchten wir für die viele Geduld mit uns und die ungebrochene Unterstützung bedanken. Ein derartiger Rückhalt ist unverzichtbar.

Außerdem bedanken wir uns bei Remo Lötscher, Lothar Massing, Lars Mühlbauer, Jens Schönbohm und Lars Wildeshaus, die uns auf kleine Fehler in den vorherigen Auflagen aufmerksam gemacht haben, welche wir in dieser Auflage korrigieren konnten.

Schließlich wollen wir uns an dieser Stelle bei den vielen Freiwilligen da draußen bedanken, die ihre wertvolle Zeit dafür aufwenden, um der Allgemeinheit viele nützliche Dinge kosten- und diskriminierungsfrei zur Verfügung zu stellen. Unser Buch bedient sich viel aus der Public Domain, wofür wir uns gerne durch Benennung der wesentlichen Bausteine bedanken wollen. Zunächst sind hierzu die beiden zugrunde gelegten Programmiersprachen zu nennen. Java (https://www.java.com/de/) wird von der Oracle Corporation und Python (https://www.python.org/) von der Python Software Foundation bereitgestellt. Beide gehören aktuell zu den am meisten eingesetzten Sprachen und können auf vielfältigste Weise verwendet werden. Um die Hürden gerade für den (fachfremden) Einstieg in die Programmierung weitestgehend zu eliminieren, stellt die Processing Foundation die gleichnamige Entwicklungsumgebung zur Verfügung (https://processing.org/).Processing basiert dabei von Hause aus auf Java. Im Laufe der Zeit sind weitere Programmiersprachen hinzugekommen, darunter neben JavaScript auch Python (https://py.processing.org/). Wir verwenden im Buch zudem Piktogramme, um die Aufgaben durch kleine Icons visuell zu unterstreichen. Iconify.it stellt eine Sammlung von 650 freien Glyphicons bereit, aus der wir uns hierzu bedient haben. Schließlich verwenden wir in einigen Programmieraufgaben Bilder, die durch das Programm verarbeitet werden sollen. Hier haben wir auf die Public-Domain-Cliparts von clker.com (https://clker.com/) zurückgegriffen. Ebenso haben wir das Public-Domain-Bild „squirrel“ von Lola Williams in zwei Aufgaben verwendet.

Last, but not least wollen wir uns bei dir bedanken. Wir freuen uns, dass wir dein Interesse geweckt und es schon mal bis in deine Hände geschafft haben. Jetzt bleibt uns nur noch, dir beim Programmierentrainieren viel Erfolg und auch Spaß zu wünschen.

Luigi Lo Iacono, Stephan Wiefling und Michael Schneider

August 2023

Vorwort zur zweiten Auflage

„Jede hinreichend fortschrittliche Technologie ist von Magie nicht zu unterscheiden.“

—Arthur C. Clarke

Wir sind Programmierer. Wir sind Magier. Das MIT ist unser Hogwarts, der Google Campus ist unsere unsichtbare Universität, Cupertino ist unser Narnia. Steve Jobs ist unser David Copperfield, Larry Page und Sergey Brin sind unsere Ehrlich Brother, und Frank Thelen ist immerhin vielleicht noch so was wie unser Vincent Raven. Wir sind Siegfried und Roy, und aus Versehen programmierte Endlosschleifen sind unsere weißen Tig. . . strapazieren wir die Allegorie mal nicht über. Jedenfalls: Wir sind Magier.

Oder wenigstens wirken wir für unser Umfeld so. Der Onkel dritten Grades, der im Atomkraftwerk arbeitet, würde uns selbst dann anrufen, wenn AssetWise mal hakt, weil wir eben Informatiker sind und uns dementsprechend mit allem auskennen, was irgendwie mit Computern zusammenhängt. Dabei ist es auch egal, wie komplex oder unterkomplex die Aufgabe ist. Wir werden angerufen, wenn ein Teilchenbeschleuniger angesteuert werden muss, aber auch, wenn es im Fachgeschäft für Strickzubehör „Woll im Leben“ einer Freundin des Freundes deiner Tante väterlicherseits in der alten Fußgängerzone der Kleinstadt, in der du geboren wurdest, nicht mehr ganz so gut läuft und sie jetzt „mal eben“ einen Shop braucht, um den Globalisierungseffekt besser für sich zu nutzen und das Wollgeschäft im Sturm zu erobern. Gestrickt wird ja wohl überall, und sie ist sogar bereit, dir für die drei Wochen Arbeit noch 100 € in die Hand zu drücken. Dafür müsstest du dann aber auch die nächsten drei Jahre zu jeder Tages- und Nachtzeit für Support zur Verfügung stehen.

Doch wir steuern nicht nur die Stromversorgung und das weltweite Woll-Business. Wir halten Banken am Laufen, das Transportwesen und die Kommunikation, ohne uns läuft gar nichts mehr heutzutage. Wir können Welten erschaffen, und wir können sie auch zerstören, je nachdem, ob wir Harry Potter oder Lord Voldemort sein wollen.

Welchen Weg du einschlagen willst – und jeder, der schon mal programmiert hat und behauptet, niemals auf die dunkle Seite geschaut zu haben, lügt – entscheidest du selbst, und auf dem Weg zu deiner Entscheidung ist dieses Buch dein Hogwarts Express, und du musst nicht mal gegen eine Mauer rennen, um hineinzugelangen. Du hast die erste Seite aufgeschlagen und das Vorwort gelesen und die Richtung, in der du weiterblätterst, ist deine rote und deine blaue Pille.

Schlag es wieder zu – dann endet die Geschichte hier, du wachst auf in deinem Bett und glaubst, was immer du glauben möchtest. Blätter weiter, bleib im Wunderland, und das Buch zeigt dir, wie tief der Kaninchenbau geht. Nerd today, boss tomorrow.

Patrick Stenzel (@rock_galore), im Januar 2020

Vorwort zur ersten Auflage

Nerds sind in. Diese liebenswerten Zeitgenossen mit dem vielen Spezialwissen und den kindlichen Vorlieben für Superhelden werden lange nicht mehr nur komisch beäugt. Im Gegenteil. Sie selbst sind nunmehr Stars in vielen Fernsehserien, und ihr modischer Stil ist allgemein akzeptiert. Diese Entwicklung kommt auch der Programmierung zugute. Lange Zeit galt diese Fertigkeit als ein Gebiet, das den Nerds vorbehalten ist. Dem ist nicht so! Es muss nur der Mut aufgebracht werden, sich damit auseinanderzusetzen. Dann wird schnell klar, was mit der Programmierung alles umgesetzt werden kann. Die Bandbreite ist groß und wird durch aktuelle Trends stetig befeuert. Insbesondere durch die Digitalisierung und Vernetzung vieler Alltagsgegenstände finden sich Softwareprogramme vermehrt jenseits gängiger Anwendungsfälle im betrieblichen Kontext von Unternehmen wieder. Also, keine Scheu und ran ans Programmieren!

Mir selbst bereitet das Programmieren viel Freude. Zudem ist es mir eine Herzensangelegenheit, mein Programmier-Know-how und meine Erfahrung an andere weiterzugeben. Ich weiß aus vielen Schulungen sehr genau, was es für Hürden und Stolpersteine beim Programmierenlernen gibt und wie diesen zu begegnen ist. Gutem Trainingsmaterial kommt dabei eine zentrale Rolle zu.

Die Autoren Lo Iacono, Wiefling und Schneider schließen hier eine wichtige Lücke. Sie versorgen dich mit vielen Trainingsaufgaben, die dir helfen werden, die wesentlichen Programmierkonzepte wirklich zu verstehen. Und mehr noch. Du kannst und solltest so lange mit den vielen Aufgaben trainieren, bis der Groschen tatsächlich gefallen ist. Das ist wichtig. Denn erst dann wirst du in der Lage sein, mit dem erlernten Handwerkszeug auch selbstständig Entwicklungsaufgaben bewältigen und lösen zu können. Genau da sollst du hin. Viele Lehrformate gehen hier nicht weit genug. Die falsche Annahme ist dabei häufig, dass ein Beispiel und eine Übungsaufgabe zum Verständnis ausreichen. Weit gefehlt. Es fängt schon damit an, dass nicht jeder mit dem gegebenen Beispiel oder der gestellten Übungsaufgabe etwas anfangen kann. Hier schafft das vorliegende Buch Abhilfe, und es gehört damit in die „Einstieg in die Programmierung“-Ecke deines Bücherregals.

Dirk Louis, im Januar 2018

1Einleitung
1.1Wozu sollte ich programmieren lernen?

Weil du es kannst und weil die Programmierung das Werkzeug des 21. Jahrhunderts ist. Die frühere Bundeskanzlerin Angela Merkel hat in einem Interview mit YouTuberinnen und YouTubern das Programmieren auf eine Stufe mit den Grundfertigkeiten Lesen, Schreiben und Rechnen gestellt (https://youtu.be/Uq2zIzscPgY?t=12m18s). Programmieren ist lange nicht mehr nur etwas für Fachleute, die das studiert haben. Durch den Einzug des Digitalen in alle Branchen und den Alltag können viele andere als nur Informatikfachkräfte von der Programmierung profitieren und damit ihre Ideen erproben und verwirklichen. Beispiele kannst du unzählige finden. Lass uns hier nur einige zur Verdeutlichung kurz anreißen. Dir fallen dann bestimmt selbst viele weitere Beispiele ein.

Angenommen, du schaffst Kunst und hast bisher mit den klassischen Materialien und Techniken deiner Disziplin gearbeitet. Für deine neueste Projektidee möchtest du mit regelmäßigen Formen und Farben experimentieren, wie es z. B. Sol LeWitt in seinem künstlerischen Schaffen getan hat (https://de.wikipedia.org/wiki/Sol_LeWitt). Das erfordert viel Fleiß, Geduld und Präzision. Da du deine Zeit lieber damit verbringen möchtest, an spannenden neuen Konstruktionen und deren Wirkung zu experimentieren, anstatt diese in langwierigen und teils monotonen Arbeitsschritten erst erstellen zu müssen, wünschst du dir einen Automatismus dafür, der das für dich erledigt. Dies kann ein eigens geschriebenes Computerprogramm leisten. Ist ein solches geschrieben, liegen die Vorteile auf der Hand. Veränderungen an den Farben, der Größe sowie Anordnungen der Formen usw. sind umgehend gemacht. Auch das Ausgabeformat kann leicht angepasst werden, um das Kunstwerk in vielfältiger Art und Weise zu drucken oder aus einem Rohling zu fräsen. Schlüsselfiguren der computergenerierten Kunst sind z. B. Manfred Mohr, Joseph Nechvatal, Olga Kisseleva und John Lansdown.

Als Fachkraft für Veranstaltungstechnik sieht man sich heute immer stärker mit Anforderungen von Kundinnen und Kunden konfrontiert, die nach noch nicht da gewesenen Hinguckern verlangen. Hierfür gibt es naturgemäß keine fertigen Lösungen, die man aus dem Regal ziehen kann. Somit siehst du dich auf der einen Seite immer mit neuen spannenden Entwicklungsaufgaben konfrontiert, musst dafür aber auf der anderen Seite adäquate Lösungen entwickeln. Diese bedingen eigentlich immer auch Software, die es zu programmieren gilt.

Im letzten fiktiven Szenario wollen wir ins Internet der Dinge abtauchen. Mit diesem Schlagwort wird der allgemeine Trend bezeichnet, mit dem die Digitalisierung und die Vernetzung im Gewand des Internets stetig in Gegenstände des alltäglichen Gebrauchs diffundieren. Der smart gewordene Fernseher ist ein Paradebeispiel hierfür. Einige neue Anwendungen findest du toll, willst aber noch nicht in neue Produkte investieren. Die alten tun es ja noch. So findest du es z. B. praktisch, im Supermarkt einen Blick in deinen Kühlschrank werfen zu können, um zu sehen, ob es genügend Frühstückseier fürs Wochenende gibt. Der Kühlschrank ist schnell für diesen Anwendungsfall erweitert. Mit einer batteriebetriebenen Kamera, einem LED-Licht und etwas Programmierung kannst du bald via Smartphone-App in deinen Kühlschrank gucken.

Das soll zeigen, was dir alles an Möglichkeiten offensteht, wenn du die Programmierung als ein Werkzeug verstehst und dich dessen bemächtigst.

1.2Wie kann mir dieses Buch dabei helfen?

Vor den Erfolg haben die Gottheiten allerdings den Schweiß gesetzt. Diese Tatsache hat der griechische Dichter und Geschichtsschreiber Hesiod bereits vor langer Zeit festgestellt und dann so zutreffend formuliert. Dieser Ausspruch trifft unseres Erachtens kaum besser auf etwas zu als die Programmierung. Es gehört eine ordentliche Portion Arbeit dazu, bis der Groschen fällt und man die wesentlichen Programmierkonzepte verstanden hat. Erst dann wird man in der Lage sein, Aufgabenstellungen jeglicher Couleur selbstständig angehen und erfolgreich bewältigen zu können. Wir wollen dir diese notwendigen Mühen nicht verschweigen. Unserer Erfahrung nach scheitert so mancher Einstieg genau an dieser Hürde.

Unser Ansatz ist deshalb, durch viele spannende Programmieraufgaben das nötige Material zum Trainieren bereitzustellen. Du wirst in diesem Buch im Wesentlichen Aufgabenstellungen von uns bekommen, an denen du Aufgabe für Aufgabe alle relevanten Programmierkonzepte üben kannst. Damit dir dabei nicht die Laune vergeht, haben wir uns viel Mühe beim Zusammenstellen der Aufgaben gegeben. Es wird deutlich über die meisten „Lehrbuchaufgaben“ hinausgehen und sich, soweit möglich, erheblich näher an praktischen Anwendungsszenarien orientieren. Der klassische Lehrbuchstil hangelt sich meist an Aufgabenstellungen aus der Mathematik entlang. Das ist wichtig, und daher haben auch wir das ab und an mit dir vor. Wir können aber auch verstehen, wenn derartige Aufgaben nicht allen liegen, um etwas Neues zu lernen. Daher programmierst du eher Anwendungen, die etwas Nützliches tun oder etwas hübsch Anzuschauendes generieren. Als Appetitanreger haben wir in der nachfolgenden Bild 1.1 schon mal drei Beispiele aus dem Buch für dich.

Diese drei Bilder zeigen exemplarisch, was du mit unserem Trainingsprogramm programmieren sollst und auch können wirst, wenn du fleißig am Ball bleibst. Es lohnt sich!

Bild 1.1Drei Beispielbilder, die du programmieren wirst

1.3Was muss ich mitbringen?

Nicht viel! Mit diesem Buch können wir es nicht leisten, dir die Basics beizubringen. Das musst du halt selbst tun, oder du bekommst es in irgendeiner Form gezeigt. Wir erklären zu Beginn eines jeden Kapitels noch mal kurz die im Fokus stehenden Übungsschwerpunkte. Das ist mehr eine Gedächtnisstütze und soll als Warm-up dienen, falls du es überhaupt brauchst. Wir gehen dabei nochmals kurz auf die wesentlichen Konzepte ein und erläutern Besonderheiten in den Programmierumgebungen, für die wir Beispiellösungen bereitstellen.

1.4Wie geht das vonstatten?

Wie schon gesagt, ist das hier ein Trainingsbuch fürs Programmieren. Wir stellen dir ein großes Angebot an Übungsaufgaben mit Lösungsvorschlägen zum Training bereit. Die grundlegende Struktur gleicht dabei derer gängiger Ressourcen zur Einführung in die Programmierung. Es geht mit dem Aufbau erster einfacher Programme los und wird durch das Hinzukommen von Programmierkonzepten wie Variablen, Datentypen, Operatoren, Ausdrücken, bedingten Anweisungen, Wiederholungsanweisungen, Funktionen, Arrays, Strings bis hin zur Objektorientierung stetig erweitert. Damit wir uns – ohne unnötiges Störfeuer und Ablenkung – auf das Kernthema des jeweiligen Kapitels konzentrieren können, bestehen die ersten Programme der Kapitel 2, 3 und 4 zunächst aus Anweisungen. Erst in den nachfolgenden Kapiteln 5 bis 9 kommen dann Strukturelemente für den Programmcode in Form von Funktionen sowie Klassen und Objekten hinzu. Wir werden dir Kapitel für Kapitel Trainingsaufgaben stellen, für die du dir ein passendes Programmüberlegen und dieses dann in einer Programmiersprache vollständig angeben sollst.

Jede Trainingsaufgabe ist nach einem festen Schema aufgebaut (siehe Bild 1.2). Um jede Aufgabe eindeutig identifizieren zu können, haben wir diese mit einem eindeutigen Namen, einer eindeutigen Nummer und einem Piktogramm versehen. Das wird dir insbesondere dabei helfen, dich mit Bezugspersonen, Leuten aus der Schule, Mitstudierenden, dem Arbeitsteam oder der Community über die Aufgaben auszutauschen. Auch unsere Lösungsvorschläge im Anhang des E-Books und online wirst du auf diese Weise spielend der jeweiligen Aufgabe zuordnen können. Die Identifizierungsnummer ist dem jeweiligen Buchkapitel zugeordnet. Das einfache Zurückspringen zur Aufgabenstellung im Buch ist damit auch gewährleistet.

Bild 1.2Exemplarische Darstellung des Aufgaben-Templates

Die Aufgaben haben wir nach unserem Dafürhalten in den Kategorien Schwierigkeit, Kreativität und Zeitaufwand bewertet und sortiert. Einfachere Aufgaben, die im Vergleich eher wenig Zeit und kreative Eigenleistung erfordern, findest du meist am Anfang eines jeden Kapitels. Du bist aber völlig frei in deiner Entscheidung, welcher Aufgabe du dich in welcher Reihenfolge widmen möchtest. Du musst auch längst nicht alle Aufgaben durchackern. Wenn der Groschen in Bezug auf die in einem Kapitel fokussierten Programmierkonzepte gefallen ist, kann es ans nächste Kapitel gehen.

Wir haben schon eingangs gesagt, dass wir mit dir und den Aufgaben eines jeden Kapitels bestimmte Programmierkonzepte trainieren möchten. Auf welche Themen sich eine jeweilige Aufgabe dabei im Besonderen fokussiert, geben wir dir kurz stichwortartig an. Dies soll ein zusätzliches Kriterium sein, wonach du entscheiden kannst, ob du eine bestimmte Aufgabe bearbeiten möchtest.

Worum es sich in einer Aufgabe dreht, erläutert eine kurze Beschreibung. Hier wird der Kontext gesetzt und gegebenenfalls auch ein Praxisbezug hergestellt, damit du weißt, wo sich in der Praxis etwas Derartiges finden lässt. Was du dann tatsächlich tun musst, geben wir dir im anschließenden Abschnitt mit dem passenden Namen Aufgabenstellung an. Du solltest beide Abschnitte aufmerksam und eventuell mehrmals lesen, um sicherzustellen, dass du deinen Auftrag richtig verstanden hast.

Zur Überprüfung, ob dein Programm tatsächlich funktioniert, geben wir dir Testfälle mit entsprechenden Testdaten an die Hand. Zudem haben wir zu jeder Aufgabe eine ausführlich kommentierte Lösung in den Programmiersprachen Java und Python beigefügt. Bevor du dir die aber anguckst, solltest du wirklich lange Zeit selbst an der Erarbeitung einer Lösung werkeln.

Wenn du völlig auf dem Schlauch stehst und gar keinen Zugang findest, sind am Ende einer jeden Aufgabe algorithmische Tipps aufgelistet, die dich einem möglichen Lösungsansatz näherbringen sollen. Bitte nutze diese Tipps und versuche unbedingt, selbst eine Lösung herzustellen, bevor du dir unsere Lösungsvorschläge im Anhang des E-Books oder online anschaust. Nur auf diese Weise kommst du genügend ins Schwitzen, um nachher wirklich behaupten zu können, das Programmieren auch selbstständig zu beherrschen.

1.5Was muss ich sonst noch wissen?

Damit du möglichst effektiv und fokussiert trainieren kannst, haben wir die Trainingsumgebung für dich von unnötigem Ballast entschlackt. Du sollst nicht schon bei der Installation, Konfiguration und Verwendung der Programmierumgebung die Lust am Programmieren bzw. die Sicht auf das Wesentliche verlieren. Wir stützen uns daher auf ein einziges Werkzeug, mit dem du in Java und Python das Programmieren trainieren kannst. Es handelt sich dabei um das frei und kostenlos verfügbare Tool mit dem Namen Processing, das du unter der Webadresse https://processing.org/ abrufen kannst. Hier findest du auch viele weitere Informationen und Dokumentationen rund um Processing. Im Anhang A haben wir Installationsanleitungen für die gängigen Betriebssysteme Windows, macOS und Linux beigefügt.

Dass wir auf Processing abstellen, soll aber nicht heißen, dass du mit dem Erlernten in der Praxis nicht viel anfangen kannst. Ganz im Gegenteil! Die Programmiersprachen Java und Python gehören zu den am weitesten verbreiteten Sprachen, und schließlich kommt es im Wesentlichen auf die Programmierkonzepte an. Wenn du diese intensiv trainiert und dadurch verinnerlicht hast, dann bist du bereit, alle möglichen Aufgabenstellungen programmatisch zu lösen. Dann haben wir unser gemeinsames Ziel erreicht. Die Verwendung professionellerer Programmierumgebungen wie z. B. Eclipse, IntelliJ, PyCharm oder Visual Studio Code ist dann ein Klacks. Darüber müssen wir dann nicht mehr viele Worte verlieren. Wenn du so gar keine Lust auf Processing haben solltest und unsere Aufgaben lieber mit anderen Programmierumgebungen für Java oder Python bearbeiten möchtest, dann findest du im Anhang B Anleitungen für den Aus- und Umstieg.

Die Quelltexte zum Buch – unsere Lösungsvorschläge – haben wir auf den Onlinediensten GitHub und Hanser Plus für dich bereitgelegt. Du findest sie unter den Adressen https://github.com/protrain und https://plus.hanser-fachbuch.de. Wie du damit umgehst, erklären wir für alle gängigen Desktop-Betriebssysteme ab Anhang C.1 (für Java) bzw. ab Anhang D.1 (für Python).

Mit dem Kauf des Buches soll aber noch nicht Schluss sein. Wir würden uns sehr freuen, von dir zu hören. Über GitHub kannst du uns z. B. auf Fehler im Buch oder in den Lösungen aufmerksam machen. Wir tragen das dann in die Errata-Liste ein bzw. korrigieren die Programme. Außerdem kannst du uns auch deine Lösung(en) bereitstellen. Wenn diese einen eigenen Lösungsweg zeigen, nehmen wir sie mit in das Repository auf. Selbiges gilt für Lösungen in anderen Programmiersprachen. Achte aber bitte hierbei darauf, dass es für die Sprache eine ähnlich einfache und umfangreiche Programmierumgebung gibt, wie es Processing für Java und Python ist. Wenn du sonstige Anregungen zur Verbesserung hast oder Ideen für weitere Aufgaben beisteuern möchtest, freuen wir uns, von dir zu hören.

Hoffentlich konnten wir dein Interesse wecken und dir unseren Ansatz zum Programmierenlernen schmackhaft machen. Jedenfalls würden wir uns sehr freuen, gemeinsam mit dir das Programmieren zu trainieren. Und wenn dir die mehr als 150 Aufgaben in diesem Buch nicht ausreichen sollten, möchten wir dich auf einige andere Ressourcen aufmerksam machen, die einen ähnlichen Ansatz wie wir verfolgen:

       Advent of Code (https://adventofcode.com/): Seit 2015 veröffentlicht der „Advent of Code“ Programmieraufgaben, um die Adventszeit zu versüßen. Die Aufgaben sind oft algorithmisch anspruchsvoll und erfordern kreative Lösungsansätze. Du kannst die Aufgaben in der Programmiersprache deiner Wahl lösen. Dabei geht es nicht nur darum, die richtige Lösung zu finden (wie in diesem Buch), sondern auch um Effizienz und Eleganz des Codes. Es sind noch alle Aufgaben vergangener Adventskalender online verfügbar.

       rustlings (https://github.com/rust-lang/rustlings): Mit „rustlings“ kannst du spielerisch und praxisnah deine Kenntnisse und Fähigkeiten in der Programmiersprache Rust verbessern. Es bietet interaktive Übungen und Aufgaben, um verschiedene Aspekte von Rust abzudecken. Du kannst den Code bearbeiten, Lösungen testen und Hinweise nutzen, um dein Verständnis zu vertiefen. Egal, ob du Anfänger oder erfahrener Entwickler bist, rustlings ist ein wertvolles Lernwerkzeug, um deine Kenntnisse in Rust zu erweitern und dich mit Best Practices vertraut zu machen.

1.6Wie kann und sollte ich ChatGPT & Co verwenden?

Künstliche Intelligenz ist in aller Munde. Du wirst z. B. ChatGPT kennen und es gegebenenfalls auch schon verwendet haben. Wenn nicht, dann hier einige kurze Erläuterung dazu: ChatGPT ist ein intelligentes Sprachmodell, das entwickelt wurde, um dir in Konversationen zu helfen. Du kannst es nutzen, um Fragen zu stellen, Informationen anzufordern oder einfach nur eine Unterhaltung zu führen. Es basiert auf umfangreichem Training mit Textdaten und verwendet statistische Muster, um dir Antworten zu geben. Bitte beachte jedoch, dass es manchmal ungenaue oder falsche Antworten geben kann. Es ist wichtig, klare Fragen zu stellen und die erhaltenen Antworten kritisch zu überprüfen. ChatGPT ist ein nützliches Werkzeug für natürlichsprachliche Unterstützung, aber vergiss nicht, die Ergebnisse immer zu hinterfragen, um sicherzustellen, dass sie angemessen und korrekt sind.

Warum ist das für dieses Buch und die Programmierung relevant? Nun, weil Du ChatGPT und andere, stärker auf die Programmierung spezialisierte Sprachmodelle wie z. B. Codex, DeepCode oder CoPilot auch dazu verwenden kannst, dir Programmcodes generieren zu lassen. Du könntest also auf die Idee kommen, ChatGPT & Co für die Lösung der Aufgaben im Buch heranzuziehen. Damit betrügst du dich aber nur selbst. Du bekommst immer eine Antwort von diesen Systemen, und auf den ersten Blick mag die plausibel aussehen. Ob das aber funktionierende Programmcodes sind, die die Aufgabenstellung vollständig erfüllen, ist keinesfalls sicher. Hier ist die programmierende Person weiterhin selbst gefordert, dies sicherzustellen. Ein Grund mehr, das Programmieren nachhaltig durch geeignetes Training zu erlernen. Sonst wirst du die generierten Codes nicht beurteilen und gegebenenfalls verbessern können. Also lass dir nicht stupide Programmcodes zu den Aufgaben generieren und vorsetzen, sondern nutze diese Tools vielmehr als Unterstützung in deinem Lernprozess. So könntest du dir z. B. deine eigenen Codes erklären lassen und so vielleicht Fehler selbst finden. Oder du könntest dir die Beispiellösungen erklären lassen, die du nicht selbst nachvollziehen kannst. Wenn das dann immer noch nicht hilft, frage gerne uns!

2Einführung in die Programmierung
2.1Warm-up

Dein Training beginnt in diesem Kapitel mit ersten einfachen Programmen. Dazu musst du wissen, wie der grundlegende Aufbau eines Programms sowie der Aufbau der Anweisungen in einer bestimmten Programmiersprache sind. Letzteres gehört zur sogenannten Syntax einer Programmiersprache. So wie z. B. die Syntax einer natürlichen Sprache Prinzipien und Regeln des Wort- und Satzbaus festlegt, so legt die Syntax einer Programmiersprache das Vokabular und den Aufbau von Anweisungen fest.

Für die allerersten Programme, die du entwickeln sollst, genügt zunächst die allereinfachste Struktur überhaupt. Hierbei werden Programme als eine lineare Abfolge von Anweisungen angegeben. Anweisungen verfügen immer über einen Namen und eine Liste von Parametern, die die Anweisung verarbeiten soll. Um den Anweisungsnamen von der Parameterliste unterscheiden zu können, werden die Parameter häufig eingeklammert und dem Anweisungsnamen nachgestellt.

nameAnweisung(parameter);

Verfügt die Parameterliste über mehrere Einträge, so werden diese mit Komma (,) voneinander getrennt.

nameAnweisung(parameter1, parameter2);

Parameterlose Anweisungen sind durch ein leeres Klammernpaar gekennzeichnet.

nameAnweisung();

Um mehrere Anweisungen voneinander unterscheiden zu können, wird dafür ein Trennzeichen in der Syntax einer Programmiersprache festgelegt. In Java ist das das Semikolon (;). Das folgende Beispiel zeigt ein abstraktes Programm, das sich aus sieben Anweisungen zusammensetzt, die in der angegebenen Reihenfolge ausgeführt werden. Die lineare Programmabfolge führt die programmierten Anweisungen zeilenweise von links nach rechts beginnend mit der obersten Zeile aus.

Anweisung1(); Anweisung2(); Anweisung3(); Anweisung4(); Anweisung5(); Anweisung6(); Anweisung7();

Durch diese Syntaxregel können die einzelnen Anweisungen separiert werden, unabhängig davon, wie du diese in die Quelltextdatei schreibst. Zur besseren Lesbarkeit empfehlen wir dir aber, dich auf eine Anweisung pro Zeile zu beschränken und die Anweisungen untereinander zu schreiben.

Anweisung1(); Anweisung2(); Anweisung3(); Anweisung4(); Anweisung5(); Anweisung6(); Anweisung7();

Die Programmiersprache Python legt in ihrer Syntax als Trennzeichen von Anweisungen den Zeilenumbruch fest. Ein Zeilenumbruch kann je nach Betriebssystem aus einem oder zwei Zeichen bestehen ('\n', '\r' oder '\r\n').

In der Programmierliteratur hat sich das "Hello World!"-Programm als einführendes Beispiel zur Darstellung der grundlegenden Syntax eines einfachen Programms in einer bestimmten Programmiersprache etabliert. Das Hello-World-Programm gibt in der Konsole einen einfachen Text aus, nämlich Hello World!. Wir wollen es zur Konkretisierung der einführenden Erläuterungen verwenden.

Java:

print("Hallo␣Welt!");

Python:

print ("Hallo␣Welt!")

Die print()-Anweisung bekommt einen Parameter übergeben. Dieser enthält den Text, den die Anweisung in der Konsole ausgeben soll. Um den Text eingrenzen zu können, wird dieser von doppelten Anführungszeichen (") eingerahmt.

Die Aufgaben dieses Kapitels drehen sich um derartige Programme. Deine Aufgabe wird es sein, die zur Lösung der Aufgabenstellung benötigten Anweisungen zu identifizieren und diese dann in einer geeigneten Abfolge zu platzieren. Welche Anweisungen eine Programmiersprache im Standardumfang bereitstellt, sind in der Referenzdokumentation aufgeführt. Die Referenz der von Processing bereitgestellten Anweisungen kann im Internet eingesehen werden:

       https://processing.org/reference/ (Java)

       http://py.processing.org/reference/ (Python)

Referenzen sind sehr umfangreich. Dies gilt auch für die von Processing. Es kann daher etwas dauern, bist du dich darin zurechtfindest. Für die in diesem Kapitel bereitgestellten Trainingsaufgaben sind insbesondere Funktionen zur Ausgabe von Texten in der Konsole und Funktionen zur Ausgabe elementarer geometrischer Formen im grafischen Ausgabefenster wichtig. Um dir das Auffinden dieser Anweisungen zu erleichtern, führen wir dir in der nachfolgenden Auflistung die relevanten auf.

       Konsolenausgabe

       https://processing.org/reference/print_.html (Java)

       http://py.processing.org/reference/print.html (Python)

       Linie

       https://processing.org/reference/line_.html (Java)

       http://py.processing.org/reference/line.html (Python)

       Dreieck

       https://processing.org/reference/triangle_.html (Java)

       http://py.processing.org/reference/triangle.html (Python)

       Rechteck

       https://processing.org/reference/rect_.html (Java)

       http://py.processing.org/reference/rect.html (Python)

       Viereck

       https://processing.org/reference/quad_.html (Java)

       http://py.processing.org/reference/quad.html (Python)

       Ellipse

       https://processing.org/reference/ellipse_.html (Java)

       http://py.processing.org/reference/ellipse.html (Python)

       Kreisausschnitt

       https://processing.org/reference/arc_.html (Java)

       http://py.processing.org/reference/arc.html (Python)

Um sich mit der Funktionsweise der Anweisungen vertraut zu machen, empfehlen wir dir, die Beschreibung in der Referenz aufmerksam zu lesen. Dies ist eine wichtige Grundfertigkeit, die zum Programmieren dazugehört.

Verwenden werden wir in diesem Buch die Entwicklungsumgebung Processing. Hiermit können wir Programme sowohl in Java als auch in Python schreiben. Processing bietet nicht nur den Vorteil der einfachen Installation auf nahezu allen Betriebssystemen. Wir können damit auch sehr einfach (grafische) Programme auf Basis von Anweisungen schreiben. Aber auch höherwertige Konzepte, wie wir sie in den späteren Kapiteln umsetzen werden, sind in Processing möglich; perfekte Voraussetzungen also zum Trainieren deiner Programmiertechniken mit diesem Buch.

Alle Installationsschritte von Processing findest du in Abschnitt A.1. Wie du an die digitalen Quelltexte unserer Lösungsvorschläge zu einzelnen Aufgaben kommst und wie du sie in Processing öffnest, steht im Anhang C.1.1 für Java und im Anhang D.1.1 für Python.

Dateien mit Quelltext können wir in Processing mit Klick auf Datei → Öffnen . . . laden. In Bild 2.1 haben wir zum Beispiel eine solche Datei geöffnet. Dort können wir gut die grafische Bedienoberfläche von Processing erkennen:

       Mit dem Start- und Stopp-Button (1) kannst du deinen Java- bzw. Python-Code ausführen.

       Um vom Java- auf den Python-Modus zu wechseln, kannst du den Modus-Auswahlreiter (2) verwenden. Wie du den Python-Modus in Processing installierst, steht in Anhang A.5. Links neben diesem Button ist der integrierte Debugger, den du zur Analyse von Java-Code verwenden kannst. Mehr dazu findest du in Anhang C.1.4.

       In der Mitte der Bedienoberfläche (3) steht der eigentliche Quelltext. In diesen Bereich kannst du deinen Java- bzw. Python-Code hineinschreiben.

       Entsprechende Ausgaben in der Konsole findest du im darunterliegenden Bereich (4). Hier werden auch auftretende Fehler im Code angezeigt, sofern es welche gibt.

Nach der Einrichtung von Processing und dem Lesen der Einführung solltest du für dieses Kapitel ausgerüstet sein. In dem Sinne: Viel Spaß bei den ersten Aufgaben, und ran an die Workouts!

Bild 2.1So sieht die grafische Bedienoberfläche von Processing aus.

2.2WorkoutW.2.1Three-Two-One – Mein erstes Programm

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau von Programmanweisungen

       Ausgabe in der Konsole

Beschreibung

Wir wollen ein erstes Programm schreiben. Der Klassiker hierfür ist die Ausgabe eines Texts – meist der Text Hello World – in der Konsole. Dazu braucht es in der Regel nur eine einzige Anweisung. An dieser kannst du aber bereits den Aufbau von Anweisungen und einfachen Programmen nachvollziehen und trainieren. Los geht’s!

Aufgabenstellung

Schreibe ein Programm, das den Text Three-Two-One - Takeoff! in der Konsole ausgibt. Wenn dein Programm funktioniert, solltest du den angegebenen Text in der Konsole lesen können, so wie nachfolgend exemplarisch zu sehen ist:

Three-Two-One - Takeoff!

Wenn das geklappt hat, dann mach doch einfach weiter und modifiziere dein erstes Programm nach deinen Wünschen. Ändere z. B. den Text oder füge weitere Anweisungen zur Textausgabe hinzu. Reflektiere dabei, wie dein Programm auf die Änderungen reagiert. Wenn du das Resultat hast kommen sehen, und es ist nichts Unerwartetes bei der Ausführung deines Programms passiert, hast du es im Griff und verstanden, wie Anweisungen und einfache Programme aufgebaut sind.

Testfälle

Zum Testen deines Programms brauchst du in diesem Fall noch keine Testdaten. Starte dein Programm und prüfe, ob die geforderte Ausgabe in der Konsole ausgegeben wird.

(Algorithmische) Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Gib nicht auf. Du solltest es so lange probieren, bis es klappt. Das nennt man Trial and Error (Versuch und Irrtum). Versuch es weiter! Vermutlich bist du schon nah dran an der Lösung, denn der Fehler liegt sehr häufig im Detail.

       Wir benötigen eine passende Anweisung, die uns die Programmiersprache zur Ausgabe von Daten in der Konsole bereitstellt. Wie lautet diese?

       Anweisungen folgen einem festgelegten Aufbau. Hier schleichen sich schon mal Tippfehler ein. Was sagen denn die Fehlermeldungen, wenn du versuchst, dein Programm zu starten?

W.2.2Weihnachtsbaum

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe in der Konsole

Beschreibung

Wir wollen jetzt ein erstes Muster in die Konsole schreiben. Dafür werden wir bestimmte Zeichen so oft hinter- und untereinander schreiben, bis sich daraus eine Form ergibt. Diese Form des „Malens“ ist bei vielen Konsolenprogrammen üblich und wird auch heute noch verwendet.

Aufgabenstellung

Schreibe ein Programm, das das folgende Muster in der Konsole ausgibt:

* *** ***** ******* ********* *********** ************* ***

Testfälle

Wenn die Tanne wie angegeben in der Konsole ausgegeben wird, dann hast du alles richtig gemacht und diese Aufgaben erfolgreich bearbeitet. Gesetzt den Fall, dass du noch weitere Programme dieses Typs erstellen willst, geben wir dir hier noch weitere Anregungen (du kannst dir aber auch gerne selbst was überlegen!):

Sanduhr: ***** Pizzastück: ********** Diamant: ** *** * * * * * * * * * *** * * * * ***** ** **

Für diese zusätzlichen Trainingseinheiten bieten wir dir keine Lösungsvorschläge mehr an. Wir sind fest davon überzeugt, dass du das selbst hinbekommst und unsere Hilfe hierfür nicht mehr benötigst.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Schau’ dir die allererste Aufgabe dieses Buches doch noch einmal an und überlege dir, wie die Ausgabe für jede Zeile von oben nach unten aussehen muss.

       In Processing für Java gibt es zwei Befehle, mit denen du Text in die Konsole schreiben kannst. Der eine fügt eine neue Zeile hinzu, der andere hingegen nicht.

       Das Sternchen- und das Leerzeichen führen zum Ziel!

W.2.3Haus

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

Wir wollen uns ein virtuelles Haus bauen. Dafür haben wir ein 600×600 Pixel großes Fenster zur Verfügung gestellt bekommen.

Das Dach ist 300 Pixel breit und 100 Pixel hoch. Der Grundbau darunter ist 300 Pixel breit und 300 Pixel hoch.

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der Processing-Grundelemente.

Testfälle

Siehe Aufgabenstellung.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Schau’ dir die Aufgabe zu den Grundelementen an.

       Das Bild hat ein Rechteck und ein Dreieck.

       Die Füllfarbe ist weiß und die Strichfarbe ist rot.

W.2.4Perlenkette

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

In dieser Aufgabe wollen wir die unten dargestellte Perlenkette programmieren:

Die Kette besteht aus fünf Perlen, die als Kreise mit schwarzer Linie und weißer Füllung dargestellt sind.

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der grafischen Grundelemente von Processing.

Testfälle

Wenn die geforderten Grundformen in Art, Größe, Farbe und Lage wie in der Aufgabenstellung gefordert gezeichnet werden, dann hast du eine Lösung gefunden und die Aufgabenstellung richtig gelöst.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Alle Processing-Befehle kannst du auf der offiziellen Homepage nachlesen (Java: https://processing.org/reference/, Python: http://py.processing.org/reference/). Hier kannst du nachschauen, um die entsprechenden Befehle für das Programm zu finden.

       In Processing gibt es keine Funktion zum Zeichnen von Kreisen. Aber es gibt eine Funktion zum Malen von Ellipsen. Ab wann wird eine Ellipse zum Kreis?

       Wenn du die Ausmaße des Bildschirmfensters weißt, wo wird wohl die Mitte des Bildschirmfensters liegen?

W.2.5Die erste Zeichnung

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

In dieser Aufgabe wollen wir die Processing-Grundelemente besser kennenlernen. Dazu wollen wir folgende Grafik programmieren:

Die Grafik hat unter anderem folgende Eigenschaften:

       Fenstergröße: 450 Pixel breit und 320 Pixel hoch

       Rechteck:

       x-Position: 10

       y-Position: 10

       Größe: 100 Pixel breit und 300 Pixel hoch

       Farbe: rot

       Kreis:

       x-Position: 200

       y-Position: Mitte des Bildschirmfensters

       Radius: 100 Pixel

       Farbe: grün

       Linie:

       Breite: 10

       Start: 310 (x), 10 (y)

       Ziel: 310 (x), 300 (y)

       Farbe: blau

       Dreieck:

       Eckpunkte:

*       400 (x), 10 (y)

*       370 (x), 310 (y)

*       440 (x), 310 (y)

*       Farbe: gelb

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der grafischen Grundelemente von Processing.

Testfälle

Wenn die geforderten Grundformen in Art, Größe, Farbe und Lage wie in der Aufgabenstellung gefordert gezeichnet werden, dann hast du die Lösung gefunden und umgesetzt.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Alle Processing-Befehle kannst du auf der offiziellen Homepage nachlesen (Java: https://processing.org/reference/, Python: http://py.processing.org/reference/). Hier kannst du nachschauen, um die entsprechenden Befehle für das Programm zu finden.

       In Processing gibt es keine Funktion zum Zeichnen von Kreisen. Aber es gibt eine Funktion zum Malen von Ellipsen. Ab wann wird eine Ellipse zum Kreis?

       Wenn du die Ausmaße des Bildschirmfensters weißt, wo wird wohl die Mitte des Bildschirmfensters liegen?

W.2.6Nachteule

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

In dieser Aufgabe wollen wir eine Eule nach dem folgenden Vorbild zeichnen:

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der Processing-Grundelemente. Die folgenden Konstruktionsüberlegungen sollen dir dabei eine Hilfestellung bieten:

Testfälle

Wenn deine Eule grundsätzlich mit der abgebildeten Eule übereinstimmt, dann hast du die Lösung gefunden und die Aufgabe gelöst.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Bei Ellipsen und dem Spezialfall der Kreise wird immer der Mittelpunkt angegeben und nicht die linke obere Ecke.

       Achte auf die Reihenfolge!

W.2.7Daumen

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

Wir wollen einen Daumen zeichnen. Das folgende Bild ist keine exakte Vorgabe, aber soll zeigen, wie er aussehen könnte:

Hierfür haben wir folgende Farben benutzt:

       Hintergrund: 47 (Rot), 125 (Grün), 225 (Blau)

       Daumen: 255 (Rot), 186 (Grün), 8 (Blau)

       Hemdkragen:

       außen: 3 (Rot), 43 (Grün), 67 (Blau)

       innen: 19 (Rot), 111 (Grün), 99 (Blau)

Aufgabenstellung

Programmiere einen Daumen wie in der oben stehenden Darstellung. Verwende zum Zeichnen die Processing-Grundelemente Rechteck und Dreieck.

Testfälle

Siehe Aufgabenstellung.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Die Bestimmung der Pixelpositionen ist am einfachsten, wenn du auf kariertem Papier die Grafik einzeichnest.

       Den Hemdkragen kannst du mit nur einem Rechteck zeichnen.

       Den Daumen kannst du mit vier Rechtecken und einem Dreieck zeichnen.

W.2.8Tasse

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

Wir wollen eine Tasse zeichnen. Das folgende Bild ist keine exakte Vorgabe, aber soll zeigen, wie sie aussehen könnte:

Hierfür haben wir folgende Farben benutzt:

       Hintergrund: 116 (Rot), 168 (Grün), 146 (Blau)

       Tasse: 251 (Rot), 242 (Grün), 196 (Blau)

       Beschriftung: 199 (Rot), 82 (Grün), 42 (Blau)

       Ränder: 125 (Grau)

Aufgabenstellung

Programmiere eine Tasse wie in der oben stehenden Darstellung. Verwende zum Zeichnen die Processing-Grundelemente.

Testfälle

Siehe Aufgabenstellung.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Schau dir die vorherigen Zeichenaufgaben an.

       Der Henkel der Tasse hat zwei verschiedene Füllfarben.

       Hier ein gezeichneter Hinweis:

W.2.9Raupe Allzeitappetit

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

In dieser Aufgabe wollen wir eine Raupe zeichnen:

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der Processing-Grundelemente.

Testfälle

Wenn deine Raupe grundsätzlich mit der abgebildeten Raupe übereinstimmt, dann hast du die Lösung gefunden und die Aufgabe gelöst.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Überlege dir zunächst, welche Grundelemente dieses Bild beinhaltet und wo diese platziert sind. Achte dabei auch auf eventuell „unsichtbare“ Grundelemente.

       Die Augen der Raupe bestehen entweder aus fünf (!) Kreisen oder zwei ganzen und zwei halben Kreisen. Beides ist möglich.

       Bei Ellipsen/Kreisen wird immer der Mittelpunkt angegeben und nicht die linke obere Ecke.

W.2.10Klötzchen-Kunst

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

In dieser Aufgabe wollen wir einen Menschen aus Rechtecken programmieren:

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der Processing-Grundelemente.

Testfälle

Wenn deine Klötzchen-Figur grundsätzlich mit dem abgebildeten Menschen übereinstimmt, dann hast du die Lösung gefunden und die Aufgabe gelöst.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Schaue dir die vorherigen Zeichenaufgaben noch einmal an.

       Bei der Höhe und Breite des Rechtecks kannst du auch negative Werte angeben, um das Rechteck in die umgekehrte Richtung zu zeichnen.

W.2.11Ghettoblaster

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

Der sogenannte Ghettoblaster gilt quasi als der Vorgänger der Bluetooth-Box. Er bestand aus zwei Lautsprechern und meistens auch einem UKW-Radio, mit welchem man unterwegs Musik hören konnte.

Einen solchen Ghettoblaster wollen wir in dieser Aufgabe als Grafik realisieren.

Aufgabenstellung

Programmiere in Processing die Zeichnung eines Ghettoblasters. Er soll in dieser Form gestaltet werden:

Testfälle

Siehe Aufgabenstellung.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Bevor du dich an die Programmierung setzt, solltest du dir die Umsetzung überlegen. Am besten skizzierst du dir das Bild auf ein kariertes Blatt Papier. Danach zeichnest du das Koordinatensystem des Ausgabefensters ein. Wichtig hierbei ist, dass die y-Achse des Koordinatensystems von oben nach unten geht und der Nullpunkt in der linken oberen Ecke liegt:

Auf dem Blatt Papier kannst du anschließend bei allen Elementen die Höhe und Breite der einzelnen Elemente einzeichnen. Ebenso kannst du planen, wo die Koordinatenposition liegen wird.

       Nach der Planung kannst du mit der Programmierung beginnen. Hierbei wird es sehr helfen, wenn du die einzelnen Elemente deines Bildes mit entsprechenden Kommentaren versiehst. So behältst du immer den Überblick, an welcher Stelle welches Element gezeichnet wird. Das könnte in Java zum Beispiel so aussehen:

// Blaue Lautsprecherbox unten links ... (hier steht dann der entsprechende Code)

       Sollten Elemente nicht an der vermuteten Stelle gezeichnet werden: Prüfe die entsprechende Stelle im Code und schaue nach, ob sich nicht ein Gedanken- oder Tippfehler eingeschlichen hat. Probiere auch gerne verschiedene Werte in den Zeichenfunktionen aus. Das wird dir beim Verstehen der Funktionen sicher weiterhelfen.

W.2.12Gesichtsmaske

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

Wir wollen eine Gesichtsmaske auf unseren Bildschirm zeichnen. Das folgende Bild zeigt, wie sie aussehen könnte.

Aufgabenstellung

Schreibe ein Programm, welches eine Gesichtsmaske wie in der oben stehenden Darstellung ausgibt. Verwende zum Zeichnen die Processing-Grundelemente Dreieck und Rechteck.

Testfälle

Siehe Aufgabenstellung.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       Das Programmieren der Aufgabe könnte für dich einfacher sein, wenn du zunächst nur die Formen auf den Bildschirm zeichnest und sie danach erst einfärbst. So kannst du besser erkennen, wo noch Elemente fehlen.

       Insgesamt wären vier Dreiecke und fünf Rechtecke im Bild.

W.2.13Hallo Bello!

Themen

Mit dieser Aufgabe wollen wir folgende Dinge trainieren:

       Struktur eines einfachen Programms

       Aufbau und Abfolge von Programmanweisungen

       Ausgabe im grafischen Fenster

Beschreibung

Auch einen Hund können wir mit einfachen geometrischen Objekten selber programmieren. Folgendes Bild haben wir als Vorgabe bekommen:

Aufgabenstellung

Programmiere das angegebene Bild mithilfe der Processing-Grundelemente.

Testfälle

Siehe Aufgabenstellung.

Algorithmische Tipps

Wenn du stockst und nicht weiterweißt, dann versuch mal Folgendes:

       In diesem Bild haben wir viele Elemente, die sich nur über die Eckpunkte beschreiben lassen (Trapez, Linien, Dreiecke). Deshalb solltest du hier besonders vor dem Programmieren die genauen Positionen der Elemente planen. Nimm dir dazu ein (kariertes) Blatt Papier und zeichne die Elemente und deren Position ein. Ist dann alles genau geplant, läuft die Programmierung wesentlich einfacher.

       Achte darauf, welches Element über welches andere Element gelegt werden soll. Dies kannst du über die Reihenfolge festlegen, mit der du die Elemente in das Ausgabefenster zeichnest.

       Es ist empfehlenswert, wenn du zunächst alle Formen einzeichnest. Stimmt die Zeichnung dann mit dem Ergebnis einigermaßen überein, kannst du die Eigenschaften der Elemente noch hinzufügen (Farbe, Liniendicke, Linienart etc.).

3Variablen, Datentypen, Operatoren und Ausdrücke
3.1Warm-up

Das Programm einer der vorangegangenen Aufgaben hatte zum Ziel, einen vorgegebenen Text auszugeben. Das war ziemlich statisch. Ähnlich verhält es sich mit einem Programm, welches die Fläche eines Rechtecks mit den Seitenlängen a=3 und b=4 berechnet. Gibt es der Person aber die Flexibilität, auch Flächen von Rechtecken mit beliebigen Seitenlängen zu berechnen, wird es schon interessanter.

Damit das Programm also dynamischer reagieren kann, benötigen wir etwas wie einen Platzhalter. Den kann das Programm anstatt eines konkreten Werts verwenden. In Programmen spricht man in diesem Zusammenhang von Variablen.

Bei einer Variablen handelt es sich um einen Speicherbereich, in den wir Datenwerte ablegen und auslesen können. Den Bezeichner, also den Namen der Variablen, spezifizieren wir unter Beachtung einiger Regeln selbst.

Da wir bei den hier behandelten Programmiersprachen keine Beschränkungen in der Länge eines Bezeichners haben, gibt uns das die Möglichkeit, sprechende Namen zu verwenden. Denn je treffender die Bezeichner benannt werden, umso einfacher fällt es dir, das Programm zu verstehen. Beachte aber, dass je nach verwendetem Programmiersystem ganz unterschiedliche Gesetzmäßigkeiten für die Benennung von Variablen und anderen Bezeichnern gelten.

Auch wenn wir jetzt noch ganz am Anfang stehen, solltest du dir darüber klar werden, in welcher Landessprache du die Variablen – und die später folgenden Bezeichner – schreibst. Beispielsweise verbieten einige Programmiersprachen die Verwendung von Umlauten und Sonderzeichen, ohne die ein entsprechender Bezeichner vielleicht nur umständlich oder schlecht zu begreifen ist.

Einige Programmiersprachen bieten ausgearbeitete Naming Conventions oder Naming Guidelines an, siehe z. B. http://www.oracle.com/technetwork/java/codeconventions-135099.html für Java oder https://www.python.org/dev/peps/pep-0008/#naming-conventions für Python. Darin werden Konventionen angegeben, die – durchgängig angewendet – dem Entwicklungsteam beim Erfassen eines Algorithmus helfen.

Die in diesem Buch behandelten Programmiersprachen sind beide streng typisierte Sprachen. Dies hat zur Folge, dass jeder Variablen eindeutig ein Datentyp zugeordnet wird. Der Datentyp gibt an, was für eine Art von Daten bzw. wie Daten gespeichert werden sollen. Es ist beispielsweise möglich, das Datum 4711 als eine Zahl oder eine Zeichenkette abzuspeichern. Außerdem legt der zugeordnete Datentyp auch den Wertebereich fest. Die möglichen Operationen auf den Daten dieses Typs werden ebenfalls durch den Datentyp definiert.

Nun existieren abhängig von dem jeweiligen Programmiersystem die unterschiedlichsten Datentypen. Im arithmetischen Umfeld werden verschiedene Datentypen vor allem durch ihren Wertebereich klassifiziert. Java definiert beispielsweise sechs verschiedene arithmetische Datentypen. Während eine Variable des Datentyps byte lediglich Zahlen von -128 bis +127 aufnehmen kann, speichert eine Variable des Datentyps short