JWINF/BWINF 2021

Bis zum 22.11.2021 kann man Lösungen für die Aufgaben der 3. Runde des Jugendwettbewerbs Informatik und der 1. Runde des Bundeswettbewerbs Informatik abgeben.

1. Treffen
2. Treffen
3. Treffen
4. Treffen


1. Treffen am Mittwoch, den 29.09.

Wo finde ich die Aufgaben?

Bundeswettbewerb-Aufgabenblatt

Wie kann ich teilnehmen?

  • An der 3. Runde des Jugendwettbewerbs Informatik kann nur teilnehmen, wer an der 1. und 2. Runde Anfang des Jahres teilgenommen und sich für die 3. Runde qualifiziert hat.
  • Zusätzlich zur 3. Runde JWINF kann man an der 1. Runde des BWINF teilnehmen, indem eine weitere BWINF-Aufgaben abgegeben wird.
  • Teilnahme nur am BWINF: Wer sich nicht in den ersten beiden Runden des JWINF qualifiziert hat, kann mit 3 beliebigen Aufgaben des Aufgabenblatts an der 1. Runde des BWINF teilnehmen. Das gilt nur für Schüler*innen bis zur 9. Klasse Gymnasium oder 10. Klasse Gemeinschaftsschule.
    Ältere Schüler (ab 10. Klasse Gymnasium oder 11. Klasse Gemeinschaftsschule) dürfen die Junior-Aufgaben nicht mehr wählen. Sie müssen 3 Aufgaben des BWINF abgeben.

Wie bearbeite ich eine Aufgabe?

  • Jede Aufgabe darf in einer selbstgewählten Programmiersprache bearbeitet werden.
  • Möglich ist eine grafische Programmiersprache, z.B. Blockly: blockly.bwinf.de/eingabe_ausgabe/
  • Ansonsten empfehlen wir Python, Java, C++, …
  • Als Programmierumgebung bietet sich replit.com an. Dort muss ein Konto angelegt werden, für das man eine eigene Email-Adresse benötigt.
  • Es kann auch auf dem eigenen Computer, z.B. mit Visual Studio Code, gearbeitet werden.
  • Für die Abgabe muss zur programmierten Lösung ein Dokument erstellt werden. Eine Vorlage für das Dokument und der gewünschte Inhalt findet sich auch auf der Seite mit den ergänzenden Materialien.

Wie programmiere ich eine Lösung?

  • Aufgabe genau und mehrfach lesen.
  • Wenn es eine ungefähre Idee davon gibt, was eine Lösung sein könnte, einfach anfangen zu programmieren. Das große, in der Aufgabe beschriebene Problem muss in kleinere Teilprobleme zerlegt werden, die gelöst werden können.

Wo fange ich an?

  • Programmiersprache wählen, z.B. Python
  • Für eine Programmierumgebung entscheiden, z.B. replit.com
  • „Hello World“-Programm in der Programmiersprache und Programmierumgebung schreiben

Aufgaben bis zum nächsten Treffen

  • Lies die Aufgabe „Zum Winde verweht“
  • Entscheide Dich für eine Programmiersprache
  • Entscheide Dich für eine Programmierumgebung
  • Schreibe ein „Hello World“-Programm
  • Schreibe ein Programm, das eine beliebige Datei einliest und den Inhalt der Datei auf der Konsole ausgibt.
  • Schreibe ein Programm, das die Datei „landkreis1.txt“ einliest und ausgibt.

Wie geht es weiter?

  • Jede Zeile der Eingabedateien „landkreis1.txt“ bis „landkreis4.txt“ enthält in jeder Zeile zwei Zahlen. Die Zahlen müssen erkannt und als Zahlen gespeichert werden.
  • Das Programm muss erkennen, wo Koordinaten für Häuser stehen und wann die Koordinaten für Windradstandorte folgen.
  • Die Koordinaten von Häusern und Windradstandorten müssen im Programm gemerkt werden. Es braucht eine geeignete Datenstruktur dafür.
  • Der Algorithmus ist irgendwas mit
    • Für jedes Windrad (Schleife)
      • berechne die Entfernung zu jedem Haus (Schleife)
      • Ermittle die kleinste Entfernung.
    • Berechne aus der kleinsten Entfernung die maximal erlaubte Windradhöhe für diesen Standort.
  • Tipp: Zum Berechnen der Entfernung von einem Haus zu einem Windradstandort benötigen wir den Satz des Pythagoras
H = Haus, W = Windradstandort, c = Entfernung zwischen Haus und Windradstandort. H=(4,3), W=(8,7)

2. Treffen am Mittwoch, den 06.10.

Erste Zeile der Datei einlesen und ausgeben:

Erste Zeile der Eingabedatei lesen

Zeichenkette in der ersten Zeile auseinander nehmen:

Erste Zeile der Eingabedatei einlesen und zerlegen

Ausgabe der zerlegten Zeile:

Liste, die entsteht, wenn man die erste Zeile der Eingabedatei zerlegt

