namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lernen:minikurs:parkplatz

minikurs(2): Die Programmieraufgabe

Zähle Köpfe und Beine, teile die Zahl durch fünf, ziehe eins ab (den Hund),
so erhältst du die Anzahl der Schafe.
— Ein mathematisch gebildeter Schäfer

Die Aufgabe

Schreibe ein Programm, welches folgende Problemstellung1) löst:

Auf einem Parkplatz stehen Autos und Motorräder ohne Beiwagen.
Zusammen sind es f Fahrzeuge mit r Rädern.
Bestimme die Anzahl a der Autos und die Anzahl m der Motorräder.

Begründung

Zuerst mal ernte ich damit Kopfschütteln. Die Aufgabe ist "an den Haaren herbeigezogen". Könnte es nicht etwas Praktischeres sein? Warum so eine Aufgabe für den Anfang?

So an den Haaren herbeigezogen ist sie gar nicht.

Der Parkplatz an der Elbfähre in Rathen ist eine hervorragende Einnahmequelle für die Gemeinde. Um Parkgebühren erheben zu können, wird der Parkplatz mit einer automatischen Schrankenanlage ausgestattet. Wirtschaftliche Erwägungen führten zu der Erkenntnis, dass ein Parkplatzwächter zu teuer ist. Damit haben wir ein gesellschaftliches Problem der Informatikanwendung angeschnitten: Automatisierung kostet Arbeitsplätze, vor allem im Niedriglohnsektor. Auf der anderen Seite entstehen (weniger) Arbeitsplätze bei den Herstellern der Schrankenanlagen. Willst Du die umstehenden Leute beeindrucken? Dann setze eine Brille auf, bevorzugt eine Nickelbrille, auch wenn Du sonst keine trägst, schiebe die Brille mit dem Zeigefinger bis zur Nasenwurzel, schiele wie Harry Potter über den oberen Brillenrand und sprich mir nach: Technikfolgenabschätzung. Wow.

Die Anlage ist computergesteuert. Den muss jemand programmieren, auch wenn der Computer nicht so aussieht wie der Notebook vor mir. Solche Produktionsmaschinen haben vermutlich keinen Intel-Pentium und auch (noch) keinen Java-Prozessor. Mit reinem Maschinencode kommt man nur mühselig voran. In der Sprache C geschriebener Code kann mit einem Cross-Compiler relativ einfach auf das Zielsystem portiert werden, nachdem er auf einem PC entwickelt und getestet wurde.

Für Autos und Motorräder werden unterschiedliche Tarife fällig, schließlich passen mehr Motorräder auf die vorhandene Stellfläche. Da man sich nicht auf die Angaben der Fahrzeugfahrer verlassen kann (warum eigentlich nicht?), wird die computergesteuerte Schrankenanlage mit Sensoren ausgestattet.

Hier vereinfache ich die Aufgabe, damit es für Anfänger nicht zu kompliziert wird. Mit Lichtschranken kann jedes Fahrzeug erfasst werden, das den Parkplatz befährt und später wieder verlässt. Damit kann die Anlage jederzeit die aktuelle Anzahl der Fahrzeuge auf dem Platz im Speicher halten. Gleichzeitig wird über Sensoren in der Fahrbahn die Anzahl der Räder am Fahrzeug bestimmt. Auch die Anzahl der Räder ist in der Anlage jederzeit verfügbar.

Die naheliegende Variante würde jeden Fahrzeugtyp sofort erkennen, klassifizieren, das Kennzeichen ablichten und die Daten in einer Datenbank ablegen. Nun kommt der Datenschützer und erhebt den Einwand, dass die Anlage die Ankunfts- und Abfahrtszeiten einzelner Fahrzeuge nicht speichern darf, denn daraus könnte auf das Fahr- und Parkverhalten einzelner Nutzer geschlossen werden ("der gläserne Kunde"). Also erhält nur jeder Fahrer einen bedruckten Bon, mit dem an der automatisierten Kasse bezahlt wird. Nach dem Entrichten der Parkgebühr erhält der Fahrer ein anderes Kärtchen, mit dem dann die Ausfahrtschranke angehoben werden kann (falls der Fahrzeugtyp bei der Ausfahrt stimmt). Das Leben ist kompliziert. Unsere Regeln des Zusammenlebens machen es noch schwieriger.

Was ist mit Dreirädern (Trikes)? Werden auf dem Parkplatz nicht zugelassen. Das bewältigt unsere Technik nicht. (Sprich: Unsere Programmierer haben diesen Sonderfall in der Kürze der Zeit noch nicht implementieren können.) Simplify your life. Kauf Dir ein richtiges Motorrad. Und was ist mit Lastwagen und Campinganhängern? Nichts da. Schau Dir die Verkehrsschilder vor Ort an.

Die Aufgabe bleibt beschränkt auf Autos und Motorräder, deren Zahl in der Maschine (wie auch immer) verfügbar ist. Eigentlich sieht diese vereinfachte Aufgabe auf den ersten Blick auch wirklich einfach aus. Die Aufgabe sieht zu einfach aus. Deshalb ist es eine gute Einstiegsaufgabe.

"Hallo, Welt" ist keine Anfängeraufgabe. Das ist ein Compilertest. An "Gib zwei Zahlen ein und gib deren Summe aus" lassen sich Elementaranweisungen einer Programmiersprache demonstrieren. Man lernt daran aber wenig über das Programmieren selbst.

Die Parkplatzaufgabe ist deshalb gut geeignet, weil nach einem anfänglichen "O.k., mach ich, kein Problem" die Sache ins Stocken gerät. Sie erfordert Nachdenken über das Problem als solches und über die Methoden, mit denen Programmierer die gestellte Aufgabe bewältigen. Die "VHIT"-Methode (vom Hirn ins Terminal, besonders bei "versierten Autodidakten" verbreitet) funktioniert nicht.

Mit der Aufgabe ist man auch dann noch nicht fertig, wenn man meint, sie gelöst zu haben. Ich werde darauf zurückkommen.

Die Lösung lässt viele Implementierungstechniken zu, ohne die ursprüngliche Aufgabe zu deformieren.

Zunächst folgt die Analyse der Aufgabe. Versuche selbst, das Problem in der gestellten Aufgabe zu erkennen und, wenn möglich, zu lösen, bevor Du weiterblätterst.

Weiter: Teil 3.

1)
Herbert Klaeren, Michael Sperber: Vom Problem zum Programm. 3.Aufl. Teubner, Stuttgart (2001).
lernen/minikurs/parkplatz.txt · Zuletzt geändert: 2014-07-13 16:15 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki