Lehrzeit

Schule & Informatik

Kategorie: Aufgaben (Seite 1 von 35)

Programmieraufgabe 100

Yeah! Geschafft! 100! Ich wiederhole HUNDERT(!) Programmieraufgaben. Aus dem Unterricht… für den Unterricht. Und manchmal ein wenig darüber hinaus.

Und anders als bei der 99. Aufgabe angedeutet, kommt jetzt doch noch eine Aufgabe basierend auf processing. Eine, bei der ich selbst nicht auf eine wirklich gute Lösung gekommen bin, aber dazu gleich mehr. Das genaue Arbeitsblatt gibt es weiter unten zum Herunterladen.

Aufgabe

Implementiere basierend auf processing und dem vorangegangenen Projekt „Schneefall“.

Die Schneeflocken sollen unterschiedlich groß sein und unterschiedlich schnell nach unten fallen. Sind sie außerhalb des unteren Randes, sollen sie gelöscht werden. Dafür werden neue Schneeflocken am oberen Rand erzeugt, die wiederum nach unten fallen.  Die maximale Anzahl an Schneeflocken soll in einem Attribut definiert worden sein.

Im zugehörigen Arbeitsblatt (ArbeitsblattSchneefall) wird das noch genauer beschrieben und es werden für ambitioniertere Schüler noch weitere Anregungen gegeben: Wind, Schmelzen der Schneeflocken.

Den interessantestes Effekt ist aber das Liegenbleiben des Schnee am unteren Rand. Und dabei meine ich nicht, dass es am unteren Rand eine schneeflocken dicke Schicht gibt. Ich hätte gerne wachsende Schneeberge. Nur ist das genau auch der Punkt an dem ich gerade hänge. Denn woher weiß die Schneeflocke, dass sie

  • die erste am Boden ist,
  • gleich auf eine andere stößt, die aber nicht fällt, sondern auch schon am Boden liegt
  • bzw. die oberste eines Schneehaufens ist.

Ich habe hierfür zwei ArrayList

  • ArrayList<SnowFlake> fallingSnow;
  • ArrayList<SnowFlake> snowOnGrnd;

definiert, die die entsprechenden Schneeflocken verwalten. Aber der Durchlauf durch all diese Daten gestaltet sich durchaus zäh. Und um einzelne Schneeflocken-Türme zu verhindern, werden aus fallenden Schneeflocken kleine Rechtecke. Damit habe ich aber jetzt ein anderes Problem: Es bilden sich Hohlräume.

(Man beachte die „Ente“ unten im mittleren Bereich.)

Leider ist der ganze Ansatz ziemlich unbefriedigend, da ich eigentlich noch Wind und die damit einhergehenden Schneeverwehung simulieren wollte. Ich spiele daher mit dem Gedanken auf einzelne Pixel zu wechseln und dann jeweils das ganze Bild bei jedem Durchgang neu zu zeichnen. Da bricht dann aber auch die Performance ein.

Von irgendwelchen Schmelzvorgängen, die ein nach unten sacken der Schneeberge erzeugen würde mal ganz zu schweigen. Das habe ich irgendwie mit Schnee-„Stacks“ versucht, hat aber auch nicht wirklich geklappt.

Ich habe alles diesmal mit dem processing-Editor gemacht und konnte daher jetzt für alle Plattformen exportieren. Einfach auspacken und mit Doppelklick starten (Eine Java-Installation wird aber vorausgesetzt) Das wäre 34MB groß geworden. Daher jetzt nur die jar-Datei gezippt snowfall.jar  und den Quelltext in einem BlueJ-Projekt: SnowFallc_v3

Wenn jemand also eine Idee hat oder einen funktionierenden SourceCode kennt…

Ansonsten wünsche ich allen frohes Faschingstreiben. Wenn man die Schneeflocken bunt macht, hat man einen Konfetti-Effekt. Passend zu Fasching.

 

 

Programmieraufgabe 99

Die zunächst letzte Programmieraufgabe unter Ausnutzung von processing lautet:

Aufgabe

Schreibe ein Programm bei dem zu Beginn zwischen 2 und 100 Bälle erscheinen, die „weg geklickt“ werden müssen. Sind alle Bälle weg, so erscheint der Text: „Gewonnen in 10.1s“. Die benötigte Zeit ist dabei optional.