Die Werte in der Liste, die aus der Zerlegung entstanden ist, einzeln ansprechen:

Zerlegte Werte einzeln ansprechen

Merken der einzelnen Werte in Variablen und benutzerfreundliche Ausgabe der Werte:

Benutzerfreundliche Ausgabe

Versuch die folgenden Zeilen der Häuser und Windradstandorte mit Hilfe der ermittelten Werte in for-Schleifen zu lesen:

Achtung: Fehlerhafter Code!
Fehlermeldung

Die aus der Eingabedatei gelesenen Zeichenketten müssen zu Zahlen werden, damit sie in der For-Schleife genutzt werden können.

Konvertierung der Zeichenketten zu Zahlwerten (Integer) in den Zeilen 5 und 6

Die Fehlermeldung ist weg. Das Programm läuft und kann Zeilen mit Hauskoordinaten von Zeilen mit Koordinaten für Windradstandorte unterscheiden.

Ausgabe von Hauskoordinaten, gefolgt von Koordinaten von Windradstandorten

Merken der gelesenen Werte in Listen für Häuser und Windradstandorte:

Merken der gelesenen Koordinaten
Tipp: Hier sind die eckigen Klammern auf der Tastatur
Koordinaten von Häusern und Windradstandorten gemerkt in Listen

Aus den Zeichenketten der Koordinaten müssen noch Zahlen werden:

Die Koordinatenwerte in Zahlen umgewandelt
Listen mit Zahlwerten

Mit den Listen, die Zahlwerte enthalten, können wir nun rechnen. Für jeden Windradstandort muss die Entfernung zu jedem Haus berechnet werden. Von allen Werten muss der kleinste gemerkt werden. Dieser Wert wird benötigt, um die maximale Windradhöhe auszurechnen.

Aufgabe bis zum nächsten Treffen

  • Können mit dem bisherigen Programm auch die Eingabedateien landkreis2.txt bis landkreis4.txt eingelesen werden? Teste alle Eingabedateien.
  • Wie kann der Abstand zwischen den X- oder Y-Werten berechnet werden?
  • Welche Fälle müssen bei der Berechnung unterschieden werden?
  • Wie wird in jedem Fall der Abstand korrekt berechnet?
  • Es ist sinnvoll, die verschiedenen Fälle aufzumalen und die jeweiligen Berechnungen aufzuschreiben.

Das nächste Treffen ist am Montag, den 11.10., um 18 Uhr.

3. Treffen am Montag, den 11.10.

Nach dem Start der Programmierung der 1. Junioraufgabe haben wir uns heute genauer angeschaut, was wie berechnet werden soll:

Nicos Vorschläge zur Berechnung des Abstands: Die obere und untere Funktion berechnen das Selbe.

Nachdem wir ungefähr wissen, was wir wie berechnen wollen, arbeiten wir weiter am Algorithmus: Für jeden Windradstandort müssen wir die Entfernung zu jedem Haus berechnen. Wir brauchen geschachtelte Schleifen.

Neu ist auch die For-Schleife, die nicht über Zahlwerte geht sondern über die Elemente einer Liste
Ausgabe der geschachtelten Schleifen

Aufgaben zum nächsten Treffen

  • Die Überlegungen von oben müssen überführt werden in Berechnungen der Entfernungen der X-/Y-Werte in Python (Strecken a und b)
  • Der Satz des Pythagoras muss benutzt, um die Entfernung von Haus zu Windradstandort zu berechnen (Strecke c).
  • Dokument beginnen:
    • Vorlage für das Dokument finden
    • Eigenes Dokument starten:
      • Berechnungen 
      • Wahl der Programmiersprache
      • Skizzen 
      • Pythagoras

4. Treffen am Mittwoch, den 20.10.

Heute haben wir die Berechnungen, die wir uns beim letzten Treffen überlegt haben, in die geschachtelten For-Schleifen programmiert (Zeilen 39 – 41).

Zusätzlich mussten wir uns aus allen Werten jeweils den kleinsten merken (Zeilen 42 – 43). Zum Start der Berechnung brauchten wir noch einen maximal großen Werten, mit dem wir den Vergleich starten (Zeile 35 mit Import in Zeile 1).

Zum Schluss wird für jeden Windradstandort ausgegeben, welche maximale Windradhöhe hier erlaubt ist (Zeile 44).

Maximal erlaubte Windradhöhen können berechnet werden
Maximale Windradhöhen für Landkreis 1

Das Programm funktioniert für alle vier Landkreis-Dateien.

Was ihr noch anpassen könnt:

  • Abfrage der gewünschten Eingabedatei
  • Anpassen der Ausgaben, z.B. Weglassen der Anzeige der Listen
  • Maximalhöhen der Windräder runden
  • Ergebnisse in eine Ausgabedatei schreiben
  • Behandeln von möglichen Fehlern, z.B. fehlerhafte Eingaben

Aufgaben zum nächsten Treffen

vorlage_einsendung_runde1