Noch ein paar Gedanken zur Aufgabe:

  • Zunächst einmal muss ich sagen, dass der Einsatz von Processing im Unterricht prima ist. Selten hatte ich so engagierte Schüler. Das werde ich auf alle Fälle weiter verfolgen und ausbauen.
  • BlueJ eignet sich nur bedingt zum Arbeiten mit processing: Nicht nur die eingebetteten Klassen sind ein wenig merkwürdig. Vor allem die aktuelle BlueJ Version (4.1.1 auf Mac) macht Probleme (Abstürze, falsche Anzeigen). Zum Glück habe ich in der Schule noch die 3er Version.
  • Spiele und andere Programme in dieser Richtung ergeben nur Sinn mit einer ArrayList und einer „for each-Schleife“. Damit schieße ich über den Lehrplan hinaus. Auf der anderen Seiten empfinde ich eine ArrayList in der heutigen Zeit für angebrachter als ein „einfaches“ Array. Die Verwaltung der Bälle wäre ungleich schwieriger gewesen („Ist das Array groß genug?“, „Wie lösche ich Elemente?“, „Wie gehe ich mit null-Werten um.“)
    Nichts desto trotz behandle ich das Array natürlich auch, aber später
  • Das Einführen einer reinen Zählwiederholung war durch die „10 Bälle“ am Anfang gut zu motivieren. Und ich hing nicht sofort an einem Array – dafür hatte ich ja die ArrayList eingeführt. Damit habe ich eines meiner ursprünglich Probleme um 10% verringert.

Der ursprüngliche Ablauf war übrigens wie folgt:

  1. Klasse Ball definieren und 1 Ball über den Bildschirm flitzen und abprallen lassen.
    (Grundlegender Spielaufbau, Standardkonstruktor des Balls mit Zufallswerten und Basisverhalten)
  2. Auf Klick einen Ball erzeugen lassen, der sich wie unter 1 bewegt.
    (Konstruktor mit Parameter, alle erzeugten Bälle werden in einer ArrayList gespeichert)
  3. Funktion unter 2. wieder raus. 10 Bälle erzeugen und wenn diese angeklickt wurden, dann aus der Liste entfernen.

Lösung: Ballz_3

Programmieraufgabe 98

Ab dem 9.2.2018 finden die Olympischen Winterspiele in Südkorea statt. Ein guter Anlass um Datenbank praktisch auszuprobieren. Da ich erst funktionales Programmieren bzw. Excel gemacht habe und nun erst mit Datenbanken anfange, benutze ich die Olympische Spiele jetzt einfach als Transferaufgabe. Den eigentlich Stoff erkläre ich wie immer am Beispiel eines Sportvereins. Der Aufgabenablauf für meine Schüler sieht daher in etwa so aus:

Aufgabe

Erstelle eine Excel-Tabelle um alle benötigten Ergebnisse der Olymischen Winterspiele 2018 zu erfassen.

Die Aufgabe ist bewusst schwammig formuliert. Denn ich finde es immer schwierig den Schülern das Kernproblem bei Datenbanken zu verdeutlichen:

„Ermögliche es, Daten zu erfassen, die du noch nicht vollständig kennst. Und Fragen an diese Daten zu beantworten, wobei du den Wortlaut der Frage noch nicht kennst.“

Im Rahmen der Tabelle kann man dann auch prima auf Probleme wie Rechtschreibfehler (Insert- bzw. Update-Anomalie) eingehen, wenn z.B. ein Sportler öfters auftaucht, aber Schreibfehler gemacht werden. Anschließend kann man dann auf die Normal-Formen eingehen und die eine Tabelle in mehrere Tabellen aufspalten.

Lösungsansatz 1: Ein erster Lösungsansatz (Schema) einer passenden Tabelle sähe im übrigen vielleicht so aus, wobei die Wertung die Zeit oder die erreichten Punkte wären:

Ergebnis={Wettkampf, Datum, Platz1_Name, Platz1_Wertung, Platz1_Land, Platz2_Name, Platz2_Wertung, Platz3_Land, Platz3_Name, Platz3_Wertung, Platz3_Land}

Falls jemand das ebenso im Unterricht versucht, wäre ich über ein kurzes Feedback natürlich dankbar. Das Ergebnis meiner Klasse werde ich hier auch noch vorstellen.

Ältere Beiträge

© 2018 Lehrzeit

Theme von Anders NorénHoch ↑